@zaip-ai/cli 3.5.0 → 3.7.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 (90) 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 -6
  5. package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
  6. package/dist/services/stack-install.d.ts.map +1 -1
  7. package/dist/services/stack-install.js +19 -9
  8. package/dist/services/stack-install.js.map +1 -1
  9. package/dist/services/stack-node.d.ts.map +1 -1
  10. package/dist/services/stack-node.js +1 -1
  11. package/dist/services/stack-node.js.map +1 -1
  12. package/package.json +1 -1
  13. package/templates/.agents/config/agents/discovery.json +1 -1
  14. package/templates/.agents/dashboard/.zaip-managed.json +47 -43
  15. package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-DRI_XwUf.css +1 -0
  16. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-OulA4CoX.js +3 -0
  17. package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-BKBpJyLh.js → TraceabilityWorkspace-Ckxk_izu.js} +1 -1
  18. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-CqfSgtk9.js +2 -0
  19. package/templates/.agents/dashboard/apps/frontend/dist/assets/{index-CxrG_wRI.css → index-OBJXZOwe.css} +1 -1
  20. package/templates/.agents/dashboard/apps/frontend/dist/index.html +2 -2
  21. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  22. package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +0 -2
  23. package/templates/.agents/dashboard/apps/frontend/src/DashboardGlobalSettings.tsx +7 -0
  24. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsCard.tsx +15 -2
  25. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +1 -1
  26. package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.css +1 -1
  27. package/templates/.agents/dashboard/apps/frontend/src/dashboard-help-dialog.css +2 -2
  28. package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.ts +4 -1
  29. package/templates/.agents/dashboard/apps/frontend/src/operations-period-contract.test.ts +20 -9
  30. package/templates/.agents/dashboard/apps/frontend/src/pricing-settings-dialog.css +5 -5
  31. package/templates/.agents/dashboard/apps/frontend/src/use-app-work-board.test.ts +1 -1
  32. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  33. package/templates/.agents/dashboard/modules/operations/package.json +1 -1
  34. package/templates/.agents/dashboard/modules/operations/src/react/OperationsEntityFilters.tsx +1 -1
  35. package/templates/.agents/dashboard/modules/operations/src/react/PagedWorkList.tsx +2 -2
  36. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  37. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  38. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  39. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  40. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +122 -122
  41. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +2 -2
  42. package/templates/.agents/dashboard/packages/local-runtime/package.json +2 -2
  43. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +124 -124
  44. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +3 -3
  45. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts +2 -2
  46. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-filter-matrix.test.ts +1 -1
  47. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-pricing-provenance.test.ts +49 -13
  48. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  49. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  50. package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +4 -6
  51. package/templates/.agents/dashboard/tests/e2e/specs/work-board-hydration.ts +38 -0
  52. package/templates/.agents/design/.zaip-managed.json +11 -7
  53. package/templates/.agents/design/apps/catalog/dist/assets/index-Cv4VfxTQ.js +72 -0
  54. package/templates/.agents/design/apps/catalog/dist/index.html +1 -1
  55. package/templates/.agents/design/apps/catalog/package.json +2 -2
  56. package/templates/.agents/design/apps/catalog/src/components/DashboardFiltersSpecimen.tsx +26 -21
  57. package/templates/.agents/design/apps/catalog/src/components/StackVersionFieldSpecimen.tsx +1 -5
  58. package/templates/.agents/design/apps/catalog/src/styles/stack-version-field.css +75 -13
  59. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  60. package/templates/.agents/requirements/autonomous-assurance.md +1 -1
  61. package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
  62. package/templates/.agents/requirements/comparative-audit.md +1 -1
  63. package/templates/.agents/requirements/context-engine.md +1 -1
  64. package/templates/.agents/requirements/cost-observability.md +1 -1
  65. package/templates/.agents/requirements/dashboard-launch.md +1 -1
  66. package/templates/.agents/requirements/data-export.md +1 -1
  67. package/templates/.agents/requirements/design-system.md +1 -1
  68. package/templates/.agents/requirements/execution-engine.md +1 -1
  69. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  70. package/templates/.agents/requirements/model-orchestration.md +1 -1
  71. package/templates/.agents/requirements/public-distribution.md +1 -1
  72. package/templates/.agents/requirements/software-architecture.md +1 -1
  73. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  74. package/templates/.agents/requirements/work-lifecycle.md +1 -1
  75. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  76. package/templates/.agents/runtime/VERSION +1 -1
  77. package/templates/.agents/runtime/bin/zaip.mjs +58 -27
  78. package/templates/.agents/runtime/checksums.sha256 +6 -6
  79. package/templates/.agents/runtime/manifest.json +1 -1
  80. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
  81. package/templates/.agents/runtime/provenance.json +5 -5
  82. package/templates/.agents/runtime/sbom.cdx.json +144 -162
  83. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +1 -0
  84. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +3 -1
  85. package/templates/.agents/zaip-aios/VERSION +1 -1
  86. package/templates/template-manifest.json +89 -81
  87. package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-Je5nK-Et.css +0 -1
  88. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-D46WWIKr.js +0 -3
  89. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-Bas2TVju.js +0 -2
  90. /package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-CCMVnkkI.js → DashboardHelpDialog-BDQR0U4a.js} +0 -0
