@tacuchi/agent-workflow-cli 25.9.0 → 26.0.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.
Files changed (115) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +1 -2
  3. package/dist/application/capability/design-handler.js +94 -0
  4. package/dist/application/capability/design-handler.js.map +1 -1
  5. package/dist/application/capability/dispatcher.js +178 -18
  6. package/dist/application/capability/dispatcher.js.map +1 -1
  7. package/dist/application/capability/durable-effect.js.map +1 -1
  8. package/dist/application/capability/readiness.js +8 -54
  9. package/dist/application/capability/readiness.js.map +1 -1
  10. package/dist/application/capability/resolution.js +124 -192
  11. package/dist/application/capability/resolution.js.map +1 -1
  12. package/dist/application/doctor/prepare.js +0 -3
  13. package/dist/application/doctor/prepare.js.map +1 -1
  14. package/dist/application/doctor/provider-skills.js +21 -132
  15. package/dist/application/doctor/provider-skills.js.map +1 -1
  16. package/dist/application/doctor/repair-runner.js +0 -47
  17. package/dist/application/doctor/repair-runner.js.map +1 -1
  18. package/dist/application/flow/submit.js +1 -1
  19. package/dist/application/flow/submit.js.map +1 -1
  20. package/dist/application/plan-lint-service.js +31 -5
  21. package/dist/application/plan-lint-service.js.map +1 -1
  22. package/dist/application/retirement/attribution.js +1 -2
  23. package/dist/application/retirement/attribution.js.map +1 -1
  24. package/dist/application/self/clean-legacy.js +1 -2
  25. package/dist/application/self/clean-legacy.js.map +1 -1
  26. package/dist/application/self/install-skill.js +5 -49
  27. package/dist/application/self/install-skill.js.map +1 -1
  28. package/dist/application/self/skill-files.js +29 -0
  29. package/dist/application/self/skill-files.js.map +1 -0
  30. package/dist/application/skills-resolver-service.js +5 -91
  31. package/dist/application/skills-resolver-service.js.map +1 -1
  32. package/dist/application/source-boundary-policy.js +10 -2
  33. package/dist/application/source-boundary-policy.js.map +1 -1
  34. package/dist/cli/commands/capability.js +12 -4
  35. package/dist/cli/commands/capability.js.map +1 -1
  36. package/dist/cli/commands/index.js +0 -4
  37. package/dist/cli/commands/index.js.map +1 -1
  38. package/dist/cli/commands/self.js +1 -22
  39. package/dist/cli/commands/self.js.map +1 -1
  40. package/dist/cli/commands/skills.js +4 -11
  41. package/dist/cli/commands/skills.js.map +1 -1
  42. package/dist/cli/help-groups.js +1 -3
  43. package/dist/cli/help-groups.js.map +1 -1
  44. package/dist/cli/tui/app.js +2 -3
  45. package/dist/cli/tui/app.js.map +1 -1
  46. package/dist/cli/tui/components/host-admin-section.js +2 -13
  47. package/dist/cli/tui/components/host-admin-section.js.map +1 -1
  48. package/dist/cli/tui/components/tabs-config.js +1 -2
  49. package/dist/cli/tui/components/tabs-config.js.map +1 -1
  50. package/dist/cli/tui/tui-prefs.js +2 -0
  51. package/dist/cli/tui/tui-prefs.js.map +1 -1
  52. package/dist/dist-manifest.json +60 -204
  53. package/dist/domain/capability/protocol.js +3 -1
  54. package/dist/domain/capability/protocol.js.map +1 -1
  55. package/dist/domain/doctor/operations.js +0 -18
  56. package/dist/domain/doctor/operations.js.map +1 -1
  57. package/dist/domain/flow/authority.js +1 -3
  58. package/dist/domain/flow/authority.js.map +1 -1
  59. package/dist/domain/skills.js +2 -6
  60. package/dist/domain/skills.js.map +1 -1
  61. package/package.json +2 -2
  62. package/skills/w/SKILL.md +9 -16
  63. package/skills/w/exports/README.md +4 -4
  64. package/skills/w/exports/export-diagrams/EXPORT.md +1 -1
  65. package/skills/w/exports/export-scripts/EXPORT.md +1 -1
  66. package/skills/w/harness/HARNESS.md +2 -5
  67. package/skills/w/loops/CHASSIS.md +1 -1
  68. package/skills/w/loops/CODE-POLICIES.md +1 -1
  69. package/skills/w/loops/README.md +2 -2
  70. package/skills/w/loops/quick-loop/LOOP.md +1 -1
  71. package/skills/w/loops/spec-refine-loop/LOOP.md +1 -1
  72. package/skills/w/roles/README.md +11 -47
  73. package/skills/w/roles/design/ROLE.md +3 -1
  74. package/skills/w/roles/diagrams/ROLE.md +1 -1
  75. package/skills/w/roles/git/ROLE.md +1 -1
  76. package/skills/w/roles/research/ROLE.md +1 -1
  77. package/skills/w/roles/sql/ROLE.md +1 -1
  78. package/dist/application/capability/descriptor-loader.js +0 -109
  79. package/dist/application/capability/descriptor-loader.js.map +0 -1
  80. package/dist/application/capability/installed-inventory.js +0 -168
  81. package/dist/application/capability/installed-inventory.js.map +0 -1
  82. package/dist/application/doctor/skills-toml-migrate.js +0 -76
  83. package/dist/application/doctor/skills-toml-migrate.js.map +0 -1
  84. package/dist/application/self/install-plugin-skills-git.js +0 -226
  85. package/dist/application/self/install-plugin-skills-git.js.map +0 -1
  86. package/dist/application/self/install-plugin-skills.js +0 -203
  87. package/dist/application/self/install-plugin-skills.js.map +0 -1
  88. package/dist/application/self/plugin-cache-clear.js +0 -133
  89. package/dist/application/self/plugin-cache-clear.js.map +0 -1
  90. package/dist/application/self/plugin-cache-reload.js +0 -141
  91. package/dist/application/self/plugin-cache-reload.js.map +0 -1
  92. package/dist/application/self/skills-apply.js +0 -623
  93. package/dist/application/self/skills-apply.js.map +0 -1
  94. package/dist/application/self/skills-catalog.js +0 -35
  95. package/dist/application/self/skills-catalog.js.map +0 -1
  96. package/dist/application/self/skills-change.js +0 -479
  97. package/dist/application/self/skills-change.js.map +0 -1
  98. package/dist/application/self/skills-discovery.js +0 -275
  99. package/dist/application/self/skills-discovery.js.map +0 -1
  100. package/dist/application/self/skills-manager.js +0 -253
  101. package/dist/application/self/skills-manager.js.map +0 -1
  102. package/dist/application/self/skills-payload.js +0 -566
  103. package/dist/application/self/skills-payload.js.map +0 -1
  104. package/dist/application/self/skills-registry.js +0 -107
  105. package/dist/application/self/skills-registry.js.map +0 -1
  106. package/dist/application/skill-index-service.js +0 -78
  107. package/dist/application/skill-index-service.js.map +0 -1
  108. package/dist/cli/commands/plugin-cache.js +0 -25
  109. package/dist/cli/commands/plugin-cache.js.map +0 -1
  110. package/dist/cli/commands/skill-index.js +0 -19
  111. package/dist/cli/commands/skill-index.js.map +0 -1
  112. package/dist/cli/tui/data/recommended-skills.js +0 -482
  113. package/dist/cli/tui/data/recommended-skills.js.map +0 -1
  114. package/dist/cli/tui/tabs/skills-tab.js +0 -664
  115. package/dist/cli/tui/tabs/skills-tab.js.map +0 -1
