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
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
isActiveAt,
|
|
4
|
+
isGlobalTombstone
|
|
5
|
+
} from "./chunk-A6OWEJGC.js";
|
|
6
|
+
|
|
7
|
+
// src/cli/lib/configuration/scope-diff.ts
|
|
8
|
+
import { partition } from "remeda";
|
|
9
|
+
function computeScopeDiff(input) {
|
|
10
|
+
const { currentSkills, currentAgents, installedSkillConfigs, installedAgentConfigs, isInitMode } = input;
|
|
11
|
+
const skills = diffRoster(currentSkills, installedSkillConfigs, (skill) => skill.id, isInitMode);
|
|
12
|
+
const agents = diffRoster(
|
|
13
|
+
currentAgents,
|
|
14
|
+
installedAgentConfigs,
|
|
15
|
+
(agent) => agent.name,
|
|
16
|
+
isInitMode
|
|
17
|
+
);
|
|
18
|
+
const skillRow = skillRowClassifier(installedSkillConfigs);
|
|
19
|
+
const agentRow = agentRowClassifier(installedAgentConfigs);
|
|
20
|
+
const projectSkillRows = rowsOf(skills.project, skillRow, toRemovedSkillRow);
|
|
21
|
+
const globalSkillRows = rowsOf(skills.global, skillRow, toRemovedSkillRow);
|
|
22
|
+
const projectAgentRows = rowsOf(agents.project, agentRow, toRemovedAgentRow);
|
|
23
|
+
const globalAgentRows = rowsOf(agents.global, agentRow, toRemovedAgentRow);
|
|
24
|
+
const hasContent = [projectSkillRows, globalSkillRows, projectAgentRows, globalAgentRows].some(
|
|
25
|
+
(rows) => rows.length > 0
|
|
26
|
+
);
|
|
27
|
+
return { projectSkillRows, globalSkillRows, projectAgentRows, globalAgentRows, hasContent };
|
|
28
|
+
}
|
|
29
|
+
function diffRoster(current, installed, identityOf, isInitMode) {
|
|
30
|
+
const activeBaseline = (installed ?? []).filter((entry) => !entry.excluded);
|
|
31
|
+
const vacated = vacatedInstalls(activeBaseline, current, identityOf);
|
|
32
|
+
const projectEntries = current.filter((entry) => isActiveAt(entry, "project"));
|
|
33
|
+
const claimedByProject = new Set(projectEntries.map(identityOf));
|
|
34
|
+
const [inheritedGlobals, removedGlobals] = partition(
|
|
35
|
+
vacated.filter((entry) => entry.scope === "global"),
|
|
36
|
+
(entry) => claimedByProject.has(identityOf(entry))
|
|
37
|
+
);
|
|
38
|
+
return {
|
|
39
|
+
project: {
|
|
40
|
+
listed: projectEntries,
|
|
41
|
+
removed: vacated.filter((entry) => entry.scope === "project")
|
|
42
|
+
},
|
|
43
|
+
global: {
|
|
44
|
+
listed: [
|
|
45
|
+
...current.filter((entry) => isActiveAt(entry, "global")),
|
|
46
|
+
...inheritedGlobals,
|
|
47
|
+
...current.filter(isGlobalTombstone)
|
|
48
|
+
],
|
|
49
|
+
removed: isInitMode ? [] : removedGlobals
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function vacatedInstalls(activeBaseline, current, identityOf) {
|
|
54
|
+
const slotOf = (entry) => slotKey(identityOf(entry), entry.scope);
|
|
55
|
+
const occupiedSlots = new Set(current.map(slotOf));
|
|
56
|
+
return activeBaseline.filter((install) => !occupiedSlots.has(slotOf(install)));
|
|
57
|
+
}
|
|
58
|
+
function rowsOf(entries, toRow, toRemovedRow) {
|
|
59
|
+
return [...entries.listed.map(toRow), ...entries.removed.map(toRemovedRow)];
|
|
60
|
+
}
|
|
61
|
+
function slotKey(identity, scope) {
|
|
62
|
+
return `${identity}:${scope}`;
|
|
63
|
+
}
|
|
64
|
+
function formatScopeTag(scope) {
|
|
65
|
+
return scope === "global" ? "[G]" : "[P]";
|
|
66
|
+
}
|
|
67
|
+
function skillRowClassifier(installed) {
|
|
68
|
+
const installedSlots = installed ? new Set(installed.map((skill) => slotKey(skill.id, skill.scope))) : null;
|
|
69
|
+
const installedOriginBySlot = installed ? new Map(
|
|
70
|
+
installed.filter((skill) => !skill.excluded).map((skill) => [slotKey(skill.id, skill.scope), skill.origin])
|
|
71
|
+
) : null;
|
|
72
|
+
return (skill) => classifySkillDiffRow(skill, installedSlots, installedOriginBySlot);
|
|
73
|
+
}
|
|
74
|
+
function agentRowClassifier(installed) {
|
|
75
|
+
const installedSlots = installed ? new Set(installed.map((agent) => slotKey(agent.name, agent.scope))) : null;
|
|
76
|
+
return (agent) => classifyAgentDiffRow(agent, installedSlots);
|
|
77
|
+
}
|
|
78
|
+
function classifySkillDiffRow(skill, installedSlots, installedOriginBySlot) {
|
|
79
|
+
const slot = slotKey(skill.id, skill.scope);
|
|
80
|
+
const isNew = installedSlots === null || !installedSlots.has(slot);
|
|
81
|
+
const installedOrigin = installedOriginBySlot?.get(slot);
|
|
82
|
+
const modeChanged = !isNew && installedOrigin != null && installedOrigin !== skill.origin;
|
|
83
|
+
if (modeChanged) {
|
|
84
|
+
return { id: skill.id, source: skill.origin, status: "mode-changed" };
|
|
85
|
+
}
|
|
86
|
+
return { id: skill.id, source: skill.origin, status: isNew ? "added" : "unchanged" };
|
|
87
|
+
}
|
|
88
|
+
function classifyAgentDiffRow(agent, installedSlots) {
|
|
89
|
+
const isNew = installedSlots === null || !installedSlots.has(slotKey(agent.name, agent.scope));
|
|
90
|
+
return { name: agent.name, status: isNew ? "added" : "unchanged" };
|
|
91
|
+
}
|
|
92
|
+
function toRemovedSkillRow(skill) {
|
|
93
|
+
return { id: skill.id, source: skill.origin, status: "removed" };
|
|
94
|
+
}
|
|
95
|
+
function toRemovedAgentRow(agent) {
|
|
96
|
+
return { name: agent.name, status: "removed" };
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export {
|
|
100
|
+
computeScopeDiff,
|
|
101
|
+
formatScopeTag
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=chunk-4RQKCV6I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/configuration/scope-diff.ts"],"sourcesContent":["import { partition } from \"remeda\";\nimport type { AgentScopeConfig, SkillConfig, SkillScope } from \"../../types/config\";\nimport type { AgentName, SkillId } from \"../../types/index\";\nimport { isActiveAt, isGlobalTombstone, type ScopedEntry } from \"./scope-predicates\";\n\nexport type ScopeDiffInput = {\n currentSkills: SkillConfig[];\n currentAgents: AgentScopeConfig[];\n installedSkillConfigs: SkillConfig[] | null;\n installedAgentConfigs: AgentScopeConfig[] | null;\n isInitMode: boolean;\n};\n\nexport type DiffRowStatus = \"added\" | \"mode-changed\" | \"removed\" | \"unchanged\";\n\nexport type SkillDiffRow = {\n id: SkillId;\n source: string;\n status: DiffRowStatus;\n};\n\nexport type AgentDiffRow = {\n name: AgentName;\n status: Exclude<DiffRowStatus, \"mode-changed\">;\n};\n\nexport type ScopeDiff = {\n projectSkillRows: SkillDiffRow[];\n globalSkillRows: SkillDiffRow[];\n projectAgentRows: AgentDiffRow[];\n globalAgentRows: AgentDiffRow[];\n hasContent: boolean;\n};\n\n/** One scope's share of a roster's diff: the entries listed with a status, then the removals. */\ntype ScopeEntries<Entry> = { listed: Entry[]; removed: Entry[] };\n\ntype RosterDiff<Entry> = Record<SkillScope, ScopeEntries<Entry>>;\n\n/**\n * A tombstone occupies its (id, scope) slot without filling it: it silences a global install at\n * project scope. Slot checks count tombstones; removal and `~` read the active baseline only.\n */\nexport function computeScopeDiff(input: ScopeDiffInput): ScopeDiff {\n const { currentSkills, currentAgents, installedSkillConfigs, installedAgentConfigs, isInitMode } =\n input;\n\n const skills = diffRoster(currentSkills, installedSkillConfigs, (skill) => skill.id, isInitMode);\n const agents = diffRoster(\n currentAgents,\n installedAgentConfigs,\n (agent) => agent.name,\n isInitMode,\n );\n const skillRow = skillRowClassifier(installedSkillConfigs);\n const agentRow = agentRowClassifier(installedAgentConfigs);\n\n const projectSkillRows = rowsOf(skills.project, skillRow, toRemovedSkillRow);\n const globalSkillRows = rowsOf(skills.global, skillRow, toRemovedSkillRow);\n const projectAgentRows = rowsOf(agents.project, agentRow, toRemovedAgentRow);\n const globalAgentRows = rowsOf(agents.global, agentRow, toRemovedAgentRow);\n\n const hasContent = [projectSkillRows, globalSkillRows, projectAgentRows, globalAgentRows].some(\n (rows) => rows.length > 0,\n );\n\n return { projectSkillRows, globalSkillRows, projectAgentRows, globalAgentRows, hasContent };\n}\n\nfunction diffRoster<Entry extends ScopedEntry>(\n current: Entry[],\n installed: Entry[] | null,\n identityOf: (entry: Entry) => string,\n isInitMode: boolean,\n): RosterDiff<Entry> {\n // The installs the baseline actually records; tombstones are not installs.\n const activeBaseline = (installed ?? []).filter((entry) => !entry.excluded);\n const vacated = vacatedInstalls(activeBaseline, current, identityOf);\n const projectEntries = current.filter((entry) => isActiveAt(entry, \"project\"));\n const claimedByProject = new Set(projectEntries.map(identityOf));\n // A vacated global the project claims is inherited: listed once under Global, never removed.\n const [inheritedGlobals, removedGlobals] = partition(\n vacated.filter((entry) => entry.scope === \"global\"),\n (entry) => claimedByProject.has(identityOf(entry)),\n );\n\n return {\n project: {\n listed: projectEntries,\n removed: vacated.filter((entry) => entry.scope === \"project\"),\n },\n global: {\n listed: [\n ...current.filter((entry) => isActiveAt(entry, \"global\")),\n ...inheritedGlobals,\n ...current.filter(isGlobalTombstone),\n ],\n removed: isInitMode ? [] : removedGlobals,\n },\n };\n}\n\n/** Baseline installs whose slot nothing in current, active or tombstone, occupies. */\nfunction vacatedInstalls<Entry extends ScopedEntry>(\n activeBaseline: Entry[],\n current: Entry[],\n identityOf: (entry: Entry) => string,\n): Entry[] {\n const slotOf = (entry: Entry) => slotKey(identityOf(entry), entry.scope);\n const occupiedSlots = new Set(current.map(slotOf));\n return activeBaseline.filter((install) => !occupiedSlots.has(slotOf(install)));\n}\n\nfunction rowsOf<Entry, Row>(\n entries: ScopeEntries<Entry>,\n toRow: (entry: Entry) => Row,\n toRemovedRow: (entry: Entry) => Row,\n): Row[] {\n return [...entries.listed.map(toRow), ...entries.removed.map(toRemovedRow)];\n}\n\n/** The `(id, scope)` SLOT key this module diffs on, rather than the id alone. */\nfunction slotKey(identity: string, scope: SkillScope | undefined): string {\n return `${identity}:${scope}`;\n}\n\nexport function formatScopeTag(scope: SkillScope): \"[G]\" | \"[P]\" {\n return scope === \"global\" ? \"[G]\" : \"[P]\";\n}\n\nfunction skillRowClassifier(installed: SkillConfig[] | null): (skill: SkillConfig) => SkillDiffRow {\n const installedSlots = installed\n ? new Set(installed.map((skill) => slotKey(skill.id, skill.scope)))\n : null;\n const installedOriginBySlot = installed\n ? new Map(\n installed\n .filter((skill) => !skill.excluded)\n .map((skill) => [slotKey(skill.id, skill.scope), skill.origin]),\n )\n : null;\n return (skill) => classifySkillDiffRow(skill, installedSlots, installedOriginBySlot);\n}\n\nfunction agentRowClassifier(\n installed: AgentScopeConfig[] | null,\n): (agent: AgentScopeConfig) => AgentDiffRow {\n const installedSlots = installed\n ? new Set(installed.map((agent) => slotKey(agent.name, agent.scope)))\n : null;\n return (agent) => classifyAgentDiffRow(agent, installedSlots);\n}\n\n/** Compares `origin`, which is where a skill's install mode is recorded. */\nfunction classifySkillDiffRow(\n skill: SkillConfig,\n installedSlots: Set<string> | null,\n installedOriginBySlot: Map<string, string> | null,\n): SkillDiffRow {\n const slot = slotKey(skill.id, skill.scope);\n const isNew = installedSlots === null || !installedSlots.has(slot);\n const installedOrigin = installedOriginBySlot?.get(slot);\n const modeChanged = !isNew && installedOrigin != null && installedOrigin !== skill.origin;\n if (modeChanged) {\n return { id: skill.id, source: skill.origin, status: \"mode-changed\" };\n }\n return { id: skill.id, source: skill.origin, status: isNew ? \"added\" : \"unchanged\" };\n}\n\nfunction classifyAgentDiffRow(\n agent: AgentScopeConfig,\n installedSlots: Set<string> | null,\n): AgentDiffRow {\n const isNew = installedSlots === null || !installedSlots.has(slotKey(agent.name, agent.scope));\n return { name: agent.name, status: isNew ? \"added\" : \"unchanged\" };\n}\n\nfunction toRemovedSkillRow(skill: SkillConfig): SkillDiffRow {\n return { id: skill.id, source: skill.origin, status: \"removed\" };\n}\n\nfunction toRemovedAgentRow(agent: AgentScopeConfig): AgentDiffRow {\n return { name: agent.name, status: \"removed\" };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -4,32 +4,41 @@ import {
|
|
|
4
4
|
} from "./chunk-OZXAJNLA.js";
|
|
5
5
|
import {
|
|
6
6
|
CLI_COLORS
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-A6OWEJGC.js";
|
|
8
8
|
|
|
9
9
|
// src/cli/components/common/removal-plan-confirm.tsx
|
|
10
10
|
import "react";
|
|
11
11
|
import { Box, Text, useApp } from "ink";
|
|
12
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
var ITEM_INDENT = 3;
|
|
14
14
|
var RemovalPlanConfirm = ({
|
|
15
15
|
heading,
|
|
16
16
|
sections,
|
|
17
|
+
overwritten,
|
|
17
18
|
statements,
|
|
18
19
|
message,
|
|
19
20
|
onConfirm,
|
|
20
21
|
onCancel
|
|
21
22
|
}) => {
|
|
22
23
|
const { exit } = useApp();
|
|
24
|
+
const opensTheFrame = heading === void 0 && sections.length === 0;
|
|
23
25
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
24
|
-
/* @__PURE__ */
|
|
25
|
-
|
|
26
|
+
heading !== void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
27
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: heading }),
|
|
28
|
+
/* @__PURE__ */ jsx(Text, { children: " " })
|
|
29
|
+
] }),
|
|
26
30
|
sections.map((section) => /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
27
31
|
/* @__PURE__ */ jsxs(Text, { color: CLI_COLORS.ERROR, children: [
|
|
28
32
|
" ",
|
|
29
33
|
section.label
|
|
30
34
|
] }),
|
|
31
|
-
/* @__PURE__ */ jsx(
|
|
35
|
+
/* @__PURE__ */ jsx(PlanItems, { items: section.items })
|
|
32
36
|
] }, section.label)),
|
|
37
|
+
overwritten !== void 0 && overwritten.items.length > 0 && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
38
|
+
!opensTheFrame && /* @__PURE__ */ jsx(Text, { children: " " }),
|
|
39
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: overwritten.label }),
|
|
40
|
+
/* @__PURE__ */ jsx(PlanItems, { items: overwritten.items })
|
|
41
|
+
] }),
|
|
33
42
|
statements.map((statement) => /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
34
43
|
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
35
44
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: statement })
|
|
@@ -52,8 +61,9 @@ var RemovalPlanConfirm = ({
|
|
|
52
61
|
)
|
|
53
62
|
] });
|
|
54
63
|
};
|
|
64
|
+
var PlanItems = ({ items }) => /* @__PURE__ */ jsx(Box, { flexDirection: "column", paddingLeft: ITEM_INDENT, children: items.map((item) => /* @__PURE__ */ jsx(Text, { dimColor: true, children: item }, item)) });
|
|
55
65
|
|
|
56
66
|
export {
|
|
57
67
|
RemovalPlanConfirm
|
|
58
68
|
};
|
|
59
|
-
//# sourceMappingURL=chunk-
|
|
69
|
+
//# sourceMappingURL=chunk-5FM77WKW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/common/removal-plan-confirm.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text, useApp } from \"ink\";\n\nimport { Confirm } from \"./confirm.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\n\nconst ITEM_INDENT = 3;\n\nexport type RemovalPlanSection = {\n label: string;\n items: string[];\n};\n\nexport type RemovalPlanConfirmProps = {\n /** Omitted where the plan opens on what it overwrites. */\n heading?: string;\n /** Omit headings with no items. */\n sections: RemovalPlanSection[];\n /** What the apply writes over in place, under a heading of its own; omitted when empty. */\n overwritten?: RemovalPlanSection;\n /** Prose under the removals: what stays and why, and what a removal reaches beyond. */\n statements: string[];\n message: string;\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport const RemovalPlanConfirm: React.FC<RemovalPlanConfirmProps> = ({\n heading,\n sections,\n overwritten,\n statements,\n message,\n onConfirm,\n onCancel,\n}) => {\n const { exit } = useApp();\n const opensTheFrame = heading === undefined && sections.length === 0;\n\n return (\n <Box flexDirection=\"column\">\n {heading !== undefined && (\n <>\n <Text bold>{heading}</Text>\n <Text> </Text>\n </>\n )}\n\n {sections.map((section) => (\n <Box key={section.label} flexDirection=\"column\">\n <Text color={CLI_COLORS.ERROR}> {section.label}</Text>\n <PlanItems items={section.items} />\n </Box>\n ))}\n\n {overwritten !== undefined && overwritten.items.length > 0 && (\n <Box flexDirection=\"column\">\n {!opensTheFrame && <Text> </Text>}\n <Text bold>{overwritten.label}</Text>\n <PlanItems items={overwritten.items} />\n </Box>\n )}\n\n {statements.map((statement) => (\n <Box key={statement} flexDirection=\"column\">\n <Text> </Text>\n <Text dimColor>{statement}</Text>\n </Box>\n ))}\n\n <Text> </Text>\n <Confirm\n message={message}\n onConfirm={() => {\n onConfirm();\n exit();\n }}\n onCancel={() => {\n onCancel();\n exit();\n }}\n defaultValue={false}\n />\n </Box>\n );\n};\n\nconst PlanItems: React.FC<{ items: string[] }> = ({ items }) => (\n <Box flexDirection=\"column\" paddingLeft={ITEM_INDENT}>\n {items.map((item) => (\n <Text key={item} dimColor>\n {item}\n </Text>\n ))}\n </Box>\n);\n"],"mappings":";;;;;;;;;AAAA,OAAkB;AAClB,SAAS,KAAK,MAAM,cAAc;AAyC1B,mBACE,KADF;AApCR,IAAM,cAAc;AAqBb,IAAM,qBAAwD,CAAC;AAAA,EACpE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,KAAK,IAAI,OAAO;AACxB,QAAM,gBAAgB,YAAY,UAAa,SAAS,WAAW;AAEnE,SACE,qBAAC,OAAI,eAAc,UAChB;AAAA,gBAAY,UACX,iCACE;AAAA,0BAAC,QAAK,MAAI,MAAE,mBAAQ;AAAA,MACpB,oBAAC,QAAK,eAAC;AAAA,OACT;AAAA,IAGD,SAAS,IAAI,CAAC,YACb,qBAAC,OAAwB,eAAc,UACrC;AAAA,2BAAC,QAAK,OAAO,WAAW,OAAO;AAAA;AAAA,QAAE,QAAQ;AAAA,SAAM;AAAA,MAC/C,oBAAC,aAAU,OAAO,QAAQ,OAAO;AAAA,SAFzB,QAAQ,KAGlB,CACD;AAAA,IAEA,gBAAgB,UAAa,YAAY,MAAM,SAAS,KACvD,qBAAC,OAAI,eAAc,UAChB;AAAA,OAAC,iBAAiB,oBAAC,QAAK,eAAC;AAAA,MAC1B,oBAAC,QAAK,MAAI,MAAE,sBAAY,OAAM;AAAA,MAC9B,oBAAC,aAAU,OAAO,YAAY,OAAO;AAAA,OACvC;AAAA,IAGD,WAAW,IAAI,CAAC,cACf,qBAAC,OAAoB,eAAc,UACjC;AAAA,0BAAC,QAAK,eAAC;AAAA,MACP,oBAAC,QAAK,UAAQ,MAAE,qBAAU;AAAA,SAFlB,SAGV,CACD;AAAA,IAED,oBAAC,QAAK,eAAC;AAAA,IACP;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,MAAM;AACf,oBAAU;AACV,eAAK;AAAA,QACP;AAAA,QACA,UAAU,MAAM;AACd,mBAAS;AACT,eAAK;AAAA,QACP;AAAA,QACA,cAAc;AAAA;AAAA,IAChB;AAAA,KACF;AAEJ;AAEA,IAAM,YAA2C,CAAC,EAAE,MAAM,MACxD,oBAAC,OAAI,eAAc,UAAS,aAAa,aACtC,gBAAM,IAAI,CAAC,SACV,oBAAC,QAAgB,UAAQ,MACtB,kBADQ,IAEX,CACD,GACH;","names":[]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
getLocalAgentDefinitions
|
|
4
|
+
} from "./chunk-WII6GOPM.js";
|
|
5
5
|
import {
|
|
6
6
|
loadMergedAgents
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-3YYHL76L.js";
|
|
8
8
|
|
|
9
9
|
// src/cli/lib/operations/project/load-agent-defs.ts
|
|
10
10
|
async function loadAgentDefs() {
|
|
11
|
-
const agentSourcePaths = await
|
|
11
|
+
const agentSourcePaths = await getLocalAgentDefinitions();
|
|
12
12
|
const agents = await loadMergedAgents(agentSourcePaths.sourcePath);
|
|
13
13
|
return {
|
|
14
14
|
agents,
|
|
@@ -20,4 +20,4 @@ async function loadAgentDefs() {
|
|
|
20
20
|
export {
|
|
21
21
|
loadAgentDefs
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
23
|
+
//# sourceMappingURL=chunk-7IVLVEHX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/operations/project/load-agent-defs.ts"],"sourcesContent":["import { getLocalAgentDefinitions } from \"../../agents/index.js\";\nimport { loadMergedAgents } from \"../../loading/index.js\";\nimport type { AgentDefinition, AgentName, AgentSourcePaths } from \"../../../types/index.js\";\n\nexport type AgentDefs = {\n /** The CLI's own sub-agent definitions; nothing a marketplace declares. */\n agents: Partial<Record<AgentName, AgentDefinition>>;\n sourcePath: string;\n agentSourcePaths: AgentSourcePaths;\n};\n\n/**\n * The single definition of which sub-agents exist, shared by every compile pass and every\n * emitted `AgentName` union; a marketplace's sub-agents are never included.\n */\nexport async function loadAgentDefs(): Promise<AgentDefs> {\n const agentSourcePaths = await getLocalAgentDefinitions();\n const agents = await loadMergedAgents(agentSourcePaths.sourcePath);\n\n return {\n agents,\n sourcePath: agentSourcePaths.sourcePath,\n agentSourcePaths,\n };\n}\n"],"mappings":";;;;;;;;;AAeA,eAAsB,gBAAoC;AACxD,QAAM,mBAAmB,MAAM,yBAAyB;AACxD,QAAM,SAAS,MAAM,iBAAiB,iBAAiB,UAAU;AAEjE,SAAO;AAAA,IACL;AAAA,IACA,YAAY,iBAAiB;AAAA,IAC7B;AAAA,EACF;AACF;","names":[]}
|