@@ -230,10 +230,10 @@ describe("project settings persistence", () => {
230
230
  autocannon: { name: "autocannon", version: "" },
231
231
  future_tool: { enabled: true },
232
232
  });
233
- await expect(filesystem.readText(SOFTWARE_ARCHITECTURE_PATH)).resolves.toContain("| Coleta de métricas | Prometheus | 3.6.0 | docker:prom/prometheus |");
234
- await expect(filesystem.readText(SOFTWARE_ARCHITECTURE_PATH)).resolves.toContain("| Responsabilidade | Tecnologia | Versão atual / referência | Pacote / imagem / serviço |");
233
+ const architecture = await filesystem.readText(SOFTWARE_ARCHITECTURE_PATH);
234
+ expect(architecture).toContain("Prometheus | 3.6.0 | docker:prom/prometheus");
235
+ expect(architecture).toContain("Tecnologia | Versão atual / referência | Pacote");
235
236
  });
236
-
237
237
  it("rejects invalid settings before touching the project file", async () => {
238
238
  const { configPath, filesystem } = await fixtureProject();
239
239
  const original = await readFile(configPath, "utf8");
@@ -1,10 +1,10 @@
1
+ import { execFile } from "node:child_process";
1
2
  import { EventEmitter } from "node:events";
2
3
  import { copyFile, mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
3
- import { execFile } from "node:child_process";
4
- import { promisify } from "node:util";
5
4
  import { tmpdir } from "node:os";
6
5
  import { join, resolve } from "node:path";
7
6
  import { DatabaseSync } from "node:sqlite";
7
+ import { promisify } from "node:util";
8
8
  import { describe, expect, it, vi } from "vitest";
9
9
  import {
10
10
  attachRefreshWorkerCleanup,
@@ -1,8 +1,8 @@
1
1
  import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
2
2
  import { join, resolve } from "node:path";
3
3
  import { expect, it } from "vitest";
4
- import { prepareMultiProviderFixture } from "./sqlite-read-model-multi-provider-fixture.js";
5
4
  import { rebuildSqliteReadModel, SqliteReadModelFileSystem } from "./sqlite-read-model.js";
5
+ import { prepareMultiProviderFixture } from "./sqlite-read-model-multi-provider-fixture.js";
6
6
 
7
7
  it.each([
8
8
  "draft",
@@ -5,28 +5,58 @@ describe("SQLite pricing provenance", () => {
5
5
  it("retains catalog provenance when cache-write telemetry keeps a token estimate unavailable", () => {
6
6
  const audit = usagePricingAudit(
7
7
  {
8
- model: "gpt-a", provider: "openai", runtime: { service_tier: null },
9
- tokens: { input: 10, cached_input: 0, cache_write_input: null, output: 5, reasoning: 0, total: 15 },
8
+ model: "gpt-a",
9
+ provider: "openai",
10
+ runtime: { service_tier: null },
11
+ tokens: {
12
+ input: 10,
13
+ cached_input: 0,
14
+ cache_write_input: null,
15
+ output: 5,
16
+ reasoning: 0,
17
+ total: 15,
18
+ },
10
19
  cost: { usd: null, brl: null, fx_rate: null },
11
20
  } as never,
12
21
  { run: { model: "gpt-a", client: "codex" } } as never,
13
- { updated_at: "2026-08-04T00:00:00.000Z", models: [{
14
- id: "gpt-a", provider: "openai", aliases: [], input_per_million_usd: 2,
15
- cached_input_per_million_usd: 0.2, cache_write_input_per_million_usd: 3,
16
- output_per_million_usd: 8, reasoning_per_million_usd: 8, reasoning_billed_separately: false,
17
- long_context_threshold_tokens: null, long_context_input_multiplier: 1,
18
- long_context_output_multiplier: 1, source_label: "fixture-openai",
19
- source_url: "https://example.test/openai", notes: [],
20
- }] } as never,
22
+ {
23
+ updated_at: "2026-08-04T00:00:00.000Z",
24
+ models: [
25
+ {
26
+ id: "gpt-a",
27
+ provider: "openai",
28
+ aliases: [],
29
+ input_per_million_usd: 2,
30
+ cached_input_per_million_usd: 0.2,
31
+ cache_write_input_per_million_usd: 3,
32
+ output_per_million_usd: 8,
33
+ reasoning_per_million_usd: 8,
34
+ reasoning_billed_separately: false,
35
+ long_context_threshold_tokens: null,
36
+ long_context_input_multiplier: 1,
37
+ long_context_output_multiplier: 1,
38
+ source_label: "fixture-openai",
39
+ source_url: "https://example.test/openai",
40
+ notes: [],
41
+ },
42
+ ],
43
+ } as never,
21
44
  null,
22
45
  );
23
- expect(audit).toMatchObject({ calculatedUsd: null, effectiveUsd: null, pricingModel: "gpt-a", pricingSource: "fixture-openai" });
46
+ expect(audit).toMatchObject({
47
+ calculatedUsd: null,
48
+ effectiveUsd: null,
49
+ pricingModel: "gpt-a",
50
+ pricingSource: "fixture-openai",
51
+ });
24
52
  });
25
53
 
26
54
  it("keeps a recorded cost authoritative when no token calculation is available", () => {
27
55
  const audit = usagePricingAudit(
28
56
  {
29
- model: "provider-only-model", provider: "openai", runtime: { service_tier: null },
57
+ model: "provider-only-model",
58
+ provider: "openai",
59
+ runtime: { service_tier: null },
30
60
  tokens: { input: 10, cached_input: 0, output: 5, reasoning: 0, total: 15 },
31
61
  cost: { usd: 0.012, brl: 0.06, fx_rate: 5 },
32
62
  } as never,
@@ -34,6 +64,12 @@ describe("SQLite pricing provenance", () => {
34
64
  { updated_at: "2026-08-04T00:00:00.000Z", models: [] } as never,
35
65
  null,
36
66
  );
37
- expect(audit).toMatchObject({ calculatedUsd: null, recordedUsd: 0.012, effectiveUsd: 0.012, effectiveBrl: 0.06, pricingModel: null });
67
+ expect(audit).toMatchObject({
68
+ calculatedUsd: null,
69
+ recordedUsd: 0.012,
70
+ effectiveUsd: 0.012,
71
+ effectiveBrl: 0.06,
72
+ pricingModel: null,
73
+ });
38
74
  });
39
75
  });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/dashboard-ui",
3
- "version": "3.5.0",
3
+ "version": "3.7.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/dashboard-e2e",
3
- "version": "3.5.0",
3
+ "version": "3.7.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,5 +1,6 @@
1
1
  import { AxeBuilder } from "@axe-core/playwright";
2
2
  import { expect, type Locator, test } from "@playwright/test";
3
+ import { selectWorkBoardType } from "./work-board-hydration.js";
3
4
 
4
5
  declare global {
5
6
  interface Window {
@@ -431,16 +432,14 @@ test("filters the all-work board into Tasks, SPECs and PRDs after hydration", as
431
432
  await expect(board.locator(".operations-task-card").first()).toBeVisible();
432
433
  const allItemCount = await boardItemCount(board);
433
434
 
434
- await page.getByRole("button", { exact: true, name: "Tarefas" }).click();
435
- await expect(page.getByRole("button", { exact: true, name: "Tarefas" })).toHaveClass("is-active");
435
+ await selectWorkBoardType(page, "Tarefas", "task");
436
436
  await expect(
437
437
  board.locator(".operations-work-kind.is-spec, .operations-work-kind.is-prd"),
438
438
  ).toHaveCount(0);
439
439
  const taskItemCount = await boardItemCount(board);
440
440
  expect(allItemCount).toBeGreaterThan(taskItemCount);
441
441
 
442
- await page.getByRole("button", { exact: true, name: "SPECs" }).click();
443
- await expect(page.getByRole("button", { exact: true, name: "SPECs" })).toHaveClass("is-active");
442
+ await selectWorkBoardType(page, "SPECs", "spec");
444
443
  await expect(
445
444
  board.locator(".operations-work-kind.is-task, .operations-work-kind.is-prd"),
446
445
  ).toHaveCount(0);
@@ -462,8 +461,7 @@ test("filters the all-work board into Tasks, SPECs and PRDs after hydration", as
462
461
  await page.getByRole("button", { name: "Fechar" }).click();
463
462
  }
464
463
 
465
- await page.getByRole("button", { exact: true, name: "PRDs" }).click();
466
- await expect(page.getByRole("button", { exact: true, name: "PRDs" })).toHaveClass("is-active");
464
+ await selectWorkBoardType(page, "PRDs", "prd");
467
465
  await expect(
468
466
  board.locator(".operations-work-kind.is-task, .operations-work-kind.is-spec"),
469
467
  ).toHaveCount(0);
@@ -0,0 +1,38 @@
1
+ import { expect, type Page } from "@playwright/test";
2
+
3
+ const workBoardStages = [
4
+ "definition",
5
+ "planning",
6
+ "ready",
7
+ "executing",
8
+ "verifying",
9
+ "completed",
10
+ "blocked",
11
+ "cancelled",
12
+ "failed",
13
+ ] as const;
14
+
15
+ export async function selectWorkBoardType(
16
+ page: Page,
17
+ name: "Tarefas" | "SPECs" | "PRDs",
18
+ kind: "task" | "spec" | "prd",
19
+ ) {
20
+ const hydrated = Promise.all(
21
+ workBoardStages.map((stage) =>
22
+ page.waitForResponse((response) => {
23
+ if (response.status() !== 200 || !response.url().includes("/api/v2/operations"))
24
+ return false;
25
+ const url = new URL(response.url());
26
+ return (
27
+ url.searchParams.get("scope") === "board" &&
28
+ url.searchParams.get("stage") === stage &&
29
+ url.searchParams.get("kind") === kind
30
+ );
31
+ }),
32
+ ),
33
+ );
34
+ const button = page.getByRole("button", { exact: true, name });
35
+ await button.click();
36
+ await hydrated;
37
+ await expect(button).toHaveClass("is-active");
38
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "3.5.0",
3
+ "version": "3.7.0",
4
4
  "files": [
5
5
  {
6
6
  "path": "DESIGN.md",
@@ -30,6 +30,10 @@
30
30
  "path": "apps/catalog/dist/assets/index-BP8IxOxt.js",
31
31
  "sha256": "972731afbaa1a1de2666477d46df0f7af55bfe698cb74bae919bac2718e1fbc8"
32
32
  },
33
+ {
34
+ "path": "apps/catalog/dist/assets/index-Cv4VfxTQ.js",
35
+ "sha256": "0215084cba214b6f8d0d74c2f87b8236cae05c9dad74d02bc0a031e821deb04c"
36
+ },
33
37
  {
34
38
  "path": "apps/catalog/dist/assets/index-D1JaPXfV.css",
35
39
  "sha256": "0f40951c8f46f8c4c9fbbd70f18a62599c874132d11987dcf8f53371e86f45f7"
@@ -48,7 +52,7 @@
48
52
  },
49
53
  {
50
54
  "path": "apps/catalog/dist/index.html",
51
- "sha256": "8197e028e35d669810c6f34d8532894dd6d4eb05bb895bb69baf2d120314615c"
55
+ "sha256": "b24dd9cb3ef96cdce86f699b4aa7b0f9e09545f345fe71375bd61a7abd8e11d0"
52
56
  },
53
57
  {
54
58
  "path": "apps/catalog/dist/logo_novo_azul.png",
@@ -264,7 +268,7 @@
264
268
  },
265
269
  {
266
270
  "path": "apps/catalog/package.json",
267
- "sha256": "8763a2ee38e7e07bb7eca42d9fa08551b53a73ab98e10975dca4d7ea7c85bda0"
271
+ "sha256": "f4d2ac3534f71804efd488221c5a08d7e33584b86774e67f720ef0cd6e1762e9"
268
272
  },
269
273
  {
270
274
  "path": "apps/catalog/public/logo_novo_azul.png",
@@ -292,7 +296,7 @@
292
296
  },
293
297
  {
294
298
  "path": "apps/catalog/src/components/DashboardFiltersSpecimen.tsx",
295
- "sha256": "c0dfa12f1ad8017226b7b012beb6fe65a2b968316e1dad3a79487759a83fe1e2"
299
+ "sha256": "97824a7e2a4d7b93330dd7d688fec6e4f734a3b32ee48793d67c130462eef1e9"
296
300
  },
297
301
  {
298
302
  "path": "apps/catalog/src/components/EstimatedCostSpecimen.tsx",
@@ -308,7 +312,7 @@
308
312
  },
309
313
  {
310
314
  "path": "apps/catalog/src/components/StackVersionFieldSpecimen.tsx",
311
- "sha256": "433b11299f84c9ebd0f84ec9030a896d078db0bb9ca0242707c513cd9a6bbbc1"
315
+ "sha256": "b33c5f2d78c34f8b2484be09d50244b8d67f1ce38d958c06306ecd742895284b"
312
316
  },
313
317
  {
314
318
  "path": "apps/catalog/src/components/WorkspaceStatusSpecimen.tsx",
@@ -372,7 +376,7 @@
372
376
  },
373
377
  {
374
378
  "path": "apps/catalog/src/styles/stack-version-field.css",
375
- "sha256": "c11be815df1506745e2ae9a6e20734e28c06a4b0bbcaff0fedb24fe2140a9940"
379
+ "sha256": "9164f506efbc0d5fee9da7a97e2e1af3940c5c656632057601e7168e40868c7c"
376
380
  },
377
381
  {
378
382
  "path": "apps/catalog/tsconfig.json",
@@ -388,7 +392,7 @@
388
392
  },
389
393
  {
390
394
  "path": "packages/local-runtime/package.json",
391
- "sha256": "a8e7d95af78d7ea7515701c025ad824554083d7fb59b962090d2f83ae8d28f42"
395
+ "sha256": "520dc202ebc57a431905b80f93162e59f55842c4ca36d708c2e2fd7d6e167d66"
392
396
  },
393
397
  {
394
398
  "path": "packages/local-runtime/runtime.mjs",