Build a partir do código
O repositório é um monorepo de workspaces npm. Não há project references de TypeScript e não há
bundler: cada pacote compila com tsc e publica dist/.
npm install # instala todos os workspacesnpm run build # build de todosnpm test # vitest em todosA ordem do build importa e já está fixada no script da raiz: core-edge → protocol → otel →
connector-sdk → demo → connectors → o resto. O build por workspaces não é topológico, então
sem esse pré-build o dist/ do runner não resolve os @rootpilot/*.
Os dois perfis de TypeScript
Seção intitulada “Os dois perfis de TypeScript”Nem todo pacote compila com as mesmas flags, e isso é deliberado.
| Perfil | Pacotes | Flags |
|---|---|---|
tsconfig.base.json |
protocol, otel, connector-sdk, runner |
strict cheio: noUncheckedIndexedAccess, exactOptionalPropertyTypes, verbatimModuleSyntax, isolatedModules. |
tsconfig.migrated.json |
connectors, core-edge |
Igual, mas com noUncheckedIndexedAccess e exactOptionalPropertyTypes desligados. |
O segundo perfil existe porque esses pacotes vieram de um monólito escrito só com strict: true.
Ligar as duas flags geraria milhares de ! arriscados sobre código já testado, com ganho próximo de
zero. Subir para strict cheio é hardening futuro, não dívida esquecida.
Convenções que o build assume
Seção intitulada “Convenções que o build assume”- ESM + NodeNext.
"type": "module", e todo import relativo carrega a extensão.js. - Dependências honestas. Cada pacote declara só o que importa;
zodé peerDependency apenas onde é de fato usado. - Testes.
vitestem todos. Nos pacotes migrados os testes ficam colocados emsrc/**/__tests__/*.test.tspara minimizar churn, uma divergência consciente em relação à convençãotests/dos pacotes nativos.
Imagem do runner
Seção intitulada “Imagem do runner”docker build -f apps/runner/Dockerfile -t rootpilot-runner .O contexto de build é a raiz do repositório, não apps/runner: o runner depende dos workspaces
irmãos.
A imagem tem três estágios, e o terceiro é o que importa para você:
- build:
npm ci && npm run build. - prune:
npm ci --omit=dev, que preserva os symlinks de workspace e derruba o toolchain. - runtime: copia apenas
dist/, ospackage.jsone as dependências de produção.
Publicação
Seção intitulada “Publicação”Os @rootpilot/* são versionados por semver com retrocompatibilidade, o que é crítico para uma
frota cattle, onde runners de versões diferentes convivem. publishConfig.access é public.