@zaip-ai/cli 3.5.0 → 3.6.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/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 +57 -29
- package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-BDQR0U4a.js +2938 -0
- 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-Ckxk_izu.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-CqfSgtk9.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-OBJXZOwe.css +1 -0
- 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/package.json +1 -1
- 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 +1 -1
- 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 +42 -11
- package/templates/.agents/runtime/checksums.sha256 +5 -5
- package/templates/.agents/runtime/manifest.json +1 -1
- package/templates/.agents/runtime/provenance.json +4 -4
- package/templates/.agents/runtime/sbom.cdx.json +1 -1
- 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 +98 -66
package/templates/.agents/dashboard/modules/operations/src/react/OperationsEntityFilters.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { OperationsLocale } from "./status-labels.js";
|
|
2
2
|
import { riskLabel } from "./status-labels.js";
|
|
3
|
-
import { taskOriginLabel, taskOriginOptions
|
|
3
|
+
import { type TaskOrigin, taskOriginLabel, taskOriginOptions } from "./task-origin.js";
|
|
4
4
|
import { workStageLabel, workStages } from "./work-board-model.js";
|
|
5
5
|
|
|
6
6
|
/** Work filters belong to the visible shared header, not the retired hero. */
|
|
@@ -4,10 +4,10 @@ import { formatRoundedDuration } from "./format-rounded-duration.js";
|
|
|
4
4
|
import type { OperationsLocale } from "./status-labels.js";
|
|
5
5
|
import { WorkTypeFilters } from "./UnifiedWorkBoard.js";
|
|
6
6
|
import {
|
|
7
|
-
workStageLabel,
|
|
8
|
-
workStages,
|
|
9
7
|
type WorkStage,
|
|
10
8
|
type WorkTypeFilter,
|
|
9
|
+
workStageLabel,
|
|
10
|
+
workStages,
|
|
11
11
|
} from "./work-board-model.js";
|
|
12
12
|
|
|
13
13
|
export type PagedWorkListRow = Record<string, unknown>;
|
|
@@ -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.6.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": "ca5dcdb2529d3f96a2a1663eec70741f0886dc15d3a4c31536bbcfbd92e3d6b4"
|
|
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": "094c8d81caf1a76e96dc8b7e7fe383170f90a7bdb0a51bc4679740eb183857c0"
|
|
392
396
|
},
|
|
393
397
|
{
|
|
394
398
|
"path": "packages/local-runtime/runtime.mjs",
|