agents-inc 0.154.0 → 0.155.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 +41 -0
- package/dist/chunk-2H7UWE2G.js +246 -0
- package/dist/chunk-2H7UWE2G.js.map +1 -0
- package/dist/{chunk-LA3JPESW.js → chunk-4A4L3YIW.js} +5 -5
- package/dist/chunk-4G2YHZIM.js +132 -0
- package/dist/chunk-4G2YHZIM.js.map +1 -0
- package/dist/{chunk-BZ4CZBOM.js → chunk-5F2YR5XV.js} +3 -3
- package/dist/{chunk-CHNA5RVS.js → chunk-5OKLCVM4.js} +3 -3
- package/dist/{chunk-ZU6DAR4S.js → chunk-5QZAK6J7.js} +7 -7
- package/dist/{chunk-ZU6DAR4S.js.map → chunk-5QZAK6J7.js.map} +1 -1
- package/dist/{chunk-NFH6SA62.js → chunk-6RLV45HN.js} +10 -10
- package/dist/{chunk-NFH6SA62.js.map → chunk-6RLV45HN.js.map} +1 -1
- package/dist/{chunk-GUDGCFSF.js → chunk-CLFHC2DK.js} +15 -106
- package/dist/chunk-CLFHC2DK.js.map +1 -0
- package/dist/chunk-D2CAV7MG.js +61 -0
- package/dist/chunk-D2CAV7MG.js.map +1 -0
- package/dist/{chunk-UW44KSYL.js → chunk-F2AMBBIA.js} +6 -6
- package/dist/{chunk-UW44KSYL.js.map → chunk-F2AMBBIA.js.map} +1 -1
- package/dist/{chunk-QQTYMW7N.js → chunk-F5T6TV4Z.js} +206 -73
- package/dist/chunk-F5T6TV4Z.js.map +1 -0
- package/dist/{chunk-K3O3YQYG.js → chunk-G47TDUK3.js} +2 -2
- package/dist/{chunk-AURY6RT6.js → chunk-GS2NZ3GD.js} +8 -8
- package/dist/chunk-GS2NZ3GD.js.map +1 -0
- package/dist/{chunk-5MFJ24VM.js → chunk-H6UTKTLK.js} +104 -250
- package/dist/chunk-H6UTKTLK.js.map +1 -0
- package/dist/{chunk-MJFIO5SX.js → chunk-HG4JPXJT.js} +11 -11
- package/dist/chunk-HG4JPXJT.js.map +1 -0
- package/dist/{chunk-IXEDSKMH.js → chunk-HTYH7CKN.js} +3 -3
- package/dist/{chunk-JC7DBPRD.js → chunk-HXKOIWLU.js} +2 -2
- package/dist/chunk-HXKOIWLU.js.map +1 -0
- package/dist/{chunk-NSJ2S7R5.js → chunk-ILUVL7WM.js} +2 -2
- package/dist/{chunk-R54KIGN2.js → chunk-IO5YBKHV.js} +13 -2
- package/dist/chunk-IO5YBKHV.js.map +1 -0
- package/dist/chunk-IXRZAHZF.js +53 -0
- package/dist/chunk-IXRZAHZF.js.map +1 -0
- package/dist/chunk-JCPANDNR.js +35 -0
- package/dist/chunk-JCPANDNR.js.map +1 -0
- package/dist/{chunk-NKCY2ULI.js → chunk-LJCNUP6M.js} +2 -2
- package/dist/{chunk-PRJD5MMQ.js → chunk-MHRC3KRX.js} +5 -5
- package/dist/chunk-MHRC3KRX.js.map +1 -0
- package/dist/chunk-MO5FGLVS.js +142 -0
- package/dist/chunk-MO5FGLVS.js.map +1 -0
- package/dist/{chunk-Q5FLW4JG.js → chunk-OKH64JZE.js} +2 -2
- package/dist/{chunk-WRRP47PY.js → chunk-PCC4LBKB.js} +2 -2
- package/dist/chunk-PMUABBPG.js +258 -0
- package/dist/chunk-PMUABBPG.js.map +1 -0
- package/dist/{chunk-2IMYK4WN.js → chunk-PNMM5HNX.js} +5 -5
- package/dist/{chunk-AKQ5QISO.js → chunk-QWVXOCXO.js} +6 -6
- package/dist/{chunk-IPJOMAWC.js → chunk-RWOYPOMR.js} +12 -2
- package/dist/{chunk-IPJOMAWC.js.map → chunk-RWOYPOMR.js.map} +1 -1
- package/dist/{chunk-ONWEOS77.js → chunk-SY4X2LND.js} +4 -4
- package/dist/{chunk-XGMOXMS4.js → chunk-TBOVYLQJ.js} +2 -2
- package/dist/{chunk-R7JV22QK.js → chunk-TNGMF4UX.js} +20 -20
- package/dist/{chunk-R7JV22QK.js.map → chunk-TNGMF4UX.js.map} +1 -1
- package/dist/{chunk-7VZV4O6B.js → chunk-UMH2YZKG.js} +14 -5
- package/dist/chunk-UMH2YZKG.js.map +1 -0
- package/dist/{chunk-6CNRMCFM.js → chunk-VPASBA7P.js} +2 -2
- package/dist/{chunk-CBF4ZYV3.js → chunk-WCAUUBHO.js} +1376 -741
- package/dist/chunk-WCAUUBHO.js.map +1 -0
- package/dist/{chunk-V3ENMW7G.js → chunk-WFRTHH3A.js} +3 -3
- package/dist/{chunk-DRKSYJZ2.js → chunk-WTJ3AY33.js} +1 -1
- package/dist/{chunk-DRKSYJZ2.js.map → chunk-WTJ3AY33.js.map} +1 -1
- package/dist/{chunk-XMEIVWAS.js → chunk-WUQ3MTPF.js} +11 -5
- package/dist/{chunk-XMEIVWAS.js.map → chunk-WUQ3MTPF.js.map} +1 -1
- package/dist/{chunk-4VCWL2IG.js → chunk-XAXJWXI4.js} +92 -59
- package/dist/chunk-XAXJWXI4.js.map +1 -0
- package/dist/{chunk-B66SC72V.js → chunk-Y5Y7XHVU.js} +4 -4
- package/dist/{chunk-FMYHWKGG.js → chunk-YO2LTXB4.js} +66 -16
- package/dist/chunk-YO2LTXB4.js.map +1 -0
- package/dist/{chunk-TUQF577Z.js → chunk-ZUAZHDKP.js} +40 -41
- package/dist/chunk-ZUAZHDKP.js.map +1 -0
- package/dist/commands/build/marketplace.js +98 -121
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +8 -8
- package/dist/commands/compile.js +19 -24
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/doctor.js +220 -79
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +549 -75
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +26 -21
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/init.js +41 -39
- package/dist/commands/list.js +11 -11
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/marketplace.js +243 -0
- package/dist/commands/new/marketplace.js.map +1 -0
- package/dist/commands/search.js +16 -14
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/share.js +67 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/uninstall.js +61 -74
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +9 -9
- package/dist/commands/update.js.map +1 -1
- package/dist/components/common/prompt-confirm.js +1 -1
- package/dist/components/common/removal-plan-confirm.js +10 -0
- package/dist/components/common/select-list.js +2 -2
- package/dist/components/wizard/category-grid.js +5 -5
- package/dist/components/wizard/checkbox-grid.js +5 -5
- package/dist/components/wizard/domain-selection.js +11 -11
- package/dist/components/wizard/run-wizard-session.js +29 -28
- package/dist/components/wizard/scroll-affordance.js +2 -2
- package/dist/components/wizard/skill-agent-summary.js +6 -6
- package/dist/components/wizard/source-grid.js +6 -6
- package/dist/components/wizard/stack-selection.js +8 -8
- package/dist/components/wizard/step-agents.js +10 -11
- package/dist/components/wizard/step-build.js +9 -9
- package/dist/components/wizard/step-confirm.js +10 -10
- package/dist/components/wizard/step-sources.js +10 -10
- package/dist/components/wizard/step-stack.js +9 -9
- package/dist/components/wizard/summary-panel.js +9 -9
- package/dist/components/wizard/toast.js +2 -2
- package/dist/components/wizard/wizard-layout.js +14 -14
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard.js +27 -27
- package/dist/copy-local-skills-NSUTBVLJ.js +14 -0
- package/dist/hooks/init.js +42 -62
- package/dist/hooks/init.js.map +1 -1
- package/dist/load-agent-defs-X4E57I2U.js +15 -0
- package/dist/{loader-JIZDTR4G.js → loader-G6BFG2VA.js} +3 -3
- package/dist/recompile-project-agents-JE4MM72I.js +20 -0
- package/dist/{source-loader-OE6EJFPU.js → source-loader-3DL3NYUX.js} +7 -5
- package/dist/source-loader-3DL3NYUX.js.map +1 -0
- package/dist/src/agents/developer/ai-developer/critical-reminders.md +1 -1
- package/dist/src/agents/developer/ai-developer/critical-requirements.md +1 -1
- package/dist/src/agents/developer/ai-developer/identity.md +1 -1
- package/dist/src/agents/developer/ai-developer/playbook.md +1 -1
- package/dist/src/agents/developer/api-developer/identity.md +1 -1
- package/dist/src/agents/developer/cli-developer/identity.md +1 -1
- package/dist/src/agents/developer/web-developer/identity.md +1 -1
- package/dist/src/agents/meta/codex-keeper/identity.md +1 -1
- package/dist/src/agents/meta/convention-keeper/identity.md +1 -1
- package/dist/src/agents/meta/skill-summoner/identity.md +1 -1
- package/dist/src/agents/researcher/ai-researcher/identity.md +1 -1
- package/dist/src/agents/researcher/api-researcher/identity.md +1 -1
- package/dist/src/agents/researcher/cli-researcher/identity.md +1 -1
- package/dist/src/agents/researcher/web-researcher/identity.md +1 -1
- package/dist/src/agents/reviewer/reviewer/playbook.md +1 -1
- package/dist/src/agents/tester/ai-tester/identity.md +1 -1
- package/dist/src/agents/tester/api-tester/critical-reminders.md +1 -1
- package/dist/src/agents/tester/api-tester/critical-requirements.md +1 -1
- package/dist/src/agents/tester/api-tester/identity.md +2 -2
- package/dist/src/agents/tester/cli-tester/identity.md +1 -1
- package/dist/src/agents/tester/web-tester/identity.md +3 -3
- package/dist/stores/wizard-store.js +7 -5
- package/package.json +10 -7
- package/src/agents/developer/ai-developer/critical-reminders.md +1 -1
- package/src/agents/developer/ai-developer/critical-requirements.md +1 -1
- package/src/agents/developer/ai-developer/identity.md +1 -1
- package/src/agents/developer/ai-developer/playbook.md +1 -1
- package/src/agents/developer/api-developer/identity.md +1 -1
- package/src/agents/developer/cli-developer/identity.md +1 -1
- package/src/agents/developer/web-developer/identity.md +1 -1
- package/src/agents/meta/codex-keeper/identity.md +1 -1
- package/src/agents/meta/convention-keeper/identity.md +1 -1
- package/src/agents/meta/skill-summoner/identity.md +1 -1
- package/src/agents/researcher/ai-researcher/identity.md +1 -1
- package/src/agents/researcher/api-researcher/identity.md +1 -1
- package/src/agents/researcher/cli-researcher/identity.md +1 -1
- package/src/agents/researcher/web-researcher/identity.md +1 -1
- package/src/agents/reviewer/reviewer/playbook.md +1 -1
- package/src/agents/tester/ai-tester/identity.md +1 -1
- package/src/agents/tester/api-tester/critical-reminders.md +1 -1
- package/src/agents/tester/api-tester/critical-requirements.md +1 -1
- package/src/agents/tester/api-tester/identity.md +2 -2
- package/src/agents/tester/cli-tester/identity.md +1 -1
- package/src/agents/tester/web-tester/identity.md +3 -3
- package/src/schemas/custom-metadata.schema.json +3 -0
- package/src/schemas/metadata.schema.json +3 -0
- package/src/schemas/project-config.schema.json +4 -8
- package/src/schemas/project-source-config.schema.json +2 -2
- package/dist/chunk-4VCWL2IG.js.map +0 -1
- package/dist/chunk-5MFJ24VM.js.map +0 -1
- package/dist/chunk-7VZV4O6B.js.map +0 -1
- package/dist/chunk-AURY6RT6.js.map +0 -1
- package/dist/chunk-CBF4ZYV3.js.map +0 -1
- package/dist/chunk-FMYHWKGG.js.map +0 -1
- package/dist/chunk-GUDGCFSF.js.map +0 -1
- package/dist/chunk-JC7DBPRD.js.map +0 -1
- package/dist/chunk-MJFIO5SX.js.map +0 -1
- package/dist/chunk-OJJLYHM3.js +0 -34
- package/dist/chunk-OJJLYHM3.js.map +0 -1
- package/dist/chunk-PRJD5MMQ.js.map +0 -1
- package/dist/chunk-QQTYMW7N.js.map +0 -1
- package/dist/chunk-QUDQTO3O.js +0 -41
- package/dist/chunk-QUDQTO3O.js.map +0 -1
- package/dist/chunk-R54KIGN2.js.map +0 -1
- package/dist/chunk-TUQF577Z.js.map +0 -1
- package/dist/copy-local-skills-WVHJFRPK.js +0 -14
- package/dist/load-agent-defs-5OT54J5M.js +0 -15
- package/dist/recompile-project-agents-VREEPBDV.js +0 -20
- /package/dist/{chunk-LA3JPESW.js.map → chunk-4A4L3YIW.js.map} +0 -0
- /package/dist/{chunk-BZ4CZBOM.js.map → chunk-5F2YR5XV.js.map} +0 -0
- /package/dist/{chunk-CHNA5RVS.js.map → chunk-5OKLCVM4.js.map} +0 -0
- /package/dist/{chunk-K3O3YQYG.js.map → chunk-G47TDUK3.js.map} +0 -0
- /package/dist/{chunk-IXEDSKMH.js.map → chunk-HTYH7CKN.js.map} +0 -0
- /package/dist/{chunk-NSJ2S7R5.js.map → chunk-ILUVL7WM.js.map} +0 -0
- /package/dist/{chunk-NKCY2ULI.js.map → chunk-LJCNUP6M.js.map} +0 -0
- /package/dist/{chunk-Q5FLW4JG.js.map → chunk-OKH64JZE.js.map} +0 -0
- /package/dist/{chunk-WRRP47PY.js.map → chunk-PCC4LBKB.js.map} +0 -0
- /package/dist/{chunk-2IMYK4WN.js.map → chunk-PNMM5HNX.js.map} +0 -0
- /package/dist/{chunk-AKQ5QISO.js.map → chunk-QWVXOCXO.js.map} +0 -0
- /package/dist/{chunk-ONWEOS77.js.map → chunk-SY4X2LND.js.map} +0 -0
- /package/dist/{chunk-XGMOXMS4.js.map → chunk-TBOVYLQJ.js.map} +0 -0
- /package/dist/{chunk-6CNRMCFM.js.map → chunk-VPASBA7P.js.map} +0 -0
- /package/dist/{chunk-V3ENMW7G.js.map → chunk-WFRTHH3A.js.map} +0 -0
- /package/dist/{chunk-B66SC72V.js.map → chunk-Y5Y7XHVU.js.map} +0 -0
- /package/dist/{copy-local-skills-WVHJFRPK.js.map → components/common/removal-plan-confirm.js.map} +0 -0
- /package/dist/{load-agent-defs-5OT54J5M.js.map → copy-local-skills-NSUTBVLJ.js.map} +0 -0
- /package/dist/{loader-JIZDTR4G.js.map → load-agent-defs-X4E57I2U.js.map} +0 -0
- /package/dist/{recompile-project-agents-VREEPBDV.js.map → loader-G6BFG2VA.js.map} +0 -0
- /package/dist/{source-loader-OE6EJFPU.js.map → recompile-project-agents-JE4MM72I.js.map} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
computeRowScrollTop
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-OKH64JZE.js";
|
|
5
5
|
import {
|
|
6
6
|
SCROLL_VIEWPORT
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IO5YBKHV.js";
|
|
8
8
|
|
|
9
9
|
// src/cli/components/hooks/use-row-scroll.ts
|
|
10
10
|
import { useRef } from "react";
|
|
@@ -24,4 +24,4 @@ function useRowScroll({
|
|
|
24
24
|
export {
|
|
25
25
|
useRowScroll
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
27
|
+
//# sourceMappingURL=chunk-WFRTHH3A.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/components/wizard/hotkeys.ts"],"sourcesContent":["/**\n * Centralized hotkey registry for wizard components.\n *\n * Every character-based hotkey and its display label lives here so that\n * changing a binding updates the key check, the footer hint, and the\n * info panel in one place.\n */\n\nimport type { WizardStep } from \"../../stores/wizard-store.js\";\n\n// ---------------------------------------------------------------------------\n// Global hotkeys (active across multiple wizard steps)\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_INFO = { key: \"i\", label: \"I\" } as const;\nexport const HOTKEY_ACCEPT_DEFAULTS = { key: \"a\", label: \"A\" } as const;\nexport const HOTKEY_SCOPE = { key: \"s\", label: \"S\" } as const;\n\n// ---------------------------------------------------------------------------\n// Build step hotkeys\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_TOGGLE_LABELS = { key: \"d\", label: \"D\" } as const;\n\n// ---------------------------------------------------------------------------\n// Sources step hotkeys\n// ---------------------------------------------------------------------------\n\n// None. The step's two bulk install-mode keys — `l` (set all local) and `p` (set\n// all plugin) — are withdrawn. They rewrote `
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/hotkeys.ts"],"sourcesContent":["/**\n * Centralized hotkey registry for wizard components.\n *\n * Every character-based hotkey and its display label lives here so that\n * changing a binding updates the key check, the footer hint, and the\n * info panel in one place.\n */\n\nimport type { WizardStep } from \"../../stores/wizard-store.js\";\n\n// ---------------------------------------------------------------------------\n// Global hotkeys (active across multiple wizard steps)\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_INFO = { key: \"i\", label: \"I\" } as const;\nexport const HOTKEY_ACCEPT_DEFAULTS = { key: \"a\", label: \"A\" } as const;\nexport const HOTKEY_SCOPE = { key: \"s\", label: \"S\" } as const;\n\n// ---------------------------------------------------------------------------\n// Build step hotkeys\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_TOGGLE_LABELS = { key: \"d\", label: \"D\" } as const;\n\n// ---------------------------------------------------------------------------\n// Sources step hotkeys\n// ---------------------------------------------------------------------------\n\n// None. The step's two bulk install-mode keys — `l` (set all local) and `p` (set\n// all plugin) — are withdrawn. They rewrote `origin` on every active skill config\n// with no scope authority behind them, so from a project edit they reached the\n// inherited global rows the same step renders locked and non-focusable: the bulk\n// key could do what the per-row control provably cannot. Per-row SPACE on the\n// grid cell is the only install-mode surface, and its own inertness on a locked\n// row is the containment.\n\n// ---------------------------------------------------------------------------\n// Common key labels (for structural keys handled via Ink key objects)\n// ---------------------------------------------------------------------------\n\n/** The spacebar input character (Ink delivers a literal space for the space key). */\nexport const KEY_SPACE = \" \";\n\nexport const KEY_LABEL_ENTER = \"ENTER\" as const;\nexport const KEY_LABEL_ESC = \"ESC\" as const;\nexport const KEY_LABEL_SPACE = \"SPACE\" as const;\nexport const KEY_LABEL_DEL = \"DEL\" as const;\nexport const KEY_LABEL_ARROWS_VERT = \"\\u2191/\\u2193\" as const;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Case-insensitive check for a character hotkey. */\nexport function isHotkey(input: string, hotkey: { key: string }): boolean {\n return input.toLowerCase() === hotkey.key.toLowerCase();\n}\n\n/**\n * Whether `HOTKEY_INFO` does anything on `step` — the single answer both the\n * key handler in `wizard.tsx` and the footer hint in `wizard-layout.tsx` read,\n * so the wizard never advertises a key it ignores.\n *\n * The confirm step is excluded because it already renders the panel the\n * overlay would show, and the overlay REPLACES the step rather than sitting\n * over it: opening it there would unmount the confirm step's `Enter` handler\n * and strand the user on a screen nothing can complete.\n */\nexport function isInfoPanelAvailable(step: WizardStep): boolean {\n return step !== \"confirm\";\n}\n"],"mappings":";;;AAcO,IAAM,cAAc,EAAE,KAAK,KAAK,OAAO,IAAI;AAC3C,IAAM,yBAAyB,EAAE,KAAK,KAAK,OAAO,IAAI;AACtD,IAAM,eAAe,EAAE,KAAK,KAAK,OAAO,IAAI;AAM5C,IAAM,uBAAuB,EAAE,KAAK,KAAK,OAAO,IAAI;AAmBpD,IAAM,YAAY;AAElB,IAAM,kBAAkB;AACxB,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AASxB,SAAS,SAAS,OAAe,QAAkC;AACxE,SAAO,MAAM,YAAY,MAAM,OAAO,IAAI,YAAY;AACxD;AAYO,SAAS,qBAAqB,MAA2B;AAC9D,SAAO,SAAS;AAClB;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
compileAgents
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-5QZAK6J7.js";
|
|
5
5
|
import {
|
|
6
6
|
ConfigLoadError,
|
|
7
7
|
buildAndMergeConfig,
|
|
@@ -14,14 +14,14 @@ import {
|
|
|
14
14
|
loadSkillsMatrixFromSource,
|
|
15
15
|
resolveInstallPaths,
|
|
16
16
|
writeScopedFromWizard
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-WCAUUBHO.js";
|
|
18
18
|
import {
|
|
19
19
|
disableBuffering,
|
|
20
20
|
drainBuffer,
|
|
21
21
|
enableBuffering,
|
|
22
22
|
ensureDir,
|
|
23
23
|
loadMergedAgents
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-XAXJWXI4.js";
|
|
25
25
|
|
|
26
26
|
// src/cli/lib/operations/source/load-source.ts
|
|
27
27
|
async function loadSource(options) {
|
|
@@ -108,7 +108,13 @@ async function writeProjectConfig(options) {
|
|
|
108
108
|
agents,
|
|
109
109
|
projectDir,
|
|
110
110
|
projectConfigPath: projectPaths.configPath,
|
|
111
|
-
projectInstallationExists: isProjectContext
|
|
111
|
+
projectInstallationExists: isProjectContext,
|
|
112
|
+
// The same word the merger above took. It decides the config ROW there and the GLOBAL
|
|
113
|
+
// config a project write commits here, and the two files disagree the moment it does not
|
|
114
|
+
// reach both: a row preserved for a skill whose directory the removal diff deleted.
|
|
115
|
+
...options.authoritativeScope !== void 0 && {
|
|
116
|
+
authoritativeScope: options.authoritativeScope
|
|
117
|
+
}
|
|
112
118
|
});
|
|
113
119
|
return {
|
|
114
120
|
config: finalConfig,
|
|
@@ -164,4 +170,4 @@ export {
|
|
|
164
170
|
writeProjectConfig,
|
|
165
171
|
compileAgentsAllScopes
|
|
166
172
|
};
|
|
167
|
-
//# sourceMappingURL=chunk-
|
|
173
|
+
//# sourceMappingURL=chunk-WUQ3MTPF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/lib/operations/source/load-source.ts","../src/cli/lib/operations/project/detect-project.ts","../src/cli/lib/operations/project/detect-both-installations.ts","../src/cli/lib/operations/project/write-project-config.ts","../src/cli/lib/operations/project/compile-agents-all-scopes.ts"],"sourcesContent":["import { loadSkillsMatrixFromSource, type SourceLoadResult } from \"../../loading/index.js\";\nimport type { SourceCaller } from \"../../configuration/index.js\";\nimport {\n enableBuffering,\n drainBuffer,\n disableBuffering,\n type StartupMessage,\n} from \"../../../utils/logger.js\";\n\nexport type LoadSourceOptions = {\n /** Whether this load may reach the init-time source rungs — see {@link SourceCaller}. */\n caller?: SourceCaller;\n sourceFlag?: string;\n projectDir: string;\n /** When true, enables message buffering and captures startup messages. Default: false. */\n captureStartupMessages?: boolean;\n};\n\nexport type LoadedSource = {\n sourceResult: SourceLoadResult;\n /** Empty array when captureStartupMessages is false. */\n startupMessages: StartupMessage[];\n};\n\n/**\n * Loads the skills matrix from a resolved source.\n *\n * When `captureStartupMessages` is true, wraps the load in buffer mode so\n * warn() calls during loading are captured instead of written to stderr.\n * The caller (init/edit) hands them to the wizard, which paints them as a band\n * above the step — stderr does not survive the wizard clearing the terminal.\n *\n * @throws {Error} If source resolution or fetching fails.\n */\nexport async function loadSource(options: LoadSourceOptions): Promise<LoadedSource> {\n const { caller, sourceFlag, projectDir, captureStartupMessages } = options;\n\n if (captureStartupMessages) {\n enableBuffering();\n }\n\n let sourceResult: SourceLoadResult;\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n ...(caller !== undefined && { caller }),\n ...(sourceFlag !== undefined && { sourceFlag }),\n projectDir,\n });\n } catch (error) {\n if (captureStartupMessages) {\n disableBuffering();\n }\n throw error;\n }\n\n let startupMessages: StartupMessage[] = [];\n if (captureStartupMessages) {\n startupMessages = drainBuffer();\n disableBuffering();\n }\n\n return { sourceResult, startupMessages };\n}\n","import { detectInstallation, type Installation } from \"../../installation/index.js\";\nimport { ConfigLoadError, loadProjectConfig } from \"../../configuration/index.js\";\nimport type { ProjectConfig } from \"../../../types/index.js\";\n\nexport type DetectedProject = {\n installation: Installation;\n config: ProjectConfig | null;\n configPath: string | null;\n};\n\n/**\n * Detects an existing CLI installation and loads its project config.\n *\n * Uses detectInstallation() which checks project-level first, then falls back\n * to global. Returns the installation metadata plus the loaded config.\n *\n * Does NOT throw. Returns null when no installation is found OR when the config\n * file exists but is corrupt — the caller (doctor, edit) reports the resulting\n * null as a config/installation problem to the user. `compile` deliberately\n * does NOT use this wrapper: it detects scopes directly so it can hard-error on\n * a corrupt config instead of degrading to null.\n */\nexport async function detectProject(projectDir?: string): Promise<DetectedProject | null> {\n const resolvedDir = projectDir ?? process.cwd();\n\n let installation: Installation | null;\n try {\n installation = await detectInstallation(resolvedDir);\n } catch (error) {\n if (error instanceof ConfigLoadError) return null;\n throw error;\n }\n\n if (!installation) {\n return null;\n }\n\n const loaded = await loadProjectConfig(installation.projectDir);\n\n return {\n installation,\n config: loaded?.config ?? null,\n configPath: loaded?.configPath ?? null,\n };\n}\n","import {\n detectGlobalInstallation,\n detectProjectInstallation,\n isHomeDirectory,\n type Installation,\n} from \"../../installation/index.js\";\n\nexport type BothInstallations = {\n global: Installation | null;\n project: Installation | null;\n hasBoth: boolean;\n};\n\n/**\n * Detects both global and project installations.\n *\n * Skips project detection when projectDir is the home directory\n * to avoid double-compile. Returns a convenience `hasBoth` flag\n * used by callers to set scopeFilter on compile passes.\n */\nexport async function detectBothInstallations(projectDir: string): Promise<BothInstallations> {\n const global = await detectGlobalInstallation();\n\n const project = isHomeDirectory(projectDir) ? null : await detectProjectInstallation(projectDir);\n return { global, project, hasBoth: !!global && !!project };\n}\n","import path from \"path\";\nimport {\n buildAndMergeConfig,\n resolveInstallPaths,\n isHomeDirectory,\n} from \"../../installation/index.js\";\nimport { loadMergedAgents, type SourceLoadResult } from \"../../loading/index.js\";\nimport type { AuthoritativeScope } from \"../../configuration/index.js\";\nimport {\n ensureBlankPair,\n writeScopedFromWizard,\n type GateReport,\n} from \"../../config-gate/index.js\";\nimport { ensureDir } from \"../../../utils/fs.js\";\nimport type { ProjectConfig, AgentDefinition, AgentName } from \"../../../types/index.js\";\nimport type { WizardResultV2 } from \"../../../components/wizard/wizard.js\";\n\nexport type ConfigWriteOptions = {\n wizardResult: WizardResultV2;\n sourceResult: SourceLoadResult;\n projectDir: string;\n sourceFlag?: string;\n /** Pre-loaded agent definitions. If omitted, loads from CLI + source. */\n agents?: Partial<Record<AgentName, AgentDefinition>>;\n /**\n * Authority of `cc edit`'s newConfig over absent entries (D-233 Scenario C):\n * `\"all\"` (global edit) drops any deselected entry, `\"owned\"` (project edit) drops deselected\n * project-owned entries only, `undefined` (init) keeps additive union-preserve.\n */\n authoritativeScope?: AuthoritativeScope;\n};\n\nexport type ConfigWriteResult = {\n config: ProjectConfig;\n configPath: string;\n wasMerged: boolean;\n existingConfigPath?: string;\n filesWritten: number;\n /**\n * What the gated write did: what moved in the global config, which registered\n * projects it fanned out to, and the recompile it drove in them. The caller\n * renders it; the work is already done.\n */\n propagation: GateReport;\n};\n\n/**\n * Builds, merges, and writes project configuration files.\n *\n * Handles the full config pipeline:\n * 1. buildAndMergeConfig() — generates config from wizard result, merges with existing\n * 2. loadAllAgents() — loads agent definitions for config-types generation\n * 3. ensureBlankPair() — ensures the global config pair exists (when in project context)\n * 4. writeScopedFromWizard() — writes config.ts and config-types.ts split by scope,\n * fans global changes out to registered projects and recompiles their agents\n */\nexport async function writeProjectConfig(options: ConfigWriteOptions): Promise<ConfigWriteResult> {\n const { wizardResult, sourceResult, projectDir, sourceFlag } = options;\n const projectPaths = resolveInstallPaths(projectDir, \"project\");\n\n await ensureDir(path.dirname(projectPaths.configPath));\n\n let agents: Partial<Record<AgentName, AgentDefinition>>;\n if (options.agents) {\n agents = options.agents;\n } else {\n agents = await loadMergedAgents(sourceResult.sourcePath);\n }\n\n const mergeResult = await buildAndMergeConfig(\n wizardResult,\n sourceResult,\n projectDir,\n sourceFlag,\n options.authoritativeScope,\n );\n const finalConfig = mergeResult.config;\n\n const isProjectContext = !isHomeDirectory(projectDir);\n\n if (isProjectContext) {\n await ensureBlankPair();\n }\n\n const propagation = await writeScopedFromWizard({\n finalConfig,\n matrix: sourceResult.matrix,\n agents,\n projectDir,\n projectConfigPath: projectPaths.configPath,\n projectInstallationExists: isProjectContext,\n });\n\n return {\n config: finalConfig,\n configPath: projectPaths.configPath,\n wasMerged: mergeResult.merged,\n ...(mergeResult.existingConfigPath !== undefined && {\n existingConfigPath: mergeResult.existingConfigPath,\n }),\n filesWritten: isProjectContext ? 4 : 2,\n propagation,\n };\n}\n","import os from \"os\";\nimport { compileAgents, type CompilationResult } from \"./compile-agents.js\";\nimport { isHomeDirectory, resolveInstallPaths } from \"../../installation/index.js\";\nimport type { AgentName, SkillDefinitionMap, SkillScope } from \"../../../types/index.js\";\n\nexport type CompileAllScopesOptions = {\n /** Working directory of the command — a project root, or home for global context. */\n projectDir: string;\n sourcePath: string;\n skills: SkillDefinitionMap;\n agentScopeMap: Map<AgentName, SkillScope>;\n};\n\n/**\n * Compiles agents for every scope the current context owns.\n *\n * Home context: a single pass writing to the home agents directory.\n * Project context: a global pass (from home) then a project pass, each\n * filtered to its own scope so the project pass cannot overwrite global\n * agents with zero-skill versions. Results merge in pass order.\n */\nexport async function compileAgentsAllScopes(\n options: CompileAllScopesOptions,\n): Promise<CompilationResult> {\n const { projectDir, sourcePath, skills, agentScopeMap } = options;\n const base = { sourcePath, skills, agentScopeMap };\n\n if (isHomeDirectory(projectDir)) {\n return compileAgents({\n ...base,\n projectDir,\n outputDir: resolveInstallPaths(projectDir, \"project\").agentsDir,\n });\n }\n\n const globalResult = await compileAgents({\n ...base,\n projectDir: os.homedir(),\n outputDir: resolveInstallPaths(os.homedir(), \"global\").agentsDir,\n scopeFilter: \"global\",\n });\n const projectResult = await compileAgents({\n ...base,\n projectDir,\n outputDir: resolveInstallPaths(projectDir, \"project\").agentsDir,\n scopeFilter: \"project\",\n });\n return mergeCompilationResults(globalResult, projectResult);\n}\n\nfunction mergeCompilationResults(...results: CompilationResult[]): CompilationResult {\n return {\n compiled: results.flatMap((r) => r.compiled),\n rewritten: results.flatMap((r) => r.rewritten),\n failed: results.flatMap((r) => r.failed),\n warnings: results.flatMap((r) => r.warnings),\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/operations/source/load-source.ts","../src/cli/lib/operations/project/detect-project.ts","../src/cli/lib/operations/project/detect-both-installations.ts","../src/cli/lib/operations/project/write-project-config.ts","../src/cli/lib/operations/project/compile-agents-all-scopes.ts"],"sourcesContent":["import { loadSkillsMatrixFromSource, type SourceLoadResult } from \"../../loading/index.js\";\nimport type { SourceCaller } from \"../../configuration/index.js\";\nimport {\n enableBuffering,\n drainBuffer,\n disableBuffering,\n type StartupMessage,\n} from \"../../../utils/logger.js\";\n\nexport type LoadSourceOptions = {\n /** Whether this load may reach the init-time source rungs — see {@link SourceCaller}. */\n caller?: SourceCaller;\n sourceFlag?: string;\n projectDir: string;\n /** When true, enables message buffering and captures startup messages. Default: false. */\n captureStartupMessages?: boolean;\n};\n\nexport type LoadedSource = {\n sourceResult: SourceLoadResult;\n /** Empty array when captureStartupMessages is false. */\n startupMessages: StartupMessage[];\n};\n\n/**\n * Loads the skills matrix from a resolved source.\n *\n * When `captureStartupMessages` is true, wraps the load in buffer mode so\n * warn() calls during loading are captured instead of written to stderr.\n * The caller (init/edit) hands them to the wizard, which paints them as a band\n * above the step — stderr does not survive the wizard clearing the terminal.\n *\n * @throws {Error} If source resolution or fetching fails.\n */\nexport async function loadSource(options: LoadSourceOptions): Promise<LoadedSource> {\n const { caller, sourceFlag, projectDir, captureStartupMessages } = options;\n\n if (captureStartupMessages) {\n enableBuffering();\n }\n\n let sourceResult: SourceLoadResult;\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n ...(caller !== undefined && { caller }),\n ...(sourceFlag !== undefined && { sourceFlag }),\n projectDir,\n });\n } catch (error) {\n if (captureStartupMessages) {\n disableBuffering();\n }\n throw error;\n }\n\n let startupMessages: StartupMessage[] = [];\n if (captureStartupMessages) {\n startupMessages = drainBuffer();\n disableBuffering();\n }\n\n return { sourceResult, startupMessages };\n}\n","import { detectInstallation, type Installation } from \"../../installation/index.js\";\nimport { ConfigLoadError, loadProjectConfig } from \"../../configuration/index.js\";\nimport type { ProjectConfig } from \"../../../types/index.js\";\n\nexport type DetectedProject = {\n installation: Installation;\n config: ProjectConfig | null;\n configPath: string | null;\n};\n\n/**\n * Detects an existing CLI installation and loads its project config.\n *\n * Uses detectInstallation() which checks project-level first, then falls back\n * to global. Returns the installation metadata plus the loaded config.\n *\n * Does NOT throw. Returns null when no installation is found OR when the config\n * file exists but is corrupt — the caller (doctor, edit) reports the resulting\n * null as a config/installation problem to the user. `compile` deliberately\n * does NOT use this wrapper: it detects scopes directly so it can hard-error on\n * a corrupt config instead of degrading to null.\n */\nexport async function detectProject(projectDir?: string): Promise<DetectedProject | null> {\n const resolvedDir = projectDir ?? process.cwd();\n\n let installation: Installation | null;\n try {\n installation = await detectInstallation(resolvedDir);\n } catch (error) {\n if (error instanceof ConfigLoadError) return null;\n throw error;\n }\n\n if (!installation) {\n return null;\n }\n\n const loaded = await loadProjectConfig(installation.projectDir);\n\n return {\n installation,\n config: loaded?.config ?? null,\n configPath: loaded?.configPath ?? null,\n };\n}\n","import {\n detectGlobalInstallation,\n detectProjectInstallation,\n isHomeDirectory,\n type Installation,\n} from \"../../installation/index.js\";\n\nexport type BothInstallations = {\n global: Installation | null;\n project: Installation | null;\n hasBoth: boolean;\n};\n\n/**\n * Detects both global and project installations.\n *\n * Skips project detection when projectDir is the home directory\n * to avoid double-compile. Returns a convenience `hasBoth` flag\n * used by callers to set scopeFilter on compile passes.\n */\nexport async function detectBothInstallations(projectDir: string): Promise<BothInstallations> {\n const global = await detectGlobalInstallation();\n\n const project = isHomeDirectory(projectDir) ? null : await detectProjectInstallation(projectDir);\n return { global, project, hasBoth: !!global && !!project };\n}\n","import path from \"path\";\nimport {\n buildAndMergeConfig,\n resolveInstallPaths,\n isHomeDirectory,\n} from \"../../installation/index.js\";\nimport { loadMergedAgents, type SourceLoadResult } from \"../../loading/index.js\";\nimport type { AuthoritativeScope } from \"../../configuration/index.js\";\nimport {\n ensureBlankPair,\n writeScopedFromWizard,\n type GateReport,\n} from \"../../config-gate/index.js\";\nimport { ensureDir } from \"../../../utils/fs.js\";\nimport type { ProjectConfig, AgentDefinition, AgentName } from \"../../../types/index.js\";\nimport type { WizardResultV2 } from \"../../../components/wizard/wizard.js\";\n\nexport type ConfigWriteOptions = {\n wizardResult: WizardResultV2;\n sourceResult: SourceLoadResult;\n projectDir: string;\n sourceFlag?: string;\n /** Pre-loaded agent definitions. If omitted, loads from CLI + source. */\n agents?: Partial<Record<AgentName, AgentDefinition>>;\n /**\n * Authority of `cc edit`'s newConfig over absent entries (D-233 Scenario C):\n * `\"all\"` (global edit) drops any deselected entry, `\"owned\"` (project edit) drops deselected\n * project-owned entries only, `undefined` (init) keeps additive union-preserve.\n */\n authoritativeScope?: AuthoritativeScope;\n};\n\nexport type ConfigWriteResult = {\n config: ProjectConfig;\n configPath: string;\n wasMerged: boolean;\n existingConfigPath?: string;\n filesWritten: number;\n /**\n * What the gated write did: what moved in the global config, which registered\n * projects it fanned out to, and the recompile it drove in them. The caller\n * renders it; the work is already done.\n */\n propagation: GateReport;\n};\n\n/**\n * Builds, merges, and writes project configuration files.\n *\n * Handles the full config pipeline:\n * 1. buildAndMergeConfig() — generates config from wizard result, merges with existing\n * 2. loadAllAgents() — loads agent definitions for config-types generation\n * 3. ensureBlankPair() — ensures the global config pair exists (when in project context)\n * 4. writeScopedFromWizard() — writes config.ts and config-types.ts split by scope,\n * fans global changes out to registered projects and recompiles their agents\n */\nexport async function writeProjectConfig(options: ConfigWriteOptions): Promise<ConfigWriteResult> {\n const { wizardResult, sourceResult, projectDir, sourceFlag } = options;\n const projectPaths = resolveInstallPaths(projectDir, \"project\");\n\n await ensureDir(path.dirname(projectPaths.configPath));\n\n let agents: Partial<Record<AgentName, AgentDefinition>>;\n if (options.agents) {\n agents = options.agents;\n } else {\n agents = await loadMergedAgents(sourceResult.sourcePath);\n }\n\n const mergeResult = await buildAndMergeConfig(\n wizardResult,\n sourceResult,\n projectDir,\n sourceFlag,\n options.authoritativeScope,\n );\n const finalConfig = mergeResult.config;\n\n const isProjectContext = !isHomeDirectory(projectDir);\n\n if (isProjectContext) {\n await ensureBlankPair();\n }\n\n const propagation = await writeScopedFromWizard({\n finalConfig,\n matrix: sourceResult.matrix,\n agents,\n projectDir,\n projectConfigPath: projectPaths.configPath,\n projectInstallationExists: isProjectContext,\n // The same word the merger above took. It decides the config ROW there and the GLOBAL\n // config a project write commits here, and the two files disagree the moment it does not\n // reach both: a row preserved for a skill whose directory the removal diff deleted.\n ...(options.authoritativeScope !== undefined && {\n authoritativeScope: options.authoritativeScope,\n }),\n });\n\n return {\n config: finalConfig,\n configPath: projectPaths.configPath,\n wasMerged: mergeResult.merged,\n ...(mergeResult.existingConfigPath !== undefined && {\n existingConfigPath: mergeResult.existingConfigPath,\n }),\n filesWritten: isProjectContext ? 4 : 2,\n propagation,\n };\n}\n","import os from \"os\";\nimport { compileAgents, type CompilationResult } from \"./compile-agents.js\";\nimport { isHomeDirectory, resolveInstallPaths } from \"../../installation/index.js\";\nimport type { AgentName, SkillDefinitionMap, SkillScope } from \"../../../types/index.js\";\n\nexport type CompileAllScopesOptions = {\n /** Working directory of the command — a project root, or home for global context. */\n projectDir: string;\n sourcePath: string;\n skills: SkillDefinitionMap;\n agentScopeMap: Map<AgentName, SkillScope>;\n};\n\n/**\n * Compiles agents for every scope the current context owns.\n *\n * Home context: a single pass writing to the home agents directory.\n * Project context: a global pass (from home) then a project pass, each\n * filtered to its own scope so the project pass cannot overwrite global\n * agents with zero-skill versions. Results merge in pass order.\n */\nexport async function compileAgentsAllScopes(\n options: CompileAllScopesOptions,\n): Promise<CompilationResult> {\n const { projectDir, sourcePath, skills, agentScopeMap } = options;\n const base = { sourcePath, skills, agentScopeMap };\n\n if (isHomeDirectory(projectDir)) {\n return compileAgents({\n ...base,\n projectDir,\n outputDir: resolveInstallPaths(projectDir, \"project\").agentsDir,\n });\n }\n\n const globalResult = await compileAgents({\n ...base,\n projectDir: os.homedir(),\n outputDir: resolveInstallPaths(os.homedir(), \"global\").agentsDir,\n scopeFilter: \"global\",\n });\n const projectResult = await compileAgents({\n ...base,\n projectDir,\n outputDir: resolveInstallPaths(projectDir, \"project\").agentsDir,\n scopeFilter: \"project\",\n });\n return mergeCompilationResults(globalResult, projectResult);\n}\n\nfunction mergeCompilationResults(...results: CompilationResult[]): CompilationResult {\n return {\n compiled: results.flatMap((r) => r.compiled),\n rewritten: results.flatMap((r) => r.rewritten),\n failed: results.flatMap((r) => r.failed),\n warnings: results.flatMap((r) => r.warnings),\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
PROJECT_ROOT,
|
|
12
12
|
STANDARD_DIRS,
|
|
13
13
|
STANDARD_FILES
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-IO5YBKHV.js";
|
|
15
15
|
|
|
16
16
|
// src/cli/lib/loading/loader.ts
|
|
17
17
|
import { parse as parseYaml2 } from "yaml";
|
|
@@ -110,8 +110,8 @@ async function listDirectories(dirPath) {
|
|
|
110
110
|
return [];
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
async function glob(pattern, cwd) {
|
|
114
|
-
return fg(pattern, { cwd, onlyFiles: true });
|
|
113
|
+
async function glob(pattern, cwd, { dot = false } = {}) {
|
|
114
|
+
return fg(pattern, { cwd, onlyFiles: true, dot });
|
|
115
115
|
}
|
|
116
116
|
function isGlobalPairPath(resolvedPath) {
|
|
117
117
|
const globalConfigDir = path.join(os.homedir(), CLAUDE_SRC_DIR);
|
|
@@ -820,6 +820,24 @@ var AGENT_NAMES = [
|
|
|
820
820
|
"web-tester"
|
|
821
821
|
];
|
|
822
822
|
|
|
823
|
+
// src/cli/utils/type-guards.ts
|
|
824
|
+
function isRecord(value) {
|
|
825
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
826
|
+
}
|
|
827
|
+
function isDomain(value) {
|
|
828
|
+
return DOMAINS.includes(value);
|
|
829
|
+
}
|
|
830
|
+
function isAgentName(value) {
|
|
831
|
+
return AGENT_NAMES.includes(value);
|
|
832
|
+
}
|
|
833
|
+
function isSkillId(value) {
|
|
834
|
+
return SKILL_IDS.includes(value);
|
|
835
|
+
}
|
|
836
|
+
function isSkillAssignment(value) {
|
|
837
|
+
if (typeof value !== "object" || value === null) return false;
|
|
838
|
+
return typeof value.id === "string";
|
|
839
|
+
}
|
|
840
|
+
|
|
823
841
|
// src/cli/types/matrix.ts
|
|
824
842
|
var MODEL_NAMES = ["sonnet", "opus", "haiku", "fable", "inherit"];
|
|
825
843
|
var EFFORT_NAMES = ["low", "medium", "high", "xhigh", "max"];
|
|
@@ -837,25 +855,6 @@ var modelNameSchema = z2.enum(MODEL_NAMES);
|
|
|
837
855
|
var effortLevelSchema = z2.enum(EFFORT_NAMES);
|
|
838
856
|
var permissionModeSchema = z2.enum(PERMISSION_MODES);
|
|
839
857
|
var skillSlugSchema = z2.enum(SKILL_SLUGS);
|
|
840
|
-
function validateCategoryField(val, ctx) {
|
|
841
|
-
if (!val.category) return;
|
|
842
|
-
if (val.custom) {
|
|
843
|
-
if (!KEBAB_CASE_PATTERN.test(val.category)) {
|
|
844
|
-
ctx.addIssue({
|
|
845
|
-
code: "custom",
|
|
846
|
-
path: ["category"],
|
|
847
|
-
message: "Custom category must be kebab-case"
|
|
848
|
-
});
|
|
849
|
-
}
|
|
850
|
-
return;
|
|
851
|
-
}
|
|
852
|
-
const result = categoryPathSchema.safeParse(val.category);
|
|
853
|
-
if (!result.success) {
|
|
854
|
-
for (const issue of result.error.issues) {
|
|
855
|
-
ctx.addIssue({ ...issue, path: ["category"] });
|
|
856
|
-
}
|
|
857
|
-
}
|
|
858
|
-
}
|
|
859
858
|
var categoryPathSchema = z2.string().refine(
|
|
860
859
|
(val) => {
|
|
861
860
|
if (val === LOCAL_PSEUDO_CATEGORY) return true;
|
|
@@ -898,12 +897,11 @@ var skillFrontmatterLoaderSchema = z2.object({
|
|
|
898
897
|
model: modelNameSchema.exactOptional()
|
|
899
898
|
});
|
|
900
899
|
var skillMetadataLoaderSchema = z2.object({
|
|
901
|
-
|
|
902
|
-
category: z2.string().exactOptional(),
|
|
900
|
+
category: categoryPathSchema.exactOptional(),
|
|
903
901
|
author: z2.string().exactOptional(),
|
|
904
902
|
domain: z2.string(),
|
|
905
903
|
custom: z2.boolean().exactOptional()
|
|
906
|
-
}).passthrough()
|
|
904
|
+
}).passthrough();
|
|
907
905
|
var matrixRawMetadataSchema = z2.object({
|
|
908
906
|
category: categoryPathSchema,
|
|
909
907
|
author: z2.string(),
|
|
@@ -956,7 +954,33 @@ var stackAgentConfigSchema = z2.record(
|
|
|
956
954
|
z2.string(),
|
|
957
955
|
z2.union([skillAssignmentElementSchema, z2.array(skillAssignmentElementSchema)])
|
|
958
956
|
);
|
|
959
|
-
var
|
|
957
|
+
var RENAMED_CONFIG_FIELDS = { source: "marketplace" };
|
|
958
|
+
var RENAMED_SKILL_ENTRY_FIELDS = { source: "origin" };
|
|
959
|
+
function renamedFieldMessage(oldKey, newKey) {
|
|
960
|
+
return `"${oldKey}" was renamed to "${newKey}". Rename the key in this config \u2014 the CLI does not read "${oldKey}" any more and will not fall back to it.`;
|
|
961
|
+
}
|
|
962
|
+
function reportRenamedKeys(record, renames, path3, ctx) {
|
|
963
|
+
for (const [oldKey, newKey] of Object.entries(renames)) {
|
|
964
|
+
if (!(oldKey in record)) continue;
|
|
965
|
+
ctx.addIssue({
|
|
966
|
+
code: "custom",
|
|
967
|
+
path: [...path3, oldKey],
|
|
968
|
+
message: renamedFieldMessage(oldKey, newKey)
|
|
969
|
+
});
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
function refuseRenamedFields(config, ctx) {
|
|
973
|
+
if (!isRecord(config)) return;
|
|
974
|
+
reportRenamedKeys(config, RENAMED_CONFIG_FIELDS, [], ctx);
|
|
975
|
+
const { skills } = config;
|
|
976
|
+
if (!Array.isArray(skills)) return;
|
|
977
|
+
for (const [index, entry] of skills.entries()) {
|
|
978
|
+
if (!isRecord(entry)) continue;
|
|
979
|
+
reportRenamedKeys(entry, RENAMED_SKILL_ENTRY_FIELDS, ["skills", index], ctx);
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
var renamedFieldGuard = z2.unknown().superRefine(refuseRenamedFields);
|
|
983
|
+
var projectConfigFields = z2.object({
|
|
960
984
|
/** Project/plugin name in kebab-case */
|
|
961
985
|
name: z2.string().exactOptional(),
|
|
962
986
|
description: z2.string().exactOptional(),
|
|
@@ -971,12 +995,12 @@ var projectConfigLoaderSchema = z2.object({
|
|
|
971
995
|
excluded: z2.boolean().exactOptional()
|
|
972
996
|
})
|
|
973
997
|
).exactOptional(),
|
|
974
|
-
/** Per-skill configuration with scope and
|
|
998
|
+
/** Per-skill configuration with scope and provenance */
|
|
975
999
|
skills: z2.array(
|
|
976
1000
|
z2.object({
|
|
977
1001
|
id: z2.string(),
|
|
978
1002
|
scope: z2.enum(["project", "global"]),
|
|
979
|
-
|
|
1003
|
+
origin: z2.string(),
|
|
980
1004
|
excluded: z2.boolean().exactOptional()
|
|
981
1005
|
})
|
|
982
1006
|
).exactOptional(),
|
|
@@ -986,15 +1010,16 @@ var projectConfigLoaderSchema = z2.object({
|
|
|
986
1010
|
selectedDomains: z2.array(z2.string()).exactOptional(),
|
|
987
1011
|
/** Agent-to-category-to-skill mappings from selected stack (accepts same formats as stacks.ts) */
|
|
988
1012
|
stack: z2.record(z2.string(), stackAgentConfigSchema).exactOptional(),
|
|
989
|
-
/**
|
|
990
|
-
source: z2.string().exactOptional(),
|
|
991
|
-
/** Marketplace identifier for plugin installation */
|
|
1013
|
+
/** The marketplace this install reads skills from, as a path or URL (e.g., "github:my-org/skills") */
|
|
992
1014
|
marketplace: z2.string().exactOptional(),
|
|
1015
|
+
/** The name that marketplace's manifest gives it, which plugins are registered under */
|
|
1016
|
+
marketplaceName: z2.string().exactOptional(),
|
|
993
1017
|
/** Separate source for agents when different from skills source */
|
|
994
1018
|
agentsSource: z2.string().exactOptional(),
|
|
995
1019
|
/** Tracked project installation paths (global config only) */
|
|
996
1020
|
projects: z2.array(z2.string()).exactOptional()
|
|
997
1021
|
}).passthrough();
|
|
1022
|
+
var projectConfigLoaderSchema = renamedFieldGuard.pipe(projectConfigFields);
|
|
998
1023
|
var categoryDefinitionSchema = z2.object({
|
|
999
1024
|
id: z2.string(),
|
|
1000
1025
|
displayName: z2.string(),
|
|
@@ -1044,15 +1069,14 @@ var localRawMetadataSchema = z2.object({
|
|
|
1044
1069
|
/** One-line description for the wizard */
|
|
1045
1070
|
cliDescription: z2.string().exactOptional(),
|
|
1046
1071
|
/** Category to place this skill in (e.g., "web-framework") */
|
|
1047
|
-
|
|
1048
|
-
category: z2.string(),
|
|
1072
|
+
category: categoryPathSchema,
|
|
1049
1073
|
/** When an AI agent should invoke this skill */
|
|
1050
1074
|
usageGuidance: z2.string().exactOptional(),
|
|
1051
1075
|
/** Domain this skill belongs to (e.g., "web", "api", "cli") */
|
|
1052
1076
|
domain: z2.string(),
|
|
1053
1077
|
/** True if this skill was created outside the CLI's built-in vocabulary */
|
|
1054
1078
|
custom: z2.boolean().exactOptional()
|
|
1055
|
-
}).passthrough()
|
|
1079
|
+
}).passthrough();
|
|
1056
1080
|
var localSkillMetadataSchema = z2.object({
|
|
1057
1081
|
forkedFrom: z2.object({
|
|
1058
1082
|
/** Original skill ID before forking — lenient (any string) since custom/extra-source skills have non-builtin IDs */
|
|
@@ -1062,7 +1086,9 @@ var localSkillMetadataSchema = z2.object({
|
|
|
1062
1086
|
/** ISO date when the fork was created */
|
|
1063
1087
|
date: z2.string(),
|
|
1064
1088
|
/** Source URL the skill was installed from (e.g., "github:agents-inc/skills") */
|
|
1065
|
-
source: z2.string().exactOptional()
|
|
1089
|
+
source: z2.string().exactOptional(),
|
|
1090
|
+
/** Directory inside that repository, for a skill only its own bytes can install again */
|
|
1091
|
+
path: z2.string().exactOptional()
|
|
1066
1092
|
}).exactOptional()
|
|
1067
1093
|
}).passthrough();
|
|
1068
1094
|
var stackSchema = z2.object({
|
|
@@ -1128,13 +1154,13 @@ var brandingConfigSchema = z2.object({
|
|
|
1128
1154
|
/** Custom tagline shown in wizard header */
|
|
1129
1155
|
tagline: z2.string().exactOptional()
|
|
1130
1156
|
});
|
|
1131
|
-
var
|
|
1132
|
-
/**
|
|
1133
|
-
|
|
1157
|
+
var projectSourceConfigFields = z2.object({
|
|
1158
|
+
/** The marketplace this install reads skills from, as a path or URL */
|
|
1159
|
+
marketplace: z2.string().exactOptional(),
|
|
1134
1160
|
/** Author handle for this project's config */
|
|
1135
1161
|
author: z2.string().exactOptional(),
|
|
1136
|
-
/**
|
|
1137
|
-
|
|
1162
|
+
/** The name that marketplace's manifest gives it, which plugins are registered under */
|
|
1163
|
+
marketplaceName: z2.string().exactOptional(),
|
|
1138
1164
|
/** Separate source for agent definitions (when different from skills) */
|
|
1139
1165
|
agentsSource: z2.string().exactOptional(),
|
|
1140
1166
|
/** Branding overrides for white-labeling the CLI */
|
|
@@ -1150,6 +1176,7 @@ var projectSourceConfigSchema = z2.object({
|
|
|
1150
1176
|
/** Custom rules file path override (default: "config/skill-rules.ts") */
|
|
1151
1177
|
rulesFile: z2.string().exactOptional()
|
|
1152
1178
|
}).passthrough();
|
|
1179
|
+
var projectSourceConfigSchema = renamedFieldGuard.pipe(projectSourceConfigFields);
|
|
1153
1180
|
var agentYamlGenerationSchema = z2.object({
|
|
1154
1181
|
$schema: z2.string().exactOptional(),
|
|
1155
1182
|
id: z2.string().min(1),
|
|
@@ -1206,6 +1233,8 @@ var forkedFromSchema = z2.object({
|
|
|
1206
1233
|
contentHash: z2.string(),
|
|
1207
1234
|
/** Source URL or identifier */
|
|
1208
1235
|
source: z2.string().exactOptional(),
|
|
1236
|
+
/** Directory inside that source, for a skill only its own bytes can install again */
|
|
1237
|
+
path: z2.string().exactOptional(),
|
|
1209
1238
|
/** ISO date of the fork */
|
|
1210
1239
|
date: z2.string()
|
|
1211
1240
|
});
|
|
@@ -1569,6 +1598,23 @@ async function loadPluginSkills(pluginDir) {
|
|
|
1569
1598
|
|
|
1570
1599
|
export {
|
|
1571
1600
|
getErrorMessage,
|
|
1601
|
+
GlobalPairWriteViolation,
|
|
1602
|
+
withGateToken,
|
|
1603
|
+
assertGateToken,
|
|
1604
|
+
isPathWithin,
|
|
1605
|
+
readFile,
|
|
1606
|
+
readFileSafe,
|
|
1607
|
+
readFileOptional,
|
|
1608
|
+
fileExists,
|
|
1609
|
+
directoryExists,
|
|
1610
|
+
listDirectories,
|
|
1611
|
+
glob,
|
|
1612
|
+
writeFile,
|
|
1613
|
+
ensureDir,
|
|
1614
|
+
remove,
|
|
1615
|
+
isDirectoryEmpty,
|
|
1616
|
+
removeDirIfEmpty,
|
|
1617
|
+
copy,
|
|
1572
1618
|
setVerbose,
|
|
1573
1619
|
verbose,
|
|
1574
1620
|
log,
|
|
@@ -1577,9 +1623,12 @@ export {
|
|
|
1577
1623
|
disableBuffering,
|
|
1578
1624
|
warn,
|
|
1579
1625
|
formatZodErrors,
|
|
1580
|
-
SKILL_IDS,
|
|
1581
|
-
DOMAINS,
|
|
1582
1626
|
AGENT_NAMES,
|
|
1627
|
+
isRecord,
|
|
1628
|
+
isDomain,
|
|
1629
|
+
isAgentName,
|
|
1630
|
+
isSkillId,
|
|
1631
|
+
isSkillAssignment,
|
|
1583
1632
|
MODEL_NAMES,
|
|
1584
1633
|
EFFORT_NAMES,
|
|
1585
1634
|
skillMetadataLoaderSchema,
|
|
@@ -1605,22 +1654,6 @@ export {
|
|
|
1605
1654
|
splitMetadataValidationIssues,
|
|
1606
1655
|
validateNestingDepth,
|
|
1607
1656
|
warnUnknownFields,
|
|
1608
|
-
GlobalPairWriteViolation,
|
|
1609
|
-
withGateToken,
|
|
1610
|
-
assertGateToken,
|
|
1611
|
-
isPathWithin,
|
|
1612
|
-
readFile,
|
|
1613
|
-
readFileSafe,
|
|
1614
|
-
readFileOptional,
|
|
1615
|
-
fileExists,
|
|
1616
|
-
directoryExists,
|
|
1617
|
-
listDirectories,
|
|
1618
|
-
glob,
|
|
1619
|
-
writeFile,
|
|
1620
|
-
ensureDir,
|
|
1621
|
-
remove,
|
|
1622
|
-
removeDirIfEmpty,
|
|
1623
|
-
copy,
|
|
1624
1657
|
extractFrontmatter,
|
|
1625
1658
|
readSkillMetadata,
|
|
1626
1659
|
parseFrontmatter,
|
|
@@ -1631,4 +1664,4 @@ export {
|
|
|
1631
1664
|
loadSkillsFromDir,
|
|
1632
1665
|
loadPluginSkills
|
|
1633
1666
|
};
|
|
1634
|
-
//# sourceMappingURL=chunk-
|
|
1667
|
+
//# sourceMappingURL=chunk-XAXJWXI4.js.map
|