agents-inc 0.170.1 → 0.171.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/CHANGELOG.md +30 -0
- package/dist/{chunk-52HDHJ7I.js → chunk-24OD7IP4.js} +32 -21
- package/dist/chunk-24OD7IP4.js.map +1 -0
- package/dist/{chunk-MQ6CGZNJ.js → chunk-3YYHL76L.js} +1879 -2019
- package/dist/chunk-3YYHL76L.js.map +1 -0
- package/dist/chunk-4RQKCV6I.js +103 -0
- package/dist/chunk-4RQKCV6I.js.map +1 -0
- package/dist/{chunk-USVBYQSQ.js → chunk-5FM77WKW.js} +16 -6
- package/dist/chunk-5FM77WKW.js.map +1 -0
- package/dist/{chunk-HED2DAXZ.js → chunk-7IVLVEHX.js} +5 -5
- package/dist/chunk-7IVLVEHX.js.map +1 -0
- package/dist/{chunk-PJWGTNOX.js → chunk-A6OWEJGC.js} +144 -186
- package/dist/chunk-A6OWEJGC.js.map +1 -0
- package/dist/{chunk-BMRUNMPV.js → chunk-AWWCRL5A.js} +35 -35
- package/dist/chunk-AWWCRL5A.js.map +1 -0
- package/dist/{chunk-F2BHT5C4.js → chunk-EOKNEGRD.js} +129 -151
- package/dist/chunk-EOKNEGRD.js.map +1 -0
- package/dist/{chunk-NQW25DCF.js → chunk-GHHJYNAN.js} +1 -7
- package/dist/chunk-GHHJYNAN.js.map +1 -0
- package/dist/chunk-JGPE4RRE.js +35 -0
- package/dist/chunk-JGPE4RRE.js.map +1 -0
- package/dist/{chunk-JFLVEFFP.js → chunk-KIK5EZYD.js} +1 -1
- package/dist/chunk-KIK5EZYD.js.map +1 -0
- package/dist/{chunk-NCWDK6L7.js → chunk-KMOCMVK5.js} +254 -379
- package/dist/chunk-KMOCMVK5.js.map +1 -0
- package/dist/{chunk-4AAOOAIN.js → chunk-P6CYS4JK.js} +2 -2
- package/dist/chunk-P6CYS4JK.js.map +1 -0
- package/dist/chunk-QIR56IDM.js +1169 -0
- package/dist/chunk-QIR56IDM.js.map +1 -0
- package/dist/{chunk-6ZRH5RHC.js → chunk-R572RLTI.js} +4 -4
- package/dist/chunk-R572RLTI.js.map +1 -0
- package/dist/{chunk-WTWMGH2C.js → chunk-RDXY4GRO.js} +2 -2
- package/dist/chunk-RDXY4GRO.js.map +1 -0
- package/dist/{chunk-7RDMTR64.js → chunk-S2SKVJT2.js} +785 -256
- package/dist/chunk-S2SKVJT2.js.map +1 -0
- package/dist/{chunk-SZYQISA2.js → chunk-TNFYBKVD.js} +43 -29
- package/dist/chunk-TNFYBKVD.js.map +1 -0
- package/dist/{chunk-RIPSGNLU.js → chunk-W4KAY26P.js} +3 -3
- package/dist/chunk-W4KAY26P.js.map +1 -0
- package/dist/{chunk-OYJQUA3D.js → chunk-WDH6HHA3.js} +31 -13
- package/dist/chunk-WDH6HHA3.js.map +1 -0
- package/dist/{chunk-3G7X2WKI.js → chunk-WII6GOPM.js} +18 -38
- package/dist/chunk-WII6GOPM.js.map +1 -0
- package/dist/{chunk-F5EBEATU.js → chunk-WM2N2D6Q.js} +34 -46
- package/dist/chunk-WM2N2D6Q.js.map +1 -0
- package/dist/{chunk-KOLDW6SF.js → chunk-YLUOGAW7.js} +2 -2
- package/dist/chunk-YLUOGAW7.js.map +1 -0
- package/dist/{chunk-44TE3RKH.js → chunk-ZC6GC66J.js} +5 -4
- package/dist/chunk-ZC6GC66J.js.map +1 -0
- package/dist/{chunk-NEZ4OAOL.js → chunk-ZEGM3MVR.js} +3 -5
- package/dist/chunk-ZEGM3MVR.js.map +1 -0
- package/dist/commands/build/marketplace.js +46 -46
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +25 -28
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/compile.js +87 -178
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/doctor.js +510 -360
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +451 -357
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +144 -125
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/init.js +20 -27
- package/dist/commands/list.js +39 -55
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/marketplace.js +6 -11
- package/dist/commands/new/marketplace.js.map +1 -1
- package/dist/commands/search.js +35 -32
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/share.js +17 -77
- package/dist/commands/share.js.map +1 -1
- package/dist/commands/uninstall.js +159 -222
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +9 -32
- package/dist/commands/update.js.map +1 -1
- package/dist/components/common/prompt-confirm.js +2 -2
- package/dist/components/common/removal-plan-confirm.js +2 -2
- package/dist/components/common/scroll-affordance.js +2 -2
- package/dist/components/common/select-list.js +2 -2
- package/dist/components/common/skill-agent-summary.js +4 -4
- package/dist/components/common/spinner.js +2 -4
- package/dist/components/common/summary-panel.js +5 -5
- package/dist/components/common/summary-panel.js.map +1 -1
- package/dist/config-exports.js +7 -3
- package/dist/config-exports.js.map +1 -1
- package/dist/hooks/init.js +18 -19
- package/dist/hooks/init.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/load-agent-defs-UBWITIEI.js +14 -0
- package/dist/recompile-project-agents-IQANWGOP.js +65 -0
- package/dist/recompile-project-agents-IQANWGOP.js.map +1 -0
- package/dist/{source-loader-C5SQXZXI.js → source-loader-YGG7DY2W.js} +5 -5
- package/dist/src/agents/developer/ai-developer/playbook.md +2 -5
- package/dist/src/agents/developer/api-developer/playbook.md +2 -5
- package/dist/src/agents/developer/cli-developer/playbook.md +2 -5
- package/dist/src/agents/developer/web-developer/playbook.md +2 -5
- package/dist/src/agents/meta/agent-summoner/output.md +2 -2
- package/dist/src/agents/meta/agent-summoner/playbook.md +1 -13
- package/dist/src/agents/meta/codex-keeper/critical-requirements.md +2 -5
- package/dist/src/agents/meta/convention-keeper/critical-requirements.md +2 -4
- package/dist/src/agents/tester/ai-tester/critical-requirements.md +1 -2
- package/dist/src/agents/tester/ai-tester/playbook.md +2 -0
- package/dist/src/agents/tester/api-tester/critical-requirements.md +1 -2
- package/dist/src/agents/tester/api-tester/playbook.md +2 -0
- package/dist/src/agents/tester/cli-tester/critical-requirements.md +1 -2
- package/dist/src/agents/tester/cli-tester/playbook.md +2 -0
- package/dist/src/agents/tester/web-tester/critical-requirements.md +1 -2
- package/dist/src/agents/tester/web-tester/playbook.md +2 -0
- package/package.json +9 -8
- package/src/agents/developer/ai-developer/playbook.md +2 -5
- package/src/agents/developer/api-developer/playbook.md +2 -5
- package/src/agents/developer/cli-developer/playbook.md +2 -5
- package/src/agents/developer/web-developer/playbook.md +2 -5
- package/src/agents/meta/agent-summoner/output.md +2 -2
- package/src/agents/meta/agent-summoner/playbook.md +1 -13
- package/src/agents/meta/codex-keeper/critical-requirements.md +2 -5
- package/src/agents/meta/convention-keeper/critical-requirements.md +2 -4
- package/src/agents/tester/ai-tester/critical-requirements.md +1 -2
- package/src/agents/tester/ai-tester/playbook.md +2 -0
- package/src/agents/tester/api-tester/critical-requirements.md +1 -2
- package/src/agents/tester/api-tester/playbook.md +2 -0
- package/src/agents/tester/cli-tester/critical-requirements.md +1 -2
- package/src/agents/tester/cli-tester/playbook.md +2 -0
- package/src/agents/tester/web-tester/critical-requirements.md +1 -2
- package/src/agents/tester/web-tester/playbook.md +2 -0
- package/src/schemas/project-config.schema.json +0 -3
- package/src/schemas/project-source-config.schema.json +0 -6
- package/dist/chunk-3G7X2WKI.js.map +0 -1
- package/dist/chunk-44TE3RKH.js.map +0 -1
- package/dist/chunk-4AAOOAIN.js.map +0 -1
- package/dist/chunk-52HDHJ7I.js.map +0 -1
- package/dist/chunk-6HNXYYVF.js +0 -373
- package/dist/chunk-6HNXYYVF.js.map +0 -1
- package/dist/chunk-6ZRH5RHC.js.map +0 -1
- package/dist/chunk-7RDMTR64.js.map +0 -1
- package/dist/chunk-BMRUNMPV.js.map +0 -1
- package/dist/chunk-CLPUWOSA.js +0 -46
- package/dist/chunk-CLPUWOSA.js.map +0 -1
- package/dist/chunk-F2BHT5C4.js.map +0 -1
- package/dist/chunk-F5EBEATU.js.map +0 -1
- package/dist/chunk-HED2DAXZ.js.map +0 -1
- package/dist/chunk-JFLVEFFP.js.map +0 -1
- package/dist/chunk-KOLDW6SF.js.map +0 -1
- package/dist/chunk-MQ6CGZNJ.js.map +0 -1
- package/dist/chunk-NCWDK6L7.js.map +0 -1
- package/dist/chunk-NEZ4OAOL.js.map +0 -1
- package/dist/chunk-NIHUOWE4.js +0 -106
- package/dist/chunk-NIHUOWE4.js.map +0 -1
- package/dist/chunk-NQW25DCF.js.map +0 -1
- package/dist/chunk-OYJQUA3D.js.map +0 -1
- package/dist/chunk-PJWGTNOX.js.map +0 -1
- package/dist/chunk-RIPSGNLU.js.map +0 -1
- package/dist/chunk-SZYQISA2.js.map +0 -1
- package/dist/chunk-USVBYQSQ.js.map +0 -1
- package/dist/chunk-V3KTSP3Q.js +0 -940
- package/dist/chunk-V3KTSP3Q.js.map +0 -1
- package/dist/chunk-WTWMGH2C.js.map +0 -1
- package/dist/load-agent-defs-YMDWBFDP.js +0 -14
- package/dist/recompile-project-agents-SZ76WNTW.js +0 -18
- package/dist/source-loader-C5SQXZXI.js.map +0 -1
- /package/dist/{load-agent-defs-YMDWBFDP.js.map → load-agent-defs-UBWITIEI.js.map} +0 -0
- /package/dist/{recompile-project-agents-SZ76WNTW.js.map → source-loader-YGG7DY2W.js.map} +0 -0
package/dist/hooks/init.js
CHANGED
|
@@ -1,33 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runDashboardFlow
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-KMOCMVK5.js";
|
|
5
|
+
import "../chunk-ZC6GC66J.js";
|
|
6
|
+
import "../chunk-JGPE4RRE.js";
|
|
7
|
+
import "../chunk-WDH6HHA3.js";
|
|
8
|
+
import "../chunk-P6CYS4JK.js";
|
|
9
9
|
import "../chunk-OZXAJNLA.js";
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
14
|
-
import "../chunk-
|
|
15
|
-
import "../chunk-
|
|
16
|
-
import "../chunk-
|
|
17
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-WM2N2D6Q.js";
|
|
11
|
+
import "../chunk-S2SKVJT2.js";
|
|
12
|
+
import "../chunk-EOKNEGRD.js";
|
|
13
|
+
import "../chunk-7IVLVEHX.js";
|
|
14
|
+
import "../chunk-WII6GOPM.js";
|
|
15
|
+
import "../chunk-AWWCRL5A.js";
|
|
16
|
+
import "../chunk-KIK5EZYD.js";
|
|
17
|
+
import "../chunk-W4KAY26P.js";
|
|
18
18
|
import {
|
|
19
19
|
EXIT_CODES
|
|
20
|
-
} from "../chunk-
|
|
21
|
-
import "../chunk-CLPUWOSA.js";
|
|
20
|
+
} from "../chunk-QIR56IDM.js";
|
|
22
21
|
import {
|
|
23
22
|
findConfigLoadFailures,
|
|
24
23
|
installationConfigsUnreadable,
|
|
25
24
|
retiredSourceFolderIn,
|
|
26
25
|
retiredSourceFolderUnsupported
|
|
27
|
-
} from "../chunk-
|
|
28
|
-
import "../chunk-
|
|
29
|
-
import "../chunk-
|
|
30
|
-
import "../chunk-
|
|
26
|
+
} from "../chunk-3YYHL76L.js";
|
|
27
|
+
import "../chunk-24OD7IP4.js";
|
|
28
|
+
import "../chunk-A6OWEJGC.js";
|
|
29
|
+
import "../chunk-GHHJYNAN.js";
|
|
31
30
|
|
|
32
31
|
// src/cli/hooks/init.ts
|
|
33
32
|
import os from "os";
|
package/dist/hooks/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/hooks/init.ts"],"sourcesContent":["import os from \"os\";\n\nimport { flush, type Hook } from \"@oclif/core\";\nimport { runDashboardFlow } from \"../commands/init.js\";\nimport { findConfigLoadFailures } from \"../lib/configuration/project-config.js\";\nimport { retiredSourceFolderIn } from \"../lib/installation/install-layout.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport {\n installationConfigsUnreadable,\n retiredSourceFolderUnsupported,\n} from \"../utils/messages.js\";\n\nconst hook: Hook<\"init\"> = async function (options) {\n sayTheRetiredSourceFolderIsUnsupported(process.cwd());\n\n // No command: the dashboard
|
|
1
|
+
{"version":3,"sources":["../../src/cli/hooks/init.ts"],"sourcesContent":["import os from \"os\";\n\nimport { flush, type Hook } from \"@oclif/core\";\nimport { runDashboardFlow } from \"../commands/init.js\";\nimport { findConfigLoadFailures } from \"../lib/configuration/project-config.js\";\nimport { retiredSourceFolderIn } from \"../lib/installation/install-layout.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport {\n installationConfigsUnreadable,\n retiredSourceFolderUnsupported,\n} from \"../utils/messages.js\";\n\nconst hook: Hook<\"init\"> = async function (options) {\n sayTheRetiredSourceFolderIsUnsupported(process.cwd());\n\n // No command: the dashboard.\n if (options.id === undefined) {\n const projectDir = process.cwd();\n // Checked here: oclif's hook runner swallows a load error thrown inside the dashboard.\n const unreadable = await findConfigLoadFailures(projectDir);\n if (unreadable.length > 0) {\n this.error(installationConfigsUnreadable(unreadable), { exit: EXIT_CODES.ERROR });\n }\n\n const dashboard = await runDashboardFlow(projectDir, options.config);\n if (dashboard === \"cancelled\") this.error(\"Cancelled\", { exit: EXIT_CODES.CANCELLED });\n if (dashboard === \"shown\") await endRun(EXIT_CODES.SUCCESS);\n }\n};\n\n/** Notice only, once per run; stderr so piped output is unchanged. */\nfunction sayTheRetiredSourceFolderIsUnsupported(cwd: string): void {\n const replacement = retiredSourceFolderIn([cwd, os.homedir()]);\n if (replacement === null) return;\n process.stderr.write(`${retiredSourceFolderUnsupported(replacement)}\\n`);\n}\n\n/** Not `this.exit(0)`: oclif swallows an exit 0 from a hook and goes on to print the root help. */\nasync function endRun(code: number): Promise<never> {\n await flush();\n process.exit(code);\n}\n\nexport default hook;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,QAAQ;AAEf,SAAS,aAAwB;AAUjC,IAAM,OAAqB,eAAgB,SAAS;AAClD,yCAAuC,QAAQ,IAAI,CAAC;AAGpD,MAAI,QAAQ,OAAO,QAAW;AAC5B,UAAM,aAAa,QAAQ,IAAI;AAE/B,UAAM,aAAa,MAAM,uBAAuB,UAAU;AAC1D,QAAI,WAAW,SAAS,GAAG;AACzB,WAAK,MAAM,8BAA8B,UAAU,GAAG,EAAE,MAAM,WAAW,MAAM,CAAC;AAAA,IAClF;AAEA,UAAM,YAAY,MAAM,iBAAiB,YAAY,QAAQ,MAAM;AACnE,QAAI,cAAc,YAAa,MAAK,MAAM,aAAa,EAAE,MAAM,WAAW,UAAU,CAAC;AACrF,QAAI,cAAc,QAAS,OAAM,OAAO,WAAW,OAAO;AAAA,EAC5D;AACF;AAGA,SAAS,uCAAuC,KAAmB;AACjE,QAAM,cAAc,sBAAsB,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;AAC7D,MAAI,gBAAgB,KAAM;AAC1B,UAAQ,OAAO,MAAM,GAAG,+BAA+B,WAAW,CAAC;AAAA,CAAI;AACzE;AAGA,eAAe,OAAO,MAA8B;AAClD,QAAM,MAAM;AACZ,UAAQ,KAAK,IAAI;AACnB;AAEA,IAAO,eAAQ;","names":[]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/index.ts"],"sourcesContent":["import { run, flush, Errors } from \"@oclif/core\";\n\nrun(undefined, import.meta.url)\n .then(() => flush())\n //
|
|
1
|
+
{"version":3,"sources":["../src/cli/index.ts"],"sourcesContent":["import { run, flush, Errors } from \"@oclif/core\";\n\nrun(undefined, import.meta.url)\n .then(() => flush())\n // Errors.handle needs an Error; a non-Error rejection would fail inside it.\n .catch((error: unknown) =>\n Errors.handle(error instanceof Error ? error : new Error(String(error))),\n );\n"],"mappings":";;;AAAA,SAAS,KAAK,OAAO,cAAc;AAEnC,IAAI,QAAW,YAAY,GAAG,EAC3B,KAAK,MAAM,MAAM,CAAC,EAElB;AAAA,EAAM,CAAC,UACN,OAAO,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,CAAC;AACzE;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
loadAgentDefs
|
|
4
|
+
} from "./chunk-7IVLVEHX.js";
|
|
5
|
+
import "./chunk-WII6GOPM.js";
|
|
6
|
+
import "./chunk-AWWCRL5A.js";
|
|
7
|
+
import "./chunk-3YYHL76L.js";
|
|
8
|
+
import "./chunk-24OD7IP4.js";
|
|
9
|
+
import "./chunk-A6OWEJGC.js";
|
|
10
|
+
import "./chunk-GHHJYNAN.js";
|
|
11
|
+
export {
|
|
12
|
+
loadAgentDefs
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=load-agent-defs-UBWITIEI.js.map
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
compileAgents,
|
|
4
|
+
discoverInstalledSkills,
|
|
5
|
+
withCatalogueSeatedFor
|
|
6
|
+
} from "./chunk-EOKNEGRD.js";
|
|
7
|
+
import {
|
|
8
|
+
loadAgentDefs
|
|
9
|
+
} from "./chunk-7IVLVEHX.js";
|
|
10
|
+
import "./chunk-WII6GOPM.js";
|
|
11
|
+
import "./chunk-AWWCRL5A.js";
|
|
12
|
+
import {
|
|
13
|
+
getErrorMessage,
|
|
14
|
+
resolveInstallPaths
|
|
15
|
+
} from "./chunk-3YYHL76L.js";
|
|
16
|
+
import "./chunk-24OD7IP4.js";
|
|
17
|
+
import "./chunk-A6OWEJGC.js";
|
|
18
|
+
import "./chunk-GHHJYNAN.js";
|
|
19
|
+
|
|
20
|
+
// src/cli/lib/operations/project/recompile-project-agents.ts
|
|
21
|
+
async function recompileRegisteredProjectAgents(projectDir) {
|
|
22
|
+
return withCatalogueSeatedFor(projectDir, async () => {
|
|
23
|
+
const { allSkills } = await discoverInstalledSkills(projectDir);
|
|
24
|
+
const { sourcePath } = await loadAgentDefs();
|
|
25
|
+
return compileAgents({
|
|
26
|
+
projectDir,
|
|
27
|
+
sourcePath,
|
|
28
|
+
skills: allSkills,
|
|
29
|
+
scopeFilter: "project",
|
|
30
|
+
outputDir: resolveInstallPaths(projectDir, "project").agentsDir
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async function recompilePropagatedProjectAgents(projectDirs, pairsRewritten) {
|
|
35
|
+
const outcomes = [];
|
|
36
|
+
for (const dir of projectDirs) {
|
|
37
|
+
outcomes.push(await recompileOutcomeFor(dir, pairsRewritten));
|
|
38
|
+
}
|
|
39
|
+
return summarizeRecompiles(outcomes);
|
|
40
|
+
}
|
|
41
|
+
async function recompileOutcomeFor(dir, pairsRewritten) {
|
|
42
|
+
try {
|
|
43
|
+
const result = await recompileRegisteredProjectAgents(dir);
|
|
44
|
+
if (result.failed.length > 0) return { kind: "failed", warnings: result.warnings };
|
|
45
|
+
const changed = result.rewritten.length > 0 || pairsRewritten.has(dir);
|
|
46
|
+
return { kind: changed ? "rewritten" : "unchanged" };
|
|
47
|
+
} catch (error) {
|
|
48
|
+
return {
|
|
49
|
+
kind: "failed",
|
|
50
|
+
warnings: [`Could not recompile agents in ${dir}: ${getErrorMessage(error)}`]
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function summarizeRecompiles(outcomes) {
|
|
55
|
+
return {
|
|
56
|
+
rewrittenCount: outcomes.filter((outcome) => outcome.kind === "rewritten").length,
|
|
57
|
+
unchangedCount: outcomes.filter((outcome) => outcome.kind === "unchanged").length,
|
|
58
|
+
failedCount: outcomes.filter((outcome) => outcome.kind === "failed").length,
|
|
59
|
+
warnings: outcomes.flatMap((outcome) => outcome.kind === "failed" ? outcome.warnings : [])
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
recompilePropagatedProjectAgents
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=recompile-project-agents-IQANWGOP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/operations/project/recompile-project-agents.ts"],"sourcesContent":["import { compileAgents, type CompilationResult } from \"./compile-agents.js\";\nimport { loadAgentDefs } from \"./load-agent-defs.js\";\nimport { discoverInstalledSkills } from \"../skills/index.js\";\nimport { resolveInstallPaths } from \"../../installation/index.js\";\nimport { withCatalogueSeatedFor } from \"../../loading/catalogue-seat.js\";\nimport { getErrorMessage } from \"../../../utils/errors.js\";\n\n/**\n * Project scope only: the triggering command already recompiled the global agents. Skills and\n * catalogue are resolved from this project; without explicit `skills`, `recompileAgents` would\n * see plugin skills only.\n */\nasync function recompileRegisteredProjectAgents(projectDir: string): Promise<CompilationResult> {\n return withCatalogueSeatedFor(projectDir, async () => {\n const { allSkills } = await discoverInstalledSkills(projectDir);\n const { sourcePath } = await loadAgentDefs();\n\n return compileAgents({\n projectDir,\n sourcePath,\n skills: allSkills,\n scopeFilter: \"project\",\n outputDir: resolveInstallPaths(projectDir, \"project\").agentsDir,\n });\n });\n}\n\nexport type PropagatedRecompileSummary = {\n /** Projects whose config pair or compiled sub-agents changed. */\n rewrittenCount: number;\n /** Projects visited where neither did. */\n unchangedCount: number;\n failedCount: number;\n warnings: string[];\n};\n\n/**\n * One project's failure must not stop the rest; sequential so warnings keep a stable order.\n * `pairsRewritten` names the projects whose config pair the fan-out changed.\n */\nexport async function recompilePropagatedProjectAgents(\n projectDirs: string[],\n pairsRewritten: ReadonlySet<string>,\n): Promise<PropagatedRecompileSummary> {\n const outcomes: ProjectRecompileOutcome[] = [];\n for (const dir of projectDirs) {\n outcomes.push(await recompileOutcomeFor(dir, pairsRewritten));\n }\n return summarizeRecompiles(outcomes);\n}\n\ntype ProjectRecompileOutcome =\n { kind: \"rewritten\" } | { kind: \"unchanged\" } | { kind: \"failed\"; warnings: string[] };\n\nasync function recompileOutcomeFor(\n dir: string,\n pairsRewritten: ReadonlySet<string>,\n): Promise<ProjectRecompileOutcome> {\n try {\n const result = await recompileRegisteredProjectAgents(dir);\n if (result.failed.length > 0) return { kind: \"failed\", warnings: result.warnings };\n\n const changed = result.rewritten.length > 0 || pairsRewritten.has(dir);\n return { kind: changed ? \"rewritten\" : \"unchanged\" };\n } catch (error) {\n return {\n kind: \"failed\",\n warnings: [`Could not recompile agents in ${dir}: ${getErrorMessage(error)}`],\n };\n }\n}\n\nfunction summarizeRecompiles(outcomes: ProjectRecompileOutcome[]): PropagatedRecompileSummary {\n return {\n rewrittenCount: outcomes.filter((outcome) => outcome.kind === \"rewritten\").length,\n unchangedCount: outcomes.filter((outcome) => outcome.kind === \"unchanged\").length,\n failedCount: outcomes.filter((outcome) => outcome.kind === \"failed\").length,\n warnings: outcomes.flatMap((outcome) => (outcome.kind === \"failed\" ? outcome.warnings : [])),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAYA,eAAe,iCAAiC,YAAgD;AAC9F,SAAO,uBAAuB,YAAY,YAAY;AACpD,UAAM,EAAE,UAAU,IAAI,MAAM,wBAAwB,UAAU;AAC9D,UAAM,EAAE,WAAW,IAAI,MAAM,cAAc;AAE3C,WAAO,cAAc;AAAA,MACnB;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,WAAW,oBAAoB,YAAY,SAAS,EAAE;AAAA,IACxD,CAAC;AAAA,EACH,CAAC;AACH;AAeA,eAAsB,iCACpB,aACA,gBACqC;AACrC,QAAM,WAAsC,CAAC;AAC7C,aAAW,OAAO,aAAa;AAC7B,aAAS,KAAK,MAAM,oBAAoB,KAAK,cAAc,CAAC;AAAA,EAC9D;AACA,SAAO,oBAAoB,QAAQ;AACrC;AAKA,eAAe,oBACb,KACA,gBACkC;AAClC,MAAI;AACF,UAAM,SAAS,MAAM,iCAAiC,GAAG;AACzD,QAAI,OAAO,OAAO,SAAS,EAAG,QAAO,EAAE,MAAM,UAAU,UAAU,OAAO,SAAS;AAEjF,UAAM,UAAU,OAAO,UAAU,SAAS,KAAK,eAAe,IAAI,GAAG;AACrE,WAAO,EAAE,MAAM,UAAU,cAAc,YAAY;AAAA,EACrD,SAAS,OAAO;AACd,WAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU,CAAC,iCAAiC,GAAG,KAAK,gBAAgB,KAAK,CAAC,EAAE;AAAA,IAC9E;AAAA,EACF;AACF;AAEA,SAAS,oBAAoB,UAAiE;AAC5F,SAAO;AAAA,IACL,gBAAgB,SAAS,OAAO,CAAC,YAAY,QAAQ,SAAS,WAAW,EAAE;AAAA,IAC3E,gBAAgB,SAAS,OAAO,CAAC,YAAY,QAAQ,SAAS,WAAW,EAAE;AAAA,IAC3E,aAAa,SAAS,OAAO,CAAC,YAAY,QAAQ,SAAS,QAAQ,EAAE;AAAA,IACrE,UAAU,SAAS,QAAQ,CAAC,YAAa,QAAQ,SAAS,WAAW,QAAQ,WAAW,CAAC,CAAE;AAAA,EAC7F;AACF;","names":[]}
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
loadMarketplaceMatrix,
|
|
6
6
|
loadSkillsMatrixFromSource,
|
|
7
7
|
mergeLocalSkillsIntoMatrix
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-3YYHL76L.js";
|
|
9
|
+
import "./chunk-24OD7IP4.js";
|
|
10
|
+
import "./chunk-A6OWEJGC.js";
|
|
11
|
+
import "./chunk-GHHJYNAN.js";
|
|
12
12
|
export {
|
|
13
13
|
MarketplaceManifestRequiredError,
|
|
14
14
|
convertStackToResolvedStack,
|
|
@@ -16,4 +16,4 @@ export {
|
|
|
16
16
|
loadSkillsMatrixFromSource,
|
|
17
17
|
mergeLocalSkillsIntoMatrix
|
|
18
18
|
};
|
|
19
|
-
//# sourceMappingURL=source-loader-
|
|
19
|
+
//# sourceMappingURL=source-loader-YGG7DY2W.js.map
|
|
@@ -59,11 +59,8 @@ spec names. Before calling the step done, check the pipeline against this list:
|
|
|
59
59
|
then the tests `ai-tester` wrote for this feature. Mock the model API rather than calling it — a test
|
|
60
60
|
that hits a live model is non-deterministic and costs money per run. Cover malformed output: empty,
|
|
61
61
|
truncated, and valid JSON of the wrong shape. Cover the token-limit boundary and the retry path with
|
|
62
|
-
simulated failures. Run the project's linter, and put a real request through the
|
|
63
|
-
mocked test cannot tell you whether the prompt actually works.
|
|
64
|
-
|
|
65
|
-
**Your stop hook runs the project's typecheck and nothing else.** Lint and tests are
|
|
66
|
-
deliberately outside it, so a clean stop says the code compiles — never that it works.
|
|
62
|
+
simulated failures. Run the project's typecheck and linter, and put a real request through the
|
|
63
|
+
pipeline where a mocked test cannot tell you whether the prompt actually works.
|
|
67
64
|
|
|
68
65
|
**Step 5 — Verify.** Take the success criteria one at a time: state the criterion, mark it PASS or
|
|
69
66
|
FAIL, and give the evidence — the test name, the command, or what you observed. Fix and re-verify
|
|
@@ -54,11 +54,8 @@ spec names. Before calling the step done, check the endpoint against this list:
|
|
|
54
54
|
|
|
55
55
|
**Step 4 — Test, lint, and call it.** Run the existing tests to confirm nothing broke, then the
|
|
56
56
|
tests `api-tester` wrote for this feature. A test that passes without exercising the requirement
|
|
57
|
-
covers nothing, so check what each one actually asserts. Run the project's linter, and
|
|
58
|
-
request to the endpoint where a test cannot reach what a caller would get.
|
|
59
|
-
|
|
60
|
-
**Your stop hook runs the project's typecheck and nothing else.** Lint and tests are
|
|
61
|
-
deliberately outside it, so a clean stop says the code compiles — never that it works.
|
|
57
|
+
covers nothing, so check what each one actually asserts. Run the project's typecheck and linter, and
|
|
58
|
+
send a real request to the endpoint where a test cannot reach what a caller would get.
|
|
62
59
|
|
|
63
60
|
**Step 5 — Verify.** Take the success criteria one at a time: state the criterion, mark it PASS or
|
|
64
61
|
FAIL, and give the evidence — the test name, the request you made, or what you observed. Fix and
|
|
@@ -55,11 +55,8 @@ spec names. Before calling the step done, check the command against this list:
|
|
|
55
55
|
|
|
56
56
|
**Step 4 — Test, lint, and run the command.** Run the existing tests to confirm nothing broke,
|
|
57
57
|
then the tests `cli-tester` wrote for this feature, and check that the cancellation paths are among
|
|
58
|
-
them. Run the project's linter, and drive the command yourself — including Ctrl+C —
|
|
59
|
-
cannot reach what a user would see.
|
|
60
|
-
|
|
61
|
-
**Your stop hook runs the project's typecheck and nothing else.** Lint and tests are
|
|
62
|
-
deliberately outside it, so a clean stop says the code compiles — never that it works.
|
|
58
|
+
them. Run the project's typecheck and linter, and drive the command yourself — including Ctrl+C —
|
|
59
|
+
where a test cannot reach what a user would see.
|
|
63
60
|
|
|
64
61
|
**Step 5 — Verify.** Take the success criteria one at a time: state the criterion, mark it PASS or
|
|
65
62
|
FAIL, and give the evidence — the test name, the command, or what you observed. Fix and re-verify
|
|
@@ -45,11 +45,8 @@ spec names.
|
|
|
45
45
|
|
|
46
46
|
**Step 4 — Test, lint, and see it run.** Run the existing tests to confirm nothing broke, then the
|
|
47
47
|
tests `web-tester` wrote for this feature. A test that passes without exercising the requirement
|
|
48
|
-
covers nothing, so check what each one actually asserts. Run the project's linter, and
|
|
49
|
-
feature yourself where a test cannot reach what a user would see.
|
|
50
|
-
|
|
51
|
-
**Your stop hook runs the project's typecheck and nothing else.** Lint and tests are
|
|
52
|
-
deliberately outside it, so a clean stop says the code compiles — never that it works.
|
|
48
|
+
covers nothing, so check what each one actually asserts. Run the project's typecheck and linter, and
|
|
49
|
+
exercise the feature yourself where a test cannot reach what a user would see.
|
|
53
50
|
|
|
54
51
|
**Step 5 — Verify.** Take the success criteria one at a time: state the criterion, mark it PASS or
|
|
55
52
|
FAIL, and give the evidence — the test name, the command, or what you observed. Fix and re-verify
|
|
@@ -13,8 +13,8 @@ Report the directory, then each file's content, then the config entry, then the
|
|
|
13
13
|
`tools` are required; every other key is optional, whatever its position in the file. Two of the
|
|
14
14
|
optional ones carry a default and therefore appear in every compiled agent whatever the metadata
|
|
15
15
|
says — `model` falls back to `inherit` and `permissionMode` to `default`.
|
|
16
|
-
`effort`, `disallowedTools`, `isolation` and `
|
|
17
|
-
|
|
16
|
+
`effort`, `disallowedTools`, `isolation`, `experimental` and `hooks` reach the frontmatter only
|
|
17
|
+
when set.
|
|
18
18
|
|
|
19
19
|
```yaml
|
|
20
20
|
# yaml-language-server: $schema=https://raw.githubusercontent.com/agents-inc/agents-inc/main/packages/cli/src/schemas/agent.schema.json
|
|
@@ -103,7 +103,7 @@ follows: `<domain_scope>` in `identity.md`, `<self_correction_triggers>` in
|
|
|
103
103
|
The compiled file, in order:
|
|
104
104
|
|
|
105
105
|
```
|
|
106
|
-
frontmatter metadata.yaml, plus the Skill grant
|
|
106
|
+
frontmatter metadata.yaml, plus the Skill grant
|
|
107
107
|
provenance marker an HTML comment the compile step stamps
|
|
108
108
|
# Title the title from metadata.yaml
|
|
109
109
|
<role> identity.md
|
|
@@ -226,18 +226,6 @@ because this repository does not use worktrees. Leave it off unless the project
|
|
|
226
226
|
for has asked for it — a researcher in particular wants the working tree itself, since the tree is
|
|
227
227
|
what the question is about.
|
|
228
228
|
|
|
229
|
-
**The completion gate arrives on its own.** Every agent holding `Write` or `Edit` gets a `Stop`
|
|
230
|
-
hook — logged by Claude Code as `SubagentStop` — that runs the project's typecheck
|
|
231
|
-
before the agent may stop; a failing
|
|
232
|
-
check comes back as the compiler's own output, so the agent iterates on it instead of reporting
|
|
233
|
-
done, and the hook exits quietly in a project that declares no such scripts. This is what stands in
|
|
234
|
-
place of a sentence asking an agent to check its own work. Declaring `hooks:` in `metadata.yaml` merges
|
|
235
|
-
with the gate rather than displacing it: a stop hook of your own — `Stop` or `SubagentStop`, which
|
|
236
|
-
Claude Code treats as one event for a sub-agent — replaces the emitted gate, and every other event is
|
|
237
|
-
added beside it. So a `PostToolUse` formatter costs an agent nothing, and an agent meaning to own its
|
|
238
|
-
completion checks declares `Stop` specifically. It has to declare an actual hook to do so:
|
|
239
|
-
`declaresOwnGate` tests for a non-empty array, so `Stop: []` states nothing and the gate stands.
|
|
240
|
-
|
|
241
229
|
</frontmatter_decisions>
|
|
242
230
|
|
|
243
231
|
---
|
|
@@ -3,11 +3,8 @@ document is a claim about source, and agents act on it without checking. Glob an
|
|
|
3
3
|
claim about what a file contains comes from reading it.
|
|
4
4
|
|
|
5
5
|
**Verify the finished document against the tree yourself, because no check does it for you.**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
reference document whose every path has rotted stops the agent green. Resolve each path and symbol
|
|
9
|
-
you wrote, confirm each pattern claim still has the instance you cited, and re-derive each count,
|
|
10
|
-
before you report.
|
|
6
|
+
Resolve each path and symbol you wrote, confirm each pattern claim still has the instance you cited,
|
|
7
|
+
and re-derive each count, before you report.
|
|
11
8
|
|
|
12
9
|
**Cite a path and a symbol, never a line number.** A symbol survives every edit above it and is
|
|
13
10
|
greppable; a line number rots on the next unrelated insertion, silently, while still reading as
|
|
@@ -12,10 +12,8 @@ proposal that describes a change leaves the wording to whoever applies it, and t
|
|
|
12
12
|
approved rule turns into a different one.
|
|
13
13
|
|
|
14
14
|
**Confirm the target file and section exist before you propose an edit, and read the rule back in
|
|
15
|
-
place after you apply one.** No check does this for you
|
|
16
|
-
|
|
17
|
-
quietly in a project that declares no such script. A rule that read correctly in the proposal can
|
|
18
|
-
contradict the one above it once it lands, and a proposal naming a section that no longer exists
|
|
15
|
+
place after you apply one.** No check does this for you. A rule that read correctly in the proposal
|
|
16
|
+
can contradict the one above it once it lands, and a proposal naming a section that no longer exists
|
|
19
17
|
cannot be applied at all.
|
|
20
18
|
|
|
21
19
|
**Mark a processed finding resolved in its own file, at its own path** — `status: resolved` plus a
|
|
@@ -34,8 +34,7 @@ pass threshold.** An eval in the blocking suite fails for reasons no one can rep
|
|
|
34
34
|
**Watch each test fail for the right reason before the implementation exists, then pass after it.**
|
|
35
35
|
A test that has never failed has not been shown to test anything.
|
|
36
36
|
|
|
37
|
-
**Run the suite and report its actual output before claiming completion.**
|
|
38
|
-
the project's typecheck and nothing else, so whether the tests pass is yours to establish.
|
|
37
|
+
**Run the suite and report its actual output before claiming completion.**
|
|
39
38
|
|
|
40
39
|
<self_correction_triggers>
|
|
41
40
|
|
|
@@ -144,6 +144,8 @@ the code does rather than what the feature owes.
|
|
|
144
144
|
2. Run with a randomized test order if the runner supports it
|
|
145
145
|
3. Confirm no test leaks timers, streams, or unclosed handles
|
|
146
146
|
4. Confirm the eval suite is excluded from the default run
|
|
147
|
+
5. Run the project's typecheck once the implementation exists, and fix every error it reports in a
|
|
148
|
+
test file — a runner that strips types runs a test file the compiler rejects
|
|
147
149
|
|
|
148
150
|
**ITERATE: Fix causes, not symptoms**
|
|
149
151
|
1. Flaky test? Find the nondeterminism (clock, ordering, shared fixture, live call) and remove it
|
|
@@ -24,8 +24,7 @@ somewhere else entirely, which is where the debugging time goes.
|
|
|
24
24
|
data-integrity bugs — a handler that returns 201 and persists nothing passes an
|
|
25
25
|
HTTP-only assertion.
|
|
26
26
|
|
|
27
|
-
**Run the suite and report its actual output before claiming completion.**
|
|
28
|
-
the project's typecheck and nothing else, so whether the tests pass is yours to establish.
|
|
27
|
+
**Run the suite and report its actual output before claiming completion.**
|
|
29
28
|
|
|
30
29
|
**Record a finding the way this project's conventions direct** when you fix an anti-pattern or
|
|
31
30
|
discover a missing standard, so the next agent inherits it rather than rediscovering it.
|
|
@@ -63,6 +63,8 @@ nothing to do with the endpoint under test.
|
|
|
63
63
|
2. Verify tests fail for expected reasons (not setup errors)
|
|
64
64
|
3. Check tests pass after implementation exists
|
|
65
65
|
4. Confirm database cleanup prevents test pollution
|
|
66
|
+
5. Run the project's typecheck once the implementation exists, and fix every error it reports in a
|
|
67
|
+
test file — a runner that strips types runs a test file the compiler rejects
|
|
66
68
|
|
|
67
69
|
**ITERATE: Fix and Improve**
|
|
68
70
|
1. If tests are flaky, check for shared database state
|
|
@@ -26,8 +26,7 @@ removed rather than deprecated.
|
|
|
26
26
|
A test that passes immediately has not been shown to test anything.
|
|
27
27
|
|
|
28
28
|
**Run the suite with the project's own test command — the `test` script in its `package.json` — and
|
|
29
|
-
report the actual output before claiming completion.**
|
|
30
|
-
typecheck and nothing else, so whether the tests pass is yours to establish.
|
|
29
|
+
report the actual output before claiming completion.**
|
|
31
30
|
|
|
32
31
|
<self_correction_triggers>
|
|
33
32
|
|
|
@@ -60,6 +60,8 @@ file for a reason none of them names.
|
|
|
60
60
|
2. Verify tests fail for expected reasons (not syntax errors)
|
|
61
61
|
3. Check tests pass after implementation exists
|
|
62
62
|
4. Confirm cleanup prevents memory leaks
|
|
63
|
+
5. Run the project's typecheck once the implementation exists, and fix every error it reports in a
|
|
64
|
+
test file — a runner that strips types runs a test file the compiler rejects
|
|
63
65
|
|
|
64
66
|
**ITERATE: Fix and Improve**
|
|
65
67
|
1. If tests are flaky, find what they race — an unfired effect, a missing unmount, a shared store —
|
|
@@ -17,8 +17,7 @@ drifts from it.
|
|
|
17
17
|
**Mock the boundaries — APIs, databases, external services — so no test reaches a real one.** A
|
|
18
18
|
suite that talks to a live service fails for reasons that have nothing to do with the code.
|
|
19
19
|
|
|
20
|
-
**Run the suite and report its actual output before claiming completion.**
|
|
21
|
-
the project's typecheck and nothing else, so whether the tests pass is yours to establish.
|
|
20
|
+
**Run the suite and report its actual output before claiming completion.**
|
|
22
21
|
|
|
23
22
|
<self_correction_triggers>
|
|
24
23
|
|
|
@@ -54,6 +54,8 @@ result.
|
|
|
54
54
|
1. web-developer cleans up the implementation without changing behavior
|
|
55
55
|
2. Re-run the suite - it must still pass, unedited
|
|
56
56
|
3. A test that reddens on a behavior-preserving refactor was testing implementation; fix that test
|
|
57
|
+
4. Run the project's typecheck, and fix every error it reports in a test file - a runner that strips
|
|
58
|
+
types runs a test file the compiler rejects
|
|
57
59
|
|
|
58
60
|
**Hand Off to Developer:**
|
|
59
61
|
- Provide complete test file
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agents-inc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.171.0",
|
|
4
4
|
"description": "CLI for managing Agents Inc. skills, stacks, and agents for Claude Code",
|
|
5
|
-
"//generate": "
|
|
6
|
-
"//no-shared-vitest-config": "A three-project suite
|
|
7
|
-
"//test:smoke": "
|
|
5
|
+
"//generate": "Runs all four generators in dependency order; the :check variants stay separate because CI runs different subsets.",
|
|
6
|
+
"//no-shared-vitest-config": "A three-project suite with globals on and its own setup and timeouts; the shared single-project, globals-off config would contradict it.",
|
|
7
|
+
"//test:smoke": "Runs e2e *.smoke.test.ts; the Claude probes skip without the binary, the Codex probe runs for real.",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"exports": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"prompt-engineering",
|
|
45
45
|
"ai-tools"
|
|
46
46
|
],
|
|
47
|
-
"//sideEffects": "compile-seat.ts is imported bare
|
|
47
|
+
"//sideEffects": "compile-seat.ts is imported bare for its side effect, which plain false would let esbuild drop.",
|
|
48
48
|
"sideEffects": [
|
|
49
49
|
"./src/cli/lib/compile-seat.ts"
|
|
50
50
|
],
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"dev": "tsup --watch",
|
|
77
77
|
"agentsinc": "node dist/index.js",
|
|
78
78
|
"agentsinc:dev": "bun src/cli/index.ts",
|
|
79
|
-
"//test": "No
|
|
79
|
+
"//test": "No pretest hook: turbo already builds before test, and a second build races tsup on dist/.",
|
|
80
80
|
"test": "vitest run",
|
|
81
81
|
"test:e2e": "vitest --config e2e/vitest.config.ts --run --project e2e",
|
|
82
82
|
"test:smoke": "vitest --config e2e/vitest.config.ts --run --project smoke",
|
|
@@ -122,7 +122,6 @@
|
|
|
122
122
|
"fast-glob": "^3.3.0",
|
|
123
123
|
"fs-extra": "^11.2.0",
|
|
124
124
|
"giget": "^1.2.0",
|
|
125
|
-
"gray-matter": "^4.0.3",
|
|
126
125
|
"ink": "^7",
|
|
127
126
|
"jiti": "2.4.2",
|
|
128
127
|
"liquidjs": "^10.24.0",
|
|
@@ -131,7 +130,7 @@
|
|
|
131
130
|
"yaml": "^2.9.0",
|
|
132
131
|
"zod": "^4.4.3"
|
|
133
132
|
},
|
|
134
|
-
"//devDependencies": "
|
|
133
|
+
"//devDependencies": "The private @workspace packages are devDependencies so tsup bundles them (see noExternal); hono is omitted from dependencies so it is inlined too.",
|
|
135
134
|
"devDependencies": {
|
|
136
135
|
"@eslint/js": "^10",
|
|
137
136
|
"@lydell/node-pty": "^1.2.0-beta.3",
|
|
@@ -148,6 +147,8 @@
|
|
|
148
147
|
"@workspace/matrix": "workspace:*",
|
|
149
148
|
"@workspace/typescript-config": "workspace:*",
|
|
150
149
|
"@xterm/headless": "^6.0.0",
|
|
150
|
+
"ansis": "^3.17.0",
|
|
151
|
+
"esbuild": "^0.28.1",
|
|
151
152
|
"eslint": "^10",
|
|
152
153
|
"eslint-config-prettier": "^10",
|
|
153
154
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
@@ -59,11 +59,8 @@ spec names. Before calling the step done, check the pipeline against this list:
|
|
|
59
59
|
then the tests `ai-tester` wrote for this feature. Mock the model API rather than calling it — a test
|
|
60
60
|
that hits a live model is non-deterministic and costs money per run. Cover malformed output: empty,
|
|
61
61
|
truncated, and valid JSON of the wrong shape. Cover the token-limit boundary and the retry path with
|
|
62
|
-
simulated failures. Run the project's linter, and put a real request through the
|
|
63
|
-
mocked test cannot tell you whether the prompt actually works.
|
|
64
|
-
|
|
65
|
-
**Your stop hook runs the project's typecheck and nothing else.** Lint and tests are
|
|
66
|
-
deliberately outside it, so a clean stop says the code compiles — never that it works.
|
|
62
|
+
simulated failures. Run the project's typecheck and linter, and put a real request through the
|
|
63
|
+
pipeline where a mocked test cannot tell you whether the prompt actually works.
|
|
67
64
|
|
|
68
65
|
**Step 5 — Verify.** Take the success criteria one at a time: state the criterion, mark it PASS or
|
|
69
66
|
FAIL, and give the evidence — the test name, the command, or what you observed. Fix and re-verify
|
|
@@ -54,11 +54,8 @@ spec names. Before calling the step done, check the endpoint against this list:
|
|
|
54
54
|
|
|
55
55
|
**Step 4 — Test, lint, and call it.** Run the existing tests to confirm nothing broke, then the
|
|
56
56
|
tests `api-tester` wrote for this feature. A test that passes without exercising the requirement
|
|
57
|
-
covers nothing, so check what each one actually asserts. Run the project's linter, and
|
|
58
|
-
request to the endpoint where a test cannot reach what a caller would get.
|
|
59
|
-
|
|
60
|
-
**Your stop hook runs the project's typecheck and nothing else.** Lint and tests are
|
|
61
|
-
deliberately outside it, so a clean stop says the code compiles — never that it works.
|
|
57
|
+
covers nothing, so check what each one actually asserts. Run the project's typecheck and linter, and
|
|
58
|
+
send a real request to the endpoint where a test cannot reach what a caller would get.
|
|
62
59
|
|
|
63
60
|
**Step 5 — Verify.** Take the success criteria one at a time: state the criterion, mark it PASS or
|
|
64
61
|
FAIL, and give the evidence — the test name, the request you made, or what you observed. Fix and
|
|
@@ -55,11 +55,8 @@ spec names. Before calling the step done, check the command against this list:
|
|
|
55
55
|
|
|
56
56
|
**Step 4 — Test, lint, and run the command.** Run the existing tests to confirm nothing broke,
|
|
57
57
|
then the tests `cli-tester` wrote for this feature, and check that the cancellation paths are among
|
|
58
|
-
them. Run the project's linter, and drive the command yourself — including Ctrl+C —
|
|
59
|
-
cannot reach what a user would see.
|
|
60
|
-
|
|
61
|
-
**Your stop hook runs the project's typecheck and nothing else.** Lint and tests are
|
|
62
|
-
deliberately outside it, so a clean stop says the code compiles — never that it works.
|
|
58
|
+
them. Run the project's typecheck and linter, and drive the command yourself — including Ctrl+C —
|
|
59
|
+
where a test cannot reach what a user would see.
|
|
63
60
|
|
|
64
61
|
**Step 5 — Verify.** Take the success criteria one at a time: state the criterion, mark it PASS or
|
|
65
62
|
FAIL, and give the evidence — the test name, the command, or what you observed. Fix and re-verify
|
|
@@ -45,11 +45,8 @@ spec names.
|
|
|
45
45
|
|
|
46
46
|
**Step 4 — Test, lint, and see it run.** Run the existing tests to confirm nothing broke, then the
|
|
47
47
|
tests `web-tester` wrote for this feature. A test that passes without exercising the requirement
|
|
48
|
-
covers nothing, so check what each one actually asserts. Run the project's linter, and
|
|
49
|
-
feature yourself where a test cannot reach what a user would see.
|
|
50
|
-
|
|
51
|
-
**Your stop hook runs the project's typecheck and nothing else.** Lint and tests are
|
|
52
|
-
deliberately outside it, so a clean stop says the code compiles — never that it works.
|
|
48
|
+
covers nothing, so check what each one actually asserts. Run the project's typecheck and linter, and
|
|
49
|
+
exercise the feature yourself where a test cannot reach what a user would see.
|
|
53
50
|
|
|
54
51
|
**Step 5 — Verify.** Take the success criteria one at a time: state the criterion, mark it PASS or
|
|
55
52
|
FAIL, and give the evidence — the test name, the command, or what you observed. Fix and re-verify
|
|
@@ -13,8 +13,8 @@ Report the directory, then each file's content, then the config entry, then the
|
|
|
13
13
|
`tools` are required; every other key is optional, whatever its position in the file. Two of the
|
|
14
14
|
optional ones carry a default and therefore appear in every compiled agent whatever the metadata
|
|
15
15
|
says — `model` falls back to `inherit` and `permissionMode` to `default`.
|
|
16
|
-
`effort`, `disallowedTools`, `isolation` and `
|
|
17
|
-
|
|
16
|
+
`effort`, `disallowedTools`, `isolation`, `experimental` and `hooks` reach the frontmatter only
|
|
17
|
+
when set.
|
|
18
18
|
|
|
19
19
|
```yaml
|
|
20
20
|
# yaml-language-server: $schema=https://raw.githubusercontent.com/agents-inc/agents-inc/main/packages/cli/src/schemas/agent.schema.json
|
|
@@ -103,7 +103,7 @@ follows: `<domain_scope>` in `identity.md`, `<self_correction_triggers>` in
|
|
|
103
103
|
The compiled file, in order:
|
|
104
104
|
|
|
105
105
|
```
|
|
106
|
-
frontmatter metadata.yaml, plus the Skill grant
|
|
106
|
+
frontmatter metadata.yaml, plus the Skill grant
|
|
107
107
|
provenance marker an HTML comment the compile step stamps
|
|
108
108
|
# Title the title from metadata.yaml
|
|
109
109
|
<role> identity.md
|
|
@@ -226,18 +226,6 @@ because this repository does not use worktrees. Leave it off unless the project
|
|
|
226
226
|
for has asked for it — a researcher in particular wants the working tree itself, since the tree is
|
|
227
227
|
what the question is about.
|
|
228
228
|
|
|
229
|
-
**The completion gate arrives on its own.** Every agent holding `Write` or `Edit` gets a `Stop`
|
|
230
|
-
hook — logged by Claude Code as `SubagentStop` — that runs the project's typecheck
|
|
231
|
-
before the agent may stop; a failing
|
|
232
|
-
check comes back as the compiler's own output, so the agent iterates on it instead of reporting
|
|
233
|
-
done, and the hook exits quietly in a project that declares no such scripts. This is what stands in
|
|
234
|
-
place of a sentence asking an agent to check its own work. Declaring `hooks:` in `metadata.yaml` merges
|
|
235
|
-
with the gate rather than displacing it: a stop hook of your own — `Stop` or `SubagentStop`, which
|
|
236
|
-
Claude Code treats as one event for a sub-agent — replaces the emitted gate, and every other event is
|
|
237
|
-
added beside it. So a `PostToolUse` formatter costs an agent nothing, and an agent meaning to own its
|
|
238
|
-
completion checks declares `Stop` specifically. It has to declare an actual hook to do so:
|
|
239
|
-
`declaresOwnGate` tests for a non-empty array, so `Stop: []` states nothing and the gate stands.
|
|
240
|
-
|
|
241
229
|
</frontmatter_decisions>
|
|
242
230
|
|
|
243
231
|
---
|
|
@@ -3,11 +3,8 @@ document is a claim about source, and agents act on it without checking. Glob an
|
|
|
3
3
|
claim about what a file contains comes from reading it.
|
|
4
4
|
|
|
5
5
|
**Verify the finished document against the tree yourself, because no check does it for you.**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
reference document whose every path has rotted stops the agent green. Resolve each path and symbol
|
|
9
|
-
you wrote, confirm each pattern claim still has the instance you cited, and re-derive each count,
|
|
10
|
-
before you report.
|
|
6
|
+
Resolve each path and symbol you wrote, confirm each pattern claim still has the instance you cited,
|
|
7
|
+
and re-derive each count, before you report.
|
|
11
8
|
|
|
12
9
|
**Cite a path and a symbol, never a line number.** A symbol survives every edit above it and is
|
|
13
10
|
greppable; a line number rots on the next unrelated insertion, silently, while still reading as
|