argos-harness 0.1.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 (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -0
  3. package/assets/agents/auditor.md +140 -0
  4. package/assets/agents/commit-pr-pilot.md +154 -0
  5. package/assets/agents/explorer.md +93 -0
  6. package/assets/agents/implementer.md +117 -0
  7. package/assets/agents/leader.md +149 -0
  8. package/assets/agents/researcher.md +89 -0
  9. package/assets/agents/review-readability.md +87 -0
  10. package/assets/agents/review-reliability.md +100 -0
  11. package/assets/agents/review-resilience.md +87 -0
  12. package/assets/agents/review-risk.md +87 -0
  13. package/assets/agents/reviewer.md +167 -0
  14. package/assets/agents/ticket-audit.md +129 -0
  15. package/assets/hooks/argos-guard-destructive.sh +127 -0
  16. package/assets/hooks/argos-quality-gate.sh +129 -0
  17. package/assets/managed/aterrizaje.md +24 -0
  18. package/assets/managed/formato-respuesta.md +21 -0
  19. package/assets/managed/identidad.md +48 -0
  20. package/assets/managed/operaciones-seguras.md +14 -0
  21. package/assets/managed/orquestacion.md +169 -0
  22. package/assets/output-styles/argos.md +71 -0
  23. package/assets/skills/ai-sdk-5/SKILL.md +230 -0
  24. package/assets/skills/angular/SKILL.md +19 -0
  25. package/assets/skills/angular/references/architecture.md +137 -0
  26. package/assets/skills/angular/references/core.md +197 -0
  27. package/assets/skills/angular/references/forms.md +115 -0
  28. package/assets/skills/angular/references/performance.md +124 -0
  29. package/assets/skills/apollo-client/SKILL.md +61 -0
  30. package/assets/skills/app-blueprint/SKILL.md +45 -0
  31. package/assets/skills/app-blueprint/assets/module-template.md +48 -0
  32. package/assets/skills/app-blueprint/assets/system-template.md +38 -0
  33. package/assets/skills/app-blueprint/references/workflow.md +101 -0
  34. package/assets/skills/app-builder/SKILL.md +43 -0
  35. package/assets/skills/app-builder/phases/0-product.md +58 -0
  36. package/assets/skills/app-builder/phases/1-scaffold.md +33 -0
  37. package/assets/skills/app-builder/phases/10-store.md +40 -0
  38. package/assets/skills/app-builder/phases/2-data.md +34 -0
  39. package/assets/skills/app-builder/phases/3-domain.md +33 -0
  40. package/assets/skills/app-builder/phases/4-ui-nav.md +32 -0
  41. package/assets/skills/app-builder/phases/5-identity.md +30 -0
  42. package/assets/skills/app-builder/phases/6-polish.md +34 -0
  43. package/assets/skills/app-builder/phases/7-brand.md +31 -0
  44. package/assets/skills/app-builder/phases/8-web.md +30 -0
  45. package/assets/skills/app-builder/phases/9-docs.md +31 -0
  46. package/assets/skills/app-ia/SKILL.md +54 -0
  47. package/assets/skills/astro/SKILL.md +39 -0
  48. package/assets/skills/axios/SKILL.md +61 -0
  49. package/assets/skills/branch-pr/SKILL.md +200 -0
  50. package/assets/skills/bullmq/SKILL.md +55 -0
  51. package/assets/skills/chained-pr/SKILL.md +48 -0
  52. package/assets/skills/chained-pr/references/chaining-details.md +99 -0
  53. package/assets/skills/cognitive-doc-design/SKILL.md +81 -0
  54. package/assets/skills/comment-writer/SKILL.md +74 -0
  55. package/assets/skills/dashboard-ia/SKILL.md +54 -0
  56. package/assets/skills/django-drf/SKILL.md +180 -0
  57. package/assets/skills/go-testing/SKILL.md +47 -0
  58. package/assets/skills/go-testing/references/examples.md +89 -0
  59. package/assets/skills/issue-creation/SKILL.md +223 -0
  60. package/assets/skills/jira-epic/SKILL.md +306 -0
  61. package/assets/skills/jira-task/SKILL.md +382 -0
  62. package/assets/skills/judgment-day/SKILL.md +52 -0
  63. package/assets/skills/judgment-day/references/prompts-and-formats.md +98 -0
  64. package/assets/skills/lightsail-deploy/SKILL.md +44 -0
  65. package/assets/skills/lightsail-deploy/references/runbook.md +102 -0
  66. package/assets/skills/loop-back-debug/SKILL.md +102 -0
  67. package/assets/skills/mantine-form/SKILL.md +57 -0
  68. package/assets/skills/mongoose/SKILL.md +66 -0
  69. package/assets/skills/nextjs-15/SKILL.md +144 -0
  70. package/assets/skills/not-boring-mobile/SKILL.md +43 -0
  71. package/assets/skills/not-boring-mobile/references/not-boring-playbook.md +65 -0
  72. package/assets/skills/playwright/SKILL.md +315 -0
  73. package/assets/skills/pr-comments/SKILL.md +93 -0
  74. package/assets/skills/pr-create/SKILL.md +64 -0
  75. package/assets/skills/promo-video/SKILL.md +52 -0
  76. package/assets/skills/promo-video/assets/package.template.json +22 -0
  77. package/assets/skills/promo-video/assets/promo.template.tsx +469 -0
  78. package/assets/skills/promo-video/assets/theme.template.ts +27 -0
  79. package/assets/skills/promo-video/references/pipeline.md +119 -0
  80. package/assets/skills/promo-video-web/SKILL.md +51 -0
  81. package/assets/skills/promo-video-web/assets/browser-promo.template.tsx +385 -0
  82. package/assets/skills/promo-video-web/assets/capture.template.ts +70 -0
  83. package/assets/skills/promo-video-web/assets/package.template.json +26 -0
  84. package/assets/skills/promo-video-web/references/pipeline.md +84 -0
  85. package/assets/skills/pytest/SKILL.md +180 -0
  86. package/assets/skills/react-19/SKILL.md +118 -0
  87. package/assets/skills/react-hook-form/SKILL.md +59 -0
  88. package/assets/skills/react-router/SKILL.md +60 -0
  89. package/assets/skills/redux-toolkit/SKILL.md +60 -0
  90. package/assets/skills/review-diff/SKILL.md +101 -0
  91. package/assets/skills/ship-docs/SKILL.md +45 -0
  92. package/assets/skills/ship-docs/references/ship-docs-playbook.md +31 -0
  93. package/assets/skills/skill-creator/SKILL.md +97 -0
  94. package/assets/skills/skill-creator/assets/SKILL-TEMPLATE.md +68 -0
  95. package/assets/skills/skill-creator/references/skill-style-guide.md +79 -0
  96. package/assets/skills/skill-improver/SKILL.md +50 -0
  97. package/assets/skills/skill-improver/references/skill-style-guide.md +79 -0
  98. package/assets/skills/socketio/SKILL.md +58 -0
  99. package/assets/skills/spec-bootstrap/SKILL.md +62 -0
  100. package/assets/skills/store-ship/SKILL.md +52 -0
  101. package/assets/skills/store-ship/assets/android-supply.template.md +22 -0
  102. package/assets/skills/store-ship/assets/eas.template.json +32 -0
  103. package/assets/skills/store-ship/assets/maestro-flow.template.yaml +27 -0
  104. package/assets/skills/store-ship/assets/store.config.template.json +28 -0
  105. package/assets/skills/store-ship/references/pipeline.md +198 -0
  106. package/assets/skills/stripe/SKILL.md +83 -0
  107. package/assets/skills/tailwind-4/SKILL.md +193 -0
  108. package/assets/skills/tamagui/SKILL.md +60 -0
  109. package/assets/skills/tanstack-query/SKILL.md +58 -0
  110. package/assets/skills/ticket-intake/SKILL.md +55 -0
  111. package/assets/skills/typescript/SKILL.md +134 -0
  112. package/assets/skills/verify-before-done/SKILL.md +111 -0
  113. package/assets/skills/webapp-rebuilder/SKILL.md +48 -0
  114. package/assets/skills/webapp-rebuilder/assets/charter-template.md +46 -0
  115. package/assets/skills/webapp-rebuilder/references/workflow.md +47 -0
  116. package/assets/skills/winston-logging/SKILL.md +61 -0
  117. package/assets/skills/work-unit-commits/SKILL.md +84 -0
  118. package/assets/skills/zod-4/SKILL.md +210 -0
  119. package/assets/skills/zustand-5/SKILL.md +216 -0
  120. package/bin/argos.js +6 -0
  121. package/dist/commands/adopt.d.ts +35 -0
  122. package/dist/commands/adopt.d.ts.map +1 -0
  123. package/dist/commands/adopt.js +347 -0
  124. package/dist/commands/adopt.js.map +1 -0
  125. package/dist/commands/doctor.d.ts +20 -0
  126. package/dist/commands/doctor.d.ts.map +1 -0
  127. package/dist/commands/doctor.js +478 -0
  128. package/dist/commands/doctor.js.map +1 -0
  129. package/dist/commands/init.d.ts +32 -0
  130. package/dist/commands/init.d.ts.map +1 -0
  131. package/dist/commands/init.js +358 -0
  132. package/dist/commands/init.js.map +1 -0
  133. package/dist/commands/remove.d.ts +62 -0
  134. package/dist/commands/remove.d.ts.map +1 -0
  135. package/dist/commands/remove.js +487 -0
  136. package/dist/commands/remove.js.map +1 -0
  137. package/dist/commands/workspace.d.ts +73 -0
  138. package/dist/commands/workspace.d.ts.map +1 -0
  139. package/dist/commands/workspace.js +354 -0
  140. package/dist/commands/workspace.js.map +1 -0
  141. package/dist/index.d.ts +2 -0
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +24 -0
  144. package/dist/index.js.map +1 -0
  145. package/dist/lib/assets.d.ts +29 -0
  146. package/dist/lib/assets.d.ts.map +1 -0
  147. package/dist/lib/assets.js +57 -0
  148. package/dist/lib/assets.js.map +1 -0
  149. package/dist/lib/atomic-write.d.ts +17 -0
  150. package/dist/lib/atomic-write.d.ts.map +1 -0
  151. package/dist/lib/atomic-write.js +41 -0
  152. package/dist/lib/atomic-write.js.map +1 -0
  153. package/dist/lib/backup.d.ts +11 -0
  154. package/dist/lib/backup.d.ts.map +1 -0
  155. package/dist/lib/backup.js +42 -0
  156. package/dist/lib/backup.js.map +1 -0
  157. package/dist/lib/config.d.ts +36 -0
  158. package/dist/lib/config.d.ts.map +1 -0
  159. package/dist/lib/config.js +52 -0
  160. package/dist/lib/config.js.map +1 -0
  161. package/dist/lib/detect.d.ts +58 -0
  162. package/dist/lib/detect.d.ts.map +1 -0
  163. package/dist/lib/detect.js +330 -0
  164. package/dist/lib/detect.js.map +1 -0
  165. package/dist/lib/ficha.d.ts +10 -0
  166. package/dist/lib/ficha.d.ts.map +1 -0
  167. package/dist/lib/ficha.js +38 -0
  168. package/dist/lib/ficha.js.map +1 -0
  169. package/dist/lib/git.d.ts +27 -0
  170. package/dist/lib/git.d.ts.map +1 -0
  171. package/dist/lib/git.js +79 -0
  172. package/dist/lib/git.js.map +1 -0
  173. package/dist/lib/managed-files.d.ts +35 -0
  174. package/dist/lib/managed-files.d.ts.map +1 -0
  175. package/dist/lib/managed-files.js +97 -0
  176. package/dist/lib/managed-files.js.map +1 -0
  177. package/dist/lib/markers.d.ts +64 -0
  178. package/dist/lib/markers.d.ts.map +1 -0
  179. package/dist/lib/markers.js +157 -0
  180. package/dist/lib/markers.js.map +1 -0
  181. package/dist/lib/navori-import.d.ts +42 -0
  182. package/dist/lib/navori-import.d.ts.map +1 -0
  183. package/dist/lib/navori-import.js +65 -0
  184. package/dist/lib/navori-import.js.map +1 -0
  185. package/dist/lib/openclaw-agents.d.ts +53 -0
  186. package/dist/lib/openclaw-agents.d.ts.map +1 -0
  187. package/dist/lib/openclaw-agents.js +118 -0
  188. package/dist/lib/openclaw-agents.js.map +1 -0
  189. package/dist/lib/package-root.d.ts +11 -0
  190. package/dist/lib/package-root.d.ts.map +1 -0
  191. package/dist/lib/package-root.js +23 -0
  192. package/dist/lib/package-root.js.map +1 -0
  193. package/dist/lib/paths.d.ts +11 -0
  194. package/dist/lib/paths.d.ts.map +1 -0
  195. package/dist/lib/paths.js +16 -0
  196. package/dist/lib/paths.js.map +1 -0
  197. package/dist/lib/settings-merge.d.ts +125 -0
  198. package/dist/lib/settings-merge.d.ts.map +1 -0
  199. package/dist/lib/settings-merge.js +373 -0
  200. package/dist/lib/settings-merge.js.map +1 -0
  201. package/dist/lib/version.d.ts +3 -0
  202. package/dist/lib/version.d.ts.map +1 -0
  203. package/dist/lib/version.js +13 -0
  204. package/dist/lib/version.js.map +1 -0
  205. package/dist/lib/which.d.ts +8 -0
  206. package/dist/lib/which.d.ts.map +1 -0
  207. package/dist/lib/which.js +30 -0
  208. package/dist/lib/which.js.map +1 -0
  209. package/dist/lib/workspaces.d.ts +133 -0
  210. package/dist/lib/workspaces.d.ts.map +1 -0
  211. package/dist/lib/workspaces.js +241 -0
  212. package/dist/lib/workspaces.js.map +1 -0
  213. package/dist/lib/zod-messages.d.ts +4 -0
  214. package/dist/lib/zod-messages.d.ts.map +1 -0
  215. package/dist/lib/zod-messages.js +28 -0
  216. package/dist/lib/zod-messages.js.map +1 -0
  217. package/package.json +44 -0
@@ -0,0 +1,347 @@
1
+ import { defineCommand } from "citty";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { basename, join } from "node:path";
4
+ import pc from "picocolors";
5
+ import { writeFileAtomic } from "../lib/atomic-write.js";
6
+ import { CONFIG_FILENAME, hasConfig, readConfig, writeConfig } from "../lib/config.js";
7
+ import { buildQualityGateFast, detectFramework, detectLibs, detectMappedSkills, detectPackageManager, MOTOR_SKILLS, readPackageJson } from "../lib/detect.js";
8
+ import { createBackup } from "../lib/backup.js";
9
+ import { buildFichaContent, FICHA_BLOCK_ID } from "../lib/ficha.js";
10
+ import { checkGitRepo, getRemoteOriginUrl, parseIdentityFromRemote } from "../lib/git.js";
11
+ import { injectBlock, listBlocks } from "../lib/markers.js";
12
+ import { readNaviorConfig } from "../lib/navori-import.js";
13
+ import { readCliVersion } from "../lib/version.js";
14
+ import { linkRepo, loadRegistry, resolveWorkspaceForRepo } from "../lib/workspaces.js";
15
+ /** Written when no lint/typecheck/test script exists to build a real gate from. */ export const NO_GATE_PLACEHOLDER = "echo 'argos: no lint/typecheck/test scripts detected — set qualityGate.fast manually'";
16
+ function errorMessage(err) {
17
+ return err instanceof Error ? err.message : String(err);
18
+ }
19
+ /**
20
+ * Core, testable implementation of `argos adopt [--refresh]`: writes
21
+ * `argos.config.json` (detecting stack/quality-gate/identity, importing
22
+ * `navori.config.json` when present) and injects the `ficha` managed block
23
+ * into `./CLAUDE.md`. Pure function of the filesystem — no process.exit.
24
+ */ export function runAdopt(options) {
25
+ const { cwd, refresh = false } = options;
26
+ const gitCheck = checkGitRepo(cwd);
27
+ if (!gitCheck.isRepo) {
28
+ return {
29
+ rows: [],
30
+ exitCode: 1,
31
+ error: gitCheck.gitMissing ? "No se encontró el binario git — instalá git y volvé a intentar." : "argos adopt debe ejecutarse dentro de un repositorio git."
32
+ };
33
+ }
34
+ const configExists = hasConfig(cwd);
35
+ if (configExists && !refresh) {
36
+ return {
37
+ rows: [],
38
+ exitCode: 1,
39
+ error: "argos.config.json ya existe. Corre `argos adopt --refresh` para regenerarlo."
40
+ };
41
+ }
42
+ const rows = [];
43
+ let existing;
44
+ if (configExists) {
45
+ try {
46
+ existing = readConfig(cwd);
47
+ } catch {
48
+ rows.push({
49
+ field: "argos.config.json",
50
+ value: "config existente inválido, se regenera desde cero",
51
+ source: "warning"
52
+ });
53
+ }
54
+ }
55
+ const naviorResult = readNaviorConfig(cwd);
56
+ const navori = naviorResult.kind === "imported" ? naviorResult.data : undefined;
57
+ if (naviorResult.kind === "imported") {
58
+ rows.push({
59
+ field: "import",
60
+ value: "importado de navori.config.json",
61
+ source: "imported"
62
+ });
63
+ } else if (naviorResult.kind === "unreadable") {
64
+ rows.push({
65
+ field: "navori.config.json",
66
+ value: "navori.config.json presente pero ilegible — ignorado",
67
+ source: "warning"
68
+ });
69
+ }
70
+ const pkg = readPackageJson(cwd);
71
+ // name: existing > navori import > package.json > repo dirname
72
+ let name;
73
+ let nameSource;
74
+ if (existing?.name) {
75
+ name = existing.name;
76
+ nameSource = "preserved";
77
+ } else if (navori?.name) {
78
+ name = navori.name;
79
+ nameSource = "imported";
80
+ } else if (pkg?.name) {
81
+ name = pkg.name;
82
+ nameSource = "detected";
83
+ } else {
84
+ name = basename(cwd);
85
+ nameSource = "default";
86
+ }
87
+ rows.push({
88
+ field: "name",
89
+ value: name,
90
+ source: nameSource
91
+ });
92
+ // workspace / branchBase / prTarget: existing > navori import > default (no detection exists for these)
93
+ const workspace = existing?.workspace ?? navori?.workspace;
94
+ rows.push({
95
+ field: "workspace",
96
+ value: workspace ?? "(sin asignar)",
97
+ source: existing?.workspace ? "preserved" : navori?.workspace ? "imported" : "default"
98
+ });
99
+ const branchBase = existing?.branchBase ?? navori?.branchBase ?? "main";
100
+ rows.push({
101
+ field: "branchBase",
102
+ value: branchBase,
103
+ source: existing?.branchBase ? "preserved" : navori?.branchBase ? "imported" : "default"
104
+ });
105
+ const prTarget = existing?.prTarget ?? navori?.prTarget;
106
+ if (prTarget) {
107
+ rows.push({
108
+ field: "prTarget",
109
+ value: prTarget,
110
+ source: existing?.prTarget ? "preserved" : "imported"
111
+ });
112
+ }
113
+ // project: existing > navori import > empty defaults
114
+ const project = existing?.project ?? {
115
+ criticalAreas: navori?.project?.criticalAreas ?? [],
116
+ legacyPaths: navori?.project?.legacyPaths ?? []
117
+ };
118
+ rows.push({
119
+ field: "project",
120
+ value: `criticalAreas=[${project.criticalAreas.join(", ")}] legacyPaths=[${project.legacyPaths.join(", ")}]`,
121
+ source: existing?.project ? "preserved" : navori?.project ? "imported" : "default"
122
+ });
123
+ // stack (packageManager/framework/libs): always freshly detected.
124
+ const packageManager = detectPackageManager(cwd);
125
+ const framework = pkg ? detectFramework(pkg) : undefined;
126
+ const libs = pkg ? detectLibs(pkg) : [];
127
+ rows.push({
128
+ field: "stack.packageManager",
129
+ value: packageManager ?? "(no detectado)",
130
+ source: "detected"
131
+ });
132
+ rows.push({
133
+ field: "stack.framework",
134
+ value: framework ?? "(no detectado)",
135
+ source: "detected"
136
+ });
137
+ rows.push({
138
+ field: "stack.libs",
139
+ value: libs.join(", ") || "(ninguna)",
140
+ source: "detected"
141
+ });
142
+ // qualityGate: existing > navori import > detected from package.json scripts
143
+ const importedFull = existing?.qualityGate?.full ?? navori?.qualityGate?.full;
144
+ const importedFast = existing?.qualityGate?.fast || navori?.qualityGate?.fast;
145
+ let qualityGate;
146
+ if (importedFast) {
147
+ qualityGate = {
148
+ fast: importedFast,
149
+ full: importedFull
150
+ };
151
+ rows.push({
152
+ field: "qualityGate.fast",
153
+ value: importedFast,
154
+ source: existing?.qualityGate ? "preserved" : "imported"
155
+ });
156
+ } else {
157
+ const fast = pkg && packageManager ? buildQualityGateFast(pkg, packageManager) : "";
158
+ if (fast) {
159
+ qualityGate = {
160
+ fast,
161
+ full: importedFull
162
+ };
163
+ rows.push({
164
+ field: "qualityGate.fast",
165
+ value: fast,
166
+ source: "detected"
167
+ });
168
+ } else {
169
+ qualityGate = {
170
+ fast: NO_GATE_PLACEHOLDER,
171
+ full: importedFull
172
+ };
173
+ rows.push({
174
+ field: "qualityGate.fast",
175
+ value: "no se detectaron scripts lint/typecheck/test",
176
+ source: "warning"
177
+ });
178
+ }
179
+ }
180
+ // identity: always freshly detected from the git remote.
181
+ const remoteUrl = getRemoteOriginUrl(cwd);
182
+ const identity = remoteUrl ? parseIdentityFromRemote(remoteUrl) ?? undefined : undefined;
183
+ rows.push({
184
+ field: "identity",
185
+ value: identity ?? "(no detectada)",
186
+ source: "detected"
187
+ });
188
+ // skills: the 4 hardcoded motor skills plus whatever DEP_SKILL_MAP maps
189
+ // from the repo's detected deps, deduped and in stable (MOTOR_SKILLS
190
+ // first, then DEP_SKILL_MAP declaration order) order.
191
+ const mappedSkills = pkg ? detectMappedSkills(pkg) : [];
192
+ const skills = [
193
+ ...MOTOR_SKILLS,
194
+ ...mappedSkills.filter((id)=>!MOTOR_SKILLS.includes(id))
195
+ ];
196
+ rows.push({
197
+ field: "skills",
198
+ value: skills.join(", "),
199
+ source: "detected"
200
+ });
201
+ const configInput = {
202
+ name,
203
+ language: existing?.language ?? "es",
204
+ workspace,
205
+ branchBase,
206
+ prTarget,
207
+ qualityGate,
208
+ project,
209
+ identity,
210
+ stack: {
211
+ framework,
212
+ packageManager,
213
+ libs
214
+ },
215
+ skills
216
+ };
217
+ let configPath;
218
+ let finalConfig;
219
+ try {
220
+ writeConfig(cwd, configInput);
221
+ configPath = join(cwd, CONFIG_FILENAME);
222
+ finalConfig = readConfig(cwd);
223
+ } catch (err) {
224
+ rows.push({
225
+ field: "argos.config.json",
226
+ value: errorMessage(err),
227
+ source: "error"
228
+ });
229
+ return {
230
+ rows,
231
+ configPath,
232
+ exitCode: 1
233
+ };
234
+ }
235
+ // Workspace auto-link: resolve the same explicit>config>match-rules chain
236
+ // `workspace link` uses and register the repo when it resolves cleanly.
237
+ // Never blocks adopt — an unresolved or ambiguous result is reported as a
238
+ // pending step (info/warning row), not an error.
239
+ try {
240
+ const registry = loadRegistry();
241
+ const resolution = resolveWorkspaceForRepo(registry, {
242
+ configWorkspace: finalConfig.workspace,
243
+ remoteUrl,
244
+ repoPath: cwd
245
+ });
246
+ if (resolution.kind === "resolved") {
247
+ const linkResult = linkRepo(resolution.name, {
248
+ name: finalConfig.name,
249
+ path: cwd
250
+ });
251
+ rows.push({
252
+ field: "workspace.link",
253
+ value: `${linkResult.action} en workspace '${resolution.name}'`,
254
+ source: "detected"
255
+ });
256
+ } else if (resolution.kind === "ambiguous") {
257
+ rows.push({
258
+ field: "workspace.link",
259
+ value: `ambiguo entre workspaces (${resolution.candidates.join(", ")}) — corre argos workspace link <nombre>`,
260
+ source: "warning"
261
+ });
262
+ } else {
263
+ rows.push({
264
+ field: "workspace.link",
265
+ value: "workspace sin resolver — corre argos workspace link <nombre>",
266
+ source: "info"
267
+ });
268
+ }
269
+ } catch (err) {
270
+ rows.push({
271
+ field: "workspace.link",
272
+ value: errorMessage(err),
273
+ source: "warning"
274
+ });
275
+ }
276
+ // Ficha: inject/replace the `ficha` managed block in ./CLAUDE.md via the
277
+ // same markers lib used for the global engine — foreign content untouched.
278
+ let fichaStatus;
279
+ let backupPath;
280
+ try {
281
+ // Back up the repo's own CLAUDE.md before mutating it in place — same
282
+ // backups location the global engine uses, keyed by an arbitrary source dir.
283
+ backupPath = createBackup(cwd, [
284
+ "CLAUDE.md"
285
+ ]);
286
+ const fichaContent = buildFichaContent(finalConfig);
287
+ const claudeMdPath = join(cwd, "CLAUDE.md");
288
+ const claudeMdBefore = existsSync(claudeMdPath) ? readFileSync(claudeMdPath, "utf-8") : "";
289
+ const hadFicha = listBlocks(claudeMdBefore).some((b)=>b.id === FICHA_BLOCK_ID);
290
+ const claudeMdAfter = injectBlock(claudeMdBefore, FICHA_BLOCK_ID, readCliVersion(), fichaContent);
291
+ fichaStatus = claudeMdAfter === claudeMdBefore ? "unchanged" : hadFicha ? "updated" : "created";
292
+ writeFileAtomic(claudeMdPath, claudeMdAfter);
293
+ rows.push({
294
+ field: "ficha (./CLAUDE.md)",
295
+ value: fichaStatus,
296
+ source: "detected"
297
+ });
298
+ } catch (err) {
299
+ rows.push({
300
+ field: "ficha (./CLAUDE.md)",
301
+ value: errorMessage(err),
302
+ source: "error"
303
+ });
304
+ }
305
+ const exitCode = rows.some((r)=>r.source === "error") ? 1 : 0;
306
+ return {
307
+ rows,
308
+ configPath,
309
+ fichaStatus,
310
+ backupPath,
311
+ exitCode
312
+ };
313
+ }
314
+ export const adoptCommand = defineCommand({
315
+ meta: {
316
+ name: "adopt",
317
+ description: "Detect a repo's stack and write its argos.config.json."
318
+ },
319
+ args: {
320
+ refresh: {
321
+ type: "boolean",
322
+ default: false,
323
+ description: "Regenera argos.config.json y la ficha aunque ya existan."
324
+ }
325
+ },
326
+ run ({ args }) {
327
+ const report = runAdopt({
328
+ cwd: process.cwd(),
329
+ refresh: Boolean(args.refresh)
330
+ });
331
+ if (report.error) {
332
+ console.error(pc.red(report.error));
333
+ process.exit(report.exitCode);
334
+ }
335
+ for (const row of report.rows){
336
+ const paddedSource = row.source.padEnd(10);
337
+ const label = row.source === "error" ? pc.red(paddedSource) : row.source === "warning" ? pc.yellow(paddedSource) : pc.dim(paddedSource);
338
+ console.log(`${label} ${row.field.padEnd(28)} ${row.value}`);
339
+ }
340
+ console.log("");
341
+ console.log(`argos.config.json escrito en ${report.configPath}`);
342
+ if (report.backupPath) console.log(`backup en ${report.backupPath}`);
343
+ process.exit(report.exitCode);
344
+ }
345
+ });
346
+
347
+ //# sourceMappingURL=adopt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/adopt.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport pc from \"picocolors\";\nimport { writeFileAtomic } from \"../lib/atomic-write.js\";\nimport {\n CONFIG_FILENAME,\n type ArgosConfig,\n type ArgosConfigInput,\n hasConfig,\n readConfig,\n writeConfig,\n} from \"../lib/config.js\";\nimport {\n buildQualityGateFast,\n detectFramework,\n detectLibs,\n detectMappedSkills,\n detectPackageManager,\n MOTOR_SKILLS,\n readPackageJson,\n} from \"../lib/detect.js\";\nimport { createBackup } from \"../lib/backup.js\";\nimport { buildFichaContent, FICHA_BLOCK_ID } from \"../lib/ficha.js\";\nimport { checkGitRepo, getRemoteOriginUrl, parseIdentityFromRemote } from \"../lib/git.js\";\nimport { injectBlock, listBlocks } from \"../lib/markers.js\";\nimport type { FileStatus } from \"../lib/managed-files.js\";\nimport { readNaviorConfig } from \"../lib/navori-import.js\";\nimport { readCliVersion } from \"../lib/version.js\";\nimport { linkRepo, loadRegistry, resolveWorkspaceForRepo } from \"../lib/workspaces.js\";\n\n/** Written when no lint/typecheck/test script exists to build a real gate from. */\nexport const NO_GATE_PLACEHOLDER =\n \"echo 'argos: no lint/typecheck/test scripts detected — set qualityGate.fast manually'\";\n\nexport interface AdoptRow {\n field: string;\n value: string;\n source: \"imported\" | \"preserved\" | \"detected\" | \"default\" | \"info\" | \"warning\" | \"error\";\n}\n\nexport interface AdoptOptions {\n cwd: string;\n refresh?: boolean;\n}\n\nexport interface AdoptReport {\n rows: AdoptRow[];\n configPath?: string;\n fichaStatus?: FileStatus;\n backupPath?: string;\n exitCode: 0 | 1;\n error?: string;\n}\n\nfunction errorMessage(err: unknown): string {\n return err instanceof Error ? err.message : String(err);\n}\n\n/**\n * Core, testable implementation of `argos adopt [--refresh]`: writes\n * `argos.config.json` (detecting stack/quality-gate/identity, importing\n * `navori.config.json` when present) and injects the `ficha` managed block\n * into `./CLAUDE.md`. Pure function of the filesystem — no process.exit.\n */\nexport function runAdopt(options: AdoptOptions): AdoptReport {\n const { cwd, refresh = false } = options;\n\n const gitCheck = checkGitRepo(cwd);\n if (!gitCheck.isRepo) {\n return {\n rows: [],\n exitCode: 1,\n error: gitCheck.gitMissing\n ? \"No se encontró el binario git — instalá git y volvé a intentar.\"\n : \"argos adopt debe ejecutarse dentro de un repositorio git.\",\n };\n }\n\n const configExists = hasConfig(cwd);\n if (configExists && !refresh) {\n return {\n rows: [],\n exitCode: 1,\n error: \"argos.config.json ya existe. Corre `argos adopt --refresh` para regenerarlo.\",\n };\n }\n\n const rows: AdoptRow[] = [];\n\n let existing: ArgosConfig | undefined;\n if (configExists) {\n try {\n existing = readConfig(cwd);\n } catch {\n rows.push({\n field: \"argos.config.json\",\n value: \"config existente inválido, se regenera desde cero\",\n source: \"warning\",\n });\n }\n }\n\n const naviorResult = readNaviorConfig(cwd);\n const navori = naviorResult.kind === \"imported\" ? naviorResult.data : undefined;\n if (naviorResult.kind === \"imported\") {\n rows.push({ field: \"import\", value: \"importado de navori.config.json\", source: \"imported\" });\n } else if (naviorResult.kind === \"unreadable\") {\n rows.push({\n field: \"navori.config.json\",\n value: \"navori.config.json presente pero ilegible — ignorado\",\n source: \"warning\",\n });\n }\n\n const pkg = readPackageJson(cwd);\n\n // name: existing > navori import > package.json > repo dirname\n let name: string;\n let nameSource: AdoptRow[\"source\"];\n if (existing?.name) {\n name = existing.name;\n nameSource = \"preserved\";\n } else if (navori?.name) {\n name = navori.name;\n nameSource = \"imported\";\n } else if (pkg?.name) {\n name = pkg.name;\n nameSource = \"detected\";\n } else {\n name = basename(cwd);\n nameSource = \"default\";\n }\n rows.push({ field: \"name\", value: name, source: nameSource });\n\n // workspace / branchBase / prTarget: existing > navori import > default (no detection exists for these)\n const workspace = existing?.workspace ?? navori?.workspace;\n rows.push({\n field: \"workspace\",\n value: workspace ?? \"(sin asignar)\",\n source: existing?.workspace ? \"preserved\" : navori?.workspace ? \"imported\" : \"default\",\n });\n\n const branchBase = existing?.branchBase ?? navori?.branchBase ?? \"main\";\n rows.push({\n field: \"branchBase\",\n value: branchBase,\n source: existing?.branchBase ? \"preserved\" : navori?.branchBase ? \"imported\" : \"default\",\n });\n\n const prTarget = existing?.prTarget ?? navori?.prTarget;\n if (prTarget) {\n rows.push({\n field: \"prTarget\",\n value: prTarget,\n source: existing?.prTarget ? \"preserved\" : \"imported\",\n });\n }\n\n // project: existing > navori import > empty defaults\n const project = existing?.project ?? {\n criticalAreas: navori?.project?.criticalAreas ?? [],\n legacyPaths: navori?.project?.legacyPaths ?? [],\n };\n rows.push({\n field: \"project\",\n value: `criticalAreas=[${project.criticalAreas.join(\", \")}] legacyPaths=[${project.legacyPaths.join(\", \")}]`,\n source: existing?.project ? \"preserved\" : navori?.project ? \"imported\" : \"default\",\n });\n\n // stack (packageManager/framework/libs): always freshly detected.\n const packageManager = detectPackageManager(cwd);\n const framework = pkg ? detectFramework(pkg) : undefined;\n const libs = pkg ? detectLibs(pkg) : [];\n rows.push({ field: \"stack.packageManager\", value: packageManager ?? \"(no detectado)\", source: \"detected\" });\n rows.push({ field: \"stack.framework\", value: framework ?? \"(no detectado)\", source: \"detected\" });\n rows.push({ field: \"stack.libs\", value: libs.join(\", \") || \"(ninguna)\", source: \"detected\" });\n\n // qualityGate: existing > navori import > detected from package.json scripts\n const importedFull = existing?.qualityGate?.full ?? navori?.qualityGate?.full;\n const importedFast = existing?.qualityGate?.fast || navori?.qualityGate?.fast;\n let qualityGate: { fast: string; full?: string };\n if (importedFast) {\n qualityGate = { fast: importedFast, full: importedFull };\n rows.push({\n field: \"qualityGate.fast\",\n value: importedFast,\n source: existing?.qualityGate ? \"preserved\" : \"imported\",\n });\n } else {\n const fast = pkg && packageManager ? buildQualityGateFast(pkg, packageManager) : \"\";\n if (fast) {\n qualityGate = { fast, full: importedFull };\n rows.push({ field: \"qualityGate.fast\", value: fast, source: \"detected\" });\n } else {\n qualityGate = { fast: NO_GATE_PLACEHOLDER, full: importedFull };\n rows.push({\n field: \"qualityGate.fast\",\n value: \"no se detectaron scripts lint/typecheck/test\",\n source: \"warning\",\n });\n }\n }\n\n // identity: always freshly detected from the git remote.\n const remoteUrl = getRemoteOriginUrl(cwd);\n const identity = remoteUrl ? (parseIdentityFromRemote(remoteUrl) ?? undefined) : undefined;\n rows.push({ field: \"identity\", value: identity ?? \"(no detectada)\", source: \"detected\" });\n\n // skills: the 4 hardcoded motor skills plus whatever DEP_SKILL_MAP maps\n // from the repo's detected deps, deduped and in stable (MOTOR_SKILLS\n // first, then DEP_SKILL_MAP declaration order) order.\n const mappedSkills = pkg ? detectMappedSkills(pkg) : [];\n const skills = [...MOTOR_SKILLS, ...mappedSkills.filter((id) => !MOTOR_SKILLS.includes(id))];\n rows.push({ field: \"skills\", value: skills.join(\", \"), source: \"detected\" });\n\n const configInput: ArgosConfigInput = {\n name,\n language: existing?.language ?? \"es\",\n workspace,\n branchBase,\n prTarget,\n qualityGate,\n project,\n identity,\n stack: { framework, packageManager, libs },\n skills,\n };\n\n let configPath: string | undefined;\n let finalConfig: ArgosConfig | undefined;\n try {\n writeConfig(cwd, configInput);\n configPath = join(cwd, CONFIG_FILENAME);\n finalConfig = readConfig(cwd);\n } catch (err) {\n rows.push({ field: \"argos.config.json\", value: errorMessage(err), source: \"error\" });\n return { rows, configPath, exitCode: 1 };\n }\n\n // Workspace auto-link: resolve the same explicit>config>match-rules chain\n // `workspace link` uses and register the repo when it resolves cleanly.\n // Never blocks adopt — an unresolved or ambiguous result is reported as a\n // pending step (info/warning row), not an error.\n try {\n const registry = loadRegistry();\n const resolution = resolveWorkspaceForRepo(registry, {\n configWorkspace: finalConfig.workspace,\n remoteUrl,\n repoPath: cwd,\n });\n if (resolution.kind === \"resolved\") {\n const linkResult = linkRepo(resolution.name, { name: finalConfig.name, path: cwd });\n rows.push({\n field: \"workspace.link\",\n value: `${linkResult.action} en workspace '${resolution.name}'`,\n source: \"detected\",\n });\n } else if (resolution.kind === \"ambiguous\") {\n rows.push({\n field: \"workspace.link\",\n value: `ambiguo entre workspaces (${resolution.candidates.join(\", \")}) — corre argos workspace link <nombre>`,\n source: \"warning\",\n });\n } else {\n rows.push({\n field: \"workspace.link\",\n value: \"workspace sin resolver — corre argos workspace link <nombre>\",\n source: \"info\",\n });\n }\n } catch (err) {\n rows.push({ field: \"workspace.link\", value: errorMessage(err), source: \"warning\" });\n }\n\n // Ficha: inject/replace the `ficha` managed block in ./CLAUDE.md via the\n // same markers lib used for the global engine — foreign content untouched.\n let fichaStatus: FileStatus | undefined;\n let backupPath: string | undefined;\n try {\n // Back up the repo's own CLAUDE.md before mutating it in place — same\n // backups location the global engine uses, keyed by an arbitrary source dir.\n backupPath = createBackup(cwd, [\"CLAUDE.md\"]);\n\n const fichaContent = buildFichaContent(finalConfig);\n const claudeMdPath = join(cwd, \"CLAUDE.md\");\n const claudeMdBefore = existsSync(claudeMdPath) ? readFileSync(claudeMdPath, \"utf-8\") : \"\";\n const hadFicha = listBlocks(claudeMdBefore).some((b) => b.id === FICHA_BLOCK_ID);\n const claudeMdAfter = injectBlock(claudeMdBefore, FICHA_BLOCK_ID, readCliVersion(), fichaContent);\n fichaStatus = claudeMdAfter === claudeMdBefore ? \"unchanged\" : hadFicha ? \"updated\" : \"created\";\n writeFileAtomic(claudeMdPath, claudeMdAfter);\n rows.push({ field: \"ficha (./CLAUDE.md)\", value: fichaStatus, source: \"detected\" });\n } catch (err) {\n rows.push({ field: \"ficha (./CLAUDE.md)\", value: errorMessage(err), source: \"error\" });\n }\n\n const exitCode: 0 | 1 = rows.some((r) => r.source === \"error\") ? 1 : 0;\n return { rows, configPath, fichaStatus, backupPath, exitCode };\n}\n\nexport const adoptCommand = defineCommand({\n meta: {\n name: \"adopt\",\n description: \"Detect a repo's stack and write its argos.config.json.\",\n },\n args: {\n refresh: {\n type: \"boolean\",\n default: false,\n description: \"Regenera argos.config.json y la ficha aunque ya existan.\",\n },\n },\n run({ args }) {\n const report = runAdopt({ cwd: process.cwd(), refresh: Boolean(args.refresh) });\n\n if (report.error) {\n console.error(pc.red(report.error));\n process.exit(report.exitCode);\n }\n\n for (const row of report.rows) {\n const paddedSource = row.source.padEnd(10);\n const label =\n row.source === \"error\" ? pc.red(paddedSource) : row.source === \"warning\" ? pc.yellow(paddedSource) : pc.dim(paddedSource);\n console.log(`${label} ${row.field.padEnd(28)} ${row.value}`);\n }\n console.log(\"\");\n console.log(`argos.config.json escrito en ${report.configPath}`);\n if (report.backupPath) console.log(`backup en ${report.backupPath}`);\n\n process.exit(report.exitCode);\n },\n});\n"],"names":["defineCommand","existsSync","readFileSync","basename","join","pc","writeFileAtomic","CONFIG_FILENAME","hasConfig","readConfig","writeConfig","buildQualityGateFast","detectFramework","detectLibs","detectMappedSkills","detectPackageManager","MOTOR_SKILLS","readPackageJson","createBackup","buildFichaContent","FICHA_BLOCK_ID","checkGitRepo","getRemoteOriginUrl","parseIdentityFromRemote","injectBlock","listBlocks","readNaviorConfig","readCliVersion","linkRepo","loadRegistry","resolveWorkspaceForRepo","NO_GATE_PLACEHOLDER","errorMessage","err","Error","message","String","runAdopt","options","cwd","refresh","gitCheck","isRepo","rows","exitCode","error","gitMissing","configExists","existing","push","field","value","source","naviorResult","navori","kind","data","undefined","pkg","name","nameSource","workspace","branchBase","prTarget","project","criticalAreas","legacyPaths","packageManager","framework","libs","importedFull","qualityGate","full","importedFast","fast","remoteUrl","identity","mappedSkills","skills","filter","id","includes","configInput","language","stack","configPath","finalConfig","registry","resolution","configWorkspace","repoPath","linkResult","path","action","candidates","fichaStatus","backupPath","fichaContent","claudeMdPath","claudeMdBefore","hadFicha","some","b","claudeMdAfter","r","adoptCommand","meta","description","args","type","default","run","report","process","Boolean","console","red","exit","row","paddedSource","padEnd","label","yellow","dim","log"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type DoctorLevel = "info" | "warning" | "error";
2
+ export interface DoctorFinding {
3
+ level: DoctorLevel;
4
+ message: string;
5
+ }
6
+ export interface DoctorOptions {
7
+ cwd: string;
8
+ }
9
+ export interface DoctorReport {
10
+ findings: DoctorFinding[];
11
+ exitCode: 0 | 1;
12
+ }
13
+ /**
14
+ * Core, testable implementation of `argos doctor`: a read-only audit of the
15
+ * global engine and (when cwd is a git repo) the repo's argos.config.json +
16
+ * ficha. Never writes anything.
17
+ */
18
+ export declare function runDoctor(options: DoctorOptions): DoctorReport;
19
+ export declare const doctorCommand: import("citty").CommandDef<import("citty").ArgsDef>;
20
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CACjB;AA6aD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAU9D;AAED,eAAO,MAAM,aAAa,qDAqBxB,CAAC"}