@zaip-ai/cli 5.0.0 → 5.2.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-native-tool-authority-template.d.ts.map +1 -1
- package/dist/services/codex-native-tool-authority-template.js +19 -12
- package/dist/services/codex-native-tool-authority-template.js.map +1 -1
- package/dist/services/codex-pre-tool-hook-template.js +6 -6
- package/dist/services/codex-pre-tool-host-context-template.d.ts.map +1 -1
- package/dist/services/codex-pre-tool-host-context-template.js +34 -3
- package/dist/services/codex-pre-tool-host-context-template.js.map +1 -1
- package/dist/services/codex-pre-tool-support-template.d.ts.map +1 -1
- package/dist/services/codex-pre-tool-support-template.js +24 -0
- package/dist/services/codex-pre-tool-support-template.js.map +1 -1
- package/dist/services/codex-windows-hook-command.d.ts.map +1 -1
- package/dist/services/codex-windows-hook-command.js +21 -2
- package/dist/services/codex-windows-hook-command.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/README-ENG.md +19 -0
- package/templates/.agents/README.md +20 -0
- package/templates/.agents/config/agents/discovery.json +1 -1
- package/templates/.agents/dashboard/.zaip-managed.json +98 -58
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{CostCalculationGuidePage-w6pjt4OM.js → CostCalculationGuidePage-uR-asJv_.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-DhlntQcR.js → DashboardHelpDialog-CDUKVlrH.js} +23 -3
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-BHoZT2an.js → PricingSettingsDialog-Czs55K79.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{ProjectSettingsPage-IcncIZ9Y.js → ProjectSettingsPage-DhpaKwjC.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-C6rORjpr.js → TraceabilityWorkspace-DPxfH469.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{cost-monitor-uPnOBShc.js → cost-monitor-B0Jwz_rk.js} +4 -4
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-DWXjEIgc.js → dashboard-localization-BE_Zqtym.js} +19 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-Hc9fp_gs.js → icons-vendor-CjGGux6h.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-D5HmMZ27.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-C9ta_O10.js → react-vendor-B9jZSAKf.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{traceability-IcefoTOv.js → traceability-DFpwb0TN.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +5 -5
- package/templates/.agents/dashboard/apps/frontend/package.json +2 -2
- package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +3 -0
- package/templates/.agents/dashboard/apps/frontend/src/AppOverlays.tsx +16 -7
- package/templates/.agents/dashboard/apps/frontend/src/__tests__/app-composition-support.ts +1 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +2 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.navigation.test.tsx +125 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +67 -9
- package/templates/.agents/dashboard/apps/frontend/src/use-dashboard-app-model.tsx +15 -15
- package/templates/.agents/dashboard/apps/frontend/src/use-dashboard-locale.ts +18 -0
- 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/OperationsOverview.tsx +4 -39
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewTopPanel.navigation.test.tsx +150 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewTopPanel.tsx +7 -3
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +4 -7
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +3 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-contract.ts +51 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +5 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +1 -0
- package/templates/.agents/dashboard/modules/operations/src/react/use-operations-default-range.ts +16 -0
- package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
- package/templates/.agents/dashboard/packages/branding/package.json +1 -1
- package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
- package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/dashboard-build-fingerprint.mjs +87 -0
- package/templates/.agents/dashboard/packages/local-runtime/dashboard-build-fingerprint.test.mjs +48 -0
- package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +160 -160
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +110 -110
- package/templates/.agents/dashboard/packages/local-runtime/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-frontend.mjs +29 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +5 -0
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +163 -163
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-build.mjs +12 -5
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-paths.mjs +8 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +1 -1
- 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/qualify-top-five-trace.mjs +53 -0
- package/templates/.agents/dashboard/tests/e2e/verify-top-five-served.mjs +78 -0
- package/templates/.agents/design/.zaip-managed.json +14 -6
- package/templates/.agents/design/apps/catalog/dist/assets/index-BGxXxXTo.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/TopEntitiesSpecimen.tsx +45 -0
- package/templates/.agents/design/apps/catalog/src/pages/ComponentsPage.tsx +3 -1
- package/templates/.agents/design/apps/catalog/src/stories/Components.stories.tsx +2 -0
- 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 +118 -56
- 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 +1 -1
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-contract-cli.test.mjs +53 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-contract.test.mjs +1 -32
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/.agents/zaip-aios/guides/10-seguranca.md +2 -2
- package/templates/template-manifest.json +149 -97
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-BqeOEZW5.js +0 -2
|
@@ -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
|
+
export declare const ADAPTERS_VERSION = "5.2.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.
|
|
14
|
+
export const ADAPTERS_VERSION = "5.2.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-native-tool-authority-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-native-tool-authority-template.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gCAAgC,
|
|
1
|
+
{"version":3,"file":"codex-native-tool-authority-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-native-tool-authority-template.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gCAAgC,QAiRT,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { CODEX_VALIDATION_RUNTIME_SUPPORT } from "./codex-validation-runtime-template.js";
|
|
2
|
-
export const CODEX_NATIVE_TOOL_AUTHORITY_HOOK = String.raw `import {
|
|
2
|
+
export const CODEX_NATIVE_TOOL_AUTHORITY_HOOK = String.raw `import { execFile } from "node:child_process";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
const executeGit = promisify(execFile);
|
|
3
5
|
import { createHash } from "node:crypto";
|
|
4
6
|
import { lstat, readFile, realpath } from "node:fs/promises";
|
|
5
7
|
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
@@ -223,16 +225,21 @@ export async function hasCurrentTaskOrchestratorRun(event, installedRoot, bounde
|
|
|
223
225
|
}
|
|
224
226
|
|
|
225
227
|
/** A Task's product writer is claimed centrally before any edit. */
|
|
226
|
-
function isolatedGitMatchesClaim(repositoryRoot, authorityRoot, claim) {
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
228
|
+
async function isolatedGitMatchesClaim(repositoryRoot, authorityRoot, claim) {
|
|
229
|
+
const deadline = performance.now() + 3500;
|
|
230
|
+
const git = async (root, args) => {
|
|
231
|
+
const remaining = Math.floor(deadline - performance.now());
|
|
232
|
+
if (remaining <= 0) throw new Error("writer_validation_budget_exhausted");
|
|
233
|
+
return (await executeGit("git", ["-C", root, ...args], {
|
|
234
|
+
encoding: "utf8", windowsHide: true, timeout: Math.min(1500, remaining), maxBuffer: 1048576,
|
|
235
|
+
env: Object.fromEntries(Object.entries(process.env).filter(([key]) => !/^(GIT_|NODE_OPTIONS$)/i.test(key))),
|
|
236
|
+
})).stdout.trim();
|
|
237
|
+
};
|
|
238
|
+
if (resolve(await git(repositoryRoot, ["rev-parse", "--show-toplevel"])) !== resolve(repositoryRoot) ||
|
|
239
|
+
await git(repositoryRoot, ["branch", "--show-current"]) !== claim.branch) return false;
|
|
240
|
+
const head = await git(repositoryRoot, ["rev-parse", "HEAD"]);
|
|
241
|
+
if (head !== await git(authorityRoot, ["rev-parse", claim.branch])) return false;
|
|
242
|
+
return (await git(authorityRoot, ["worktree", "list", "--porcelain"])).split(/\r?\n\r?\n/).some(block => {
|
|
236
243
|
const lines = block.split(/\r?\n/);
|
|
237
244
|
return lines.some(line => line.startsWith("worktree ") && resolve(line.slice(9)) === resolve(repositoryRoot)) &&
|
|
238
245
|
lines.includes("HEAD " + head) && lines.includes("branch refs/heads/" + claim.branch);
|
|
@@ -261,7 +268,7 @@ export async function hasClaimedTaskWriter(event, repositoryRoot, boundedRead, d
|
|
|
261
268
|
typeof isolated.branch === "string" && isolated.branch.startsWith("codex/") &&
|
|
262
269
|
resolve(isolated.path) === resolve(repositoryRoot) &&
|
|
263
270
|
resolve(isolated.canonical_workspace) === resolve(authorityRoot) &&
|
|
264
|
-
isolatedGitMatchesClaim(repositoryRoot, authorityRoot, isolated);
|
|
271
|
+
await isolatedGitMatchesClaim(repositoryRoot, authorityRoot, isolated);
|
|
265
272
|
} catch { return false; }
|
|
266
273
|
}
|
|
267
274
|
` + CODEX_VALIDATION_RUNTIME_SUPPORT;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-native-tool-authority-template.js","sourceRoot":"","sources":["../../src/services/codex-native-tool-authority-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,wCAAwC,CAAC;AAC1F,MAAM,CAAC,MAAM,gCAAgC,GAC3C,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"codex-native-tool-authority-template.js","sourceRoot":"","sources":["../../src/services/codex-native-tool-authority-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,wCAAwC,CAAC;AAC1F,MAAM,CAAC,MAAM,gCAAgC,GAC3C,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgRX,GAAG,gCAAgC,CAAC"}
|
|
@@ -5,9 +5,9 @@ import { lstat, readFile, realpath } from "node:fs/promises";
|
|
|
5
5
|
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { promisify } from "node:util";
|
|
8
|
-
import { captureCliTurn, checkDestructivePatterns, configuredDeploymentBranches, configuredPermissionProfile, gitInvocation, inside, isLiteralReadSequence,
|
|
8
|
+
import { captureCliTurn, createHookBudget, checkDestructivePatterns, configuredDeploymentBranches, configuredPermissionProfile, gitInvocation, inside, isLiteralReadSequence, readBoundedCanonicalText, requiresShellMutationRun, reviewedContextReadPaths, reviewedReleasePaths, rewriteCliInput, selectHookExecutionWorkspace, selectHookRepositoryRoot, shellSyntax, tokenizeLiteralCommand, validateInlineExecution } from "./zaip-pre-tool-support.mjs";
|
|
9
9
|
import { createCloudValidators } from "./zaip-pre-tool-cloud.mjs";
|
|
10
|
-
const execute = promisify(execFile);
|
|
10
|
+
const { execute, parseEvent } = createHookBudget(promisify(execFile));
|
|
11
11
|
const nativeAuthority = await import("./zaip-native-tool-authority.mjs").catch(() => null);
|
|
12
12
|
const activation = await import("./zaip-hook-activation.mjs").catch(() => null);
|
|
13
13
|
const installedRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
@@ -133,8 +133,8 @@ const destructivePatterns = [
|
|
|
133
133
|
},
|
|
134
134
|
];
|
|
135
135
|
|
|
136
|
-
function deny(reason) {
|
|
137
|
-
activation?.recordActivation(repositoryRoot, event, "denied");
|
|
136
|
+
function deny(reason, record = true) {
|
|
137
|
+
if (record) activation?.recordActivation(repositoryRoot, event, "denied");
|
|
138
138
|
writeSync(
|
|
139
139
|
1,
|
|
140
140
|
JSON.stringify({
|
|
@@ -195,7 +195,7 @@ async function validateExplicitFilesystemReferences(command, cwd, reviewedPaths
|
|
|
195
195
|
if (homeReferencePattern.test(checked)) {
|
|
196
196
|
deny("Direct user-profile path references are blocked; use repository-scoped paths.");
|
|
197
197
|
}
|
|
198
|
-
if (credentialReferencePattern.test(checked) || sensitiveEnvironmentPattern.test(checked)) {
|
|
198
|
+
if (credentialReferencePattern.test(checked.replace(/[;|&()]/g, " ")) || sensitiveEnvironmentPattern.test(checked)) {
|
|
199
199
|
deny("Direct credential and secret access is blocked.");
|
|
200
200
|
}
|
|
201
201
|
if (/\b(?:Get-ChildItem|gci|dir|Get-Item|gi)(?:\s+-(?:LiteralPath|Path))?\s+(?:Env|Variable|Function|Alias):|\b(?:printenv|set)\s*$/i.test(checked) || /GetEnvironmentVariables\s*\(/i.test(checked)) {
|
|
@@ -535,7 +535,7 @@ let raw = "";
|
|
|
535
535
|
for await (const chunk of process.stdin) raw += chunk;
|
|
536
536
|
|
|
537
537
|
let event;
|
|
538
|
-
event =
|
|
538
|
+
event = parseEvent(raw, deny);
|
|
539
539
|
|
|
540
540
|
const toolInput = event?.tool_input;
|
|
541
541
|
const candidateWorkdir = typeof toolInput?.workdir === "string" && isAbsolute(toolInput.workdir) ? toolInput.workdir : event.cwd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-pre-tool-host-context-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-pre-tool-host-context-template.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gCAAgC,
|
|
1
|
+
{"version":3,"file":"codex-pre-tool-host-context-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-pre-tool-host-context-template.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gCAAgC,QAwK5C,CAAC"}
|
|
@@ -5,7 +5,28 @@ import { promisify } from "node:util";
|
|
|
5
5
|
const execute = promisify(execFile);
|
|
6
6
|
const pathIdentity = value => process.platform === "win32" ? toNamespacedPath(resolve(value)).toLowerCase() : resolve(value);
|
|
7
7
|
|
|
8
|
+
export function createHookBudget(executeFile) {
|
|
9
|
+
const deadline = performance.now() + 6500;
|
|
10
|
+
return {
|
|
11
|
+
execute(file, args, options = {}) {
|
|
12
|
+
const remaining = Math.floor(deadline - performance.now());
|
|
13
|
+
if (remaining <= 0) throw new Error("Hook validation budget exhausted; inspect the slow dependency before retrying.");
|
|
14
|
+
return executeFile(file, args, { ...options, timeout: Math.min(options.timeout ?? remaining, remaining) });
|
|
15
|
+
},
|
|
16
|
+
parseEvent(raw, deny) {
|
|
17
|
+
let event; try { event = JSON.parse(raw); } catch { deny("Malformed hook input was rejected."); }
|
|
18
|
+
// Headroom for the Windows launcher; a stalled dependency never grants authority.
|
|
19
|
+
const timer = setTimeout(() => deny("Hook validation budget exhausted. Inspect the slow Git/filesystem dependency before retrying; authorization was not granted.", false), Math.max(1, deadline - performance.now()));
|
|
20
|
+
timer.unref();
|
|
21
|
+
return event;
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
8
26
|
export function createHostContext({ inside, readBoundedCanonicalText }) {
|
|
27
|
+
// One hook invocation only: never reuse filesystem authority across tool calls.
|
|
28
|
+
const roots = new Map();
|
|
29
|
+
const deadline = performance.now() + 6000;
|
|
9
30
|
/** Project configuration selects ZAIP policy; the host still enforces effective ACLs. */
|
|
10
31
|
async function configuredPermissionProfile(installedRoot) {
|
|
11
32
|
const restricted = { filesystem: false, network: false };
|
|
@@ -82,6 +103,11 @@ async function configuredPermissionProfile(installedRoot) {
|
|
|
82
103
|
}
|
|
83
104
|
|
|
84
105
|
async function selectHookRepositoryRoot(installedRoot, cwd) {
|
|
106
|
+
const key = JSON.stringify([installedRoot, cwd]);
|
|
107
|
+
if (!roots.has(key)) roots.set(key, resolveHookRepositoryRoot(installedRoot, cwd));
|
|
108
|
+
return roots.get(key);
|
|
109
|
+
}
|
|
110
|
+
async function resolveHookRepositoryRoot(installedRoot, cwd) {
|
|
85
111
|
if (typeof cwd !== "string") throw new Error("Tool execution without a workspace is blocked.");
|
|
86
112
|
const physicalCwd = await realpath(cwd).catch(() => null);
|
|
87
113
|
if (!physicalCwd || pathIdentity(physicalCwd) !== pathIdentity(cwd)) {
|
|
@@ -95,13 +121,18 @@ async function selectHookRepositoryRoot(installedRoot, cwd) {
|
|
|
95
121
|
if (cursor.toLowerCase() === installedRoot.toLowerCase()) return installedRoot;
|
|
96
122
|
}
|
|
97
123
|
try {
|
|
98
|
-
const git = async (path, ...args) =>
|
|
99
|
-
|
|
100
|
-
|
|
124
|
+
const git = async (path, ...args) => {
|
|
125
|
+
const remaining = Math.floor(deadline - performance.now());
|
|
126
|
+
if (remaining <= 0) throw new Error("workspace_validation_budget_exhausted");
|
|
127
|
+
return (await execute("git", ["-C", path, ...args], {
|
|
128
|
+
encoding: "utf8", windowsHide: true, timeout: Math.min(2000, remaining), maxBuffer: 1048576,
|
|
129
|
+
})).stdout.trim();
|
|
130
|
+
};
|
|
101
131
|
const primary = await git(installedRoot, "rev-parse", "--show-toplevel");
|
|
102
132
|
if ((await realpath(primary)).toLowerCase() !== installedRoot.toLowerCase()) throw new Error("primary_not_root");
|
|
103
133
|
const worktrees = await git(installedRoot, "worktree", "list", "--porcelain", "-z");
|
|
104
134
|
const registered = worktrees.split("\0").filter(line => line.startsWith("worktree ")).map(line => line.slice(9));
|
|
135
|
+
if (!registered.some(path => inside(cwd, resolve(path)))) throw new Error("worktree_not_registered");
|
|
105
136
|
const candidate = await realpath(await git(cwd, "rev-parse", "--show-toplevel"));
|
|
106
137
|
if (!registered.some(path => resolve(path).toLowerCase() === candidate.toLowerCase()) || !inside(cwd, candidate)) {
|
|
107
138
|
throw new Error("worktree_not_registered");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-pre-tool-host-context-template.js","sourceRoot":"","sources":["../../src/services/codex-pre-tool-host-context-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"codex-pre-tool-host-context-template.js","sourceRoot":"","sources":["../../src/services/codex-pre-tool-host-context-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwKzD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-pre-tool-support-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-pre-tool-support-template.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"codex-pre-tool-support-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-pre-tool-support-template.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,QA6YvC,CAAC"}
|
|
@@ -24,6 +24,8 @@ export function parseHookEvent(raw, deny) {
|
|
|
24
24
|
catch { deny("Malformed hook input was rejected."); }
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
export { createHookBudget } from "./zaip-pre-tool-host-context.mjs";
|
|
28
|
+
|
|
27
29
|
export const { configuredPermissionProfile, selectHookRepositoryRoot, selectHookExecutionWorkspace } = createHostContext({ inside, readBoundedCanonicalText });
|
|
28
30
|
|
|
29
31
|
export function tokenizeLiteralCommand(command) {
|
|
@@ -99,6 +101,27 @@ export function requiresShellMutationRun(command, tokens, cwd, repositoryRoot) {
|
|
|
99
101
|
|
|
100
102
|
// Recognize only literal read-only pipelines/sequences. Quoted search text is data,
|
|
101
103
|
// not a PowerShell alias (for example the AC prefix in acceptance-criterion IDs).
|
|
104
|
+
function isLiteralGitRead(values) {
|
|
105
|
+
if (!/^(?:git|git\.exe)$/i.test(values[0])) return false;
|
|
106
|
+
// Deliberately narrow: only the fixed fsmonitor=false override, no aliases, routing, pagers, external diff,
|
|
107
|
+
// textconv, output files, or mutating subcommands in a read sequence.
|
|
108
|
+
const args = values.slice(1);
|
|
109
|
+
if (args.shift() !== "--no-pager" || args.shift() !== "-c" || args.shift() !== "core.fsmonitor=false") return false;
|
|
110
|
+
const subcommand = args.shift();
|
|
111
|
+
if (!["status", "log", "rev-parse", "diff"].includes(subcommand)) return false;
|
|
112
|
+
if (["diff", "log"].includes(subcommand) && !["--no-ext-diff", "--no-textconv"].every(flag => args.includes(flag))) return false;
|
|
113
|
+
if (subcommand === "log" && !["--no-patch", "--no-show-signature"].every(flag => args.includes(flag))) return false;
|
|
114
|
+
if (subcommand === "diff" && !["--name-only", "--name-status", "--stat", "--check"].some(flag => args.includes(flag))) return false;
|
|
115
|
+
const options = {
|
|
116
|
+
status: /^(?:-s|-b|--short|--branch|--porcelain(?:=v?[12])?|--untracked-files(?:=(?:no|normal|all))?|--ignored(?:=(?:traditional|matching|no))?)$/,
|
|
117
|
+
log: /^(?:--no-ext-diff|--no-textconv|--no-patch|--no-show-signature|--oneline|--all|--decorate(?:=(?:short|full|no))?|--no-decorate|--date-order|--topo-order|--reverse|--no-merges|--merges|--max-count=\d+|-\d+|--format=(?:%H|%h|%s|%H%x09%s))$/,
|
|
118
|
+
"rev-parse": /^(?:--show-toplevel|--git-common-dir|--absolute-git-dir|--is-inside-work-tree|--show-prefix|--verify|--short(?:=\d+)?|--symbolic-full-name|--abbrev-ref|--end-of-options)$/,
|
|
119
|
+
diff: /^(?:--name-only|--name-status|--stat|--check|--cached|--staged|--no-ext-diff|--no-textconv|--exit-code|--quiet)$/,
|
|
120
|
+
};
|
|
121
|
+
return args.every(value => value.startsWith("-") ? options[subcommand].test(value) :
|
|
122
|
+
// Plain revisions/pathspecs only; shell syntax was already parsed separately.
|
|
123
|
+
/^[A-Za-z0-9_./@~^:\\-]+$/.test(value));
|
|
124
|
+
}
|
|
102
125
|
export function isLiteralReadSequence(command) {
|
|
103
126
|
const syntax = shellSyntax(command);
|
|
104
127
|
if (syntax.interpolation || syntax.redirection || syntax.grouping) return false;
|
|
@@ -119,6 +142,7 @@ export function isLiteralReadSequence(command) {
|
|
|
119
142
|
return parts.every(part => {
|
|
120
143
|
const values = tokenizeLiteralCommand(part);
|
|
121
144
|
if (!values?.length) return false;
|
|
145
|
+
if (isLiteralGitRead(values)) return true;
|
|
122
146
|
if (/^Get-Item$/i.test(values[0])) {
|
|
123
147
|
const args = values.slice(1);
|
|
124
148
|
const path = args[0] === "-LiteralPath" ? args[1] : args[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-pre-tool-support-template.js","sourceRoot":"","sources":["../../src/services/codex-pre-tool-support-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"codex-pre-tool-support-template.js","sourceRoot":"","sources":["../../src/services/codex-pre-tool-support-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6YpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-windows-hook-command.d.ts","sourceRoot":"","sources":["../../src/services/codex-windows-hook-command.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"codex-windows-hook-command.d.ts","sourceRoot":"","sources":["../../src/services/codex-windows-hook-command.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BpF"}
|
|
@@ -3,10 +3,29 @@ import { resolve } from "node:path";
|
|
|
3
3
|
export function codexWindowsHookCommand(hook, workspaceRoot) {
|
|
4
4
|
if (!/^zaip-[a-z-]+\.mjs$/.test(hook))
|
|
5
5
|
throw new Error(`Invalid ZAIP hook name: ${hook}`);
|
|
6
|
-
const
|
|
6
|
+
const search = workspaceRoot === undefined
|
|
7
7
|
? "(Get-Location)"
|
|
8
8
|
: `'${resolve(workspaceRoot).replaceAll("'", "''")}'`;
|
|
9
|
-
const script =
|
|
9
|
+
const script = [
|
|
10
|
+
"$ProgressPreference = 'SilentlyContinue'",
|
|
11
|
+
`$search = ${search}`,
|
|
12
|
+
"$git = $null",
|
|
13
|
+
"while ($search) { $candidate = Join-Path $search '.local/git/cmd/git.exe'; if (Test-Path -LiteralPath $candidate -PathType Leaf) { $git = $candidate; break }; $parent = Split-Path -Path $search -Parent; if (!$parent -or $parent -eq $search) { break }; $search = $parent }",
|
|
14
|
+
"if (!$git) { $git = (Get-Command git -ErrorAction SilentlyContinue).Source }",
|
|
15
|
+
"if (!$git) { exit 0 }",
|
|
16
|
+
"$probe = New-Object System.Diagnostics.Process",
|
|
17
|
+
"$probe.StartInfo.FileName = $git",
|
|
18
|
+
"$probe.StartInfo.Arguments = 'rev-parse --show-toplevel'",
|
|
19
|
+
"$probe.StartInfo.UseShellExecute = $false",
|
|
20
|
+
"$probe.StartInfo.CreateNoWindow = $true",
|
|
21
|
+
"$probe.StartInfo.RedirectStandardOutput = $true",
|
|
22
|
+
"$probe.StartInfo.RedirectStandardError = $true",
|
|
23
|
+
"try { if (!$probe.Start()) { throw 'git discovery failed' }; $output = $probe.StandardOutput.ReadToEndAsync(); $errors = $probe.StandardError.ReadToEndAsync(); if (!$probe.WaitForExit(1500)) { $probe.Kill(); [Console]::Error.WriteLine('ZAIP hook: Git discovery exceeded 1500ms; retry after checking Git availability.'); exit 2 }; $root = $output.GetAwaiter().GetResult().Trim(); if ($probe.ExitCode -ne 0 -or !$root) { exit 0 } } catch { [Console]::Error.WriteLine('ZAIP hook: Git discovery failed.'); exit 2 } finally { $probe.Dispose() }",
|
|
24
|
+
`$hook = Join-Path $root '.codex/hooks/${hook}'`,
|
|
25
|
+
"if (!(Test-Path -LiteralPath $hook -PathType Leaf)) { exit 0 }",
|
|
26
|
+
"& node $hook",
|
|
27
|
+
"exit $LASTEXITCODE",
|
|
28
|
+
].join("; ");
|
|
10
29
|
return `powershell -NoProfile -NonInteractive -EncodedCommand ${Buffer.from(script, "utf16le").toString("base64")}`;
|
|
11
30
|
}
|
|
12
31
|
//# sourceMappingURL=codex-windows-hook-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-windows-hook-command.js","sourceRoot":"","sources":["../../src/services/codex-windows-hook-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wEAAwE;AACxE,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,aAAsB;IAC1E,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;IAC1F,MAAM,
|
|
1
|
+
{"version":3,"file":"codex-windows-hook-command.js","sourceRoot":"","sources":["../../src/services/codex-windows-hook-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wEAAwE;AACxE,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,aAAsB;IAC1E,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;IAC1F,MAAM,MAAM,GACV,aAAa,KAAK,SAAS;QACzB,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;IAC1D,MAAM,MAAM,GAAG;QACb,0CAA0C;QAC1C,aAAa,MAAM,EAAE;QACrB,cAAc;QACd,iRAAiR;QACjR,8EAA8E;QAC9E,uBAAuB;QACvB,gDAAgD;QAChD,kCAAkC;QAClC,0DAA0D;QAC1D,2CAA2C;QAC3C,yCAAyC;QACzC,iDAAiD;QACjD,gDAAgD;QAChD,6hBAA6hB;QAC7hB,yCAAyC,IAAI,GAAG;QAChD,gEAAgE;QAChE,cAAc;QACd,oBAAoB;KACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,yDAAyD,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACtH,CAAC"}
|
package/package.json
CHANGED
|
@@ -6,6 +6,22 @@ English | [Português](README.md)
|
|
|
6
6
|
|
|
7
7
|
## Quick overview
|
|
8
8
|
|
|
9
|
+
The [rework prevention guide](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v51-eficiencia-e-publicacao.md)
|
|
10
|
+
documents complete checks before finalization, bounded Run reads, conservative
|
|
11
|
+
test reuse, content-based Dashboard builds and separate npm confirmation.
|
|
12
|
+
Authorized maintenance suspends governance while keeping telemetry active;
|
|
13
|
+
governance is restored and hooks are checked when maintenance ends.
|
|
14
|
+
|
|
15
|
+
The [hook repair guide](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/hooks-leitura-e-orcamento.md) describes
|
|
16
|
+
permitted Git read sequences, validation time budgets, and retained protections.
|
|
17
|
+
Git read sequences use `git --no-pager -c core.fsmonitor=false` and the documented
|
|
18
|
+
safe options; Git mutations still require separate commands.
|
|
19
|
+
|
|
20
|
+
The [v5.2 reliability plan](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v52-confiabilidade-e-eficiencia.md)
|
|
21
|
+
records bounded Git discovery in the Windows launcher, observation recovery
|
|
22
|
+
after maintenance, thread-scoped Run queries, and validation cache measurements.
|
|
23
|
+
Evidence distinguishes local tests, independent review, and package publication.
|
|
24
|
+
|
|
9
25
|
> **Source, candidate, and publication:** this README describes the checkout's
|
|
10
26
|
> contracts and features. The [evolution matrix](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v50-documentacao-editorial.md)
|
|
11
27
|
> identifies implementation and evidence. Local qualification, consumer hook
|
|
@@ -922,3 +938,6 @@ A branch holds a commit history; a worktree is another checkout directory. A sta
|
|
|
922
938
|
`.agents/config/release-cycle.json` defines the executable release. Future PRDs/SPECs may remain draft; starting requires the current cycle. Publication reconciles active work, freezes and audits the exact candidate, runs local checks, pushes only `main`, and waits for successful CI on that SHA before Release. No remote candidate branch is created. Tag, GitHub Release, npm, and any applicable provider deployment have separate evidence.
|
|
923
939
|
|
|
924
940
|
The release coordinator may remain active during publication and cycle advance only through supported modes: an integrated root with explicit frozen IDs and `release_mode: integrated_task`, or delegated SPEC coordination with verified ancestry. Other current Tasks must be terminal. The gate verifies candidate records; the coordinator completes Evidence, applicable review, and Gui after publication proof. Simple coordination must finish before audit. See the [release contracts and commands](zaip-aios/guides/26-qualidade-e-release.md#ciclo-corrente-limpeza-e-ci-da-main-antes-da-release). Do not mark a Task completed before its finalizer just to publish.
|
|
941
|
+
## Operational note after v5.0 publication
|
|
942
|
+
|
|
943
|
+
Publisher recovery, explicit parental validation timeouts, and recognition of parental Evidence at the final barrier are documented in [v5.0 publisher recovery](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v50-publisher-recovery.md). The v5.0 SPEC is delivered with all ten Tasks completed. These are subsequent operational fixes on main; the npm 5.0.0 package and v5.0 tag remain immutable.
|
|
@@ -6,6 +6,23 @@
|
|
|
6
6
|
|
|
7
7
|
## Visão rápida
|
|
8
8
|
|
|
9
|
+
O [guia de prevenção de retrabalho](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v51-eficiencia-e-publicacao.md)
|
|
10
|
+
documenta o pré-check completo antes da finalização, as leituras limitadas de Runs,
|
|
11
|
+
o reuso conservador de testes, o build do Dashboard por conteúdo e a confirmação
|
|
12
|
+
separada do npm. Manutenção autorizada suspende a governança com telemetria ativa;
|
|
13
|
+
ao terminar, a governança é reativada e os hooks são verificados.
|
|
14
|
+
|
|
15
|
+
O [guia de correção dos hooks](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/hooks-leitura-e-orcamento.md) descreve
|
|
16
|
+
as sequências Git de leitura permitidas, os limites de tempo da validação e as
|
|
17
|
+
proteções preservadas. Sequências Git de leitura usam o prefixo
|
|
18
|
+
`git --no-pager -c core.fsmonitor=false` e as opções seguras documentadas;
|
|
19
|
+
alterações Git continuam exigindo comandos separados.
|
|
20
|
+
|
|
21
|
+
O [plano de confiabilidade da v5.2](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v52-confiabilidade-e-eficiencia.md)
|
|
22
|
+
registra a descoberta Git limitada no launcher Windows, a retomada da observação
|
|
23
|
+
após manutenção, a consulta de Runs por chat e a medição do cache de validação.
|
|
24
|
+
As evidências distinguem testes locais, revisão e publicação do pacote.
|
|
25
|
+
|
|
9
26
|
> **Fonte, candidato e publicação:** este README descreve os contratos e recursos
|
|
10
27
|
> do checkout. A [matriz de evolução](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v50-documentacao-editorial.md)
|
|
11
28
|
> identifica a implementação e suas provas. Qualificação local, ativação dos
|
|
@@ -954,3 +971,6 @@ Ao encerrar frente isolada, o ZAIP inventaria arquivos, verifica bundle e snapsh
|
|
|
954
971
|
`.agents/config/release-cycle.json` define o release executável. PRD/SPEC futuros podem ficar em draft; seu início exige o ciclo corrente. Para publicar, concilie e feche as frentes atuais, congele e audite o SHA candidato, execute os checks locais, envie apenas `main` e espere CI verde nesse SHA antes da Release. Branch remota candidata não é criada. Tag, GitHub Release, npm e destino de deploy aplicável têm provas distintas.
|
|
955
972
|
|
|
956
973
|
A Task de coordenação do corte pode continuar executando durante publicação e avanço somente nos modos previstos: raiz integrada com IDs explícitos no manifesto frozen e `release_mode: integrated_task`, ou coordenação delegada de SPEC com ancestralidade validada. As demais Tasks correntes precisam estar terminais. O gate confere os records no SHA candidato, e o responsável conclui Evidence, revisão aplicável e Gui depois das provas de publicação. A coordenação simples, sem esses modos, precisa estar concluída antes da auditoria. Veja os [contratos e comandos do corte](zaip-aios/guides/26-qualidade-e-release.md#ciclo-corrente-limpeza-e-ci-da-main-antes-da-release). Não declarar a Task concluída antes do finalizador para conseguir publicar.
|
|
974
|
+
## Nota operacional após a publicação v5.0
|
|
975
|
+
|
|
976
|
+
A recuperação do publisher, o timeout explícito da validação parental e o reconhecimento das Evidence parentais na barreira final estão documentados em [Recuperação do publisher v5.0](https://github.com/zaip-ai/zaip-aios/blob/main/docs/quality/v50-publisher-recovery.md). A SPEC v5.0 está entregue, com dez Tasks concluídas. São correções operacionais posteriores na main; o pacote npm 5.0.0 e a tag v5.0 permanecem imutáveis.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_zaip_managed": "zaip-managed generated-do-not-edit source=agent-discovery version=5.
|
|
2
|
+
"_zaip_managed": "zaip-managed generated-do-not-edit source=agent-discovery version=5.2.0 sha256=3def7a2b43c1a751f8e68754ef94cb107a80b5d26e11f065af2b4cc145fc8897",
|
|
3
3
|
"schema_version": 1,
|
|
4
4
|
"source": {
|
|
5
5
|
"path": ".agents/config/agents/catalog.yaml",
|