@zaip-ai/cli 5.3.0 → 5.5.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.
Files changed (64) hide show
  1. package/dist/services/adapters.d.ts +1 -1
  2. package/dist/services/adapters.js +1 -1
  3. package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
  4. package/dist/services/codex-conversation-lifecycle-hook.js +37 -8
  5. package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
  6. package/dist/services/codex-pre-tool-hook-template.d.ts.map +1 -1
  7. package/dist/services/codex-pre-tool-hook-template.js +44 -8
  8. package/dist/services/codex-pre-tool-hook-template.js.map +1 -1
  9. package/package.json +1 -1
  10. package/templates/.agents/README-ENG.md +12 -0
  11. package/templates/.agents/README.md +12 -0
  12. package/templates/.agents/config/agents/discovery.json +1 -1
  13. package/templates/.agents/dashboard/.zaip-managed.json +31 -31
  14. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-URSe1IiF.js → DashboardHelpDialog-Crv8oLKH.js} +13 -1
  15. package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-8znf56to.js → PricingSettingsDialog-De3_oOUB.js} +1 -1
  16. package/templates/.agents/dashboard/apps/frontend/dist/assets/{ProjectSettingsPage-O68yx0KF.js → ProjectSettingsPage-HNZfT9Xo.js} +1 -1
  17. package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-DlYlyBhz.js → TraceabilityWorkspace-D4tioTQ5.js} +1 -1
  18. package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-DhvlkPf2.js → dashboard-localization-BbNU69xZ.js} +12 -0
  19. package/templates/.agents/dashboard/apps/frontend/dist/assets/{index-CWcci-bM.js → index-oqGtXP7j.js} +2 -2
  20. package/templates/.agents/dashboard/apps/frontend/dist/index.html +1 -1
  21. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  22. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  23. package/templates/.agents/dashboard/modules/operations/package.json +1 -1
  24. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  25. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  26. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  27. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  28. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +162 -161
  29. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +59 -59
  30. package/templates/.agents/dashboard/packages/local-runtime/package.json +1 -1
  31. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +162 -161
  32. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  33. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  34. package/templates/.agents/design/.zaip-managed.json +3 -3
  35. package/templates/.agents/design/apps/catalog/package.json +1 -1
  36. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  37. package/templates/.agents/requirements/autonomous-assurance.md +1 -1
  38. package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
  39. package/templates/.agents/requirements/comparative-audit.md +1 -1
  40. package/templates/.agents/requirements/context-engine.md +1 -1
  41. package/templates/.agents/requirements/cost-observability.md +1 -1
  42. package/templates/.agents/requirements/dashboard-launch.md +1 -1
  43. package/templates/.agents/requirements/data-export.md +1 -1
  44. package/templates/.agents/requirements/design-system.md +1 -1
  45. package/templates/.agents/requirements/execution-engine.md +1 -1
  46. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  47. package/templates/.agents/requirements/model-orchestration.md +1 -1
  48. package/templates/.agents/requirements/public-distribution.md +1 -1
  49. package/templates/.agents/requirements/software-architecture.md +1 -1
  50. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  51. package/templates/.agents/requirements/work-lifecycle.md +1 -1
  52. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  53. package/templates/.agents/runtime/VERSION +1 -1
  54. package/templates/.agents/runtime/bin/zaip.mjs +99 -33
  55. package/templates/.agents/runtime/checksums.sha256 +5 -5
  56. package/templates/.agents/runtime/manifest.json +1 -1
  57. package/templates/.agents/runtime/provenance.json +4 -4
  58. package/templates/.agents/runtime/sbom.cdx.json +1 -1
  59. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +2 -0
  60. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-contract.mjs +1 -1
  61. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-publication-intent.test.mjs +14 -0
  62. package/templates/.agents/skills/zaip-skill-task/references/commit-policy.md +9 -0
  63. package/templates/.agents/zaip-aios/VERSION +1 -1
  64. package/templates/template-manifest.json +68 -68
@@ -1,6 +1,6 @@
1
1
  import { type PublicAgentCatalog } from "./agent-adapters.js";
2
2
  export { isManagedAdapter } from "./managed-adapter.js";
