@zaip-ai/cli 4.9.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/services/adapter-hook-sources.d.ts +3 -0
- package/dist/services/adapter-hook-sources.d.ts.map +1 -1
- package/dist/services/adapter-hook-sources.js +3 -0
- package/dist/services/adapter-hook-sources.js.map +1 -1
- package/dist/services/adapters.d.ts +1 -1
- package/dist/services/adapters.d.ts.map +1 -1
- package/dist/services/adapters.js +5 -2
- package/dist/services/adapters.js.map +1 -1
- package/dist/services/adapters.test.js +1 -1
- package/dist/services/adapters.test.js.map +1 -1
- package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
- package/dist/services/codex-conversation-lifecycle-hook.js +16 -6
- package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
- package/dist/services/codex-hook-activation.d.ts +1 -1
- package/dist/services/codex-hook-activation.d.ts.map +1 -1
- package/dist/services/codex-hook-activation.js +116 -10
- package/dist/services/codex-hook-activation.js.map +1 -1
- package/dist/services/codex-pre-tool-cli-capture-template.d.ts +2 -0
- package/dist/services/codex-pre-tool-cli-capture-template.d.ts.map +1 -0
- package/dist/services/codex-pre-tool-cli-capture-template.js +104 -0
- package/dist/services/codex-pre-tool-cli-capture-template.js.map +1 -0
- package/dist/services/codex-pre-tool-cloud-template.d.ts +2 -0
- package/dist/services/codex-pre-tool-cloud-template.d.ts.map +1 -0
- package/dist/services/codex-pre-tool-cloud-template.js +190 -0
- package/dist/services/codex-pre-tool-cloud-template.js.map +1 -0
- package/dist/services/codex-pre-tool-dependencies.test-support.d.ts +2 -0
- package/dist/services/codex-pre-tool-dependencies.test-support.d.ts.map +1 -0
- package/dist/services/codex-pre-tool-dependencies.test-support.js +9 -0
- package/dist/services/codex-pre-tool-dependencies.test-support.js.map +1 -0
- package/dist/services/codex-pre-tool-hook-fixture.test-support.d.ts +5 -0
- package/dist/services/codex-pre-tool-hook-fixture.test-support.d.ts.map +1 -0
- package/dist/services/codex-pre-tool-hook-fixture.test-support.js +19 -0
- package/dist/services/codex-pre-tool-hook-fixture.test-support.js.map +1 -0
- package/dist/services/codex-pre-tool-hook-template-bootstrap.test.d.ts +2 -0
- package/dist/services/codex-pre-tool-hook-template-bootstrap.test.d.ts.map +1 -0
- package/dist/services/codex-pre-tool-hook-template-bootstrap.test.js +107 -0
- package/dist/services/codex-pre-tool-hook-template-bootstrap.test.js.map +1 -0
- package/dist/services/codex-pre-tool-hook-template.d.ts.map +1 -1
- package/dist/services/codex-pre-tool-hook-template.js +96 -210
- package/dist/services/codex-pre-tool-hook-template.js.map +1 -1
- package/dist/services/codex-pre-tool-hook-template.test.js +32 -80
- package/dist/services/codex-pre-tool-hook-template.test.js.map +1 -1
- package/dist/services/codex-pre-tool-host-context-template.d.ts +2 -0
- package/dist/services/codex-pre-tool-host-context-template.d.ts.map +1 -0
- package/dist/services/codex-pre-tool-host-context-template.js +139 -0
- package/dist/services/codex-pre-tool-host-context-template.js.map +1 -0
- package/dist/services/codex-pre-tool-support-template.d.ts.map +1 -1
- package/dist/services/codex-pre-tool-support-template.js +61 -101
- package/dist/services/codex-pre-tool-support-template.js.map +1 -1
- package/dist/services/codex-subagent-hook-template.d.ts +1 -1
- package/dist/services/codex-subagent-hook-template.d.ts.map +1 -1
- package/dist/services/codex-subagent-hook-template.js +13 -2
- package/dist/services/codex-subagent-hook-template.js.map +1 -1
- package/dist/services/codex-validation-runtime-template.d.ts.map +1 -1
- package/dist/services/codex-validation-runtime-template.js +10 -4
- package/dist/services/codex-validation-runtime-template.js.map +1 -1
- package/dist/services/runtime-template-test-support.d.ts +1 -0
- package/dist/services/runtime-template-test-support.d.ts.map +1 -1
- package/dist/services/runtime-template-test-support.js +23 -2
- package/dist/services/runtime-template-test-support.js.map +1 -1
- package/dist/services/runtime-template.test.js +4 -23
- package/dist/services/runtime-template.test.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/README-ENG.md +49 -7
- package/templates/.agents/README.md +37 -10
- package/templates/.agents/config/agents/discovery.json +1 -1
- package/templates/.agents/dashboard/.zaip-managed.json +121 -73
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{CostCalculationGuidePage-BW7Vy1cp.js → CostCalculationGuidePage-w6pjt4OM.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-Cp_hEVd8.js → DashboardHelpDialog-DhlntQcR.js} +76 -11
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-Prcs-ydy.js → PricingSettingsDialog-BHoZT2an.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{ProjectSettingsPage-Cu40wAFF.js → ProjectSettingsPage-IcncIZ9Y.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-Bh3YBd3C.js → TraceabilityWorkspace-C6rORjpr.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-uPnOBShc.js +68 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-CF7B1Hjn.js → dashboard-localization-DWXjEIgc.js} +49 -7
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-DOhy6D2-.js → icons-vendor-Hc9fp_gs.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{index-qVSJnJ0_.js → index-BqeOEZW5.js} +2 -2
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-CkPC-yMz.js → react-vendor-C9ta_O10.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{traceability-BEdGoIDm.js → traceability-IcefoTOv.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +5 -5
- package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +10 -3
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.run-page.test.ts +5 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostGroupsTable.period-values.test.tsx +2 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-keeps-legacy-codex-identity-fields-blank.test.ts +5 -5
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +36 -43
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-loaders.ts +1 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-formatters.ts +6 -4
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.ts +2 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +11 -25
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/cost-summary-defaults.ts +26 -0
- package/templates/.agents/dashboard/modules/operations/package.json +1 -1
- package/templates/.agents/dashboard/modules/operations/src/contracts.ts +11 -16
- package/templates/.agents/dashboard/modules/operations/src/planning-contracts.ts +14 -0
- package/templates/.agents/dashboard/modules/operations/src/react/DecisionTable.tsx +65 -0
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +5 -71
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +10 -36
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +7 -2
- package/templates/.agents/dashboard/modules/operations/src/react/use-operations-filter-sync.ts +66 -0
- package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
- package/templates/.agents/dashboard/packages/branding/package.json +1 -1
- package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
- package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +193 -191
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +169 -169
- package/templates/.agents/dashboard/packages/local-runtime/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +193 -191
- package/templates/.agents/dashboard/packages/local-runtime/src/active-capture-failure.test.ts +38 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/active-capture-failure.ts +35 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.test.ts +53 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.ts +18 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/manifest-runs.ts +8 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/server-capture-projection-order.test.ts +118 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-cost-run-search.test.ts +90 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-cost-run-search.ts +86 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-routes.ts +8 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/server-projection-loaders.ts +13 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-projections.ts +30 -74
- package/templates/.agents/dashboard/packages/local-runtime/src/server-route-handlers.ts +42 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-routes.test.ts +60 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-run-projections.test.ts +12 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/server-telemetry-command.test.ts +29 -4
- package/templates/.agents/dashboard/packages/local-runtime/src/server-telemetry-refresh.ts +7 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +51 -54
- package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +28 -45
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-filter-matrix.test.ts +5 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-invocation-page.test.ts +49 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-invocation-page.ts +44 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-cached-cost-page.ts +11 -10
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-summary.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-work-item-index.test.ts +18 -1
- package/templates/.agents/dashboard/packages/ui/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
- package/templates/.agents/design/.zaip-managed.json +3 -3
- package/templates/.agents/design/apps/catalog/package.json +1 -1
- package/templates/.agents/design/packages/local-runtime/package.json +1 -1
- package/templates/.agents/requirements/autonomous-assurance.md +11 -2
- package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
- package/templates/.agents/requirements/comparative-audit.md +1 -1
- package/templates/.agents/requirements/context-engine.md +1 -1
- package/templates/.agents/requirements/cost-observability.md +1 -1
- package/templates/.agents/requirements/dashboard-launch.md +1 -1
- package/templates/.agents/requirements/data-export.md +1 -1
- package/templates/.agents/requirements/design-system.md +1 -1
- package/templates/.agents/requirements/execution-engine.md +1 -1
- package/templates/.agents/requirements/kanban-dashboard.md +1 -1
- package/templates/.agents/requirements/model-orchestration.md +1 -1
- package/templates/.agents/requirements/public-distribution.md +1 -1
- package/templates/.agents/requirements/software-architecture.md +1 -1
- package/templates/.agents/requirements/strategic-improvements.md +1 -1
- package/templates/.agents/requirements/work-lifecycle.md +2 -1
- package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
- package/templates/.agents/rules/run-lifecycle-closure.md +2 -1
- package/templates/.agents/rules/workflow.md +1 -0
- package/templates/.agents/runtime/VERSION +1 -1
- package/templates/.agents/runtime/bin/zaip.mjs +1178 -764
- package/templates/.agents/runtime/checksums.sha256 +6 -6
- package/templates/.agents/runtime/manifest.json +1 -1
- package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
- package/templates/.agents/runtime/provenance.json +5 -5
- package/templates/.agents/runtime/sbom.cdx.json +59 -59
- package/templates/.agents/skills/zaip-skill-execution/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-execution/references/controlled-release-recovery.md +14 -0
- package/templates/.agents/skills/zaip-skill-execution/references/runtime-governance.md +1 -1
- package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +5 -1
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-contract.mjs +12 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-contract.test.mjs +25 -0
- package/templates/.agents/skills/zaip-skill-maintenance-enter/SKILL.md +23 -0
- package/templates/.agents/skills/zaip-skill-maintenance-enter/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-maintenance-enter/scripts/maintenance.mjs +213 -0
- package/templates/.agents/skills/zaip-skill-maintenance-enter/scripts/maintenance.test.mjs +207 -0
- package/templates/.agents/skills/zaip-skill-maintenance-exit/SKILL.md +21 -0
- package/templates/.agents/skills/zaip-skill-maintenance-exit/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-release-qualification/references/local-preparation.md +37 -8
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +38 -0
- package/templates/template-manifest.json +188 -116
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-Co2Jiuzh.js +0 -68
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-uPnOBShc.js";import{t as r}from"./dashboard-localization-DWXjEIgc.js";var i=`# Primeiros passos
|
|
2
2
|
|
|
3
3
|
1. Leia \`.agents/config/project.yaml\` e \`.agents/rules/core.md\`.
|
|
4
4
|
2. Consulte \`.agents/records/lifecycle/\` para descobrir o estado atual pelos manifests canônicos.
|
|
@@ -1903,6 +1903,18 @@ inválida ou integridade diferente impedem publicar. Após uma publicação
|
|
|
1903
1903
|
autorizada, a confirmação do mesmo tarball usa retry finito de propagação.
|
|
1904
1904
|
Esse controle não publica automaticamente quando a qualificação local passa.
|
|
1905
1905
|
|
|
1906
|
+
Na v5.0, o publisher mantém checkpoints por SHA, versão e hash do recibo para
|
|
1907
|
+
prepare/push/CI/assets/Release/npm/closure. A retomada sempre consulta o estado
|
|
1908
|
+
remoto e revalida a assinatura: efeitos já confirmados não são reenviados.
|
|
1909
|
+
Assets são quatro arquivos regulares no diretório real do candidato, com digest
|
|
1910
|
+
exato no GitHub; links simbólicos e conflitos bloqueiam. A transição explícita
|
|
1911
|
+
\`4.9 → 5.0\` usa a maior tag estável canônica ancestral como início do inventário.
|
|
1912
|
+
O fechamento exige recibo/TGZ/política/trust/notas/diretório, confere a árvore Git
|
|
1913
|
+
publicada e SRI/latest npm e aceita somente um commit revisado de metadados.
|
|
1914
|
+
Se \`main\` já estiver nesse fechamento, apenas observa seu CI. A validade temporal
|
|
1915
|
+
do recibo permanece obrigatória. Consulte a referência canônica
|
|
1916
|
+
\`zaip-skill-release-qualification/references/local-preparation.md\` para os comandos.
|
|
1917
|
+
|
|
1906
1918
|
| Objetivo | Comando da raiz e alcance |
|
|
1907
1919
|
| --- | --- |
|
|
1908
1920
|
| Preparar artefatos | \`corepack pnpm release:artifacts\` compila e gera runtime/template. Não publica nem qualifica por si só. |
|
|
@@ -2088,6 +2100,30 @@ com testes de correção e uma release publicada não comprovam economia ou SLA.
|
|
|
2088
2100
|
Não repita automaticamente a matriz histórica falha: preserve o diagnóstico e
|
|
2089
2101
|
defina uma medição independente com artefatos identificados e falhas observadas.
|
|
2090
2102
|
|
|
2103
|
+
## Evolução de confiabilidade e documentação
|
|
2104
|
+
|
|
2105
|
+
A [matriz de evolução](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v50-documentacao-editorial.md)
|
|
2106
|
+
vincula as dez frentes aos seus comandos, provas, rollback e limitações.
|
|
2107
|
+
READMEs PT/EN descrevem o mesmo contrato: \`essential-v3\` por padrão,
|
|
2108
|
+
\`full-v2\` somente quando selecionado, CI na \`main\` exata antes da Release,
|
|
2109
|
+
smoke Linux do TGZ assinado antes do npm e confirmação da integridade publicada.
|
|
2110
|
+
Preparar e validar localmente não comprovam publicação ou ativação dos hooks.
|
|
2111
|
+
|
|
2112
|
+
Uma Task explicitamente editorial \`lite\` aceita README literal ou Markdown
|
|
2113
|
+
em escopo documental estreito, como \`docs/quality/**\`; \`docs/**\` amplo,
|
|
2114
|
+
código, configuração e controles de agente não recebem a exceção. A dispensa
|
|
2115
|
+
da Decision de seis etapas conserva candidato, check, Evidence, revisão e Gui.
|
|
2116
|
+
Alterar esse mecanismo continua sendo trabalho crítico quando houver sinal de
|
|
2117
|
+
segurança. \`draft\` persiste blueprints; \`ready\` materializa Tasks \`planned\`;
|
|
2118
|
+
\`execute\` inicia o menor grão autorizado, sem inferir conclusão dos blueprints.
|
|
2119
|
+
|
|
2120
|
+
O resolver reconhece o pedido direto de retomar a SPEC até finalizar as Tasks
|
|
2121
|
+
e publicar a versão explícita. Citação, negação, pergunta ou condição de
|
|
2122
|
+
aprovação não concedem publicação. O override vale somente para o pedido.
|
|
2123
|
+
Manutenção usa o mesmo \`maintenance.mjs\` da skill de entrada com \`enter|exit\`;
|
|
2124
|
+
tracking fica ligado e a saída exige observação nativa. \`full-access\` conserva
|
|
2125
|
+
proteções de segredos, destruição, lifecycle, filhos restritos e energia do PC.
|
|
2126
|
+
|
|
2091
2127
|
## Ciclo corrente, limpeza e CI da main antes da Release
|
|
2092
2128
|
|
|
2093
2129
|
O manifesto versionado \`.agents/config/release-cycle.json\` identifica \`current_release\` e estado \`open\`/\`frozen\` (4.5 e 4.5.0 são normalizados). Drafts de PRD/SPEC futuros são permitidos; ready/execução, novas Tasks e código exigem o release corrente. Depois de conciliar Tasks atuais, prove \`main\`, branches, worktrees e registros antes do candidato. Branch/worktree isolados são fechados com backup local recuperável; checkout compartilhado com diff de proveniência mista bloqueia. A existência de \`main\` ou de um teste verde isolado não qualifica a release.
|
|
@@ -2101,6 +2137,8 @@ Para congelar, use \`node scripts/release-cycle-gate.mjs freeze --repository ROO
|
|
|
2101
2137
|
Nos modos ativos, depois das provas de publicação, registre validações e Evidence, realize revisão quando exigida e obtenha Gui como último filho. O host autorizado persiste a decisão real e o fechamento. Um commit posterior somente de records/metadata pode guardar esse encerramento; ele não requalifica o produto nem move a tag. O contrato executável está em \`scripts/release-cycle-coordination.mjs\` e \`scripts/release-cycle-gate.mjs\` no repositório mantenedor.
|
|
2102
2138
|
|
|
2103
2139
|
Com candidato limpo em SHA exato, execute \`node scripts/release-cycle-gate.mjs audit --repository ROOT --version VERSAO --sha SHA\`. O deploy crítico/de release executa os checks locais nesse SHA, envia apenas \`main\` ao GitHub e espera \`pre-main-candidate.yml\` verde para o push exato antes da Release. Falha local bloqueia o push; falha de CI ou credenciais bloqueia a Release e exige reparo autorizado em \`main\`. Após observar tag, GitHub Release, main e CI exatos, \`node scripts/release-cycle-gate.mjs advance --repository ROOT --from VERSAO --to PROXIMA --sha SHA --ci-run-id ID\` registra a transição. As outras Tasks correntes devem estar terminais; somente a coordenação ativa validada acima pode permanecer aberta. Cada superfície, inclusive npm ou provedor, tem prova própria. O avanço não conclui automaticamente a Task de coordenação nem permite iniciar trabalho futuro antes da transição auditada.
|
|
2140
|
+
|
|
2141
|
+
Uma Task final de SPEC que combine implementação e publicação usa o modo explícito \`--integrated-spec-task\`, descrito na skill canônica de qualificação. Verifique essa elegibilidade antes dos gates caros; mantenha os predecessores concluídos e as provas válidas. Consulte [o diagnóstico v5.0](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v50-retrabalho-e-publicacao.md).
|
|
2104
2142
|
`,A=`# Telemetria Git-native do Codex
|
|
2105
2143
|
|
|
2106
2144
|
Este documento descreve o comportamento implementado da telemetria do Codex no ZAIP-AIOS. O
|
|
@@ -2305,12 +2343,11 @@ matriz de performance aprovada apenas porque consultas focadas passaram.
|
|
|
2305
2343
|
|
|
2306
2344
|
## Visão rápida
|
|
2307
2345
|
|
|
2308
|
-
> **
|
|
2309
|
-
>
|
|
2310
|
-
>
|
|
2311
|
-
>
|
|
2312
|
-
>
|
|
2313
|
-
> [guia de lifecycle v4](.agents/zaip-aios/guides/28-lifecycle-completo.md#contrato-aprovado-para-a-v4-a-implementar-e-qualificar).
|
|
2346
|
+
> **Fonte, candidato e publicação:** este README descreve os contratos e recursos
|
|
2347
|
+
> do checkout. A [matriz de evolução](docs/quality/v50-documentacao-editorial.md)
|
|
2348
|
+
> identifica a implementação e suas provas. Qualificação local, ativação dos
|
|
2349
|
+
> hooks no consumidor, GitHub Release e npm são verificações separadas; um
|
|
2350
|
+
> contrato documentado não substitui a observação no pacote instalado.
|
|
2314
2351
|
|
|
2315
2352
|
O [contrato de compatibilidade Codex-native](.agents/zaip-aios/guides/28-lifecycle-completo.md#fronteiras-nativas-e-prova-de-compatibilidade)
|
|
2316
2353
|
explicita o que depende de subagentes, hooks, automação agendada e do
|
|
@@ -2372,9 +2409,31 @@ Este README e o [handbook](.agents/zaip-aios/INDEX.md) descrevem o código-fonte
|
|
|
2372
2409
|
|
|
2373
2410
|
A atualização documental não aprova uma release. Consulte o [registro de limites de qualificação](docs/PRODUCTION-COMMERCIAL-READINESS.md#limites-conhecidos-da-qualificação) antes de promover o código; testes locais, paridade, CI e validação em produção devem ser comprovados separadamente.
|
|
2374
2411
|
|
|
2375
|
-
A preparação local assinada usa \`essential-v3\` por padrão; \`full-v2\` é uma qualificação estendida explícita. Após os checks locais, o envio à \`main\` dispara \`pre-main-candidate.yml\`, com integridade, lint, tipos, identidade dos commits e regressões por impacto. A Release exige esse CI verde no SHA exato. O publicador verifica os artefatos assinados, executa um smoke Linux do pacote antes do npm e confirma a integridade no registry; a instalação estendida após publicação é opcional. Veja o [guia de qualidade e release](.agents/zaip-aios/guides/26-qualidade-e-release.md). Lacunas históricas de telemetria permanecem explícitas, sem inventar números ou dispensar testes de dados novos.
|
|
2412
|
+
A preparação local assinada usa \`essential-v3\` por padrão; \`full-v2\` é uma qualificação estendida explícita. Lint e normalização são verificados antes do build; alterações canônicas são detectadas após cada gate, com etapa e arquivos no diagnóstico. Após os checks locais, o envio à \`main\` dispara \`pre-main-candidate.yml\`, com integridade, lint, tipos, identidade dos commits e regressões por impacto. A Release exige esse CI verde no SHA exato. O publicador verifica os artefatos assinados, executa um smoke Linux do pacote antes do npm e confirma a integridade no registry; a instalação estendida após publicação é opcional. Veja o [guia de qualidade e release](.agents/zaip-aios/guides/26-qualidade-e-release.md). Lacunas históricas de telemetria permanecem explícitas, sem inventar números ou dispensar testes de dados novos.
|
|
2413
|
+
|
|
2414
|
+
Antes de congelar o candidato, sincronize também runtime, servidor e bundles rastreados. A qualificação rejeita divergências desses arquivos após cada gate. No pre-main, o grupo público prepara e verifica a distribuição antes dos demais testes, preservando seleção, cache autenticado e registro de falhas; saídas geradas não dispensam a exigência de checkout limpo.
|
|
2415
|
+
|
|
2416
|
+
O histórico publicado inclui a [Release v4.9](https://github.com/zaip-ai/zaip-aios/releases/tag/v4.9). Mudanças posteriores estão identificadas na [matriz de evolução](docs/quality/v50-documentacao-editorial.md); elas não alteram retrospectivamente o pacote publicado.
|
|
2417
|
+
|
|
2418
|
+
### Confiabilidade, eficiência e manutenção
|
|
2419
|
+
|
|
2420
|
+
A linha 5.0 reúne recuperação causal e [deploy retomável](docs/quality/v50-deploy-retomavel.md) com [preflight e prevenção de retrabalho](docs/quality/v50-retrabalho-e-publicacao.md), testes por risco,
|
|
2421
|
+
cache autenticado, telemetria em grupos com deduplicação e revisão editorial
|
|
2422
|
+
proporcional. O [piloto do consumidor nativo](docs/quality/v50-consumidor-nativo.md)
|
|
2423
|
+
comprovou os quatro hooks no Windows e corrigiu o replay do Stop para preservar
|
|
2424
|
+
o resumo da decisão final. A [matriz documental](docs/quality/v50-documentacao-editorial.md)
|
|
2425
|
+
relaciona as dez frentes e suas provas; cada publicação exige ainda o TGZ exato,
|
|
2426
|
+
CI da main, artefatos assinados e integridade no npm.
|
|
2376
2427
|
|
|
2377
|
-
|
|
2428
|
+
A execução usa preflight antes de materializar trabalho, recuperação com identidade e revisão exatas, checkpoints para evitar repetição e testes selecionados por impacto. O lote de validações compartilha preparo no mesmo candidato; cache autenticado só concede reutilização com autoridade confiável, assinatura e identidade válidas. Cache local presente não significa HIT aprovado nem economia medida.
|
|
2429
|
+
|
|
2430
|
+
Criar uma SPEC em \`draft\` persiste a definição e seus blueprints, sem Tasks de entrega. \`ready\` materializa a DAG com Tasks \`planned\`; \`execute\` inicia o menor grão autorizado. Dez blueprints descrevem dez trabalhos planejados, mas não comprovam dez Tasks iniciadas ou concluídas.
|
|
2431
|
+
|
|
2432
|
+
Uma Task \`lite\` explicitamente editorial pode usar \`README.md\`, \`README-ENG.md\` ou Markdown em um escopo estreito de \`docs/\`, como \`docs/quality/**\`. Ainda exige candidato, check, Evidence, revisão e finalizador. Código, configuração, controles de agente, dados sensíveis e risco \`standard\`/\`critical\` conservam o fluxo completo. O escopo amplo \`docs/**\` não concede essa exceção.
|
|
2433
|
+
|
|
2434
|
+
O perfil \`zaip-aios-full-access\` permite o acesso externo configurado de leitura, escrita, execução, diretório de trabalho e rede. Permanecem as proteções de segredos, operações destrutivas, autoridade de lifecycle, subagentes restritos e energia/sessão do computador. A manutenção explicitamente autorizada usa \`node .agents/skills/zaip-skill-maintenance-enter/scripts/maintenance.mjs enter\`; para reativar, use o mesmo script com \`exit\`. Tracking permanece ligado; a configuração não comprova sozinha os quatro eventos nativos dos hooks.
|
|
2435
|
+
|
|
2436
|
+
Consulte a [matriz de alterações, comandos, provas e limitações](docs/quality/v50-documentacao-editorial.md) e o [runbook operacional](docs/quality/v50-task10-operations-runbook.md). Não há ganho geral de 30% demonstrado: a comparação local de 160 amostras preservou integridade, mas o p95 de entrada com três escritores aumentou 18,6%. A avaliação final de produção depende do consumidor e da publicação do candidato exato.
|
|
2378
2437
|
|
|
2379
2438
|
## Instalação em um comando
|
|
2380
2439
|
|
|
@@ -3170,12 +3229,18 @@ isolamento nativo oferecido pelo perfil restrito:
|
|
|
3170
3229
|
- subagentes com responsabilidades e escopos delimitados, além de adapters com hash, framework lock e gates de regressão;
|
|
3171
3230
|
- controles remanescentes do sistema operacional, como ACLs, privilégios da conta e políticas do host.
|
|
3172
3231
|
|
|
3173
|
-
|
|
3232
|
+
Com \`zaip.enabled: true\`, o hook de segurança \`PreToolUse\` também permanece ativo no perfil full-access, sem reduzir suas permissões nativas; ele bloqueia classes destrutivas, segredos, publicação e elevação sem autorização. Os hooks de lifecycle de subagentes permanecem ativos como
|
|
3174
3233
|
defesa em profundidade e para atribuição/telemetria. Browser, Computer Use, MCPs e demais
|
|
3175
3234
|
integrações têm superfícies próprias e devem ser habilitados e usados apenas quando necessários.
|
|
3176
3235
|
Para isolamento forte contra erros de escopo ou código malicioso, use o perfil restrito e, quando
|
|
3177
3236
|
o risco justificar, uma conta, VM ou controles externos de rede e filesystem dedicados.
|
|
3178
3237
|
|
|
3238
|
+
Os quatro eventos (\`PreToolUse\`, \`SubagentStart\`, \`SubagentStop\` e \`Stop\`) usam controles independentes em \`.agents/config/project.yaml\`: \`zaip.enabled\` governa as regras do ZAIP e \`tracking.enabled\` governa a coleta de telemetria. Com ZAIP desativado e tracking ativado, a observação continua sem exigir Task, Execution ou finalizador. Desativar tracking preserva os dados já registrados. A configuração é relida na próxima invocação; um hook desabilitado na interface do Codex precisa ser habilitado nela para executar. Veja o [contrato e a matriz de validação dos controles](docs/quality/hook-independent-controls.md).
|
|
3239
|
+
|
|
3240
|
+
No PreToolUse, filesystem e rede são avaliados separadamente a partir do perfil configurado. O principal full-access pode usar caminhos externos canônicos; escritas mantêm a exigência de autoridade e claim, e subagentes conservam suas restrições. A recuperação de falhas observadas é avaliada antes da delegação ao finalizador, preservando histórico desconhecido como indisponível. Veja o [contrato de caminhos e recuperação](docs/quality/hook-full-access-paths.md).
|
|
3241
|
+
|
|
3242
|
+
Para manutenção autorizada, use [$zaip-skill-maintenance-enter](.agents/skills/zaip-skill-maintenance-enter/SKILL.md) e, ao terminar, [$zaip-skill-maintenance-exit](.agents/skills/zaip-skill-maintenance-exit/SKILL.md). As skills alternam somente os controles, mantêm tracking ligado e preservam configurações editadas durante o trabalho. O toggle vale para todo o projeto; coordene chats concorrentes. A saída reativa ZAIP e exige uma chamada real para verificar o hook e a observação canônica.
|
|
3243
|
+
|
|
3179
3244
|
O modelo de ameaça, a matriz allow/deny, todas as camadas, limitações, operação segura,
|
|
3180
3245
|
rollout, rollback e comandos de verificação estão documentados no
|
|
3181
3246
|
[guia completo de segurança dos perfis ZAIP-AIOS](.agents/zaip-aios/guides/10-seguranca.md).
|
|
@@ -3219,7 +3284,7 @@ O [guia de Obsidian para rastreabilidade ZAIP](guide/CRIAR-PASTA-OBSIDIAN.md) do
|
|
|
3219
3284
|
|
|
3220
3285
|
## Branches, worktrees e release corrente
|
|
3221
3286
|
|
|
3222
|
-
Uma branch guarda uma linha de commits; um worktree é outra pasta de checkout. Editar uma Task avulsa ou um PRD/SPEC serial não precisa criar nenhum dos dois: \`zaip task workspace TASK-ID --run RUN-ID\` registra um escritor por vez no checkout compartilhado. Só frentes paralelas comprovadamente independentes recebem branch e worktree.
|
|
3287
|
+
Uma branch guarda uma linha de commits; um worktree é outra pasta de checkout. Editar uma Task avulsa ou um PRD/SPEC serial não precisa criar nenhum dos dois: \`zaip task workspace TASK-ID --run RUN-ID\` registra um escritor por vez no checkout compartilhado. Só frentes paralelas comprovadamente independentes recebem branch e worktree. A validação do candidato usa checkout detached temporário fora da raiz, no diretório temporário do sistema com prefixo \`zaip-candidate-<projeto>-\`; a limpeza verifica sua propriedade e preserva o checkout de trabalho.
|
|
3223
3288
|
|
|
3224
3289
|
Ao encerrar frente isolada, o ZAIP inventaria arquivos, verifica bundle e snapshot locais em \`.local/backup-branchs\` e \`.local/backup-worktrees\`, testa restauração e só então fecha branch/worktree. Trabalho sem proveniência no checkout compartilhado ou backup inválido bloqueia a limpeza, com motivo para reconciliação. Os backups ficam ignorados pelo Git para consulta; a remoção deles é manual.
|
|
3225
3290
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-uPnOBShc.js";import{n as r}from"./dashboard-localization-DWXjEIgc.js";var i=e(t(),1),a=n();function o({catalog:e,fxRate:t,locale:n,onClose:o,onSave:c,onSaveFxRate:l}){let u=r[n],[d,f]=(0,i.useState)(e),[p,m]=(0,i.useState)(t?.rate??0),[h,g]=(0,i.useState)(!1),_=(e,t)=>f(n=>({...n,models:n.models.map((n,r)=>r===e?{...n,...t}:n)})),v=e=>Math.max(0,Number(e)||0);return(0,a.jsx)(`main`,{className:`pricing-backdrop`,children:(0,a.jsxs)(`section`,{"aria-labelledby":`pricing-page-title`,className:`pricing-dialog`,children:[(0,a.jsxs)(`header`,{children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`small`,{children:u.eyebrow}),(0,a.jsx)(`h1`,{id:`pricing-page-title`,children:u.title}),(0,a.jsx)(`p`,{children:u.description})]}),(0,a.jsxs)(`button`,{className:`pricing-back-button`,onClick:o,type:`button`,children:[(0,a.jsx)(`span`,{"aria-hidden":`true`,children:`←`}),` `,u.back]})]}),(0,a.jsxs)(`div`,{className:`pricing-fx-settings`,children:[(0,a.jsxs)(`div`,{className:`pricing-fx-copy`,children:[(0,a.jsx)(`strong`,{children:u.fxTitle}),(0,a.jsx)(`p`,{children:u.fxDescription})]}),(0,a.jsxs)(`label`,{children:[(0,a.jsx)(`span`,{children:u.fxLabel}),(0,a.jsxs)(`div`,{className:`pricing-fx-input`,children:[(0,a.jsx)(`span`,{children:`R$`}),(0,a.jsx)(`input`,{"aria-label":u.fxAriaLabel,min:`0.0001`,onChange:e=>m(Math.max(1e-4,Number(e.target.value)||0)),step:`0.0001`,type:`number`,value:p})]})]})]}),(0,a.jsxs)(`div`,{className:`pricing-table-heading`,children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`strong`,{children:u.catalog}),(0,a.jsx)(`p`,{children:u.pricesPerMillion})]}),(0,a.jsxs)(`span`,{children:[d.models.length,` `,u.models]})]}),(0,a.jsx)(`div`,{className:`pricing-table-wrap`,children:(0,a.jsxs)(`table`,{children:[(0,a.jsx)(`thead`,{children:(0,a.jsxs)(`tr`,{children:[(0,a.jsx)(`th`,{children:u.model}),(0,a.jsx)(`th`,{children:u.provider}),(0,a.jsx)(`th`,{children:u.input}),(0,a.jsx)(`th`,{children:u.cache}),(0,a.jsx)(`th`,{children:u.output}),(0,a.jsx)(`th`,{children:u.reasoning}),(0,a.jsx)(`th`,{children:u.priorityInput}),(0,a.jsx)(`th`,{children:u.priorityCache}),(0,a.jsx)(`th`,{children:u.priorityOutput}),(0,a.jsx)(`th`,{children:u.priorityReasoning}),(0,a.jsx)(`th`,{children:u.contextLimit}),(0,a.jsx)(`th`,{children:u.inputMultiplier}),(0,a.jsx)(`th`,{children:u.outputMultiplier}),(0,a.jsx)(`th`,{})]})}),(0,a.jsx)(`tbody`,{children:d.models.map((e,t)=>(0,a.jsxs)(`tr`,{children:[(0,a.jsxs)(`td`,{children:[(0,a.jsx)(`input`,{"aria-label":u.model,onChange:e=>_(t,{id:e.target.value}),value:e.id}),(0,a.jsx)(`small`,{children:e.aliases.join(`, `)||u.noAliases})]}),(0,a.jsx)(`td`,{children:(0,a.jsxs)(`select`,{onChange:e=>_(t,{provider:e.target.value}),value:e.provider,children:[(0,a.jsx)(`option`,{value:`openai`,children:`OpenAI`}),(0,a.jsx)(`option`,{value:`anthropic`,children:`Anthropic`})]})}),(0,a.jsx)(`td`,{children:(0,a.jsx)(`input`,{min:`0`,onChange:e=>_(t,{input_per_million_usd:v(e.target.value)}),step:`0.001`,type:`number`,value:e.input_per_million_usd})}),(0,a.jsx)(`td`,{children:(0,a.jsx)(`input`,{min:`0`,onChange:e=>_(t,{cached_input_per_million_usd:v(e.target.value)}),step:`0.001`,type:`number`,value:e.cached_input_per_million_usd??0})}),(0,a.jsx)(`td`,{children:(0,a.jsx)(`input`,{min:`0`,onChange:e=>_(t,{output_per_million_usd:v(e.target.value)}),step:`0.001`,type:`number`,value:e.output_per_million_usd})}),(0,a.jsx)(`td`,{children:(0,a.jsx)(`input`,{min:`0`,onChange:e=>_(t,{reasoning_per_million_usd:v(e.target.value)}),step:`0.001`,type:`number`,value:e.reasoning_per_million_usd??0})}),[`priority_input_per_million_usd`,`priority_cached_input_per_million_usd`,`priority_output_per_million_usd`,`priority_reasoning_per_million_usd`].map(n=>(0,a.jsx)(`td`,{children:(0,a.jsx)(`input`,{min:`0`,onChange:e=>_(t,{[n]:v(e.target.value)}),step:`0.001`,type:`number`,value:e[n]??0})},n)),(0,a.jsx)(`td`,{children:(0,a.jsx)(`input`,{min:`0`,onChange:e=>_(t,{long_context_threshold_tokens:v(e.target.value)||null}),step:`1`,type:`number`,value:e.long_context_threshold_tokens??0})}),(0,a.jsx)(`td`,{children:(0,a.jsx)(`input`,{min:`0.001`,onChange:e=>_(t,{long_context_input_multiplier:Math.max(.001,Number(e.target.value)||1)}),step:`0.1`,type:`number`,value:e.long_context_input_multiplier})}),(0,a.jsx)(`td`,{children:(0,a.jsx)(`input`,{min:`0.001`,onChange:e=>_(t,{long_context_output_multiplier:Math.max(.001,Number(e.target.value)||1)}),step:`0.1`,type:`number`,value:e.long_context_output_multiplier})}),(0,a.jsx)(`td`,{children:(0,a.jsx)(`button`,{"aria-label":u.removeModel,onClick:()=>f(e=>({...e,models:e.models.filter((e,n)=>n!==t)})),type:`button`,children:`×`})})]},e.id))})]})}),(0,a.jsxs)(`footer`,{children:[(0,a.jsxs)(`button`,{onClick:()=>f(e=>({...e,models:[...e.models,s(n)]})),type:`button`,children:[`+ `,u.addModel]}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`button`,{onClick:o,type:`button`,children:u.cancel}),(0,a.jsx)(`button`,{disabled:h,onClick:async()=>{g(!0);try{await c(d),await l(p),o()}finally{g(!1)}},type:`button`,children:h?u.saving:u.save})]})]})]})})}function s(e=`pt-BR`){let t=r[e];return{id:t.newModel,provider:`openai`,aliases:[],input_per_million_usd:0,cached_input_per_million_usd:0,output_per_million_usd:0,reasoning_per_million_usd:0,priority_input_per_million_usd:null,priority_cached_input_per_million_usd:null,priority_output_per_million_usd:null,priority_reasoning_per_million_usd:null,reasoning_billed_separately:!1,long_context_threshold_tokens:null,long_context_input_multiplier:1,long_context_output_multiplier:1,source_label:t.manualOverride,source_url:`https://developers.openai.com/api/docs/pricing`,notes:[t.editedNote]}}export{o as PricingSettingsPage};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,_ as n,v as r,w as i,y as a}from"./cost-monitor-Co2Jiuzh.js";import{t as o}from"./index-qVSJnJ0_.js";var s=e(t(),1),c=i();function l({children:e,className:t=``,title:n}){return(0,c.jsxs)(`section`,{className:`project-settings-card ${t}`,children:[(0,c.jsx)(`h2`,{children:n}),(0,c.jsx)(`div`,{className:`project-settings-fields`,children:e})]})}function u({children:e,className:t=``,hint:n,label:r}){return(0,c.jsxs)(`div`,{className:`project-settings-field ${t}`,children:[(0,c.jsx)(`span`,{children:r}),e,n?(0,c.jsx)(`small`,{children:n}):null]})}var d=[{id:`primary_language`,defaultName:`TypeScript`,scope:`backend`},{id:`backend_runtime`,defaultName:`Node.js`,scope:`backend`},{id:`backend_api`,defaultName:`Hono`,scope:`backend`},{id:`query_builder`,defaultName:`Kysely`,scope:`backend`},{id:`database`,defaultName:`PostgreSQL via Supabase`,scope:`backend`},{id:`auth_storage`,defaultName:`Supabase Auth + Storage`,scope:`backend`},{id:`cache_messaging`,defaultName:`Redis`,scope:`backend`},{id:`async_queue`,defaultName:`BullMQ`,scope:`backend`},{id:`backend_infrastructure`,defaultName:`Terraform`,scope:`backend`},{id:`backend_hosting`,defaultName:`Hostinger VPS`,scope:`backend`},{id:`web_framework`,defaultName:`React`,scope:`frontend`},{id:`web_language`,defaultName:`TypeScript`,scope:`frontend`},{id:`web_build`,defaultName:`Vite`,scope:`frontend`},{id:`frontend_hosting`,defaultName:`Cloudflare Pages`,scope:`frontend`},{id:`site_framework`,defaultName:`Astro`,scope:`site`},{id:`site_language`,defaultName:`TypeScript`,scope:`site`},{id:`site_islands`,defaultName:`React Islands`,scope:`site`},{id:`site_build`,defaultName:`Vite`,scope:`site`},{id:`site_hosting`,defaultName:`Cloudflare Pages`,scope:`site`},{id:`prometheus`,defaultName:`Prometheus`,scope:`observability`},{id:`grafana`,defaultName:`Grafana`,scope:`observability`},{id:`uptime_kuma`,defaultName:`Uptime Kuma`,scope:`observability`},{id:`cadvisor`,defaultName:`cAdvisor`,scope:`observability`},{id:`node_exporter`,defaultName:`node-exporter`,scope:`observability`},{id:`redis_exporter`,defaultName:`Redis Exporter`,scope:`observability`},{id:`k6`,defaultName:`k6`,scope:`testing`},{id:`autocannon`,defaultName:`autocannon`,scope:`testing`}],f=new Set([`database`,`auth_storage`,`backend_hosting`,`frontend_hosting`,`site_hosting`]);function p(e){return f.has(e)}function m(e){let{languages:t,components:n,...r}=e.stack.overrides,i=w(n)?n:{};return{components:Object.fromEntries(d.map(e=>{let t=i[e.id],n=w(t)?t:{};return[e.id,{name:C(n.name)||e.defaultName,version:C(n.version),reference:C(n.reference)}]})),otherOverrides:JSON.stringify(r,null,2)}}function h(e,t){let n=new Map(t.filter(e=>e.installation===`installed`&&e.version!==null).map(e=>[e.name.toLowerCase(),e.version]));return Object.fromEntries(d.map(t=>{let r=e[t.id],i=n.get(x(t.id));return[t.id,r.version!==``||i===void 0?r:{...r,version:i}]}))}function g(e,t,n){if(e.autonomy?.version===1&&e.execution&&e.execution.runtime!==`manual`&&e.execution.runtime!==`codex_native`&&e.execution.autonomous.provider!==`codex`)throw Error(`Autonomy-v1 exige Codex na execução gerenciada / requires Codex for managed execution. Selecione Codex; conversas diretas continuam disponíveis.`);let r=JSON.parse(n);if(!w(r))throw Error(`Demais overrides deve ser um objeto JSON.`);let{languages:i,components:a,...o}=r;for(let e of d){let n=t[e.id].version.trim();if(n!==``&&!p(e.id)&&!/^\d+\.\d+(?:\.\d+)?(?:[-+][0-9A-Za-z.-]+)?$/.test(n))throw Error(`A versão de ${t[e.id].name||e.defaultName} deve ser exata, como 22.16.0 ou 17.6, sem ^, ~, >= ou latest.`);if(p(e.id)&&(n.length>120||/[\r\n]/.test(n)))throw Error(`A referência de ${t[e.id].name||e.defaultName} deve ter uma única linha com até 120 caracteres.`)}let s=Object.fromEntries(d.map(e=>[e.id,{name:t[e.id].name.trim()||e.defaultName,version:t[e.id].version.trim(),reference:t[e.id].reference.trim()}])),c=w(e.stack.overrides.components)?e.stack.overrides.components:{};return{...e,stack:{...e.stack,overrides:{...o,components:{...c,...s},languages:{frontend:S(s,`frontend`),backend:S(s,`backend`),site:S(s,`site`)}}}}}function _(e){return[...new Set(e.split(/\r?\n/).map(e=>e.trim()).filter(Boolean))]}function v(){return{runtime:`autonomous`,autonomous:{provider:`codex`,model:`gpt-6-sol`,max_parallelism:1,lease_ms:6e4}}}function y(e){if(e===`manual`)return{runtime:`manual`};if(e===`codex_native`)return{runtime:`codex_native`};if(e!==`managed`&&e!==`autonomous`)throw Error(`Unknown runtime: ${e}`);return{...v(),runtime:e}}function b(e){let t=e?.match(/^v?(\d+)\.(\d+)\.\d+(?:[-+][0-9A-Za-z.-]+)?$/);return t?`v${t[1]}.${t[2]}`:null}function x(e){return e===`backend_runtime`?`node.js`:e===`backend_api`?`hono`:e===`site_framework`?`astro`:e===`cache_messaging`?`redis`:e===`async_queue`?`bullmq`:e===`web_framework`||e===`site_islands`?`react`:e===`web_build`||e===`site_build`?`vite`:e===`primary_language`||e===`web_language`||e===`site_language`?`typescript`:``}function S(e,t){return[...new Set(d.filter(e=>e.scope===t).map(t=>e[t.id].name.trim()).filter(Boolean))]}function C(e){return typeof e==`string`?e:``}function w(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var T={primary_language:{pt:`Linguagem principal`,en:`Primary language`},backend_runtime:{pt:`Runtime backend`,en:`Backend runtime`},backend_api:{pt:`Framework backend / API`,en:`Backend framework / API`},query_builder:{pt:`Query builder`,en:`Query builder`},database:{pt:`Banco de dados`,en:`Database`},auth_storage:{pt:`Autenticação e Storage`,en:`Authentication and Storage`},cache_messaging:{pt:`Cache e mensageria`,en:`Cache and messaging`},async_queue:{pt:`Filas e processamento assíncrono`,en:`Queues and async processing`},backend_infrastructure:{pt:`Infraestrutura backend`,en:`Backend infrastructure`},backend_hosting:{pt:`Hospedagem do backend`,en:`Backend hosting`},web_framework:{pt:`Framework do Web App`,en:`Web App framework`},web_language:{pt:`Linguagem do Web App`,en:`Web App language`},web_build:{pt:`Build do Web App`,en:`Web App build`},frontend_hosting:{pt:`Hospedagem do frontend`,en:`Frontend hosting`},site_framework:{pt:`Framework do site`,en:`Site framework`},site_language:{pt:`Linguagem do site`,en:`Site language`},site_islands:{pt:`Componentes interativos`,en:`Interactive components`},site_build:{pt:`Build do site`,en:`Site build`},site_hosting:{pt:`Hospedagem do site`,en:`Site hosting`},prometheus:{pt:`Coleta de métricas`,en:`Metrics collection`},grafana:{pt:`Dashboards`,en:`Dashboards`},uptime_kuma:{pt:`Monitoramento de disponibilidade`,en:`Availability monitoring`},cadvisor:{pt:`Métricas de containers`,en:`Container metrics`},node_exporter:{pt:`Métricas de host`,en:`Host metrics`},redis_exporter:{pt:`Métricas do Redis`,en:`Redis metrics`},k6:{pt:`Teste de carga`,en:`Load testing`},autocannon:{pt:`Teste HTTP de carga`,en:`HTTP load testing`}};function E({components:e,locale:t,onChange:n,referenceHint:r,versionHint:i}){let a=[{scope:`backend`,title:t===`pt-BR`?`Backend e dados`:`Backend and data`},{scope:`frontend`,title:`Web App`},{scope:`site`,title:t===`pt-BR`?`Site e landing pages`:`Site and landing pages`},{scope:`observability`,title:t===`pt-BR`?`Observabilidade`:`Observability`},{scope:`testing`,title:t===`pt-BR`?`Testes sob demanda`:`On-demand testing`}],o=(t,r,i)=>n({...e,[t]:{...e[t],[r]:i}});return(0,c.jsxs)(`div`,{className:`project-stack-editor`,children:[a.map(n=>(0,c.jsxs)(`section`,{children:[(0,c.jsx)(`h3`,{children:n.title}),(0,c.jsxs)(`div`,{className:`project-stack-table`,children:[(0,c.jsxs)(`div`,{className:`project-stack-table-head`,"aria-hidden":`true`,children:[(0,c.jsx)(`span`,{children:`Item`}),(0,c.jsx)(`span`,{children:t===`pt-BR`?`Tecnologia`:`Technology`}),(0,c.jsx)(`span`,{children:t===`pt-BR`?`Versão atual / referência`:`Current version / reference`}),(0,c.jsx)(`span`,{children:t===`pt-BR`?`Pacote / imagem / serviço`:`Package / image / service`})]}),d.filter(e=>e.scope===n.scope).map(n=>(0,c.jsxs)(`div`,{className:`project-stack-row`,children:[(0,c.jsx)(`strong`,{children:T[n.id][t===`pt-BR`?`pt`:`en`]}),(0,c.jsx)(`input`,{"aria-label":`${T[n.id].pt}: tecnologia`,value:e[n.id].name,onChange:e=>o(n.id,`name`,e.target.value)}),(0,c.jsx)(`input`,{"aria-label":`${T[n.id].pt}: ${p(n.id)?`versão atual ou referência`:`versão exata`}`,className:p(n.id)?`is-reference-value`:void 0,inputMode:p(n.id)?`text`:`decimal`,placeholder:p(n.id)?t===`pt-BR`?`Serviço em nuvem`:`Cloud service`:`x.y.z`,title:p(n.id)?e[n.id].version:void 0,value:e[n.id].version,onChange:e=>o(n.id,`version`,e.target.value)}),(0,c.jsx)(`input`,{"aria-label":`${T[n.id].pt}: referência`,placeholder:`npm:pacote ou service:nome`,value:e[n.id].reference,onChange:e=>o(n.id,`reference`,e.target.value)})]},n.id))]})]},n.scope)),(0,c.jsxs)(`div`,{className:`project-stack-format-help`,children:[(0,c.jsxs)(`p`,{children:[(0,c.jsx)(`strong`,{children:t===`pt-BR`?`Formato da versão:`:`Version format:`}),` `,i]}),(0,c.jsxs)(`p`,{children:[(0,c.jsx)(`strong`,{children:t===`pt-BR`?`Formato da referência:`:`Reference format:`}),` `,r]})]})]})}function D({components:e,showTitle:t=!0,text:n}){return e.length===0?null:(0,c.jsxs)(`section`,{className:`project-stack-versions`,"aria-label":n.versions,children:[t?(0,c.jsx)(`h3`,{children:n.versions}):null,(0,c.jsx)(`div`,{children:e.map(e=>(0,c.jsxs)(`article`,{children:[(0,c.jsxs)(`div`,{className:`project-stack-version-identity`,children:[(0,c.jsx)(`strong`,{children:e.name}),(0,c.jsxs)(`code`,{children:[n.current,`: `,e.version??n.versionUnavailable]}),e.configured_version!==null&&e.configured_version!==e.version?(0,c.jsxs)(`code`,{children:[n.configured,`: `,e.configured_version]}):null]}),(0,c.jsx)(`span`,{className:`is-${e.verification}`,children:e.installation===`runtime`?n.runtime:e.installation===`installed`?n.installed:e.installation===`bundled`?n.bundled:n.missing}),e.source?(0,c.jsx)(`small`,{children:e.source}):null]},e.name))})]})}function O(e){return{health:e.health??{state:`unknown`,scope:`settings_runtime`},dependencies:k(e.dependencies,e.dependencies?.installed),documentation:k(e.documentation,e.documentation?.available),profile:e.installation_profile??null,hasMissingDependencies:(A(e.dependencies?.missing)??0)>0}}function k(e,t){let n=e?.state??`unknown`,r=A(e?.percent);return{completed:A(t),total:A(e?.applicable),percentage:(n===`complete`||n===`incomplete`)&&r!==null&&r<=100?r:null,state:n}}function A(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0?e:null}function j(e){return e.filter(e=>![`database`,`installation`].includes(e.id))}var M={"pt-BR":{eyebrow:`Configurações`,title:`Configuração do projeto`,intro:`Edite o arquivo central do projeto com validação do schema antes da gravação.`,loading:`Carregando…`,loadError:`Não foi possível carregar as configurações do projeto.`,retry:`Tentar novamente`,back:`Voltar ao dashboard`,save:`Salvar configurações`,saving:`Validando e salvando…`,saved:`Configurações salvas e validadas.`,framework:`Framework ZAIP-AIOS`,frameworkHint:`Ativa ou desativa o framework para este projeto.`,identity:`Identidade do projeto`,workspacePath:`Caminho do projeto`,workspacePathHint:`Pasta local usada por esta instância do Dashboard.`,workspacePathLoading:`Identificando caminho…`,workspacePathUnavailable:`Caminho indisponível`,stack:`Stack e linguagens`,execution:`Execução`,assurance:`Assurance`,executionToggleHint:`Grava ou remove o bloco execution. Sem ele, o projeto usa execução manual.`,runtimeHint:`Managed gerencia PRDs/SPECs e mantém avulsas diretas. Manual não inicia provider; autonomous permite execução gerenciada também para Task avulsa por comando explícito.`,providerHint:`Provider que inicia os agentes da execução autônoma: Codex ou Claude.`,autonomyProviderHint:`Autonomy-v1 exige Codex para execução gerenciada. Claude continua disponível em conversas diretas ou no protocolo legado.`,executionModelHint:`Modelo-base do runtime autônomo. A política automática de PRD/SPEC ainda pode selecionar um modelo permitido por agente.`,parallelismHint:`Teto de agentes simultâneos. O valor efetivo é o menor limite entre projeto, DAG, provider e squad.`,leaseHint:`Tempo de lease configurado para o coordenador autônomo.`,assuranceToggleHint:`Ativa ou remove os gates de evidência, revisão e qualidade do projeto. Recomenda-se manter ativo.`,assuranceVersionHint:`Versão do contrato de assurance. É fixa e somente leitura.`,assuranceDepthHint:`Auto ajusta o rigor ao escopo; base exige o conjunto padrão; elevated amplia validações para mudanças mais abrangentes.`,finalCommitHint:`Exige que as evidências comprovem o commit final integrado. Sinais de produção ou migração ainda podem exigir isso mesmo quando desativado.`,context:`Contexto`,overview:`Visão geral do projeto`,metricLabels:{agents:`Agentes`,squads:`Squads`,skills:`Skills`,rules:`Rules`,hooks:`Hooks`},areaLabels:{brandbook:`Brandbook`,design_system:`Design System`,software_architecture:`Arquitetura de Software`,growth_strategy:`Estratégia de Growth`,marketing_strategy:`Estratégia de Marketing`,sales_playbook:`Playbook de Sales`},available:`Criado`,artifactUnavailable:`Ainda não criado`,componentGuide:`Preencha cada responsabilidade separadamente. Use a versão exata do software e, para serviços em nuvem ou hospedagem, informe Serviço em nuvem.`,versionHint:`Software: 22.16.0 ou 17.6, sem prefixos (^, ~, >=). Serviço gerenciado: Serviço em nuvem. Hospedagem: Serviço em nuvem.`,referenceHint:`Ex.: npm:hono, docker:node:22.16.0-bookworm-slim, service:supabase ou provider:cloudflare-pages.`,overrides:`Opções avançadas (JSON)`,overridesHint:`Use apenas fatos técnicos transversais confirmados. Deixe vazio quando não houver exceções.`,versions:`Versões detectadas no workspace`,exact:`Verificada`,constraint:`Requisito`,versionUnavailable:`Não encontrada`,runtime:`Runtime do Dashboard`,installed:`Instalado no projeto`,missing:`Ausente no projeto`,bundled:`Empacotado no Dashboard`,current:`Atual`,configured:`Configurado`,health:`Saúde`,dependencies:`Dependências técnicas`,documentation:`Documentação`,unknown:`Desconhecido`,unavailable:`Indisponível`,notApplicable:`Não aplicável`,complete:`Completo`,incomplete:`Incompleto`,incompleteInstallation:`Há dependências técnicas locais ausentes neste computador.`,dismiss:`Fechar aviso`,contextGuide:`O contexto começa pelas fontes canônicas e inclui somente arquivos relevantes para a tarefa. Saídas geradas são consultadas apenas em setup, release ou checagem de paridade.`,contextDomains:`Branding, Marketing, Growth e Sales são usados sob demanda pelos respectivos especialistas, quando houver uma tarefa e artefatos desses domínios. Não os adicione aqui apenas por existirem como capacidades.`},"en-US":{eyebrow:`Settings`,title:`Project settings`,intro:`Edit the central project file with schema validation before writing.`,loading:`Loading…`,loadError:`Project settings could not be loaded.`,retry:`Try again`,back:`Back to dashboard`,save:`Save settings`,saving:`Validating and saving…`,saved:`Settings saved and validated.`,framework:`ZAIP-AIOS framework`,frameworkHint:`Enable or disable the framework for this project.`,identity:`Project identity`,workspacePath:`Project path`,workspacePathHint:`Local folder used by this Dashboard instance.`,workspacePathLoading:`Identifying path…`,workspacePathUnavailable:`Path unavailable`,stack:`Stack and languages`,execution:`Execution`,assurance:`Assurance`,executionToggleHint:`Writes or removes the execution block. Without it, the project uses manual execution.`,runtimeHint:`Managed runs PRDs/SPECs while standalone Tasks stay direct. Manual never starts a provider; autonomous also permits explicitly commanded managed standalone execution.`,providerHint:`Provider that starts autonomous execution agents: Codex or Claude.`,autonomyProviderHint:`Autonomy-v1 requires Codex for managed execution. Claude remains available for direct conversations or the legacy protocol.`,executionModelHint:`Base model for the autonomous runtime. PRD/SPEC automatic policy may still select an allowed model per agent.`,parallelismHint:`Maximum simultaneous agents. Effective parallelism is the smallest project, DAG, provider, and squad limit.`,leaseHint:`Lease duration configured for the autonomous coordinator.`,assuranceToggleHint:`Enables or removes project evidence, review, and quality gates. Keeping it enabled is recommended.`,assuranceVersionHint:`Assurance contract version. It is fixed and read-only.`,assuranceDepthHint:`Auto adapts rigor to scope; base uses the standard set; elevated expands validation for broader changes.`,finalCommitHint:`Requires evidence for the final integrated commit. Production or migration signals may still require it when disabled.`,context:`Context`,overview:`Project overview`,metricLabels:{agents:`Agents`,squads:`Squads`,skills:`Skills`,rules:`Rules`,hooks:`Hooks`},areaLabels:{brandbook:`Brandbook`,design_system:`Design System`,software_architecture:`Software Architecture`,growth_strategy:`Growth Strategy`,marketing_strategy:`Marketing Strategy`,sales_playbook:`Sales Playbook`},available:`Created`,artifactUnavailable:`Not created yet`,componentGuide:`Fill each responsibility separately. Use an exact software version and, for cloud services or hosting, enter Cloud service.`,versionHint:`Software: 22.16.0 or 17.6, without prefixes (^, ~, >=). Managed service: Cloud service. Hosting: Cloud service.`,referenceHint:`E.g. npm:hono, docker:node:22.16.0-bookworm-slim, service:supabase, or provider:cloudflare-pages.`,overrides:`Advanced options (JSON)`,overridesHint:`Use only confirmed cross-cutting technical facts. Leave empty when there are no exceptions.`,versions:`Versions detected in the workspace`,exact:`Verified`,constraint:`Requirement`,versionUnavailable:`Not found`,runtime:`Dashboard runtime`,installed:`Installed in project`,missing:`Missing from project`,bundled:`Bundled in Dashboard`,current:`Current`,configured:`Configured`,health:`Health`,dependencies:`Technical dependencies`,documentation:`Documentation`,unknown:`Unknown`,unavailable:`Unavailable`,notApplicable:`Not applicable`,complete:`Complete`,incomplete:`Incomplete`,incompleteInstallation:`Some local technical dependencies are missing on this computer.`,dismiss:`Dismiss notification`,contextGuide:`Context starts from canonical sources and includes only files relevant to the task. Generated outputs are consulted only for setup, release, or parity checks.`,contextDomains:`Branding, Marketing, Growth, and Sales are used on demand by their respective specialists when there is a task and artifacts in those domains. Do not add them here merely because they exist as capabilities.`}},N=`autonomy-v1`,P=n([`essential`,`balanced`,`persistent`]),F=a({version:r(1),preset:P}).strict(),I=Object.freeze({essential:Object.freeze({label:`Essencial`,attempts:4,replans:1,automatic_astra:!1}),balanced:Object.freeze({label:`Equilibrado`,attempts:10,replans:3,automatic_astra:!0}),persistent:Object.freeze({label:`Persistente — ilimitado`,attempts:null,replans:null,automatic_astra:!0})});function L(e){let t=F.parse(e??{version:1,preset:`balanced`});return Object.freeze({version:N,preset:t.preset,...I[t.preset],repairs_per_replan:3})}function R({value:e,onChange:t,disabled:n=!1,locale:r=`pt-BR`}){let i=(0,s.useId)(),a=L(e),o=r===`pt-BR`;return(0,c.jsxs)(`div`,{children:[!e&&(0,c.jsx)(`p`,{children:o?`Projeto legado: selecione e salve um perfil para adotar os novos controles nas novas Tasks.`:`Legacy project: select and save a preset to adopt the new controls for new Tasks.`}),(0,c.jsxs)(`label`,{className:`project-settings-field`,htmlFor:i,children:[(0,c.jsx)(`strong`,{children:o?`Perfil de autonomia`:`Autonomy preset`}),(0,c.jsx)(`select`,{id:i,"aria-describedby":`${i}-detail`,disabled:n,value:a.preset,onChange:e=>t({version:1,preset:P.parse(e.target.value)}),children:P.options.map(e=>(0,c.jsx)(`option`,{value:e,children:o?I[e].label:{essential:`Essential`,balanced:`Balanced`,persistent:`Persistent — unlimited`}[e]},e))})]}),(0,c.jsx)(`p`,{id:`${i}-detail`,role:`status`,children:a.attempts===null?o?`Sem limite de tentativas ou replanejamentos. Pode continuar indefinidamente e consumir créditos até você cancelar.`:`No attempt or replanning limit. May continue indefinitely and consume credits until you cancel.`:o?`${a.attempts} execuções por Task (1 inicial + ${a.attempts-1} reparações), até ${a.replans} replanejamento(s). Sem abandono por tempo.`:`${a.attempts} executions per Task (1 initial + ${a.attempts-1} repairs), up to ${a.replans} replan(s). No time-based abandonment.`}),(0,c.jsx)(`p`,{children:a.automatic_astra?o?`Replanejamento: Sol/high no primeiro, Astra/high a partir do segundo. Astra/high pode executar a partir do terceiro.`:`Replanning: Sol/high first, Astra/high from the second. Astra/high may execute from the third.`:o?`Nunca usa Astra automaticamente. Exceção: agente principal de tarefa avulsa com Astra selecionado por você no Codex.`:`Never selects Astra automatically. Exception: a standalone principal with Astra manually selected in Codex.`}),(0,c.jsx)(`p`,{children:o?`A mudança vale para novas Tasks; as iniciadas conservam o perfil e o histórico. Tarefas avulsas priorizam execução direta. Ao delegar, a ZAIP informa que modelo e esforço dos subagentes podem mudar. Critérios de aceite e permissões não são reduzidos.`:`Changes apply to new Tasks; started Tasks retain their preset and history. Standalone work prefers direct execution. Delegation discloses that subagent model and effort may differ. Acceptance criteria and permissions are not reduced.`})]})}function z({api:e,locale:t,onClose:n}){let r=M[t],[i,a]=(0,s.useState)(null),[d,f]=(0,s.useState)(null),[p,v]=(0,s.useState)(null),[x,S]=(0,s.useState)(`{}`),[C,w]=(0,s.useState)(!1),[T,k]=(0,s.useState)(!0),[A,N]=(0,s.useState)(null),[P,F]=(0,s.useState)(null),[I,L]=(0,s.useState)(!1),z=o(),B=d===null?null:O(d),H=(0,s.useCallback)(async()=>{k(!0),N(null);try{let[t,n]=await Promise.all([e.projectSettings(),e.projectOverview()]),r=m(t);a(t),f(n),v(h(r.components,n.stack_components)),S(r.otherOverrides)}catch(e){N(e instanceof Error?e.message:String(e))}finally{k(!1)}},[e]);(0,s.useEffect)(()=>{H()},[H]),(0,s.useEffect)(()=>{L(d!==null&&O(d).hasMissingDependencies)},[d]);async function U(t){if(t.preventDefault(),i!==null){w(!0),N(null),F(null);try{let t=await e.saveProjectSettings(g(i,p??m(i).components,x)),n=await e.projectOverview(),o=m(t);a(t),f(n),v(o.components),S(o.otherOverrides),F(r.saved)}catch(e){N(e instanceof Error?e.message:String(e))}finally{w(!1)}}}if(i===null){let e=T&&A===null;return(0,c.jsx)(`main`,{"aria-busy":e,className:`project-settings-state`,children:(0,c.jsxs)(`div`,{"aria-live":e?`polite`:`assertive`,className:`project-settings-state-card`,role:e?`status`:`alert`,children:[e?(0,c.jsx)(`span`,{"aria-hidden":`true`,className:`project-settings-loader`}):null,(0,c.jsx)(`p`,{children:r.eyebrow}),(0,c.jsx)(`h1`,{children:A?r.loadError:r.loading}),A?(0,c.jsx)(`p`,{className:`project-settings-state-error`,children:A}):null,A?(0,c.jsx)(`button`,{onClick:()=>void H(),type:`button`,children:r.retry}):null,(0,c.jsxs)(`button`,{onClick:n,type:`button`,children:[`← `,r.back]})]})})}return(0,c.jsxs)(`main`,{className:`project-settings-page`,children:[(0,c.jsxs)(`form`,{onSubmit:U,children:[(0,c.jsxs)(`header`,{className:`project-settings-header`,children:[(0,c.jsxs)(`div`,{children:[(0,c.jsx)(`p`,{children:r.eyebrow}),(0,c.jsx)(`h1`,{children:r.title}),(0,c.jsx)(`span`,{children:r.intro})]}),(0,c.jsxs)(`button`,{className:`project-settings-back`,onClick:n,type:`button`,children:[`← `,r.back]})]}),A?(0,c.jsx)(`div`,{className:`project-settings-message is-error`,role:`alert`,children:A}):null,P?(0,c.jsx)(`div`,{className:`project-settings-message is-success`,role:`status`,children:P}):null,(0,c.jsxs)(`section`,{className:`project-settings-feature`,children:[(0,c.jsxs)(`div`,{children:[(0,c.jsxs)(`h2`,{children:[r.framework,b(d?.framework_version)?` - ${b(d?.framework_version)}`:``]}),(0,c.jsx)(`p`,{children:r.frameworkHint})]}),(0,c.jsx)(W,{checked:i.zaip?.enabled===!0,label:t===`pt-BR`?`Framework ativo`:`Framework enabled`,onChange:e=>a({...i,zaip:{enabled:e}})})]}),(0,c.jsxs)(`section`,{className:`project-settings-summary`,"aria-label":r.overview,children:[d&&j(d.metrics).map(e=>(0,c.jsxs)(`div`,{className:`project-settings-metric`,children:[(0,c.jsx)(`strong`,{children:e.value}),(0,c.jsx)(`span`,{children:r.metricLabels[e.id]})]},e.id)),B?(0,c.jsx)(V,{installation:B,locale:t}):null]}),(0,c.jsx)(l,{className:`is-wide`,title:r.overview,children:(0,c.jsx)(`div`,{className:`project-overview`,"aria-live":`polite`,children:d?.areas.map(e=>(0,c.jsxs)(`div`,{className:`project-overview-item`,children:[(0,c.jsxs)(`div`,{children:[(0,c.jsx)(`strong`,{children:r.areaLabels[e.id]}),(0,c.jsx)(`code`,{children:e.artifact})]}),(0,c.jsx)(`span`,{className:e.available?`is-available`:`is-unavailable`,children:e.available===!0?r.available:e.available===!1?r.artifactUnavailable:r.unavailable})]},e.id))})}),(0,c.jsx)(l,{className:`is-wide project-detected-versions`,title:r.versions,children:(0,c.jsx)(D,{components:d?.stack_components??[],text:r,showTitle:!1})}),(0,c.jsxs)(`div`,{className:`project-settings-grid`,children:[(0,c.jsxs)(l,{className:`is-wide project-identity-card`,title:r.identity,children:[(0,c.jsx)(u,{className:`project-settings-workspace-field`,hint:r.workspacePathHint,label:r.workspacePath,children:(0,c.jsx)(`code`,{className:`project-settings-workspace-path`,children:z.status?.workspace??(z.unavailable?r.workspacePathUnavailable:r.workspacePathLoading)})}),(0,c.jsx)(u,{label:`Schema`,children:(0,c.jsx)(`input`,{readOnly:!0,value:i.schema_version})}),(0,c.jsx)(u,{label:t===`pt-BR`?`ID do projeto`:`Project ID`,children:(0,c.jsx)(`input`,{required:!0,value:i.project.id,onChange:e=>a({...i,project:{...i.project,id:e.target.value}})})}),(0,c.jsx)(u,{label:t===`pt-BR`?`Nome do projeto`:`Project name`,children:(0,c.jsx)(`input`,{required:!0,value:i.project.name,onChange:e=>a({...i,project:{...i.project,name:e.target.value}})})}),(0,c.jsx)(u,{label:`Timezone IANA`,children:(0,c.jsx)(`input`,{required:!0,value:i.project.timezone,onChange:e=>a({...i,project:{...i.project,timezone:e.target.value}})})})]}),(0,c.jsxs)(l,{className:`is-wide`,title:r.stack,children:[(0,c.jsx)(`p`,{className:`project-stack-guide`,children:r.componentGuide}),p?(0,c.jsx)(E,{components:p,locale:t,onChange:v,referenceHint:r.referenceHint,versionHint:r.versionHint}):null,(0,c.jsxs)(`details`,{className:`project-settings-advanced`,children:[(0,c.jsx)(`summary`,{children:r.overrides}),(0,c.jsx)(u,{hint:r.overridesHint,label:`Overrides`,children:(0,c.jsx)(`textarea`,{rows:7,value:x,onChange:e=>S(e.target.value)})})]})]}),(0,c.jsxs)(l,{title:r.execution,children:[(0,c.jsx)(G,{checked:i.execution!==void 0,hint:r.executionToggleHint,label:t===`pt-BR`?`Incluir configuração de execução`:`Include execution configuration`,onChange:e=>a({...i,execution:e?{runtime:`codex_native`}:void 0})}),i.execution?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(u,{hint:r.runtimeHint,label:`Runtime`,children:(0,c.jsxs)(`select`,{value:i.execution.runtime,"aria-label":`Runtime`,onChange:e=>a({...i,execution:y(e.target.value)}),children:[(0,c.jsx)(`option`,{value:`manual`,children:`manual`}),(0,c.jsx)(`option`,{value:`codex_native`,children:`codex_native (Codex)`}),(0,c.jsx)(`option`,{value:`managed`,children:`managed (PRD/SPEC)`}),(0,c.jsx)(`option`,{value:`autonomous`,children:`autonomous`})]})}),i.execution.runtime!==`manual`&&i.execution.runtime!==`codex_native`?(0,c.jsx)(K,{config:i,setConfig:a,text:r}):null]}):null]}),(0,c.jsx)(l,{title:t===`pt-BR`?`Autonomia e recuperação`:`Autonomy and recovery`,children:(0,c.jsx)(R,{value:i.autonomy,disabled:C,locale:t,onChange:e=>a({...i,autonomy:e})})}),(0,c.jsxs)(l,{title:r.assurance,children:[(0,c.jsx)(G,{checked:i.assurance!==void 0,hint:r.assuranceToggleHint,label:t===`pt-BR`?`Incluir assurance`:`Include assurance`,onChange:e=>a({...i,assurance:e?{version:1,standard_depth:`auto`,require_final_commit:!0}:void 0})}),i.assurance?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(u,{hint:r.assuranceVersionHint,label:t===`pt-BR`?`Versão`:`Version`,children:(0,c.jsx)(`input`,{readOnly:!0,value:i.assurance.version})}),(0,c.jsx)(u,{hint:r.assuranceDepthHint,label:t===`pt-BR`?`Profundidade padrão`:`Standard depth`,children:(0,c.jsxs)(`select`,{value:i.assurance.standard_depth,onChange:e=>a({...i,assurance:{...i.assurance??{version:1,standard_depth:`auto`,require_final_commit:!0},standard_depth:e.target.value}}),children:[(0,c.jsx)(`option`,{value:`auto`,children:`auto`}),(0,c.jsx)(`option`,{value:`base`,children:`base`}),(0,c.jsx)(`option`,{value:`elevated`,children:`elevated`})]})}),(0,c.jsx)(W,{checked:i.assurance.require_final_commit,hint:r.finalCommitHint,label:t===`pt-BR`?`Exigir commit final`:`Require final commit`,onChange:e=>a({...i,assurance:{...i.assurance??{version:1,standard_depth:`auto`,require_final_commit:!0},require_final_commit:e}})})]}):null]}),(0,c.jsxs)(l,{className:`is-wide`,title:r.context,children:[(0,c.jsx)(G,{checked:i.context!==void 0,label:t===`pt-BR`?`Incluir raízes de contexto`:`Include context roots`,onChange:e=>a({...i,context:e?{canonical_roots:[`packages`],projection_roots:[]}:void 0})}),i.context?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(`div`,{className:`project-settings-guidance`,children:[(0,c.jsx)(`p`,{children:r.contextGuide}),(0,c.jsx)(`p`,{children:r.contextDomains})]}),(0,c.jsxs)(`div`,{className:`project-settings-fields two-columns`,children:[(0,c.jsx)(u,{hint:t===`pt-BR`?`Uma pasta por linha. Estas são as fontes principais do projeto.`:`One folder per line. These are the project's primary sources.`,label:t===`pt-BR`?`Fontes canônicas`:`Canonical sources`,children:(0,c.jsx)(`textarea`,{required:!0,rows:5,value:i.context.canonical_roots.join(`
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,_ as n,v as r,w as i,y as a}from"./cost-monitor-uPnOBShc.js";import{t as o}from"./index-BqeOEZW5.js";var s=e(t(),1),c=i();function l({children:e,className:t=``,title:n}){return(0,c.jsxs)(`section`,{className:`project-settings-card ${t}`,children:[(0,c.jsx)(`h2`,{children:n}),(0,c.jsx)(`div`,{className:`project-settings-fields`,children:e})]})}function u({children:e,className:t=``,hint:n,label:r}){return(0,c.jsxs)(`div`,{className:`project-settings-field ${t}`,children:[(0,c.jsx)(`span`,{children:r}),e,n?(0,c.jsx)(`small`,{children:n}):null]})}var d=[{id:`primary_language`,defaultName:`TypeScript`,scope:`backend`},{id:`backend_runtime`,defaultName:`Node.js`,scope:`backend`},{id:`backend_api`,defaultName:`Hono`,scope:`backend`},{id:`query_builder`,defaultName:`Kysely`,scope:`backend`},{id:`database`,defaultName:`PostgreSQL via Supabase`,scope:`backend`},{id:`auth_storage`,defaultName:`Supabase Auth + Storage`,scope:`backend`},{id:`cache_messaging`,defaultName:`Redis`,scope:`backend`},{id:`async_queue`,defaultName:`BullMQ`,scope:`backend`},{id:`backend_infrastructure`,defaultName:`Terraform`,scope:`backend`},{id:`backend_hosting`,defaultName:`Hostinger VPS`,scope:`backend`},{id:`web_framework`,defaultName:`React`,scope:`frontend`},{id:`web_language`,defaultName:`TypeScript`,scope:`frontend`},{id:`web_build`,defaultName:`Vite`,scope:`frontend`},{id:`frontend_hosting`,defaultName:`Cloudflare Pages`,scope:`frontend`},{id:`site_framework`,defaultName:`Astro`,scope:`site`},{id:`site_language`,defaultName:`TypeScript`,scope:`site`},{id:`site_islands`,defaultName:`React Islands`,scope:`site`},{id:`site_build`,defaultName:`Vite`,scope:`site`},{id:`site_hosting`,defaultName:`Cloudflare Pages`,scope:`site`},{id:`prometheus`,defaultName:`Prometheus`,scope:`observability`},{id:`grafana`,defaultName:`Grafana`,scope:`observability`},{id:`uptime_kuma`,defaultName:`Uptime Kuma`,scope:`observability`},{id:`cadvisor`,defaultName:`cAdvisor`,scope:`observability`},{id:`node_exporter`,defaultName:`node-exporter`,scope:`observability`},{id:`redis_exporter`,defaultName:`Redis Exporter`,scope:`observability`},{id:`k6`,defaultName:`k6`,scope:`testing`},{id:`autocannon`,defaultName:`autocannon`,scope:`testing`}],f=new Set([`database`,`auth_storage`,`backend_hosting`,`frontend_hosting`,`site_hosting`]);function p(e){return f.has(e)}function m(e){let{languages:t,components:n,...r}=e.stack.overrides,i=w(n)?n:{};return{components:Object.fromEntries(d.map(e=>{let t=i[e.id],n=w(t)?t:{};return[e.id,{name:C(n.name)||e.defaultName,version:C(n.version),reference:C(n.reference)}]})),otherOverrides:JSON.stringify(r,null,2)}}function h(e,t){let n=new Map(t.filter(e=>e.installation===`installed`&&e.version!==null).map(e=>[e.name.toLowerCase(),e.version]));return Object.fromEntries(d.map(t=>{let r=e[t.id],i=n.get(x(t.id));return[t.id,r.version!==``||i===void 0?r:{...r,version:i}]}))}function g(e,t,n){if(e.autonomy?.version===1&&e.execution&&e.execution.runtime!==`manual`&&e.execution.runtime!==`codex_native`&&e.execution.autonomous.provider!==`codex`)throw Error(`Autonomy-v1 exige Codex na execução gerenciada / requires Codex for managed execution. Selecione Codex; conversas diretas continuam disponíveis.`);let r=JSON.parse(n);if(!w(r))throw Error(`Demais overrides deve ser um objeto JSON.`);let{languages:i,components:a,...o}=r;for(let e of d){let n=t[e.id].version.trim();if(n!==``&&!p(e.id)&&!/^\d+\.\d+(?:\.\d+)?(?:[-+][0-9A-Za-z.-]+)?$/.test(n))throw Error(`A versão de ${t[e.id].name||e.defaultName} deve ser exata, como 22.16.0 ou 17.6, sem ^, ~, >= ou latest.`);if(p(e.id)&&(n.length>120||/[\r\n]/.test(n)))throw Error(`A referência de ${t[e.id].name||e.defaultName} deve ter uma única linha com até 120 caracteres.`)}let s=Object.fromEntries(d.map(e=>[e.id,{name:t[e.id].name.trim()||e.defaultName,version:t[e.id].version.trim(),reference:t[e.id].reference.trim()}])),c=w(e.stack.overrides.components)?e.stack.overrides.components:{};return{...e,stack:{...e.stack,overrides:{...o,components:{...c,...s},languages:{frontend:S(s,`frontend`),backend:S(s,`backend`),site:S(s,`site`)}}}}}function _(e){return[...new Set(e.split(/\r?\n/).map(e=>e.trim()).filter(Boolean))]}function v(){return{runtime:`autonomous`,autonomous:{provider:`codex`,model:`gpt-6-sol`,max_parallelism:1,lease_ms:6e4}}}function y(e){if(e===`manual`)return{runtime:`manual`};if(e===`codex_native`)return{runtime:`codex_native`};if(e!==`managed`&&e!==`autonomous`)throw Error(`Unknown runtime: ${e}`);return{...v(),runtime:e}}function b(e){let t=e?.match(/^v?(\d+)\.(\d+)\.\d+(?:[-+][0-9A-Za-z.-]+)?$/);return t?`v${t[1]}.${t[2]}`:null}function x(e){return e===`backend_runtime`?`node.js`:e===`backend_api`?`hono`:e===`site_framework`?`astro`:e===`cache_messaging`?`redis`:e===`async_queue`?`bullmq`:e===`web_framework`||e===`site_islands`?`react`:e===`web_build`||e===`site_build`?`vite`:e===`primary_language`||e===`web_language`||e===`site_language`?`typescript`:``}function S(e,t){return[...new Set(d.filter(e=>e.scope===t).map(t=>e[t.id].name.trim()).filter(Boolean))]}function C(e){return typeof e==`string`?e:``}function w(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var T={primary_language:{pt:`Linguagem principal`,en:`Primary language`},backend_runtime:{pt:`Runtime backend`,en:`Backend runtime`},backend_api:{pt:`Framework backend / API`,en:`Backend framework / API`},query_builder:{pt:`Query builder`,en:`Query builder`},database:{pt:`Banco de dados`,en:`Database`},auth_storage:{pt:`Autenticação e Storage`,en:`Authentication and Storage`},cache_messaging:{pt:`Cache e mensageria`,en:`Cache and messaging`},async_queue:{pt:`Filas e processamento assíncrono`,en:`Queues and async processing`},backend_infrastructure:{pt:`Infraestrutura backend`,en:`Backend infrastructure`},backend_hosting:{pt:`Hospedagem do backend`,en:`Backend hosting`},web_framework:{pt:`Framework do Web App`,en:`Web App framework`},web_language:{pt:`Linguagem do Web App`,en:`Web App language`},web_build:{pt:`Build do Web App`,en:`Web App build`},frontend_hosting:{pt:`Hospedagem do frontend`,en:`Frontend hosting`},site_framework:{pt:`Framework do site`,en:`Site framework`},site_language:{pt:`Linguagem do site`,en:`Site language`},site_islands:{pt:`Componentes interativos`,en:`Interactive components`},site_build:{pt:`Build do site`,en:`Site build`},site_hosting:{pt:`Hospedagem do site`,en:`Site hosting`},prometheus:{pt:`Coleta de métricas`,en:`Metrics collection`},grafana:{pt:`Dashboards`,en:`Dashboards`},uptime_kuma:{pt:`Monitoramento de disponibilidade`,en:`Availability monitoring`},cadvisor:{pt:`Métricas de containers`,en:`Container metrics`},node_exporter:{pt:`Métricas de host`,en:`Host metrics`},redis_exporter:{pt:`Métricas do Redis`,en:`Redis metrics`},k6:{pt:`Teste de carga`,en:`Load testing`},autocannon:{pt:`Teste HTTP de carga`,en:`HTTP load testing`}};function E({components:e,locale:t,onChange:n,referenceHint:r,versionHint:i}){let a=[{scope:`backend`,title:t===`pt-BR`?`Backend e dados`:`Backend and data`},{scope:`frontend`,title:`Web App`},{scope:`site`,title:t===`pt-BR`?`Site e landing pages`:`Site and landing pages`},{scope:`observability`,title:t===`pt-BR`?`Observabilidade`:`Observability`},{scope:`testing`,title:t===`pt-BR`?`Testes sob demanda`:`On-demand testing`}],o=(t,r,i)=>n({...e,[t]:{...e[t],[r]:i}});return(0,c.jsxs)(`div`,{className:`project-stack-editor`,children:[a.map(n=>(0,c.jsxs)(`section`,{children:[(0,c.jsx)(`h3`,{children:n.title}),(0,c.jsxs)(`div`,{className:`project-stack-table`,children:[(0,c.jsxs)(`div`,{className:`project-stack-table-head`,"aria-hidden":`true`,children:[(0,c.jsx)(`span`,{children:`Item`}),(0,c.jsx)(`span`,{children:t===`pt-BR`?`Tecnologia`:`Technology`}),(0,c.jsx)(`span`,{children:t===`pt-BR`?`Versão atual / referência`:`Current version / reference`}),(0,c.jsx)(`span`,{children:t===`pt-BR`?`Pacote / imagem / serviço`:`Package / image / service`})]}),d.filter(e=>e.scope===n.scope).map(n=>(0,c.jsxs)(`div`,{className:`project-stack-row`,children:[(0,c.jsx)(`strong`,{children:T[n.id][t===`pt-BR`?`pt`:`en`]}),(0,c.jsx)(`input`,{"aria-label":`${T[n.id].pt}: tecnologia`,value:e[n.id].name,onChange:e=>o(n.id,`name`,e.target.value)}),(0,c.jsx)(`input`,{"aria-label":`${T[n.id].pt}: ${p(n.id)?`versão atual ou referência`:`versão exata`}`,className:p(n.id)?`is-reference-value`:void 0,inputMode:p(n.id)?`text`:`decimal`,placeholder:p(n.id)?t===`pt-BR`?`Serviço em nuvem`:`Cloud service`:`x.y.z`,title:p(n.id)?e[n.id].version:void 0,value:e[n.id].version,onChange:e=>o(n.id,`version`,e.target.value)}),(0,c.jsx)(`input`,{"aria-label":`${T[n.id].pt}: referência`,placeholder:`npm:pacote ou service:nome`,value:e[n.id].reference,onChange:e=>o(n.id,`reference`,e.target.value)})]},n.id))]})]},n.scope)),(0,c.jsxs)(`div`,{className:`project-stack-format-help`,children:[(0,c.jsxs)(`p`,{children:[(0,c.jsx)(`strong`,{children:t===`pt-BR`?`Formato da versão:`:`Version format:`}),` `,i]}),(0,c.jsxs)(`p`,{children:[(0,c.jsx)(`strong`,{children:t===`pt-BR`?`Formato da referência:`:`Reference format:`}),` `,r]})]})]})}function D({components:e,showTitle:t=!0,text:n}){return e.length===0?null:(0,c.jsxs)(`section`,{className:`project-stack-versions`,"aria-label":n.versions,children:[t?(0,c.jsx)(`h3`,{children:n.versions}):null,(0,c.jsx)(`div`,{children:e.map(e=>(0,c.jsxs)(`article`,{children:[(0,c.jsxs)(`div`,{className:`project-stack-version-identity`,children:[(0,c.jsx)(`strong`,{children:e.name}),(0,c.jsxs)(`code`,{children:[n.current,`: `,e.version??n.versionUnavailable]}),e.configured_version!==null&&e.configured_version!==e.version?(0,c.jsxs)(`code`,{children:[n.configured,`: `,e.configured_version]}):null]}),(0,c.jsx)(`span`,{className:`is-${e.verification}`,children:e.installation===`runtime`?n.runtime:e.installation===`installed`?n.installed:e.installation===`bundled`?n.bundled:n.missing}),e.source?(0,c.jsx)(`small`,{children:e.source}):null]},e.name))})]})}function O(e){return{health:e.health??{state:`unknown`,scope:`settings_runtime`},dependencies:k(e.dependencies,e.dependencies?.installed),documentation:k(e.documentation,e.documentation?.available),profile:e.installation_profile??null,hasMissingDependencies:(A(e.dependencies?.missing)??0)>0}}function k(e,t){let n=e?.state??`unknown`,r=A(e?.percent);return{completed:A(t),total:A(e?.applicable),percentage:(n===`complete`||n===`incomplete`)&&r!==null&&r<=100?r:null,state:n}}function A(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0?e:null}function j(e){return e.filter(e=>![`database`,`installation`].includes(e.id))}var M={"pt-BR":{eyebrow:`Configurações`,title:`Configuração do projeto`,intro:`Edite o arquivo central do projeto com validação do schema antes da gravação.`,loading:`Carregando…`,loadError:`Não foi possível carregar as configurações do projeto.`,retry:`Tentar novamente`,back:`Voltar ao dashboard`,save:`Salvar configurações`,saving:`Validando e salvando…`,saved:`Configurações salvas e validadas.`,framework:`Framework ZAIP-AIOS`,frameworkHint:`Ativa ou desativa o framework para este projeto.`,identity:`Identidade do projeto`,workspacePath:`Caminho do projeto`,workspacePathHint:`Pasta local usada por esta instância do Dashboard.`,workspacePathLoading:`Identificando caminho…`,workspacePathUnavailable:`Caminho indisponível`,stack:`Stack e linguagens`,execution:`Execução`,assurance:`Assurance`,executionToggleHint:`Grava ou remove o bloco execution. Sem ele, o projeto usa execução manual.`,runtimeHint:`Managed gerencia PRDs/SPECs e mantém avulsas diretas. Manual não inicia provider; autonomous permite execução gerenciada também para Task avulsa por comando explícito.`,providerHint:`Provider que inicia os agentes da execução autônoma: Codex ou Claude.`,autonomyProviderHint:`Autonomy-v1 exige Codex para execução gerenciada. Claude continua disponível em conversas diretas ou no protocolo legado.`,executionModelHint:`Modelo-base do runtime autônomo. A política automática de PRD/SPEC ainda pode selecionar um modelo permitido por agente.`,parallelismHint:`Teto de agentes simultâneos. O valor efetivo é o menor limite entre projeto, DAG, provider e squad.`,leaseHint:`Tempo de lease configurado para o coordenador autônomo.`,assuranceToggleHint:`Ativa ou remove os gates de evidência, revisão e qualidade do projeto. Recomenda-se manter ativo.`,assuranceVersionHint:`Versão do contrato de assurance. É fixa e somente leitura.`,assuranceDepthHint:`Auto ajusta o rigor ao escopo; base exige o conjunto padrão; elevated amplia validações para mudanças mais abrangentes.`,finalCommitHint:`Exige que as evidências comprovem o commit final integrado. Sinais de produção ou migração ainda podem exigir isso mesmo quando desativado.`,context:`Contexto`,overview:`Visão geral do projeto`,metricLabels:{agents:`Agentes`,squads:`Squads`,skills:`Skills`,rules:`Rules`,hooks:`Hooks`},areaLabels:{brandbook:`Brandbook`,design_system:`Design System`,software_architecture:`Arquitetura de Software`,growth_strategy:`Estratégia de Growth`,marketing_strategy:`Estratégia de Marketing`,sales_playbook:`Playbook de Sales`},available:`Criado`,artifactUnavailable:`Ainda não criado`,componentGuide:`Preencha cada responsabilidade separadamente. Use a versão exata do software e, para serviços em nuvem ou hospedagem, informe Serviço em nuvem.`,versionHint:`Software: 22.16.0 ou 17.6, sem prefixos (^, ~, >=). Serviço gerenciado: Serviço em nuvem. Hospedagem: Serviço em nuvem.`,referenceHint:`Ex.: npm:hono, docker:node:22.16.0-bookworm-slim, service:supabase ou provider:cloudflare-pages.`,overrides:`Opções avançadas (JSON)`,overridesHint:`Use apenas fatos técnicos transversais confirmados. Deixe vazio quando não houver exceções.`,versions:`Versões detectadas no workspace`,exact:`Verificada`,constraint:`Requisito`,versionUnavailable:`Não encontrada`,runtime:`Runtime do Dashboard`,installed:`Instalado no projeto`,missing:`Ausente no projeto`,bundled:`Empacotado no Dashboard`,current:`Atual`,configured:`Configurado`,health:`Saúde`,dependencies:`Dependências técnicas`,documentation:`Documentação`,unknown:`Desconhecido`,unavailable:`Indisponível`,notApplicable:`Não aplicável`,complete:`Completo`,incomplete:`Incompleto`,incompleteInstallation:`Há dependências técnicas locais ausentes neste computador.`,dismiss:`Fechar aviso`,contextGuide:`O contexto começa pelas fontes canônicas e inclui somente arquivos relevantes para a tarefa. Saídas geradas são consultadas apenas em setup, release ou checagem de paridade.`,contextDomains:`Branding, Marketing, Growth e Sales são usados sob demanda pelos respectivos especialistas, quando houver uma tarefa e artefatos desses domínios. Não os adicione aqui apenas por existirem como capacidades.`},"en-US":{eyebrow:`Settings`,title:`Project settings`,intro:`Edit the central project file with schema validation before writing.`,loading:`Loading…`,loadError:`Project settings could not be loaded.`,retry:`Try again`,back:`Back to dashboard`,save:`Save settings`,saving:`Validating and saving…`,saved:`Settings saved and validated.`,framework:`ZAIP-AIOS framework`,frameworkHint:`Enable or disable the framework for this project.`,identity:`Project identity`,workspacePath:`Project path`,workspacePathHint:`Local folder used by this Dashboard instance.`,workspacePathLoading:`Identifying path…`,workspacePathUnavailable:`Path unavailable`,stack:`Stack and languages`,execution:`Execution`,assurance:`Assurance`,executionToggleHint:`Writes or removes the execution block. Without it, the project uses manual execution.`,runtimeHint:`Managed runs PRDs/SPECs while standalone Tasks stay direct. Manual never starts a provider; autonomous also permits explicitly commanded managed standalone execution.`,providerHint:`Provider that starts autonomous execution agents: Codex or Claude.`,autonomyProviderHint:`Autonomy-v1 requires Codex for managed execution. Claude remains available for direct conversations or the legacy protocol.`,executionModelHint:`Base model for the autonomous runtime. PRD/SPEC automatic policy may still select an allowed model per agent.`,parallelismHint:`Maximum simultaneous agents. Effective parallelism is the smallest project, DAG, provider, and squad limit.`,leaseHint:`Lease duration configured for the autonomous coordinator.`,assuranceToggleHint:`Enables or removes project evidence, review, and quality gates. Keeping it enabled is recommended.`,assuranceVersionHint:`Assurance contract version. It is fixed and read-only.`,assuranceDepthHint:`Auto adapts rigor to scope; base uses the standard set; elevated expands validation for broader changes.`,finalCommitHint:`Requires evidence for the final integrated commit. Production or migration signals may still require it when disabled.`,context:`Context`,overview:`Project overview`,metricLabels:{agents:`Agents`,squads:`Squads`,skills:`Skills`,rules:`Rules`,hooks:`Hooks`},areaLabels:{brandbook:`Brandbook`,design_system:`Design System`,software_architecture:`Software Architecture`,growth_strategy:`Growth Strategy`,marketing_strategy:`Marketing Strategy`,sales_playbook:`Sales Playbook`},available:`Created`,artifactUnavailable:`Not created yet`,componentGuide:`Fill each responsibility separately. Use an exact software version and, for cloud services or hosting, enter Cloud service.`,versionHint:`Software: 22.16.0 or 17.6, without prefixes (^, ~, >=). Managed service: Cloud service. Hosting: Cloud service.`,referenceHint:`E.g. npm:hono, docker:node:22.16.0-bookworm-slim, service:supabase, or provider:cloudflare-pages.`,overrides:`Advanced options (JSON)`,overridesHint:`Use only confirmed cross-cutting technical facts. Leave empty when there are no exceptions.`,versions:`Versions detected in the workspace`,exact:`Verified`,constraint:`Requirement`,versionUnavailable:`Not found`,runtime:`Dashboard runtime`,installed:`Installed in project`,missing:`Missing from project`,bundled:`Bundled in Dashboard`,current:`Current`,configured:`Configured`,health:`Health`,dependencies:`Technical dependencies`,documentation:`Documentation`,unknown:`Unknown`,unavailable:`Unavailable`,notApplicable:`Not applicable`,complete:`Complete`,incomplete:`Incomplete`,incompleteInstallation:`Some local technical dependencies are missing on this computer.`,dismiss:`Dismiss notification`,contextGuide:`Context starts from canonical sources and includes only files relevant to the task. Generated outputs are consulted only for setup, release, or parity checks.`,contextDomains:`Branding, Marketing, Growth, and Sales are used on demand by their respective specialists when there is a task and artifacts in those domains. Do not add them here merely because they exist as capabilities.`}},N=`autonomy-v1`,P=n([`essential`,`balanced`,`persistent`]),F=a({version:r(1),preset:P}).strict(),I=Object.freeze({essential:Object.freeze({label:`Essencial`,attempts:4,replans:1,automatic_astra:!1}),balanced:Object.freeze({label:`Equilibrado`,attempts:10,replans:3,automatic_astra:!0}),persistent:Object.freeze({label:`Persistente — ilimitado`,attempts:null,replans:null,automatic_astra:!0})});function L(e){let t=F.parse(e??{version:1,preset:`balanced`});return Object.freeze({version:N,preset:t.preset,...I[t.preset],repairs_per_replan:3})}function R({value:e,onChange:t,disabled:n=!1,locale:r=`pt-BR`}){let i=(0,s.useId)(),a=L(e),o=r===`pt-BR`;return(0,c.jsxs)(`div`,{children:[!e&&(0,c.jsx)(`p`,{children:o?`Projeto legado: selecione e salve um perfil para adotar os novos controles nas novas Tasks.`:`Legacy project: select and save a preset to adopt the new controls for new Tasks.`}),(0,c.jsxs)(`label`,{className:`project-settings-field`,htmlFor:i,children:[(0,c.jsx)(`strong`,{children:o?`Perfil de autonomia`:`Autonomy preset`}),(0,c.jsx)(`select`,{id:i,"aria-describedby":`${i}-detail`,disabled:n,value:a.preset,onChange:e=>t({version:1,preset:P.parse(e.target.value)}),children:P.options.map(e=>(0,c.jsx)(`option`,{value:e,children:o?I[e].label:{essential:`Essential`,balanced:`Balanced`,persistent:`Persistent — unlimited`}[e]},e))})]}),(0,c.jsx)(`p`,{id:`${i}-detail`,role:`status`,children:a.attempts===null?o?`Sem limite de tentativas ou replanejamentos. Pode continuar indefinidamente e consumir créditos até você cancelar.`:`No attempt or replanning limit. May continue indefinitely and consume credits until you cancel.`:o?`${a.attempts} execuções por Task (1 inicial + ${a.attempts-1} reparações), até ${a.replans} replanejamento(s). Sem abandono por tempo.`:`${a.attempts} executions per Task (1 initial + ${a.attempts-1} repairs), up to ${a.replans} replan(s). No time-based abandonment.`}),(0,c.jsx)(`p`,{children:a.automatic_astra?o?`Replanejamento: Sol/high no primeiro, Astra/high a partir do segundo. Astra/high pode executar a partir do terceiro.`:`Replanning: Sol/high first, Astra/high from the second. Astra/high may execute from the third.`:o?`Nunca usa Astra automaticamente. Exceção: agente principal de tarefa avulsa com Astra selecionado por você no Codex.`:`Never selects Astra automatically. Exception: a standalone principal with Astra manually selected in Codex.`}),(0,c.jsx)(`p`,{children:o?`A mudança vale para novas Tasks; as iniciadas conservam o perfil e o histórico. Tarefas avulsas priorizam execução direta. Ao delegar, a ZAIP informa que modelo e esforço dos subagentes podem mudar. Critérios de aceite e permissões não são reduzidos.`:`Changes apply to new Tasks; started Tasks retain their preset and history. Standalone work prefers direct execution. Delegation discloses that subagent model and effort may differ. Acceptance criteria and permissions are not reduced.`})]})}function z({api:e,locale:t,onClose:n}){let r=M[t],[i,a]=(0,s.useState)(null),[d,f]=(0,s.useState)(null),[p,v]=(0,s.useState)(null),[x,S]=(0,s.useState)(`{}`),[C,w]=(0,s.useState)(!1),[T,k]=(0,s.useState)(!0),[A,N]=(0,s.useState)(null),[P,F]=(0,s.useState)(null),[I,L]=(0,s.useState)(!1),z=o(),B=d===null?null:O(d),H=(0,s.useCallback)(async()=>{k(!0),N(null);try{let[t,n]=await Promise.all([e.projectSettings(),e.projectOverview()]),r=m(t);a(t),f(n),v(h(r.components,n.stack_components)),S(r.otherOverrides)}catch(e){N(e instanceof Error?e.message:String(e))}finally{k(!1)}},[e]);(0,s.useEffect)(()=>{H()},[H]),(0,s.useEffect)(()=>{L(d!==null&&O(d).hasMissingDependencies)},[d]);async function U(t){if(t.preventDefault(),i!==null){w(!0),N(null),F(null);try{let t=await e.saveProjectSettings(g(i,p??m(i).components,x)),n=await e.projectOverview(),o=m(t);a(t),f(n),v(o.components),S(o.otherOverrides),F(r.saved)}catch(e){N(e instanceof Error?e.message:String(e))}finally{w(!1)}}}if(i===null){let e=T&&A===null;return(0,c.jsx)(`main`,{"aria-busy":e,className:`project-settings-state`,children:(0,c.jsxs)(`div`,{"aria-live":e?`polite`:`assertive`,className:`project-settings-state-card`,role:e?`status`:`alert`,children:[e?(0,c.jsx)(`span`,{"aria-hidden":`true`,className:`project-settings-loader`}):null,(0,c.jsx)(`p`,{children:r.eyebrow}),(0,c.jsx)(`h1`,{children:A?r.loadError:r.loading}),A?(0,c.jsx)(`p`,{className:`project-settings-state-error`,children:A}):null,A?(0,c.jsx)(`button`,{onClick:()=>void H(),type:`button`,children:r.retry}):null,(0,c.jsxs)(`button`,{onClick:n,type:`button`,children:[`← `,r.back]})]})})}return(0,c.jsxs)(`main`,{className:`project-settings-page`,children:[(0,c.jsxs)(`form`,{onSubmit:U,children:[(0,c.jsxs)(`header`,{className:`project-settings-header`,children:[(0,c.jsxs)(`div`,{children:[(0,c.jsx)(`p`,{children:r.eyebrow}),(0,c.jsx)(`h1`,{children:r.title}),(0,c.jsx)(`span`,{children:r.intro})]}),(0,c.jsxs)(`button`,{className:`project-settings-back`,onClick:n,type:`button`,children:[`← `,r.back]})]}),A?(0,c.jsx)(`div`,{className:`project-settings-message is-error`,role:`alert`,children:A}):null,P?(0,c.jsx)(`div`,{className:`project-settings-message is-success`,role:`status`,children:P}):null,(0,c.jsxs)(`section`,{className:`project-settings-feature`,children:[(0,c.jsxs)(`div`,{children:[(0,c.jsxs)(`h2`,{children:[r.framework,b(d?.framework_version)?` - ${b(d?.framework_version)}`:``]}),(0,c.jsx)(`p`,{children:r.frameworkHint})]}),(0,c.jsx)(W,{checked:i.zaip?.enabled===!0,label:t===`pt-BR`?`Framework ativo`:`Framework enabled`,onChange:e=>a({...i,zaip:{enabled:e}})})]}),(0,c.jsxs)(`section`,{className:`project-settings-summary`,"aria-label":r.overview,children:[d&&j(d.metrics).map(e=>(0,c.jsxs)(`div`,{className:`project-settings-metric`,children:[(0,c.jsx)(`strong`,{children:e.value}),(0,c.jsx)(`span`,{children:r.metricLabels[e.id]})]},e.id)),B?(0,c.jsx)(V,{installation:B,locale:t}):null]}),(0,c.jsx)(l,{className:`is-wide`,title:r.overview,children:(0,c.jsx)(`div`,{className:`project-overview`,"aria-live":`polite`,children:d?.areas.map(e=>(0,c.jsxs)(`div`,{className:`project-overview-item`,children:[(0,c.jsxs)(`div`,{children:[(0,c.jsx)(`strong`,{children:r.areaLabels[e.id]}),(0,c.jsx)(`code`,{children:e.artifact})]}),(0,c.jsx)(`span`,{className:e.available?`is-available`:`is-unavailable`,children:e.available===!0?r.available:e.available===!1?r.artifactUnavailable:r.unavailable})]},e.id))})}),(0,c.jsx)(l,{className:`is-wide project-detected-versions`,title:r.versions,children:(0,c.jsx)(D,{components:d?.stack_components??[],text:r,showTitle:!1})}),(0,c.jsxs)(`div`,{className:`project-settings-grid`,children:[(0,c.jsxs)(l,{className:`is-wide project-identity-card`,title:r.identity,children:[(0,c.jsx)(u,{className:`project-settings-workspace-field`,hint:r.workspacePathHint,label:r.workspacePath,children:(0,c.jsx)(`code`,{className:`project-settings-workspace-path`,children:z.status?.workspace??(z.unavailable?r.workspacePathUnavailable:r.workspacePathLoading)})}),(0,c.jsx)(u,{label:`Schema`,children:(0,c.jsx)(`input`,{readOnly:!0,value:i.schema_version})}),(0,c.jsx)(u,{label:t===`pt-BR`?`ID do projeto`:`Project ID`,children:(0,c.jsx)(`input`,{required:!0,value:i.project.id,onChange:e=>a({...i,project:{...i.project,id:e.target.value}})})}),(0,c.jsx)(u,{label:t===`pt-BR`?`Nome do projeto`:`Project name`,children:(0,c.jsx)(`input`,{required:!0,value:i.project.name,onChange:e=>a({...i,project:{...i.project,name:e.target.value}})})}),(0,c.jsx)(u,{label:`Timezone IANA`,children:(0,c.jsx)(`input`,{required:!0,value:i.project.timezone,onChange:e=>a({...i,project:{...i.project,timezone:e.target.value}})})})]}),(0,c.jsxs)(l,{className:`is-wide`,title:r.stack,children:[(0,c.jsx)(`p`,{className:`project-stack-guide`,children:r.componentGuide}),p?(0,c.jsx)(E,{components:p,locale:t,onChange:v,referenceHint:r.referenceHint,versionHint:r.versionHint}):null,(0,c.jsxs)(`details`,{className:`project-settings-advanced`,children:[(0,c.jsx)(`summary`,{children:r.overrides}),(0,c.jsx)(u,{hint:r.overridesHint,label:`Overrides`,children:(0,c.jsx)(`textarea`,{rows:7,value:x,onChange:e=>S(e.target.value)})})]})]}),(0,c.jsxs)(l,{title:r.execution,children:[(0,c.jsx)(G,{checked:i.execution!==void 0,hint:r.executionToggleHint,label:t===`pt-BR`?`Incluir configuração de execução`:`Include execution configuration`,onChange:e=>a({...i,execution:e?{runtime:`codex_native`}:void 0})}),i.execution?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(u,{hint:r.runtimeHint,label:`Runtime`,children:(0,c.jsxs)(`select`,{value:i.execution.runtime,"aria-label":`Runtime`,onChange:e=>a({...i,execution:y(e.target.value)}),children:[(0,c.jsx)(`option`,{value:`manual`,children:`manual`}),(0,c.jsx)(`option`,{value:`codex_native`,children:`codex_native (Codex)`}),(0,c.jsx)(`option`,{value:`managed`,children:`managed (PRD/SPEC)`}),(0,c.jsx)(`option`,{value:`autonomous`,children:`autonomous`})]})}),i.execution.runtime!==`manual`&&i.execution.runtime!==`codex_native`?(0,c.jsx)(K,{config:i,setConfig:a,text:r}):null]}):null]}),(0,c.jsx)(l,{title:t===`pt-BR`?`Autonomia e recuperação`:`Autonomy and recovery`,children:(0,c.jsx)(R,{value:i.autonomy,disabled:C,locale:t,onChange:e=>a({...i,autonomy:e})})}),(0,c.jsxs)(l,{title:r.assurance,children:[(0,c.jsx)(G,{checked:i.assurance!==void 0,hint:r.assuranceToggleHint,label:t===`pt-BR`?`Incluir assurance`:`Include assurance`,onChange:e=>a({...i,assurance:e?{version:1,standard_depth:`auto`,require_final_commit:!0}:void 0})}),i.assurance?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(u,{hint:r.assuranceVersionHint,label:t===`pt-BR`?`Versão`:`Version`,children:(0,c.jsx)(`input`,{readOnly:!0,value:i.assurance.version})}),(0,c.jsx)(u,{hint:r.assuranceDepthHint,label:t===`pt-BR`?`Profundidade padrão`:`Standard depth`,children:(0,c.jsxs)(`select`,{value:i.assurance.standard_depth,onChange:e=>a({...i,assurance:{...i.assurance??{version:1,standard_depth:`auto`,require_final_commit:!0},standard_depth:e.target.value}}),children:[(0,c.jsx)(`option`,{value:`auto`,children:`auto`}),(0,c.jsx)(`option`,{value:`base`,children:`base`}),(0,c.jsx)(`option`,{value:`elevated`,children:`elevated`})]})}),(0,c.jsx)(W,{checked:i.assurance.require_final_commit,hint:r.finalCommitHint,label:t===`pt-BR`?`Exigir commit final`:`Require final commit`,onChange:e=>a({...i,assurance:{...i.assurance??{version:1,standard_depth:`auto`,require_final_commit:!0},require_final_commit:e}})})]}):null]}),(0,c.jsxs)(l,{className:`is-wide`,title:r.context,children:[(0,c.jsx)(G,{checked:i.context!==void 0,label:t===`pt-BR`?`Incluir raízes de contexto`:`Include context roots`,onChange:e=>a({...i,context:e?{canonical_roots:[`packages`],projection_roots:[]}:void 0})}),i.context?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(`div`,{className:`project-settings-guidance`,children:[(0,c.jsx)(`p`,{children:r.contextGuide}),(0,c.jsx)(`p`,{children:r.contextDomains})]}),(0,c.jsxs)(`div`,{className:`project-settings-fields two-columns`,children:[(0,c.jsx)(u,{hint:t===`pt-BR`?`Uma pasta por linha. Estas são as fontes principais do projeto.`:`One folder per line. These are the project's primary sources.`,label:t===`pt-BR`?`Fontes canônicas`:`Canonical sources`,children:(0,c.jsx)(`textarea`,{required:!0,rows:5,value:i.context.canonical_roots.join(`
|
|
2
2
|
`),onChange:e=>a({...i,context:{...i.context??{canonical_roots:[`packages`],projection_roots:[]},canonical_roots:_(e.target.value)}})})}),(0,c.jsx)(u,{hint:t===`pt-BR`?`Uma pasta por linha. São saídas geradas, não fontes de contexto normal.`:`One folder per line. These are generated outputs, not normal context sources.`,label:t===`pt-BR`?`Saídas geradas/publicadas`:`Generated/published outputs`,children:(0,c.jsx)(`textarea`,{rows:5,value:i.context.projection_roots.join(`
|
|
3
3
|
`),onChange:e=>a({...i,context:{...i.context??{canonical_roots:[`packages`],projection_roots:[]},projection_roots:_(e.target.value)}})})})]})]}):null]})]}),(0,c.jsxs)(`footer`,{className:`project-settings-footer`,children:[(0,c.jsx)(`span`,{children:`.agents/config/project.yaml`}),(0,c.jsx)(`button`,{disabled:C,type:`submit`,children:C?r.saving:r.save})]})]}),I&&B?.hasMissingDependencies?(0,c.jsxs)(`div`,{"aria-live":`assertive`,className:`project-installation-toast`,role:`alert`,children:[(0,c.jsx)(`span`,{children:r.incompleteInstallation}),(0,c.jsx)(`button`,{"aria-label":r.dismiss,onClick:()=>L(!1),type:`button`,children:`×`})]}):null]})}function B(e,t){return`${new Intl.NumberFormat(t,{maximumFractionDigits:2}).format(e)}%`}function V({installation:e,locale:t}){let n=M[t];return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(`p`,{className:`project-installation-health`,children:[n.health,`:`,` `,e.health.state===`healthy`?t===`pt-BR`?`Saudável`:`Healthy`:e.health.state===`degraded`?t===`pt-BR`?`Degradada`:`Degraded`:n.unknown]}),(0,c.jsx)(H,{dimension:e.dependencies,label:n.dependencies,locale:t}),(0,c.jsx)(H,{dimension:e.documentation,label:n.documentation,locale:t})]})}function H({dimension:e,label:t,locale:n}){let r=M[n],i=e.state===`not_applicable`?r.notApplicable:e.percentage===null?r.unknown:B(e.percentage,n),a=U(e.state,n);return(0,c.jsxs)(`div`,{className:`project-settings-metric installation-metric is-${e.state}`,children:[(0,c.jsx)(`strong`,{children:i}),(0,c.jsx)(`span`,{children:e.total===null||e.completed===null?t:`${t} · ${e.completed}/${e.total}`}),(0,c.jsx)(`small`,{children:a})]})}function U(e,t){let n=M[t];return e===`complete`?n.complete:e===`incomplete`?n.incomplete:e===`not_applicable`?n.notApplicable:e===`unavailable`?n.unavailable:n.unknown}function W({checked:e,hint:t,label:n,onChange:r}){return(0,c.jsxs)(`div`,{className:`project-settings-toggle-field`,children:[(0,c.jsxs)(`label`,{className:`project-settings-toggle`,children:[(0,c.jsx)(`input`,{checked:e,onChange:e=>r(e.target.checked),type:`checkbox`}),(0,c.jsx)(`span`,{"aria-hidden":`true`}),(0,c.jsx)(`strong`,{children:n})]}),t?(0,c.jsx)(`small`,{children:t}):null]})}function G(e){return(0,c.jsx)(W,{...e})}function K({config:e,setConfig:t,text:n}){let r=e.execution&&e.execution.runtime!==`manual`&&e.execution.runtime!==`codex_native`?e.execution:v(),i=n=>t({...e,execution:{runtime:r.runtime,autonomous:n}});return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(u,{hint:e.autonomy?.version===1?n.autonomyProviderHint:n.providerHint,label:`Provider`,children:(0,c.jsxs)(`select`,{value:r.autonomous.provider,"aria-label":`Provider`,onChange:e=>i({...r.autonomous,provider:e.target.value}),children:[(0,c.jsx)(`option`,{value:`codex`,children:`codex`}),(0,c.jsx)(`option`,{value:`claude`,disabled:e.autonomy?.version===1,children:`claude`})]})}),(0,c.jsx)(u,{hint:n.executionModelHint,label:`Model`,children:(0,c.jsx)(`input`,{required:!0,value:r.autonomous.model,onChange:e=>i({...r.autonomous,model:e.target.value})})}),(0,c.jsx)(u,{hint:n.parallelismHint,label:`Max parallelism`,children:(0,c.jsx)(`input`,{max:8,min:1,type:`number`,value:r.autonomous.max_parallelism,onChange:e=>i({...r.autonomous,max_parallelism:Number(e.target.value)})})}),(0,c.jsx)(u,{hint:n.leaseHint,label:`Lease (ms)`,children:(0,c.jsx)(`input`,{max:36e5,min:5e3,step:1e3,type:`number`,value:r.autonomous.lease_ms,onChange:e=>i({...r.autonomous,lease_ms:Number(e.target.value)})})})]})}export{z as ProjectSettingsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-uPnOBShc.js";import{n as r}from"./traceability-IcefoTOv.js";import{n as i}from"./index-BqeOEZW5.js";var a=e(t(),1),o=n();function s(e,t){let n=t.trim().toLocaleLowerCase();return n===``?[...e]:e.filter(e=>`${e.title} ${e.id}`.toLocaleLowerCase().includes(n))}function c(e,t,n){return n?[...e]:s(e,t)}function l(e){return`traceability-task-option-${e}`}function u({locale:e,loadingTaskId:t,hasMoreTasks:n,isLoadingTasks:s,onLoadMoreTasks:u,onSelectTask:d,onOpenChange:f,onOpenPrd:p,onOpenSpec:m,selectedTaskId:h,tasks:g,trace:_}){let v=[...g].sort((e,t)=>Date.parse(t.created_at)-Date.parse(e.created_at)),y=v.find(e=>e.id===h),[b,x]=(0,a.useState)(()=>y?.title??h),[S,C]=(0,a.useState)(!1),[w,T]=(0,a.useState)(!1),[E,D]=(0,a.useState)(0),[O,k]=(0,a.useState)(12),A=(0,a.useMemo)(()=>c(v,b,w),[b,w,v]),j=A.slice(0,O),M=j.length<A.length,N=`traceability-task-search`,P=`traceability-task-results`,F=e===`pt-BR`?`Task selecionada`:`Selected task`,I=e===`pt-BR`?`Buscar task por nome ou ID`:`Search task by name or ID`,L=S?A[E]?.id:void 0;(0,a.useEffect)(()=>{x(y?.title??h),D(0)},[y?.title,h]);let R=e=>{x(e.title),C(!1),T(!1),d(e.id)},z=(e=!0)=>{C(!0),T(!0),e&&(D(0),k(12))};return(0,o.jsxs)(`section`,{className:`traceability-workspace`,children:[(0,o.jsxs)(`header`,{children:[(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`label`,{htmlFor:N,children:F}),(0,o.jsx)(`input`,{"aria-activedescendant":L===void 0?void 0:l(L),"aria-autocomplete":`list`,"aria-controls":P,"aria-expanded":S,"aria-label":I,id:N,onChange:e=>{x(e.target.value),D(0),T(!1),k(12),C(!0)},onClick:()=>z(),onFocus:()=>z(),onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),z(!1),D(e=>Math.min(e+1,Math.max(0,v.length-1)));else if(e.key===`ArrowUp`)e.preventDefault(),z(!1),D(e=>Math.max(0,e-1));else if(e.key===`Enter`&&S){let t=A[E];t!==void 0&&(e.preventDefault(),R(t))}else e.key===`Escape`&&C(!1)},role:`combobox`,type:`search`,value:b}),S?(0,o.jsx)(`div`,{"aria-label":I,className:`traceability-task-results`,id:P,onScroll:e=>{let{clientHeight:t,scrollHeight:r,scrollTop:a}=e.currentTarget;a+t<r-32||(n&&u(),j.length<A.length&&k(e=>i(e,A.length,12)))},role:`listbox`,children:A.length>0?j.map((e,t)=>(0,o.jsx)(`div`,{role:`presentation`,children:(0,o.jsx)(`button`,{"aria-selected":e.id===h,className:t===E?`is-active`:void 0,id:l(e.id),onClick:()=>R(e),role:`option`,type:`button`,children:(0,o.jsx)(`strong`,{children:e.title})})},e.id)):(0,o.jsx)(`div`,{className:`traceability-task-no-results`,role:`status`,children:e===`pt-BR`?`Nenhuma task encontrada.`:`No tasks found.`})}):null,S&&A.length>0?(0,o.jsx)(`p`,{"aria-live":`polite`,className:`traceability-task-pagination-status`,role:`status`,children:s?e===`pt-BR`?`Carregando mais tasks…`:`Loading more tasks…`:M||n?e===`pt-BR`?`${j.length} de ${A.length} tasks exibidas. Role para carregar mais.`:`${j.length} of ${A.length} tasks shown. Scroll to load more.`:e===`pt-BR`?`${A.length} tasks exibidas. Fim da lista.`:`${A.length} tasks shown. End of list.`}):null]}),(0,o.jsx)(`small`,{children:e===`pt-BR`?`Selecione pelo nome para visualizar o ciclo completo sem precisar do ID.`:`Select by name to inspect the complete lifecycle without knowing the ID.`})]}),t?(0,o.jsx)(`div`,{"aria-live":`polite`,className:`traceability-workspace-loading`,children:e===`pt-BR`?`Carregando as 6 etapas…`:`Loading all 6 stages…`}):_?(0,o.jsx)(r,{embedded:!0,locale:e,onClose:()=>void 0,onOpenChange:f,onOpenPrd:p,onOpenSpec:m,trace:_}):(0,o.jsx)(`p`,{children:e===`pt-BR`?`Nenhuma task disponível.`:`No task available.`})]})}export{u as TraceabilityWorkspace};
|