@tacuchi/agent-workflow-cli 25.1.2 → 25.3.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 (133) hide show
  1. package/README.md +3 -1
  2. package/dist/adapters/node-process.js +35 -0
  3. package/dist/adapters/node-process.js.map +1 -1
  4. package/dist/application/amend-service.js +393 -0
  5. package/dist/application/amend-service.js.map +1 -0
  6. package/dist/application/decision-note-service.js +20 -3
  7. package/dist/application/decision-note-service.js.map +1 -1
  8. package/dist/application/doctor/actions.js +158 -0
  9. package/dist/application/doctor/actions.js.map +1 -0
  10. package/dist/application/doctor/apply.js +399 -0
  11. package/dist/application/doctor/apply.js.map +1 -0
  12. package/dist/application/doctor/auth-dsn.js +143 -0
  13. package/dist/application/doctor/auth-dsn.js.map +1 -0
  14. package/dist/application/doctor/auth-flow.js +28 -0
  15. package/dist/application/doctor/auth-flow.js.map +1 -0
  16. package/dist/application/doctor/auth-registry.js +12 -0
  17. package/dist/application/doctor/auth-registry.js.map +1 -0
  18. package/dist/application/doctor/hosts.js +41 -0
  19. package/dist/application/doctor/hosts.js.map +1 -0
  20. package/dist/application/doctor/native-host-state.js +211 -0
  21. package/dist/application/doctor/native-host-state.js.map +1 -0
  22. package/dist/application/doctor/prepare.js +262 -0
  23. package/dist/application/doctor/prepare.js.map +1 -0
  24. package/dist/application/doctor/provider-installation.js +124 -0
  25. package/dist/application/doctor/provider-installation.js.map +1 -0
  26. package/dist/application/doctor/provider-mcps.js +650 -0
  27. package/dist/application/doctor/provider-mcps.js.map +1 -0
  28. package/dist/application/doctor/provider-plugins-hooks.js +112 -0
  29. package/dist/application/doctor/provider-plugins-hooks.js.map +1 -0
  30. package/dist/application/doctor/provider-skills.js +212 -0
  31. package/dist/application/doctor/provider-skills.js.map +1 -0
  32. package/dist/application/doctor/provider-tools-auth.js +201 -0
  33. package/dist/application/doctor/provider-tools-auth.js.map +1 -0
  34. package/dist/application/doctor/provider-visibility.js +149 -0
  35. package/dist/application/doctor/provider-visibility.js.map +1 -0
  36. package/dist/application/doctor/repair-runner.js +169 -0
  37. package/dist/application/doctor/repair-runner.js.map +1 -0
  38. package/dist/application/doctor/report.js +155 -0
  39. package/dist/application/doctor/report.js.map +1 -0
  40. package/dist/application/doctor/types.js +5 -0
  41. package/dist/application/doctor/types.js.map +1 -0
  42. package/dist/application/flow/advance.js +152 -13
  43. package/dist/application/flow/advance.js.map +1 -1
  44. package/dist/application/flow/flow-service.js +18 -7
  45. package/dist/application/flow/flow-service.js.map +1 -1
  46. package/dist/application/flow/internal-actions.js +167 -7
  47. package/dist/application/flow/internal-actions.js.map +1 -1
  48. package/dist/application/flow/run-projection.js +6 -1
  49. package/dist/application/flow/run-projection.js.map +1 -1
  50. package/dist/application/flow/submit.js +330 -7
  51. package/dist/application/flow/submit.js.map +1 -1
  52. package/dist/application/mcp-doctor-service.js +1 -1
  53. package/dist/application/mcp-doctor-service.js.map +1 -1
  54. package/dist/application/mcp-host-reader.js +134 -26
  55. package/dist/application/mcp-host-reader.js.map +1 -1
  56. package/dist/application/mcp-host-receipt-service.js +9 -7
  57. package/dist/application/mcp-host-receipt-service.js.map +1 -1
  58. package/dist/application/plan-current-point.js +54 -0
  59. package/dist/application/plan-current-point.js.map +1 -0
  60. package/dist/application/plan-exec-decision-service.js +143 -4
  61. package/dist/application/plan-exec-decision-service.js.map +1 -1
  62. package/dist/application/plan-locator.js +78 -0
  63. package/dist/application/plan-locator.js.map +1 -0
  64. package/dist/application/plan-open-run.js +129 -0
  65. package/dist/application/plan-open-run.js.map +1 -0
  66. package/dist/application/reseal-service.js +14 -44
  67. package/dist/application/reseal-service.js.map +1 -1
  68. package/dist/application/resume-service.js +9 -3
  69. package/dist/application/resume-service.js.map +1 -1
  70. package/dist/application/self/install-skill.js +10 -2
  71. package/dist/application/self/install-skill.js.map +1 -1
  72. package/dist/application/self/mcp-config.js +1 -1
  73. package/dist/application/self/mcp-config.js.map +1 -1
  74. package/dist/application/session-narrative.js +15 -0
  75. package/dist/application/session-narrative.js.map +1 -1
  76. package/dist/application/settle-service.js +442 -0
  77. package/dist/application/settle-service.js.map +1 -0
  78. package/dist/application/source-boundary-policy.js +87 -6
  79. package/dist/application/source-boundary-policy.js.map +1 -1
  80. package/dist/application/workline-index-service.js +165 -62
  81. package/dist/application/workline-index-service.js.map +1 -1
  82. package/dist/cli/commands/amend.js +122 -0
  83. package/dist/cli/commands/amend.js.map +1 -0
  84. package/dist/cli/commands/doctor.js +300 -0
  85. package/dist/cli/commands/doctor.js.map +1 -0
  86. package/dist/cli/commands/index.js +6 -0
  87. package/dist/cli/commands/index.js.map +1 -1
  88. package/dist/cli/commands/settle.js +197 -0
  89. package/dist/cli/commands/settle.js.map +1 -0
  90. package/dist/cli/commands/status.js +2 -0
  91. package/dist/cli/commands/status.js.map +1 -1
  92. package/dist/cli/dispatch-plan.js +47 -0
  93. package/dist/cli/dispatch-plan.js.map +1 -0
  94. package/dist/cli/help-groups.js +15 -0
  95. package/dist/cli/help-groups.js.map +1 -1
  96. package/dist/cli/main.js +54 -10
  97. package/dist/cli/main.js.map +1 -1
  98. package/dist/cli/parser.js +26 -0
  99. package/dist/cli/parser.js.map +1 -1
  100. package/dist/domain/decision-note.js +166 -3
  101. package/dist/domain/decision-note.js.map +1 -1
  102. package/dist/domain/decision-preview.js.map +1 -1
  103. package/dist/domain/doctor/auth.js +65 -0
  104. package/dist/domain/doctor/auth.js.map +1 -0
  105. package/dist/domain/doctor/model.js +82 -0
  106. package/dist/domain/doctor/model.js.map +1 -0
  107. package/dist/domain/doctor/operations.js +114 -0
  108. package/dist/domain/doctor/operations.js.map +1 -0
  109. package/dist/domain/effective-contract.js +4 -3
  110. package/dist/domain/effective-contract.js.map +1 -1
  111. package/dist/domain/flow/answer.js +10 -0
  112. package/dist/domain/flow/answer.js.map +1 -1
  113. package/dist/domain/flow/authority.js +124 -0
  114. package/dist/domain/flow/authority.js.map +1 -1
  115. package/dist/domain/flow/directive.js +8 -1
  116. package/dist/domain/flow/directive.js.map +1 -1
  117. package/dist/domain/flow/run-state.js +276 -34
  118. package/dist/domain/flow/run-state.js.map +1 -1
  119. package/dist/domain/obligation-correspondence.js +95 -0
  120. package/dist/domain/obligation-correspondence.js.map +1 -0
  121. package/dist/domain/reconciliation.js +142 -25
  122. package/dist/domain/reconciliation.js.map +1 -1
  123. package/dist/domain/redaction.js +40 -0
  124. package/dist/domain/redaction.js.map +1 -1
  125. package/dist/domain/settlement.js +129 -0
  126. package/dist/domain/settlement.js.map +1 -0
  127. package/package.json +1 -1
  128. package/skills/w/SKILL.md +2 -1
  129. package/skills/w/commands/README.md +2 -1
  130. package/skills/w/commands/doctor.md +31 -0
  131. package/skills/w/commands/resume.md +2 -2
  132. package/skills/w/context/MANIFEST.json +4 -0
  133. package/skills/w/loops/plan-exec-loop/LOOP.md +31 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-mcps.js","sourceRoot":"","sources":["../../../src/application/doctor/provider-mcps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { doctorFindingId } from "../../domain/doctor/model.js";
