@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.
- package/dist/services/adapters.d.ts +1 -1
- package/dist/services/adapters.js +1 -1
- package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
- package/dist/services/codex-conversation-lifecycle-hook.js +37 -6
- package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
- package/dist/services/stack-install.d.ts.map +1 -1
- package/dist/services/stack-install.js +19 -9
- package/dist/services/stack-install.js.map +1 -1
- package/dist/services/stack-node.d.ts.map +1 -1
- package/dist/services/stack-node.js +1 -1
- package/dist/services/stack-node.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/config/agents/discovery.json +1 -1
- package/templates/.agents/dashboard/.zaip-managed.json +47 -43
- package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-DRI_XwUf.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-OulA4CoX.js +3 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-BKBpJyLh.js → TraceabilityWorkspace-Ckxk_izu.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-CqfSgtk9.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{index-CxrG_wRI.css → index-OBJXZOwe.css} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +2 -2
- package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +0 -2
- package/templates/.agents/dashboard/apps/frontend/src/DashboardGlobalSettings.tsx +7 -0
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsCard.tsx +15 -2
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.css +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-help-dialog.css +2 -2
- package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.ts +4 -1
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-contract.test.ts +20 -9
- package/templates/.agents/dashboard/apps/frontend/src/pricing-settings-dialog.css +5 -5
- package/templates/.agents/dashboard/apps/frontend/src/use-app-work-board.test.ts +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
- package/templates/.agents/dashboard/modules/operations/package.json +1 -1
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsEntityFilters.tsx +1 -1
- package/templates/.agents/dashboard/modules/operations/src/react/PagedWorkList.tsx +2 -2
- 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 +122 -122
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +2 -2
- package/templates/.agents/dashboard/packages/local-runtime/package.json +2 -2
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +124 -124
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +3 -3
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts +2 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-filter-matrix.test.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-pricing-provenance.test.ts +49 -13
- package/templates/.agents/dashboard/packages/ui/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +4 -6
- package/templates/.agents/dashboard/tests/e2e/specs/work-board-hydration.ts +38 -0
- package/templates/.agents/design/.zaip-managed.json +11 -7
- package/templates/.agents/design/apps/catalog/dist/assets/index-Cv4VfxTQ.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/index.html +1 -1
- package/templates/.agents/design/apps/catalog/package.json +2 -2
- package/templates/.agents/design/apps/catalog/src/components/DashboardFiltersSpecimen.tsx +26 -21
- package/templates/.agents/design/apps/catalog/src/components/StackVersionFieldSpecimen.tsx +1 -5
- package/templates/.agents/design/apps/catalog/src/styles/stack-version-field.css +75 -13
- package/templates/.agents/design/packages/local-runtime/package.json +1 -1
- package/templates/.agents/requirements/autonomous-assurance.md +1 -1
- 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 +1 -1
- package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
- package/templates/.agents/runtime/VERSION +1 -1
- package/templates/.agents/runtime/bin/zaip.mjs +58 -27
- 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 +144 -162
- package/templates/.agents/skills/zaip-skill-execution/SKILL.md +1 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +3 -1
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/template-manifest.json +89 -81
- package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-Je5nK-Et.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-D46WWIKr.js +0 -3
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-Bas2TVju.js +0 -2
- /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
|
|
234
|
-
|
|
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");
|
package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts
CHANGED
|
@@ -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,
|
package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-filter-matrix.test.ts
CHANGED
|
@@ -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",
|
package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-pricing-provenance.test.ts
CHANGED
|
@@ -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",
|
|
9
|
-
|
|
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
|
-
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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({
|
|
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",
|
|
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({
|
|
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,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
|
|
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
|
|
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
|
|
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.
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
395
|
+
"sha256": "520dc202ebc57a431905b80f93162e59f55842c4ca36d708c2e2fd7d6e167d66"
|
|
392
396
|
},
|
|
393
397
|
{
|
|
394
398
|
"path": "packages/local-runtime/runtime.mjs",
|