3
- export declare const ADAPTERS_VERSION = "5.3.0";
3
+ export declare const ADAPTERS_VERSION = "5.5.0";
4
4
  export interface AdapterFile {
5
5
  path: string;
6
6
  content: string;
@@ -11,7 +11,7 @@ export { isManagedAdapter } from "./managed-adapter.js";
11
11
  import { CODEX_GITHUB_DEPLOY_RULES, CODEX_SECURITY_RULES } from "./codex-rules.js";
12
12
  import { codexWindowsHookCommand } from "./codex-windows-hook-command.js";
13
13
  import { applyTransactionalChanges, assertSafeDestination } from "./transactional-files.js";
14
- export const ADAPTERS_VERSION = "5.3.0";
14
+ export const ADAPTERS_VERSION = "5.5.0";
15
15
  const ROOT_GUIDANCE = `# ZAIP-AIOS
16
16
 
17
17
  Read \`.agents/config/project.yaml\` first. Apply ZAIP only for literal boolean \`zaip.enabled: true\`, except framework maintenance or \`zaip enable\`. \`AGENTS.md\` is a bootstrap; canonical guidance lives in \`.agents/\`.
@@ -1 +1 @@
1
- {"version":3,"file":"codex-conversation-lifecycle-hook.d.ts","sourceRoot":"","sources":["../../src/services/codex-conversation-lifecycle-hook.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,QAmQ7C,CAAC"}
1
+ {"version":3,"file":"codex-conversation-lifecycle-hook.d.ts","sourceRoot":"","sources":["../../src/services/codex-conversation-lifecycle-hook.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,QAgS7C,CAAC"}
@@ -21,7 +21,7 @@ const text = value => typeof value === "string" && value.length > 0 && value.len
21
21
  const inside = (path, base = root) => { const p = relative(base, resolve(path)); return p === "" || (!p.startsWith("..") && !isAbsolute(p)); };
22
22
  let raw = ""; for await (const chunk of process.stdin) raw += chunk;
23
23
  const event = parse(raw), session = text(event?.session_id), turn = text(event?.turn_id);
24
- let receipt, receiptPath, lease;
24
+ let receipt, receiptPath, lease, closureVerified = false;
25
25
  function reply(pending = false) {
26
26
  if (!replay && governanceEnabled) activation?.recordActivation(root, event, pending ? "pending" : "observed");
27
27
  // Closure belongs to the live orchestrator. Stop only records/reconciles;
@@ -202,8 +202,11 @@ try {
202
202
  receipt = old?.schema_version === 1 && old.session_id === session && old.turn_id === turn ? old : { schema_version: 1, session_id: session, turn_id: turn, state: "pending", attempts: 0 };
203
203
  const transcriptPath = text(event.transcript_path) ?? text(receipt.event?.transcript_path);
204
204
  receipt.event = { hook_event_name: "Stop", cwd: root, session_id: session, turn_id: turn, transcript_path: transcriptPath, stop_hook_active: true };
205
- if (receipt.state === "persisted") { reply(); } else {
206
- receipt.attempts += 1; receipt.state = "pending"; await save(receiptPath, receipt);
205
+ const telemetryReplay = replay && !automatic && receipt.state === "persisted" &&
206
+ !["observed", "disabled"].includes(receipt.telemetry?.state);
207
+ if (receipt.state === "persisted" && !telemetryReplay) { reply(); } else {
208
+ const closurePersisted = receipt.state === "persisted";
209
+ if (!closurePersisted) { receipt.attempts += 1; receipt.state = "pending"; await save(receiptPath, receipt); }
207
210
  let status = null;
208
211
  for (const delay of automatic ? [0] : [0, 250, 750]) { if (delay) await new Promise(r => setTimeout(r, delay)); status = await terminal(transcriptPath); if (status) break; }
209
212
  if (!status) throw new Error("transcript_pending");
@@ -219,7 +222,7 @@ try {
219
222
  intake = parse(started.out);
220
223
  }
221
224
  const run = intake?.run?.run_id;
222
- if (automatic && receipt.run_id !== undefined && receipt.run_id !== run) throw new Error("recovery_run_mismatch");
225
+ if (receipt.run_id !== undefined && receipt.run_id !== run) throw new Error("recovery_run_mismatch");
223
226
  if (typeof run !== "string" || (intake.task !== null && typeof intake.task?.id !== "string")) throw new Error("start_pending");
224
227
  receipt.run_id = run; await save(receiptPath, receipt);
225
228
  const result = await call(cli, ["subagent", "reconcile-stop", "--session", session, "--turn", turn], transcriptPath);
@@ -246,15 +249,41 @@ try {
246
249
  throw new Error("owned_task_recoverable");
247
250
  }
248
251
  }
252
+ closureVerified = true; receipt.error = null;
253
+ if (!closurePersisted) {
254
+ receipt.state = "persisted"; receipt.persisted_at = new Date().toISOString(); receipt.error = null;
255
+ receipt.telemetry = { state: !trackingEnabled ? "disabled" : intake.task === null ? "unavailable" : "pending", error: null };
256
+ await save(receiptPath, receipt);
257
+ }
249
258
  if (intake.task !== null && trackingEnabled) {
259
+ receipt.telemetry = { state: "pending", error: null }; await save(receiptPath, receipt);
250
260
  const usage = await call(cli, ["run", "usage", run, "--disable-codex-raw"], transcriptPath);
251
- if (usage.code !== 0 || parse(usage.out) === null) throw new Error("telemetry_pending");
261
+ const collected = parse(usage.out);
262
+ if (usage.code !== 0 || collected === null || collected.run?.id !== run) {
263
+ receipt.telemetry = { state: "pending", error: "telemetry_pending" };
264
+ } else {
265
+ const coverage = collected.run.usage?.coverage;
266
+ const observed = [coverage?.tokens, coverage?.usd, coverage?.brl].some(value => Number.isSafeInteger(value) && value > 0);
267
+ receipt.telemetry = { state: observed ? "observed" : "unavailable", error: null };
268
+ }
269
+ await save(receiptPath, receipt);
270
+ } else if (closurePersisted) {
271
+ receipt.telemetry = { state: trackingEnabled ? "unavailable" : "disabled", error: null };
272
+ await save(receiptPath, receipt);
252
273
  }
253
- receipt.state = "persisted"; receipt.persisted_at = new Date().toISOString(); receipt.error = null;
254
- await save(receiptPath, receipt); reply();
274
+ reply();
255
275
  }
256
276
  } catch (error) {
257
- if (receipt && receiptPath) { receipt.state = "pending"; receipt.error = String(error.message ?? error); await save(receiptPath, receipt).catch(() => {}); }
277
+ if (receipt && receiptPath) {
278
+ if (receipt.state === "persisted" && !closureVerified) {
279
+ receipt.error = "replay_proof_failed:" + String(error.message ?? error);
280
+ } else if (receipt.state === "persisted") {
281
+ receipt.error = null;
282
+ if (!["observed", "disabled"].includes(receipt.telemetry?.state))
283
+ receipt.telemetry = { state: "pending", error: String(error.message ?? error) };
284
+ } else { receipt.state = "pending"; receipt.error = String(error.message ?? error); }
285
+ await save(receiptPath, receipt).catch(() => {});
286
+ }
258
287
  await note(String(error.message ?? error)).catch(() => {}); reply(true);
259
288
  } finally { if (lease) { await lease.close(); await unlink(receiptPath + ".lock").catch(() => {}); } }
260
289
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"codex-conversation-lifecycle-hook.js","sourceRoot":"","sources":["../../src/services/codex-conversation-lifecycle-hook.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmQ1D,CAAC"}
1
+ {"version":3,"file":"codex-conversation-lifecycle-hook.js","sourceRoot":"","sources":["../../src/services/codex-conversation-lifecycle-hook.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgS1D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"codex-pre-tool-hook-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-pre-tool-hook-template.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,QAknB/B,CAAC"}
1
+ {"version":3,"file":"codex-pre-tool-hook-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-pre-tool-hook-template.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,QAspB/B,CAAC"}
@@ -305,6 +305,41 @@ async function validateGitPublication(command) {
305
305
  }
306
306
  }
307
307
 
308
+ // These CLI values are data, never shell programs. Only one literal invocation of
309
+ // the canonical runtime qualifies; interpolation, pipelines and other scripts do not.
310
+ function executionPolicyCommand(command) {
311
+ const tokens = tokenizeLiteralCommand(command);
312
+ if (!tokens || !/^(?:.*[\\/])?node(?:\.exe)?$/i.test(tokens[0] ?? "") ||
313
+ resolve(event.cwd, tokens[1] ?? "") !== resolve(repositoryRoot, ".agents/runtime/bin/zaip.mjs") ||
314
+ tokens[2] !== "conversation" || tokens[3] !== "finish") return command;
315
+ const result = [...tokens];
316
+ for (let index = 4; index < result.length; index++) {
317
+ if (result[index] === "--summary" && index + 1 < result.length) result[++index] = "literal-summary";
318
+ else if (result[index].startsWith("--summary=")) result[index] = "--summary=literal-summary";
319
+ }
320
+ return result.map(token => JSON.stringify(token)).join(" ");
321
+ }
322
+
323
+ async function isCurrentRepositoryRead(command) {
324
+ const tokens = tokenizeLiteralCommand(command);
325
+ if (!tokens || !/^gh(?:\.exe)?$/i.test(tokens[0] ?? "")) return false;
326
+ const rest = [], repositories = [];
327
+ for (let index = 0; index < tokens.length; index++) {
328
+ const token = tokens[index];
329
+ if (token === "--repo" || token === "-R") repositories.push(tokens[++index]);
330
+ else if (token.startsWith("--repo=")) repositories.push(token.slice(7));
331
+ else if (token.startsWith("-R") && token.length > 2) repositories.push(token.slice(2));
332
+ else rest.push(token);
333
+ }
334
+ if (repositories.length !== 1 || !/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(repositories[0] ?? "") ||
335
+ rest.some(token => token.includes("'")) || !isLiteralReadSequence(rest.map(token => "'" + token + "'").join(" "))) return false;
336
+ try {
337
+ const origin = (await execute("git", ["remote", "get-url", "origin"], { cwd: repositoryRoot, encoding: "utf8", windowsHide: true })).stdout.trim();
338
+ const match = /^(?:git@github\.com:|https:\/\/github\.com\/|ssh:\/\/git@github\.com\/)([^/]+\/[^/]+?)\.git$|^(?:git@github\.com:|https:\/\/github\.com\/|ssh:\/\/git@github\.com\/)([^/]+\/[^/]+?)\/?$/.exec(origin);
339
+ return !!match && (match[1] ?? match[2]).toLowerCase() === repositories[0].toLowerCase();
340
+ } catch { return false; }
341
+ }
342
+
308
343
  function validateHashicorpRead(command) {
309
344
  const tokens = tokenizeLiteralCommand(command);
310
345
  if (!tokens || !/^(?:curl(?:\.exe)?|Invoke-WebRequest|Invoke-RestMethod|iwr|irm)$/i.test(tokens[0]))
@@ -612,14 +647,15 @@ else {
612
647
  ...await reviewedContextReadPaths(command, credentialReferencePattern, installedRoot), ...await (nativeAuthority?.reviewedValidationRuntimePaths?.(command, tokenizeLiteralCommand, repositoryRoot) ?? []),
613
648
  ];
614
649
  await validateExplicitFilesystemReferences(command, event.cwd, reviewedPaths);
615
- validateInlineExecution(command, deny);
616
- if (!isLiteralReadSequence(command)) {
617
- await validateGitPublication(command);
618
- await validateCloudRunner(command);
619
- validateDirectCloudProviderMutation(command);
620
- validateExplicitNetwork(command);
621
- await validateShellDeletion(command, event.cwd);
622
- checkDestructivePatterns(command, destructivePatterns, deny);
650
+ const policyCommand = executionPolicyCommand(command);
651
+ validateInlineExecution(policyCommand, deny);
652
+ if (!isLiteralReadSequence(policyCommand) && !await isCurrentRepositoryRead(policyCommand)) {
653
+ await validateGitPublication(policyCommand);
654
+ await validateCloudRunner(policyCommand);
655
+ validateDirectCloudProviderMutation(policyCommand);
656
+ validateExplicitNetwork(policyCommand);
657
+ await validateShellDeletion(policyCommand, event.cwd);
658
+ checkDestructivePatterns(policyCommand, destructivePatterns, deny);
623
659
  }
624
660
  try { const updated = await captureCliTurn(repositoryRoot, event, command); if (updated) writeSync(1, JSON.stringify(rewriteCliInput(toolInput, updated, commandFromCmd)) + "\n"); }
625
661
  catch (error) { deny(error.message); }
@@ -1 +1 @@
1
- {"version":3,"file":"codex-pre-tool-hook-template.js","sourceRoot":"","sources":["../../src/services/codex-pre-tool-hook-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAEjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6W3C,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqQ5B,CAAC"}
1
+ {"version":3,"file":"codex-pre-tool-hook-template.js","sourceRoot":"","sources":["../../src/services/codex-pre-tool-hook-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAEjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgZ3C,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsQ5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/cli",
3
- "version": "5.3.0",
3
+ "version": "5.5.0",
4
4
  "description": "CLI oficial para instalar e configurar o ZAIP-AIOS em qualquer repositório",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -6,6 +6,18 @@ English | [Português](README.md)
6
6
 
7
7
  ## Quick overview
8
8
 
9
+ The [v5.5 guide](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v55-eficiencia-operacional.md) describes evidence
10
+ obligations exposed at intake, direct replay of completed lifecycle closure,
11
+ bounded journal segments, and impact-based test selection. Timing diagnostics
12
+ do not invalidate the cache; actual changes still do. Native hook evidence
13
+ limitations are reported separately.
14
+
15
+ The [v5.4 guide](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v54-fechamento-cache-hooks.md) describes restricted
16
+ administrative closure after publication, the distinction between text and commands
17
+ in hooks, GitHub queries targeting the current repository, and objective acceptance
18
+ criteria. Partial evidence and historical outcomes remain visible; tests are rerun
19
+ when a change or finding invalidates the corresponding proof.
20
+
9
21
  The [rework prevention guide](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v51-eficiencia-e-publicacao.md)
10
22
  documents complete checks before finalization, bounded Run reads, conservative
11
23
  test reuse, content-based Dashboard builds and separate npm confirmation.
@@ -6,6 +6,18 @@
6
6
 
7
7
  ## Visão rápida
8
8
 
9
+ O [guia da v5.5](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v55-eficiencia-operacional.md) descreve as obrigações
10
+ de prova apresentadas no início da entrega, o replay direto de fechamento já
11
+ concluído, os segmentos limitados dos journals e a seleção de testes por impacto.
12
+ Medições de tempo não invalidam o cache; alterações reais continuam invalidando.
13
+ Os limites da prova nativa dos hooks são apresentados separadamente.
14
+
15
+ O [guia da v5.4](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v54-fechamento-cache-hooks.md) descreve o fechamento
16
+ administrativo restrito após publicação, a distinção entre texto e comandos nos
17
+ hooks, consultas GitHub ao repositório atual e os critérios objetivos de aceite.
18
+ Evidências parciais e estados históricos permanecem visíveis; testes são repetidos
19
+ quando uma mudança ou finding invalida a prova correspondente.
20
+
9
21
  O [guia de prevenção de retrabalho](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v51-eficiencia-e-publicacao.md)
10
22
  documenta o pré-check completo antes da finalização, as leituras limitadas de Runs,
11
23
  o reuso conservador de testes, o build do Dashboard por conteúdo e a confirmação
@@ -1,5 +1,5 @@
1
1
  {
2
- "_zaip_managed": "zaip-managed generated-do-not-edit source=agent-discovery version=5.3.0 sha256=3def7a2b43c1a751f8e68754ef94cb107a80b5d26e11f065af2b4cc145fc8897",
2
+ "_zaip_managed": "zaip-managed generated-do-not-edit source=agent-discovery version=5.5.0 sha256=3def7a2b43c1a751f8e68754ef94cb107a80b5d26e11f065af2b4cc145fc8897",
3
3
  "schema_version": 1,
4
4
  "source": {
5
5
  "path": ".agents/config/agents/catalog.yaml",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.3.0",
3
+ "version": "5.5.0",
4
4
  "files": [
5
5
  {
6
6
  "path": "DATA-DICTIONARY.md",
@@ -15,28 +15,28 @@
15
15
  "sha256": "d0366ee0d847fe681de0971a14c80ee3a6af1430c0e9c5eb4f84f14a4b734b82"
16
16
  },
17
17
  {
18
- "path": "apps/frontend/dist/assets/DashboardHelpDialog-DRI_XwUf.css",
19
- "sha256": "95dbb5c26ad73831f36f2a51d5e08ef5eee7ca85190764a3e63bf1e700fbadf8"
18
+ "path": "apps/frontend/dist/assets/DashboardHelpDialog-Crv8oLKH.js",
19
+ "sha256": "7659e8de0884a357f0ea31474a41bba0067a69ec88c2ad20c852f68da67da731"
20
20
  },
21
21
  {
22
- "path": "apps/frontend/dist/assets/DashboardHelpDialog-URSe1IiF.js",
23
- "sha256": "839426eba580dadf4aa997cf8640a8dcbae1d5a15c6299b2baa8c9cd0e1ffb55"
22
+ "path": "apps/frontend/dist/assets/DashboardHelpDialog-DRI_XwUf.css",
23
+ "sha256": "95dbb5c26ad73831f36f2a51d5e08ef5eee7ca85190764a3e63bf1e700fbadf8"
24
24
  },
25
25
  {
26
- "path": "apps/frontend/dist/assets/PricingSettingsDialog-8znf56to.js",
27
- "sha256": "3309d87f8a4aa0034170c055d852701f803f03a530fc93b74e87f082652cae34"
26
+ "path": "apps/frontend/dist/assets/PricingSettingsDialog-De3_oOUB.js",
27
+ "sha256": "386c55a54cfdf937ca0d99164c7f62e7d2a36aa3b30b29df00b24bd276b1b8e1"
28
28
  },
29
29
  {
30
30
  "path": "apps/frontend/dist/assets/ProjectSettingsPage-CQMhvzvJ.css",
31
31
  "sha256": "10e875c4e3ab6c252983822e25a85db3d707d903c0fcf39812909fdd1d013f48"
32
32
  },
33
33
  {
34
- "path": "apps/frontend/dist/assets/ProjectSettingsPage-O68yx0KF.js",
35
- "sha256": "4d5a48c85607228dafcb6e59686b381e5074a70dcba3d0e7dcea902b7418dcea"
34
+ "path": "apps/frontend/dist/assets/ProjectSettingsPage-HNZfT9Xo.js",
35
+ "sha256": "13172e64f534881f70b8a62d70c34caaa6fb175c3a8754e441efe3d32946bc9f"
36
36
  },
37
37
  {
38
- "path": "apps/frontend/dist/assets/TraceabilityWorkspace-DlYlyBhz.js",
39
- "sha256": "cca017f263ac8f67ab7bc6cc1517203ba0d4cdda87c0f30e032465967fe8c90a"
38
+ "path": "apps/frontend/dist/assets/TraceabilityWorkspace-D4tioTQ5.js",
39
+ "sha256": "c5c0adfde02160404f6ff15b28f2ee13d9cad59c7b341e734ef2a1c0a8ca87de"
40
40
  },
41
41
  {
42
42
  "path": "apps/frontend/dist/assets/TraceabilityWorkspace-DvvavDLY.css",
@@ -51,21 +51,21 @@
51
51
  "sha256": "90be9550e3b6719ffc7a029ac35a93a4f14e95263b3996ad6c06dbfc0490f307"
52
52
  },
53
53
  {
54
- "path": "apps/frontend/dist/assets/dashboard-localization-DhvlkPf2.js",
55
- "sha256": "928fab618d343a17e2a48dc25787d90999428ed9e20a928b7ca445900c771929"
54
+ "path": "apps/frontend/dist/assets/dashboard-localization-BbNU69xZ.js",
55
+ "sha256": "a4a3bcd640bc3f79bd4320a87031a33b8d74c4a4ed2183ba0ba6a0f97f77c437"
56
56
  },
57
57
  {
58
58
  "path": "apps/frontend/dist/assets/icons-vendor-CjGGux6h.js",
59
59
  "sha256": "0f615bc6eaeb21d12fc0457867d6acbfe9434ebae0ebecea9444262e46b972e9"
60
60
  },
61
- {
62
- "path": "apps/frontend/dist/assets/index-CWcci-bM.js",
63
- "sha256": "dae6c3d18ea8c53c0501ff562d1ce56cd90ef377ace20e06546c1ba5db7e50d1"
64
- },
65
61
  {
66
62
  "path": "apps/frontend/dist/assets/index-DZhppOIk.css",
67
63
  "sha256": "cd290085a95d9108f11e94406b2253bfd2109e116d5d7e82460a2f4aecdaba04"
68
64
  },
65
+ {
66
+ "path": "apps/frontend/dist/assets/index-oqGtXP7j.js",
67
+ "sha256": "6fba043547a996582931e1bbf265fe096ec141008e4efe87a3d2305da3984117"
68
+ },
69
69
  {
70
70
  "path": "apps/frontend/dist/assets/logo_novo_azul-BBx5pA2B.png",
71
71
  "sha256": "bb6043bda9fc53a111aaea4d6a004559b9ce8a3569691c060d217a7c6aafa0ae"
@@ -92,7 +92,7 @@
92
92
  },
93
93
  {
94
94
  "path": "apps/frontend/dist/index.html",
95
- "sha256": "6b554d2f868e2b7ef4c4ca24137c57df3f5edb2207a9655cc0e9c5f574faf4a5"
95
+ "sha256": "b89b431b8e411962f04efce2290d37c2c6d5b68b3c90d5d70ec54b6c1469ba8c"
96
96
  },
97
97
  {
98
98
  "path": "apps/frontend/dist/logo_novo_azul.png",
@@ -104,7 +104,7 @@
104
104
  },
105
105
  {
106
106
  "path": "apps/frontend/package.json",
107
- "sha256": "09c4ae40f98fc648c919cf4ec85767ef0263c2f5d821fe3359f1795d1f2ef2fa"
107
+ "sha256": "ca27f6ad95fbf44fef4aa177061c309bd2cd6bc8fafc58140cefc5693d0457f6"
108
108
  },
109
109
  {
110
110
  "path": "apps/frontend/playwright.dom.config.ts",
@@ -600,7 +600,7 @@
600
600
  },
601
601
  {
602
602
  "path": "modules/cost-monitor/package.json",
603
- "sha256": "a18b9f7706294b6085a643ccfb81dc8d818203126afa865770157eeff5569545"
603
+ "sha256": "f8c7d71e3eec1be18387a0d86ce280cab1f81060ae0bd0168289a7a4b16c3e73"
604
604
  },
605
605
  {
606
606
  "path": "modules/cost-monitor/src/agent-groups.test.ts",
@@ -1012,7 +1012,7 @@
1012
1012
  },
1013
1013
  {
1014
1014
  "path": "modules/operations/package.json",
1015
- "sha256": "cb0be833f380084e2efc8274ea2c0ba0bd96c5742bfce4aa1dcddb9c0077b2d9"
1015
+ "sha256": "3cc06ed175ef335e50163416f30a9f84e536c3c1c4257ca8011a4b87d5ecb6c7"
1016
1016
  },
1017
1017
  {
1018
1018
  "path": "modules/operations/src/contracts.ts",
@@ -1752,7 +1752,7 @@
1752
1752
  },
1753
1753
  {
1754
1754
  "path": "modules/traceability/package.json",
1755
- "sha256": "39f3060fdedb8bacd0df9c43d47882978af6b32eab0f060281b1a6bb194c9060"
1755
+ "sha256": "291dea5ec338dc2f950aed2d1d1d22e082393b68322a38a979697cf784a2b3e8"
1756
1756
  },
1757
1757
  {
1758
1758
  "path": "modules/traceability/src/contracts.ts",
@@ -1824,7 +1824,7 @@
1824
1824
  },
1825
1825
  {
1826
1826
  "path": "packages/branding/package.json",
1827
- "sha256": "b46a065fab82a98fd0493e33e3a074172c8a1347647f146410abed7ee47b4011"
1827
+ "sha256": "f72991e92473a700cae46fbe835dc63c15d3542c37f4510aebfbdce1111df6d7"
1828
1828
  },
1829
1829
  {
1830
1830
  "path": "packages/branding/src/index.ts",
@@ -1836,7 +1836,7 @@
1836
1836
  },
1837
1837
  {
1838
1838
  "path": "packages/contracts/package.json",
1839
- "sha256": "f2ec95706dfff6ee17fb347208ac0079bb8f18f0251274fb5a4c630856b85e7b"
1839
+ "sha256": "6af0748d267fe678ddbb2ab5e77ce7690a64bec096a8a03dfc5071d4a404b79a"
1840
1840
  },
1841
1841
  {
1842
1842
  "path": "packages/contracts/src/export.ts",
@@ -1856,7 +1856,7 @@
1856
1856
  },
1857
1857
  {
1858
1858
  "path": "packages/data-export/package.json",
1859
- "sha256": "76485695a42a02fd16ded2f74650da2206c48fa8b0f84736c682eb6ea4e9d375"
1859
+ "sha256": "1a2f264860d1e1b05ee3dbcc5a5032e3bc77be201c1c74e85f8b47829e26246a"
1860
1860
  },
1861
1861
  {
1862
1862
  "path": "packages/data-export/src/index.test.ts",
@@ -1904,15 +1904,15 @@
1904
1904
  },
1905
1905
  {
1906
1906
  "path": "packages/local-runtime/dist/server.cjs",
1907
- "sha256": "ac2b1c9b95fa21bd652f065f435ed48caff813e1104d88619b763488f0181d0e"
1907
+ "sha256": "22709ef1a33a7825cf8d8f935d199260f6ec7e3aa5502c24e85d470020f7b3c8"
1908
1908
  },
1909
1909
  {
1910
1910
  "path": "packages/local-runtime/dist/sqlite-read-model.cjs",
1911
- "sha256": "76d6bbfa4712f1bfb22faf0bd83886db06fbcdc3efae913e7988c832b77a86a0"
1911
+ "sha256": "5fb0cc294ea54ebce6caae15a56dd729d4383e00a0d3d7254e5fb56a1c568328"
1912
1912
  },
1913
1913
  {
1914
1914
  "path": "packages/local-runtime/package.json",
1915
- "sha256": "e2f62b92c1558b019db6ebe32e3b2e9af4602580a9ff127c5cc1c1e379e4ca6d"
1915
+ "sha256": "49c2f69495f0526ed894420b1c3c1d271172c50f32eeff37e2f0a35ee2a0023f"
1916
1916
  },
1917
1917
  {
1918
1918
  "path": "packages/local-runtime/scripts/build-frontend.mjs",
@@ -1968,7 +1968,7 @@
1968
1968
  },
1969
1969
  {
1970
1970
  "path": "packages/local-runtime/server.mjs",
1971
- "sha256": "24ebd186494f1fb672b904b31768dfa1f6f199e868fd102d9dfb0cd197d0ad59"
1971
+ "sha256": "dff0c37a4caff4709256f35f3f993eefbf01b2087688bcf81797bb026766ee73"
1972
1972
  },
1973
1973
  {
1974
1974
  "path": "packages/local-runtime/src/active-capture-failure.test.ts",
@@ -2848,7 +2848,7 @@
2848
2848
  },
2849
2849
  {
2850
2850
  "path": "packages/ui/package.json",
2851
- "sha256": "0c4a43ada2d7c8b8df32830d5b5df9931e0c5fa7eea542023228f131a7927a57"
2851
+ "sha256": "ae40db63972e48f5fe95a7a23383d6acd0299561d27afa2acf48753c4194b557"
2852
2852
  },
2853
2853
  {
2854
2854
  "path": "packages/ui/src/DashboardHeader.test.mjs",
@@ -2956,7 +2956,7 @@
2956
2956
  },
2957
2957
  {
2958
2958
  "path": "tests/e2e/package.json",
2959
- "sha256": "47be21a7c7b045005cc67ac032cb66b879536c2a7ed957ce379e80e342a5e67e"
2959
+ "sha256": "72485ec4b52ced94fafef3b3f0f3d8894415c0c1f6cdf629c89ceb74c431cd0f"
2960
2960
  },
2961
2961
  {
2962
2962
  "path": "tests/e2e/playwright.config.ts",
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-B0Jwz_rk.js";import{t as r}from"./dashboard-localization-DhvlkPf2.js";var i=`# Primeiros passos
1
+ import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-B0Jwz_rk.js";import{t as r}from"./dashboard-localization-BbNU69xZ.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.
@@ -2343,6 +2343,18 @@ matriz de performance aprovada apenas porque consultas focadas passaram.
2343
2343
 
2344
2344
  ## Visão rápida
2345
2345
 
2346
+ O [guia da v5.5](docs/quality/v55-eficiencia-operacional.md) descreve as obrigações
2347
+ de prova apresentadas no início da entrega, o replay direto de fechamento já
2348
+ concluído, os segmentos limitados dos journals e a seleção de testes por impacto.
2349
+ Medições de tempo não invalidam o cache; alterações reais continuam invalidando.
2350
+ Os limites da prova nativa dos hooks são apresentados separadamente.
2351
+
2352
+ O [guia da v5.4](docs/quality/v54-fechamento-cache-hooks.md) descreve o fechamento
2353
+ administrativo restrito após publicação, a distinção entre texto e comandos nos
2354
+ hooks, consultas GitHub ao repositório atual e os critérios objetivos de aceite.
2355
+ Evidências parciais e estados históricos permanecem visíveis; testes são repetidos
2356
+ quando uma mudança ou finding invalida a prova correspondente.
2357
+
2346
2358
  O [guia de prevenção de retrabalho](docs/quality/v51-eficiencia-e-publicacao.md)
2347
2359
  documenta o pré-check completo antes da finalização, as leituras limitadas de Runs,
2348
2360
  o reuso conservador de testes, o build do Dashboard por conteúdo e a confirmação
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-B0Jwz_rk.js";import{n as r}from"./dashboard-localization-DhvlkPf2.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
+ import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{E as t,w as n}from"./cost-monitor-B0Jwz_rk.js";import{n as r}from"./dashboard-localization-BbNU69xZ.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};