@@ -1,35 +0,0 @@
1
- // Data contract of the CURATED catalog (Spec 043): what Workline recommends,
2
- // under which observable condition, and with which reviewed identity.
3
- //
4
- // Pure data + two predicates, no I/O: the entries themselves live in the TUI
5
- // data module and are passed in as a parameter, the same way the seed always
6
- // was (`application` does not import from `cli/`).
7
- //
8
- // Recommendation and installation are DIFFERENT facts. A disposition never
9
- // creates, deletes or hides a file: `withdrawn` drops an entry from the
10
- // habitual set and keeps its metadata so an existing installation stays
11
- // readable in the full inventory.
12
- /** Whether the entry belongs to the habitual recommended set. */
13
- export function isRecommendedEntry(entry) {
14
- return (entry.disposition ?? "keep") !== "withdrawn";
15
- }
16
- /**
17
- * The entry's curation, or `undefined` when the catalog does not know the
18
- * name: an unreviewed installation says so instead of borrowing a verdict.
19
- */
20
- export function curationOf(entry) {
21
- if (entry === undefined)
22
- return undefined;
23
- return {
24
- disposition: entry.disposition ?? "keep",
25
- ...(entry.reason !== undefined ? { reason: entry.reason } : {}),
26
- ...(entry.useWhen !== undefined ? { useWhen: entry.useWhen } : {}),
27
- ...(entry.knownLimits !== undefined ? { knownLimits: entry.knownLimits } : {}),
28
- ...(entry.skillName !== undefined ? { skillName: entry.skillName } : {}),
29
- ...(entry.path !== undefined ? { path: entry.path } : {}),
30
- ...(entry.reviewedRef !== undefined ? { reviewedRef: entry.reviewedRef } : {}),
31
- ...(entry.evidence !== undefined ? { evidence: entry.evidence } : {}),
32
- ...(entry.proposedSource !== undefined ? { proposedSource: entry.proposedSource } : {}),
33
- };
34
- }
35
- //# sourceMappingURL=skills-catalog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills-catalog.js","sourceRoot":"","sources":["../../../src/application/self/skills-catalog.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,mDAAmD;AACnD,EAAE;AACF,2EAA2E;AAC3E,wEAAwE;AACxE,wEAAwE;AACxE,kCAAkC;AA8DlC,iEAAiE;AACjE,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IACjD,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,WAAW,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAA4B;IACrD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,MAAM;QACxC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxF,CAAC;AACJ,CAAC"}
@@ -1,479 +0,0 @@
1
- // The change somebody is about to approve, sealed (Spec 043 · AC-09):
2
- // the exact set, the previous and proposed registry, every destination with
3
- // its ownership, and the effect classes the application would exercise.
4
- //
5
- // Preparing is the whole point of this module: it acquires, stages and
6
- // compares WITHOUT publishing into any host root, so cancelling costs nothing
7
- // and approving refers to something that already exists. The digest is what
8
- // makes "is this still the same thing you said yes to?" a property of the data
9
- // instead of a rule somebody has to remember — a moved source, one more
10
- // destination or a byte of payload all produce a different seal.
11
- //
12
- // `applySkillChange` (F3) is the only thing allowed to turn one of these into
13
- // bytes on disk, and it re-reads every precondition under the lock first.
14
- import { mkdtemp, rm } from "node:fs/promises";
15
- import { tmpdir } from "node:os";
16
- import { join } from "node:path";
17
- import { semanticDigest } from "../semantic-operation/protocol.js";
18
- import { COMMAND_SKILL_PREFIX } from "./install-skill.js";
19
- import { acquireSource, candidateAtPath, candidatesNamed, } from "./skills-discovery.js";
20
- import { inspectSkillOwnership, resolveSkillSource, } from "./skills-manager.js";
21
- import { preparePayloads } from "./skills-payload.js";
22
- import { isValidSkillName, readSkillsRegistry, skillsRegistryPath, } from "./skills-registry.js";
23
- const ACQUIRING = ["register", "install", "update", "replace"];
24
- /**
25
- * Registry entry the proposal would write for a prepared skill.
26
- *
27
- * `installedAt` and `mode` are deliberately ABSENT: when the materialization
28
- * happened and whether the replica ended up a link or a copy are facts of the
29
- * application, not of the approval — stamping a made-up timestamp here would
30
- * put a lie inside the seal, and sealing the real one would make an identical
31
- * retry look like a different change.
32
- */
33
- function entryFor(skill) {
34
- return {
35
- source: skill.provenance.source,
36
- ...(skill.provenance.requestedRef ? { ref: skill.provenance.requestedRef } : {}),
37
- ...(skill.path !== "" ? { path: skill.path } : {}),
38
- ...(skill.name !== skill.provenance.directory ? { skillName: skill.name } : {}),
39
- ...(skill.provenance.resolvedRef ? { resolvedRef: skill.provenance.resolvedRef } : {}),
40
- payloadDigest: skill.digest,
41
- };
42
- }
43
- /** The three managed roots, with the ownership each one reports. */
44
- function destinationsFor(ownership, action) {
45
- const canonical = {
46
- location: ownership.canonical.path,
47
- host: "agents",
48
- action: ownership.canonical.state === "absent" && action !== "delete" ? "create" : action,
49
- shared: true,
50
- ownership: ownership.canonical.state,
51
- };
52
- const replicas = ownership.replicas.map((replica) => ({
53
- location: replica.path,
54
- host: replica.host,
55
- action: replica.state === "absent" && action !== "delete" ? "create" : action,
56
- shared: true,
57
- ownership: replica.state,
58
- }));
59
- return [canonical, ...replicas];
60
- }
61
- function effectsOf(destinations) {
62
- const effects = new Set();
63
- for (const destination of destinations) {
64
- if (destination.action === "create")
65
- effects.add("local_additive");
66
- if (destination.action === "replace")
67
- effects.add("mutate_overwrite");
68
- if (destination.action === "delete")
69
- effects.add("destructive");
70
- }
71
- return [...effects];
72
- }
73
- function sealProposal(body) {
74
- return {
75
- ...body,
76
- digest: semanticDigest({
77
- operation: body.operation,
78
- installs: body.installs,
79
- additions: body.additions
80
- .map((skill) => ({
81
- name: skill.name,
82
- path: skill.path,
83
- digest: skill.digest,
84
- manifests: skill.manifests,
85
- }))
86
- .sort((a, b) => a.name.localeCompare(b.name)),
87
- withdrawals: [...body.withdrawals].sort(),
88
- previous_registry: body.previousRegistry,
89
- proposed_registry: body.proposedRegistry,
90
- destinations: [...body.destinations].sort((a, b) => a.location.localeCompare(b.location)),
91
- effects: [...body.effects].sort(),
92
- }),
93
- };
94
- }
95
- /** The exact selection: every path has to BE a skill of this source. */
96
- async function selectionByPaths(paths, acquired) {
97
- const byPath = new Map(acquired.inventory.candidates.map((c) => [c.path, c]));
98
- const chosen = [];
99
- for (const path of paths) {
100
- const walked = byPath.get(path);
101
- if (walked !== undefined) {
102
- chosen.push(walked);
103
- continue;
104
- }
105
- // The path is NOT normalized here on purpose: the validator owns both the
106
- // trimming and the refusal, and stripping a leading slash first turned
107
- // "this is not a path of the source" into "this does not exist" — a
108
- // misleading answer about a path that exists, just outside.
109
- //
110
- // The walk is not the authority on what the source HAS — it declares its
111
- // own limits and says when it was cut. An explicit path is validated
112
- // directly against the source, which is what lets somebody reach a skill
113
- // deeper than the walk goes, and it refuses by cause: not relative, out of
114
- // the source, absent, crossing a link, or no manifest there.
115
- const explicit = await candidateAtPath(acquired.root, path);
116
- if ("code" in explicit)
117
- return explicit;
118
- chosen.push(explicit);
119
- }
120
- return { candidates: chosen };
121
- }
122
- /** By-name selection: honoured only while it resolves ONE option, because two
123
- * skills with the same name are two alternatives, not a coin toss. */
124
- function selectionByName(name, inventory) {
125
- const matches = candidatesNamed(inventory, name);
126
- if (matches.length === 1 && matches[0])
127
- return { candidates: [matches[0]] };
128
- if (matches.length === 0) {
129
- return { code: "INVALID_PICK", message: `el origen no contiene la skill '${name}'` };
130
- }
131
- return { choice: matches };
132
- }
133
- /** The selection a request names, or the reason it cannot be resolved yet. */
134
- async function selectionOf(request, acquired) {
135
- const inventory = acquired.inventory;
136
- if (request.paths !== undefined && request.paths.length > 0) {
137
- return selectionByPaths(request.paths, acquired);
138
- }
139
- if (request.pick !== undefined)
140
- return selectionByName(request.pick, inventory);
141
- if (inventory.candidates.length === 1 && inventory.candidates[0]) {
142
- return { candidates: [inventory.candidates[0]] };
143
- }
144
- if (inventory.candidates.length === 0) {
145
- return {
146
- code: "SOURCE_NOT_FOUND",
147
- message: "no se encontró ninguna skill válida (SKILL.md con name+description)",
148
- };
149
- }
150
- return { choice: [...inventory.candidates] };
151
- }
152
- /** Preconditions the registry imposes on a name entering the manager. */
153
- function registryRefusal(name, previous, ownership, operation) {
154
- if (!isValidSkillName(name)) {
155
- return {
156
- code: "INVALID_SKILL_NAME",
157
- message: `'${name}' no es un nombre de skill usable como segmento de ruta`,
158
- };
159
- }
160
- if (name.startsWith(COMMAND_SKILL_PREFIX)) {
161
- return {
162
- code: "RESERVED_SKILL_PREFIX",
163
- message: `'${name}' usa el prefijo reservado '${COMMAND_SKILL_PREFIX}' del bundle`,
164
- };
165
- }
166
- if (operation === "register" && previous !== null) {
167
- return {
168
- code: "SKILL_ALREADY_REGISTERED",
169
- message: `'${name}' ya está registrada (fuente: ${previous.source})`,
170
- };
171
- }
172
- if (ownership.canonical.state === "foreign") {
173
- return {
174
- code: "SKILL_NAME_COLLISION",
175
- message: `ya existe ${ownership.canonical.path} y este manager no lo materializó`,
176
- };
177
- }
178
- const foreign = ownership.replicas.find((replica) => replica.state === "foreign");
179
- if (foreign) {
180
- return {
181
- code: "FOREIGN_REPLICA",
182
- message: `no se puede tratar ${foreign.path} como propia: existe —o su raíz no es legible— y no la creó este manager`,
183
- };
184
- }
185
- return null;
186
- }
187
- async function withdrawalDestinations(ctx, names, registry) {
188
- const destinations = [];
189
- const previous = {};
190
- for (const name of names) {
191
- const entry = registry[name];
192
- if (entry === undefined) {
193
- return {
194
- code: "SKILL_NOT_REGISTERED",
195
- message: `'${name}' no está en el registro de sueltas: este manager no toca lo que no registró`,
196
- };
197
- }
198
- previous[name] = entry;
199
- const ownership = await inspectSkillOwnership(ctx, name, entry);
200
- // A foreign dir is never deleted: it is reported as preserved.
201
- for (const destination of destinationsFor(ownership, "delete")) {
202
- destinations.push(destination.ownership === "foreign" ? { ...destination, action: "unchanged" } : destination);
203
- }
204
- }
205
- return { destinations, previous };
206
- }
207
- /**
208
- * Prepares a change and seals it. Nothing here writes into a host root: the
209
- * payload is staged in a temp dir the caller releases, and every comparison is
210
- * a read.
211
- */
212
- export async function prepareSkillChange(ctx, request) {
213
- const read = await readSkillsRegistry(ctx);
214
- if (read.warning) {
215
- return {
216
- status: "rejected",
217
- rejection: {
218
- code: "REGISTRY_UNREADABLE",
219
- message: `${read.warning} Corregí (o borrá) el archivo antes de operar.`,
220
- },
221
- };
222
- }
223
- const registry = read.registry.skills;
224
- const home = ctx.env.homeDir();
225
- const notes = [
226
- "Preparar no cambia ninguna instalación: el payload queda fuera de las raíces del host.",
227
- `Las ubicaciones son compartidas por todos los proyectos de este equipo (${home}).`,
228
- "Aplicar no recarga el host: lo que cada host descubra por su cuenta queda fuera de este alcance.",
229
- ];
230
- if (!ACQUIRING.includes(request.operation)) {
231
- return prepareWithoutSource(ctx, request, registry, notes);
232
- }
233
- if (request.source === undefined || request.source.trim().length === 0) {
234
- return {
235
- status: "rejected",
236
- rejection: { code: "INVALID_SOURCE", message: "la fuente no puede estar vacía" },
237
- };
238
- }
239
- // `update` means re-fetching the REGISTERED ref, and a local path has none:
240
- // the refusal names the operation that does fit instead of quietly doing
241
- // something else under the same word.
242
- if (request.operation === "update") {
243
- const resolved = resolveSkillSource(request.source, request.ref);
244
- if ("error" in resolved || resolved.kind !== "git") {
245
- return {
246
- status: "rejected",
247
- rejection: {
248
- code: "UPDATE_REQUIRES_GIT",
249
- message: `Update re-fetchea git; '${request.source}' es un path local — usá Repair (o cambiá la fuente registrada).`,
250
- },
251
- };
252
- }
253
- }
254
- const acquired = await acquireSource(request.source, request.ref);
255
- if ("code" in acquired)
256
- return { status: "rejected", rejection: acquired };
257
- try {
258
- return await prepareFromSource(ctx, request, registry, notes, acquired);
259
- }
260
- catch (err) {
261
- await acquired.release();
262
- return {
263
- status: "rejected",
264
- rejection: { code: "PREPARATION_FAILED", message: err.message },
265
- };
266
- }
267
- }
268
- /** `repair`, `uninstall` and `remove`: no bytes to acquire, effects to declare. */
269
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: the order of the refusals is the contract a person reads — the name, then the registration, then what the ownership allows — and extracting them would hide that precedence rather than simplify it.
270
- async function prepareWithoutSource(ctx, request, registry, notes) {
271
- const name = request.name;
272
- if (name === undefined) {
273
- return {
274
- status: "rejected",
275
- rejection: { code: "INVALID_INPUT", message: "esta operación necesita el nombre registrado" },
276
- };
277
- }
278
- const entry = registry[name];
279
- if (entry === undefined) {
280
- return {
281
- status: "rejected",
282
- rejection: {
283
- code: "SKILL_NOT_REGISTERED",
284
- message: `'${name}' no está en el registro de sueltas: este manager no toca dirs que no registró (bundle w, skills de plugins o manuales).`,
285
- },
286
- };
287
- }
288
- const ownership = await inspectSkillOwnership(ctx, name, entry);
289
- const registryPath = skillsRegistryPath(ctx.env.homeDir());
290
- if (request.operation === "repair") {
291
- const foreign = ownership.replicas.find((replica) => replica.state === "foreign");
292
- if (foreign !== undefined) {
293
- return {
294
- status: "rejected",
295
- rejection: {
296
- code: "FOREIGN_REPLICA",
297
- message: `no se puede tratar ${foreign.path} como propia: existe —o su raíz no es legible— y no la creó este manager`,
298
- },
299
- };
300
- }
301
- if (ownership.canonical.state !== "ours") {
302
- return {
303
- status: "rejected",
304
- rejection: {
305
- code: "SKILL_NOT_INSTALLED",
306
- message: `'${name}' no tiene una copia canónica materializada por este manager: reparar sin re-adquirir declararía algo que no comprobó`,
307
- },
308
- };
309
- }
310
- const destinations = ownership.replicas.map((replica) => ({
311
- location: replica.path,
312
- host: replica.host,
313
- action: replica.state === "absent" ? "create" : "replace",
314
- shared: true,
315
- ownership: replica.state,
316
- }));
317
- const proposal = sealProposal({
318
- operation: "repair",
319
- installs: false,
320
- additions: [],
321
- withdrawals: [],
322
- previousRegistry: { [name]: entry },
323
- proposedRegistry: { [name]: entry },
324
- destinations: [
325
- {
326
- location: ownership.canonical.path,
327
- host: "agents",
328
- action: "unchanged",
329
- shared: true,
330
- ownership: ownership.canonical.state,
331
- },
332
- ...destinations,
333
- ],
334
- effects: effectsOf(destinations),
335
- notes: [
336
- ...notes,
337
- "Repara las réplicas desde la copia canónica ya comprobada; no vuelve a la red.",
338
- ],
339
- });
340
- return { status: "prepared", proposal, release: async () => { } };
341
- }
342
- const removes = request.operation === "remove";
343
- const destinations = destinationsFor(ownership, "delete").map((destination) => destination.ownership === "foreign" ? { ...destination, action: "unchanged" } : destination);
344
- destinations.push({
345
- location: registryPath,
346
- host: "registry",
347
- action: "replace",
348
- shared: true,
349
- ownership: "ours",
350
- });
351
- const proposal = sealProposal({
352
- operation: request.operation,
353
- installs: false,
354
- additions: [],
355
- withdrawals: [name],
356
- previousRegistry: { [name]: entry },
357
- proposedRegistry: {
358
- [name]: removes
359
- ? null
360
- : {
361
- source: entry.source,
362
- ...(entry.ref ? { ref: entry.ref } : {}),
363
- ...(entry.path !== undefined ? { path: entry.path } : {}),
364
- ...(entry.skillName !== undefined ? { skillName: entry.skillName } : {}),
365
- ...(entry.resolvedRef !== undefined ? { resolvedRef: entry.resolvedRef } : {}),
366
- ...(entry.payloadDigest !== undefined ? { payloadDigest: entry.payloadDigest } : {}),
367
- },
368
- },
369
- destinations,
370
- effects: effectsOf(destinations),
371
- notes: [
372
- ...notes,
373
- removes
374
- ? "Desinstala y quita el registro. Retirar una recomendación no es esto."
375
- : "Borra la copia canónica y las réplicas; la registración se conserva.",
376
- "Las instalaciones ajenas se conservan y se informan; nunca se borran.",
377
- ],
378
- });
379
- return { status: "prepared", proposal, release: async () => { } };
380
- }
381
- /** `register`, `install`, `update` and `replace`: the payload comes first. */
382
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: the sequence IS the guarantee — selection, then payload, then registry preconditions, then withdrawals, then the seal — and every early exit either releases what the previous step acquired or hands that release to the caller. Splitting it would separate an acquisition from its release.
383
- async function prepareFromSource(ctx, request, registry, notes, acquired) {
384
- const selection = await selectionOf(request, acquired);
385
- if ("code" in selection) {
386
- await acquired.release();
387
- return { status: "rejected", rejection: selection };
388
- }
389
- if ("choice" in selection) {
390
- return {
391
- status: "needs-choice",
392
- inventory: acquired.inventory,
393
- candidates: selection.choice,
394
- release: acquired.release,
395
- };
396
- }
397
- const staging = await mkdtemp(join(tmpdir(), "aw-skill-stage-"));
398
- const release = async () => {
399
- await rm(staging, { recursive: true, force: true }).catch(() => { });
400
- await acquired.release();
401
- };
402
- const payload = await preparePayloads(acquired, selection.candidates, staging);
403
- if (payload.status === "rejected") {
404
- await release();
405
- return { status: "rejected", rejection: payload.rejection };
406
- }
407
- if (payload.status === "needs-expansion") {
408
- return { status: "needs-expansion", expansions: payload.expansions, release };
409
- }
410
- const installs = request.operation !== "register";
411
- const previousRegistry = {};
412
- const proposedRegistry = {};
413
- const destinations = [];
414
- for (const skill of payload.skills) {
415
- const previous = registry[skill.name] ?? null;
416
- const ownership = await inspectSkillOwnership(ctx, skill.name, previous ?? undefined);
417
- const refusal = registryRefusal(skill.name, previous, ownership, request.operation);
418
- if (refusal !== null) {
419
- await release();
420
- return { status: "rejected", rejection: refusal };
421
- }
422
- previousRegistry[skill.name] = previous;
423
- proposedRegistry[skill.name] = entryFor(skill);
424
- if (installs) {
425
- destinations.push(...destinationsFor(ownership, ownership.canonical.state === "ours" ? "replace" : "create"));
426
- }
427
- }
428
- const withdrawals = request.withdraw ?? [];
429
- if (withdrawals.length > 0) {
430
- const retired = await withdrawalDestinations(ctx, withdrawals, registry);
431
- if ("code" in retired) {
432
- await release();
433
- return { status: "rejected", rejection: retired };
434
- }
435
- destinations.push(...retired.destinations);
436
- for (const [name, entry] of Object.entries(retired.previous)) {
437
- previousRegistry[name] = entry;
438
- proposedRegistry[name] = null;
439
- }
440
- }
441
- destinations.push({
442
- location: skillsRegistryPath(ctx.env.homeDir()),
443
- host: "registry",
444
- action: "replace",
445
- shared: true,
446
- ownership: "ours",
447
- });
448
- const extra = payload.skills.flatMap((skill) => skill.manifests.length > 1
449
- ? [
450
- `'${skill.name}' materializa ${skill.manifests.length} SKILL.md: ${skill.manifests
451
- .map((manifest) => manifest.name)
452
- .join(", ")}.`,
453
- ]
454
- : []);
455
- const proposal = sealProposal({
456
- operation: request.operation,
457
- installs,
458
- additions: payload.skills,
459
- withdrawals: [...withdrawals],
460
- previousRegistry,
461
- proposedRegistry,
462
- destinations,
463
- effects: installs ? effectsOf(destinations) : ["local_additive"],
464
- notes: [
465
- ...notes,
466
- ...(installs ? [] : ["Registrar no instala: el único efecto es la entrada del registro."]),
467
- // The warning the old wizard showed on its own step: it belongs in the
468
- // preview, which is where the decision is actually made.
469
- "Una skill de terceros corre con los permisos de tu host: revisá su contenido antes de instalarla.",
470
- ...extra,
471
- ...(acquired.inventory.truncated
472
- ? ["El recorrido del origen se cortó por su límite: puede haber más skills."]
473
- : []),
474
- "El inventario enumera bytes y digests de lo leído; no certifica el funcionamiento ni la seguridad del paquete.",
475
- ],
476
- });
477
- return { status: "prepared", proposal, release };
478
- }
479
- //# sourceMappingURL=skills-change.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills-change.js","sourceRoot":"","sources":["../../../src/application/self/skills-change.ts"],"names":[],"mappings":"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"}