2
+ import { runHostDoctor } from "../host-doctor-service.js";
3
+ import { reportHookTemplateLosses, reportHooksArmed } from "../self/host-states.js";
4
+ import { coverage } from "./types.js";
5
+ const CATEGORY = "plugins-hooks";
6
+ const SCOPE_HOST = "workspace";
7
+ export const pluginsHooksProvider = {
8
+ category: CATEGORY,
9
+ async run(input) {
10
+ const host = await runHostDoctor(input.ctx.fs, input.ctx.env, input.ctx.process);
11
+ const participating = new Set(input.hosts.map((candidate) => candidate.target));
12
+ const findings = [
13
+ ...host.findings.map(dependencyFinding),
14
+ ...(await reportHooksArmed(input.ctx))
15
+ .filter((report) => participating.has(report.target))
16
+ .map((report) => hooksArmedFinding(hostOf(input, report.target), report)),
17
+ ...(await reportHookTemplateLosses(input.ctx))
18
+ .filter((loss) => participating.has(loss.target))
19
+ // A host that carries the whole template has nothing to say here: the
20
+ // armed finding beside it already reports the healthy case, and a second
21
+ // "nothing was lost" row per host would bury the ones that did lose.
22
+ .filter((loss) => !loss.template_read || loss.losses.length > 0)
23
+ .map((loss) => templateLossFinding(hostOf(input, loss.target), loss)),
24
+ ];
25
+ return {
26
+ coverage: [
27
+ coverage(CATEGORY, SCOPE_HOST, "checked"),
28
+ ...input.hosts.map((candidate) => coverage(CATEGORY, candidate.host, "checked")),
29
+ ],
30
+ findings,
31
+ };
32
+ },
33
+ };
34
+ /** An external dependency an installed third-party plugin needs. Never ours to install. */
35
+ function dependencyFinding(finding) {
36
+ const platform = process.platform;
37
+ const hint = platform === "darwin" || platform === "linux" || platform === "win32"
38
+ ? finding.install_hint[platform]
39
+ : finding.install_hint.linux;
40
+ return {
41
+ id: doctorFindingId(SCOPE_HOST, CATEGORY, `dependencia:${finding.dependency}`),
42
+ host: SCOPE_HOST,
43
+ category: CATEGORY,
44
+ resource: { kind: "dependency", name: finding.dependency, locator: null },
45
+ state: finding.severity === "ok" ? "healthy" : "warning",
46
+ summary: finding.message,
47
+ impact: finding.severity === "ok"
48
+ ? "los plugins que la requieren pueden usarla"
49
+ : `los plugins que la requieren fallan al usarla: ${finding.required_by.join(", ")}`,
50
+ evidence: [
51
+ `requerida por: ${finding.required_by.join(", ") || "ningún plugin"}`,
52
+ ...finding.plugin_paths.map((path) => `plugin en ${path}`),
53
+ ],
54
+ ownership: "n/a",
55
+ remediation: finding.severity === "ok"
56
+ ? { kind: "none", action: null, guidance: [] }
57
+ : { kind: "manual", action: null, guidance: [hint] },
58
+ };
59
+ }
60
+ function hooksArmedFinding(host, report) {
61
+ return {
62
+ id: doctorFindingId(host, CATEGORY, "hooks"),
63
+ host,
64
+ category: CATEGORY,
65
+ resource: { kind: "hooks", name: report.label, locator: report.path },
66
+ state: report.armed ? "healthy" : "warning",
67
+ summary: report.armed
68
+ ? `los hooks de Workline están armados en ${report.label}`
69
+ : `los hooks de Workline no están armados en ${report.label}`,
70
+ impact: report.armed
71
+ ? "el host ejecuta los hooks que Workline instala"
72
+ : "el host no dispara los hooks de Workline: la continuidad entre turnos se degrada",
73
+ evidence: [`archivo inspeccionado: ${report.path}`],
74
+ ownership: "ours",
75
+ remediation: report.armed
76
+ ? { kind: "none", action: null, guidance: [] }
77
+ : { kind: "manual", action: null, guidance: ["aw self install-hooks"] },
78
+ // Armar los hooks presupone que el bundle esté en ese host: si las dos
79
+ // acciones entran al mismo lote, el anotador las ordena.
80
+ ...(report.armed
81
+ ? {}
82
+ : { proposal: { op: "self.install-hooks", args: { target: report.target } } }),
83
+ };
84
+ }
85
+ /**
86
+ * What this host cannot carry from the bundled template.
87
+ *
88
+ * `template_read: false` is `unverified`, never "no losses": the difference
89
+ * between "nothing was lost" and "nobody could tell" is the whole point.
90
+ */
91
+ function templateLossFinding(host, loss) {
92
+ return {
93
+ id: doctorFindingId(host, CATEGORY, "plantilla-hooks"),
94
+ host,
95
+ category: CATEGORY,
96
+ resource: { kind: "hooks", name: "plantilla de hooks", locator: null },
97
+ state: loss.template_read ? "warning" : "unverified",
98
+ summary: loss.template_read
99
+ ? "este host no puede expresar parte de la plantilla de hooks"
100
+ : "no se pudo leer la plantilla de hooks: no se sabe qué se pierde",
101
+ impact: loss.template_read
102
+ ? "algunos hooks no existen acá aunque el resto esté armado"
103
+ : "no se puede afirmar que la plantilla se exprese entera",
104
+ evidence: loss.template_read ? loss.losses : ["la plantilla no se pudo leer"],
105
+ ownership: "ours",
106
+ remediation: { kind: "none", action: null, guidance: [] },
107
+ };
108
+ }
109
+ function hostOf(input, target) {
110
+ return input.hosts.find((candidate) => candidate.target === target)?.host ?? target;
111
+ }
112
+ //# sourceMappingURL=provider-plugins-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-plugins-hooks.js","sourceRoot":"","sources":["../../../src/application/doctor/provider-plugins-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,212 @@
1
+ import { doctorFindingId, } from "../../domain/doctor/model.js";
2
+ import { capabilityReadiness, } from "../capability/readiness.js";
3
+ /**
4
+ * Skills — what is registered, whether its replicas landed, and whether the one
5
+ * capability that has a contract is actually ready.
6
+ *
7
+ * `listSkills` already answers the first two and `capabilityReadiness` the
8
+ * third, with a verdict that separates state, reason and action — the shape this
9
+ * whole model was modelled on. Neither is re-derived: an incomplete replica is
10
+ * read off the booleans the manager publishes, not re-inspected here.
11
+ *
12
+ * The seed list is deliberately empty. It only supplies descriptions and the
13
+ * `recommended` status, and a doctor that turned "you could also install this"
14
+ * into a finding would teach people to skim past the ones that matter.
15
+ *
16
+ * The category answers TWO things with two different scopes, and they are kept
17
+ * apart on purpose (AC-02):
18
+ *
19
+ * - The registered skills and their replicas belong to the PERSON, not to a
20
+ * host: the registry and the three replica roots hang off `$HOME`
21
+ * (`~/.agents`, `~/.claude`, `~/.gemini`) and no host governs them. Reporting
22
+ * the same user-level answer once per participating host would be the same
23
+ * sentence repeated N times, so it is anchored at the `workspace` pseudo-host
24
+ * — the same anchor the aggregate uses when no host participates.
25
+ * - A capability's DIRECT route is per host: it resolves against that host's own
26
+ * skills tree, so it can be installed in one and absent in the next. That half
27
+ * IS emitted per host, one coverage row each.
28
+ */
29
+ import { listSkills } from "../self/skills-manager.js";
30
+ import { coverage } from "./types.js";
31
+ const CATEGORY = "skills";
32
+ /** Where a user-level skill finding lives: the workspace, not a host — replicas are per-user. */
33
+ const SCOPE_HOST = "workspace";
34
+ export const skillsProvider = {
35
+ category: CATEGORY,
36
+ async run(input) {
37
+ const findings = [];
38
+ const covered = [coverage(CATEGORY, SCOPE_HOST, "checked")];
39
+ for (const skill of await listSkills(input.ctx, [])) {
40
+ if (skill.status === "recommended")
41
+ continue;
42
+ findings.push(skillFinding(skill));
43
+ }
44
+ // One readiness read per participating host. The capability-level verdict is
45
+ // the same everywhere, but `exposures.direct` is resolved against THIS
46
+ // host's skills tree — exactly the half that can be missing in one host and
47
+ // present in the next. And when no host participates (`--only` over a host
48
+ // that is not on this machine) none is invented: there are no capability
49
+ // findings and no coverage row claims a host was checked.
50
+ for (const host of input.hosts) {
51
+ for (const report of await capabilityReadiness({
52
+ fs: input.ctx.fs,
53
+ env: input.ctx.env,
54
+ paths: input.ctx.paths,
55
+ host: host.host,
56
+ })) {
57
+ findings.push(capabilityFinding(host.host, report));
58
+ }
59
+ covered.push(coverage(CATEGORY, host.host, "checked"));
60
+ }
61
+ return { coverage: covered, findings };
62
+ },
63
+ };
64
+ /**
65
+ * A registered skill's `source`, with any URL userinfo removed.
66
+ *
67
+ * `source` is the string the person typed at register time, kept verbatim — and
68
+ * without a credential helper the usual way to reach a private repo is
69
+ * `https://<token>@github.com/acme/skills.git`. The global redaction cannot see
70
+ * that: `CONNECTION_URI` only covers `postgres|mysql|mongodb` and
71
+ * `SECRET_ASSIGNMENT` only `key=value` shapes, so the token would reach
72
+ * `evidence` and `resource.locator` intact (AC-11). The whole userinfo goes,
73
+ * never just the password half: a PAT is perfectly valid on its own in the user
74
+ * position, so telling a harmless username apart from a secret is not something
75
+ * this can decide — and the repo, which is what identifies the skill, survives.
76
+ */
77
+ function withoutUrlUserinfo(source) {
78
+ return source.replace(/([a-z][a-z0-9+.-]*:\/\/)[^/\s]*@/gi, "$1***@");
79
+ }
80
+ function skillFinding(skill) {
81
+ const missing = Object.entries(skill.replicas)
82
+ .filter(([, present]) => !present)
83
+ .map(([host]) => host);
84
+ const source = withoutUrlUserinfo(skill.source);
85
+ const evidence = [
86
+ `estado en el registro: ${skill.status}`,
87
+ `origen: ${source}`,
88
+ `réplicas presentes: ${Object.entries(skill.replicas)
89
+ .filter(([, present]) => present)
90
+ .map(([host]) => host)
91
+ .join(", ") || "ninguna"}`,
92
+ ];
93
+ const base = {
94
+ id: doctorFindingId(SCOPE_HOST, CATEGORY, skill.name),
95
+ host: SCOPE_HOST,
96
+ category: CATEGORY,
97
+ resource: { kind: "skill", name: skill.name, locator: source },
98
+ evidence,
99
+ };
100
+ // `unmanaged` is a skill living in the canonical root that this CLI never
101
+ // registered: it is somebody else's, so it is reported and left alone.
102
+ if (skill.status === "unmanaged") {
103
+ return {
104
+ ...base,
105
+ state: "warning",
106
+ summary: `'${skill.name}' está en el árbol canónico y Workline no la registró`,
107
+ impact: "Workline no la actualiza ni la retira: no sabe de dónde vino",
108
+ ownership: "foreign",
109
+ remediation: {
110
+ kind: "manual",
111
+ action: null,
112
+ guidance: [`si es tuya, registrala con 'aw self skills register'; si no, dejala como está`],
113
+ },
114
+ };
115
+ }
116
+ if (missing.length === 0) {
117
+ return {
118
+ ...base,
119
+ state: "healthy",
120
+ summary: `'${skill.name}' está registrada con todas sus réplicas`,
121
+ impact: "la skill se ve desde los hosts que leen esas réplicas",
122
+ ownership: "ours",
123
+ remediation: { kind: "none", action: null, guidance: [] },
124
+ };
125
+ }
126
+ return {
127
+ ...base,
128
+ state: "warning",
129
+ summary: `'${skill.name}' tiene réplicas faltantes: ${missing.join(", ")}`,
130
+ impact: "los hosts que leen esas réplicas no ven la skill",
131
+ ownership: "ours",
132
+ remediation: {
133
+ kind: "manual",
134
+ action: null,
135
+ guidance: [`aw self skills reinstall --name ${skill.name}`],
136
+ },
137
+ proposal: { op: "skills.reinstall", args: { name: skill.name } },
138
+ };
139
+ }
140
+ /** The two states readiness calls usable. Everything else owes a reason. */
141
+ function isReady(state) {
142
+ return state === "ready" || state === "resolved";
143
+ }
144
+ /** The `direct` verdict, and only when the capability declares that route. */
145
+ function directVerdict(report) {
146
+ return report.exposure.includes("direct") ? report.exposures.direct : null;
147
+ }
148
+ /**
149
+ * The first of the two verdicts that fails, or null when both are usable.
150
+ *
151
+ * The capability comes first and the host's `direct` route second, which is the
152
+ * honest order: a capability that does not resolve is not fixed by installing a
153
+ * wrapper, so its reason is the one worth printing.
154
+ */
155
+ function failingVerdict(report) {
156
+ if (!isReady(report.state)) {
157
+ return { state: report.state, reason: report.reason, action: report.action };
158
+ }
159
+ const direct = directVerdict(report);
160
+ return direct !== null && !isReady(direct.state) ? direct : null;
161
+ }
162
+ /** Both verdicts as read, with the host-dependent half named by its host. */
163
+ function capabilityEvidence(host, report) {
164
+ const direct = directVerdict(report);
165
+ return [
166
+ `estado: ${report.state}`,
167
+ ...(report.reason === null ? [] : [report.reason]),
168
+ ...(direct === null ? [] : [`ruta directa en '${host}': ${direct.state}`]),
169
+ ...(direct === null || direct.reason === null ? [] : [direct.reason]),
170
+ ];
171
+ }
172
+ /**
173
+ * A capability's readiness ON ONE HOST, translated one field at a time.
174
+ *
175
+ * `ReadinessVerdict` already separates the three things: `state`, the `reason`
176
+ * behind it and the `action` that fixes it. Mapping is all that happens here —
177
+ * inventing a second wording for a reason the engine already wrote is how the
178
+ * two surfaces end up telling the person different stories.
179
+ *
180
+ * Two verdicts are read, in this order: the capability itself, and — only when
181
+ * it declares the route — its `direct` exposure, which is the one that depends
182
+ * on the host. The order is the honest one: a capability that does not resolve
183
+ * is not fixed by installing a wrapper, so its reason comes first. Reporting
184
+ * only the top-level verdict was the defect: it is identical on every host, so a
185
+ * missing wrapper in one host's tree left no trace anywhere in the report.
186
+ */
187
+ function capabilityFinding(host, report) {
188
+ const failed = failingVerdict(report);
189
+ return {
190
+ id: doctorFindingId(host, CATEGORY, `capability:${report.capability}`),
191
+ host,
192
+ category: CATEGORY,
193
+ resource: { kind: "capability", name: report.capability, locator: null },
194
+ state: failed === null ? "healthy" : "warning",
195
+ summary: failed === null
196
+ ? `la capacidad '${report.capability}' está lista en '${host}'`
197
+ : `la capacidad '${report.capability}' está ${failed.state} en '${host}'`,
198
+ impact: failed === null
199
+ ? "sus operaciones se pueden invocar"
200
+ : (failed.reason ?? "algunas de sus operaciones pueden no estar disponibles"),
201
+ evidence: capabilityEvidence(host, report),
202
+ ownership: "ours",
203
+ remediation: failed === null
204
+ ? { kind: "none", action: null, guidance: [] }
205
+ : {
206
+ kind: "manual",
207
+ action: null,
208
+ guidance: failed.action === null ? [] : [failed.action],
209
+ },
210
+ };
211
+ }
212
+ //# sourceMappingURL=provider-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-skills.js","sourceRoot":"","sources":["../../../src/application/doctor/provider-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Tools and authentication — un recorrido por el registro de proveedores.
3
+ *
4
+ * Este archivo no sabe qué es un DSN. Camina el registro, le pregunta a cada
5
+ * proveedor qué sujetos tiene y en qué estado están, y traduce eso al modelo
6
+ * común. Lo que antes estaba cableado acá vive ahora en `auth-dsn.ts`, y la
7
+ * diferencia importa: agregar una cosa autenticable es agregar un proveedor al
8
+ * registro, no editar el diagnóstico.
9
+ *
10
+ * También es el único choke point de la custodia. Los proveedores declaran su
11
+ * flujo; acá se comprueba con `custodyViolation` ANTES de que exista cualquier
12
+ * sugerencia de acción, así que un flujo que pondría el secreto en un argumento
13
+ * —o que no hereda la terminal, o que escribiría— sale como bloqueante con su
14
+ * razón y sin proposal. Como los proveedores no construyen hallazgos, no hay
15
+ * ningún camino que se saltee esta comprobación.
16
+ */
17
+ import { authFindingState, custodyViolation, } from "../../domain/doctor/auth.js";
18
+ import { doctorFindingId } from "../../domain/doctor/model.js";
19
+ import { DOCTOR_AUTH_PROVIDERS } from "./auth-registry.js";
20
+ import { coverage } from "./types.js";
21
+ const CATEGORY = "tools-auth";
22
+ const SCOPE_HOST = "workspace";
23
+ export function createToolsAuthProvider(deps = {}) {
24
+ const providers = deps.providers ?? DOCTOR_AUTH_PROVIDERS;
25
+ return {
26
+ category: CATEGORY,
27
+ async run(input) {
28
+ const enumerated = providers.flatMap((provider) => provider.subjects(input.ctx).map((subject) => ({ provider, subject })));
29
+ if (enumerated.length === 0) {
30
+ return {
31
+ coverage: [
32
+ coverage(CATEGORY, SCOPE_HOST, "not-applicable", "no hay ninguna cosa autenticable registrada en este entorno"),
33
+ ],
34
+ findings: [],
35
+ };
36
+ }
37
+ const findings = [];
38
+ const seen = new Map();
39
+ for (const { provider, subject } of enumerated) {
40
+ const owner = seen.get(subject.id);
41
+ if (owner !== undefined) {
42
+ findings.push(collisionFinding(subject, owner, provider.id));
43
+ continue;
44
+ }
45
+ seen.set(subject.id, provider.id);
46
+ findings.push(await subjectFinding(provider, subject, input));
47
+ }
48
+ return { coverage: [coverage(CATEGORY, SCOPE_HOST, "checked")], findings };
49
+ },
50
+ };
51
+ }
52
+ export const toolsAuthProvider = createToolsAuthProvider();
53
+ /**
54
+ * Qué dice el informe de cada estado de autenticación.
55
+ *
56
+ * La tabla existe para que el mapeo estado → hallazgo viva en UN lugar: el
57
+ * estado sale de `authFindingState`, en el dominio, y la prosa de acá. Antes la
58
+ * rama sana cortaba antes de llegar al mapeo y el resto se decidía con dos
59
+ * ternarios en el call site, así que la mitad de la regla vivía en el proveedor y
60
+ * la rama `present` del dominio no la alcanzaba ningún camino.
61
+ */
62
+ const SUBJECT_PROSE = {
63
+ present: {
64
+ summary: (label) => `la autenticación de (${label}) está resuelta`,
65
+ impact: "el recurso que depende de esta credencial puede autenticarse",
66
+ },
67
+ absent: {
68
+ summary: (label) => `falta la autenticación de (${label})`,
69
+ impact: "el recurso que depende de esta credencial va a fallar cuando se use",
70
+ },
71
+ unverified: {
72
+ summary: (label) => `no se pudo verificar la autenticación de (${label})`,
73
+ impact: "el recurso puede estar sin autenticar y el informe no puede afirmar lo contrario",
74
+ },
75
+ };
76
+ async function subjectFinding(provider, subject, input) {
77
+ const observed = await observe(provider, subject, input);
78
+ const base = {
79
+ id: doctorFindingId(SCOPE_HOST, CATEGORY, subject.id),
80
+ host: SCOPE_HOST,
81
+ category: CATEGORY,
82
+ resource: { kind: "credential", name: subject.label, locator: subject.locator },
83
+ evidence: observed.evidence,
84
+ ownership: "ours",
85
+ };
86
+ const flow = provider.flow(subject, input.ctx);
87
+ const custody = flow === null ? null : custodyViolation(flow);
88
+ if (flow !== null && custody !== null) {
89
+ // La custodia se rompe por la DECLARACIÓN, no por el estado del sujeto: un
90
+ // flujo así es peligroso aunque la credencial ya esté puesta, y que el
91
+ // veredicto salga 1 es lo correcto — es un defecto de este CLI, no del
92
+ // entorno de la persona.
93
+ return {
94
+ ...base,
95
+ state: "blocking",
96
+ summary: `el flujo declarado para (${subject.label}) no puede preservar la custodia del secreto`,
97
+ impact: "no se ofrece ninguna reparación automática: correrlo filtraría la credencial",
98
+ evidence: [...observed.evidence, `custodia: ${custody}`],
99
+ remediation: {
100
+ kind: "manual",
101
+ action: null,
102
+ guidance: [
103
+ ...provider.guidance(subject, input.ctx),
104
+ `el flujo del proveedor (${provider.id}) quedó bloqueado y hay que corregirlo en el CLI`,
105
+ ],
106
+ },
107
+ };
108
+ }
109
+ const prose = SUBJECT_PROSE[observed.state];
110
+ const authenticated = observed.state === "present";
111
+ const finding = {
112
+ ...base,
113
+ state: authFindingState(observed.state),
114
+ summary: prose.summary(subject.label),
115
+ impact: prose.impact,
116
+ // Al sano no se le ofrece nada: no hay remedio para lo que no está roto. Los
117
+ // otros dos llevan la guía del proveedor, que nombra la variable y el archivo
118
+ // y nunca el valor.
119
+ remediation: authenticated
120
+ ? { kind: "none", action: null, guidance: [] }
121
+ : { kind: "manual", action: null, guidance: provider.guidance(subject, input.ctx) },
122
+ };
123
+ // Un flujo declarado que pasa la custodia es una SUGERENCIA, no una acción:
124
+ // quién la recibe lo decide el anotador, en un solo lugar, con los predicados
125
+ // de propiedad. Y al sano no se le sugiere: la sugerencia existe para que algo
126
+ // se repare.
127
+ if (flow === null || authenticated)
128
+ return finding;
129
+ return {
130
+ ...finding,
131
+ proposal: { op: "auth.flow", args: { provider: provider.id, subject: subject.id }, flow },
132
+ };
133
+ }
134
+ /**
135
+ * Qué se observó del sujeto: la lectura barata, o la verificación si se pidió.
136
+ *
137
+ * La verificación REEMPLAZA a `check` en vez de acompañarla. Son dos lecturas
138
+ * del mismo hecho, y ponerlas juntas en la evidencia las hace leer como dos
139
+ * hechos distintos; la verificación es la observación más fuerte y es la que
140
+ * queda.
141
+ *
142
+ * Y el nivel de autorización que el proveedor DECLARA se hace valer acá, que es
143
+ * el único lugar que llama a `verify`. Antes el campo `authorization` no lo leía
144
+ * nadie: cada proveedor repetía el control adentro de su propio `run`, así que la
145
+ * declaración podía mentir sin consecuencia y un proveedor nuevo que se olvidara
146
+ * del control salía de la máquina en una corrida donde nadie autorizó nada. Con
147
+ * el control acá, `run` puede confiar en que su autorización está concedida.
148
+ *
149
+ * Cuando falta esa autorización la observación se DEGRADA a la lectura barata y
150
+ * lo dice en la evidencia: una verificación que no corrió y se calla se lee como
151
+ * una que corrió.
152
+ */
153
+ async function observe(provider, subject, input) {
154
+ const granted = input.verifyAuthorization;
155
+ if (granted === undefined)
156
+ return await provider.check(subject, input.ctx);
157
+ const needed = provider.verify.authorization;
158
+ if (needed !== null && !granted.includes(needed)) {
159
+ const shallow = await provider.check(subject, input.ctx);
160
+ return {
161
+ ...shallow,
162
+ evidence: [
163
+ ...shallow.evidence,
164
+ `la verificación profunda NO corrió: esta corrida no autorizó '${needed}' (lo autoriza \`aw doctor --verify-connection\`)`,
165
+ ],
166
+ };
167
+ }
168
+ return await provider.verify.run(subject, input.ctx, granted);
169
+ }
170
+ /**
171
+ * Dos sujetos con el mismo id, denunciado en vez de perdido.
172
+ *
173
+ * El id del sujeto es la identidad del hallazgo. Dos iguales colapsan en una
174
+ * fila y el informe pierde uno sin decir nada — el mismo defecto que ya costó
175
+ * una ronda en este plan, cuando sanear un id lo volvió no inyectivo y los
176
+ * hallazgos desaparecieron de un `Map`. Así que la colisión es bloqueante y
177
+ * nombra a los dos proveedores.
178
+ */
179
+ function collisionFinding(subject, owner, duplicate) {
180
+ return {
181
+ // El id lleva al proveedor DUPLICADO y no sólo al sujeto: con tres
182
+ // proveedores declarando lo mismo, dos colisiones distintas colapsarían en
183
+ // una fila y el informe volvería a perder un hallazgo — que es exactamente
184
+ // el defecto que esta rama existe para denunciar.
185
+ id: doctorFindingId(SCOPE_HOST, CATEGORY, `colision:${duplicate}:${subject.id}`),
186
+ host: SCOPE_HOST,
187
+ category: CATEGORY,
188
+ resource: { kind: "credential", name: subject.label, locator: subject.locator },
189
+ state: "blocking",
190
+ summary: `dos proveedores de autenticación declaran el sujeto ${subject.id}`,
191
+ impact: "uno de los dos no se comprobó y el informe no puede hablar por él",
192
+ evidence: [`lo declaran los proveedores (${owner}) y (${duplicate})`],
193
+ ownership: "ours",
194
+ remediation: {
195
+ kind: "manual",
196
+ action: null,
197
+ guidance: [`prefijá los ids de sujeto del proveedor (${duplicate}) para que no colisionen`],
198
+ },
199
+ };
200
+ }
201
+ //# sourceMappingURL=provider-tools-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-tools-auth.js","sourceRoot":"","sources":["../../../src/application/doctor/provider-tools-auth.ts"],"names":[],"mappings":"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"}