javi-forge 1.6.0 → 1.7.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 (322) hide show
  1. package/README.md +45 -1
  2. package/ci-local/README.md +56 -11
  3. package/ci-local/ci-local.ps1 +445 -0
  4. package/ci-local/ci-local.sh +52 -9
  5. package/ci-local/docker/python.Dockerfile +7 -0
  6. package/ci-local/hooks/commit-msg +120 -44
  7. package/ci-local/hooks/commit-msg.test.sh +286 -0
  8. package/ci-local/hooks/pre-commit +9 -1
  9. package/ci-local/hooks/pre-push +13 -2
  10. package/ci-local/install.ps1 +367 -0
  11. package/ci-local/install.sh +151 -5
  12. package/ci-local/uninstall.ps1 +85 -0
  13. package/ci-local/uninstall.sh +95 -0
  14. package/dist/cli/dispatch/ci.d.ts +12 -0
  15. package/dist/cli/dispatch/ci.js +38 -0
  16. package/dist/cli/dispatch/security.d.ts +11 -0
  17. package/dist/cli/dispatch/security.js +68 -0
  18. package/dist/cli/dispatch/simple-renderers.d.ts +16 -0
  19. package/dist/cli/dispatch/simple-renderers.js +65 -0
  20. package/dist/cli/dispatch/skill-publish.d.ts +15 -0
  21. package/dist/cli/dispatch/skill-publish.js +44 -0
  22. package/dist/cli/dispatch/skills-cmd.d.ts +13 -0
  23. package/dist/cli/dispatch/skills-cmd.js +93 -0
  24. package/dist/cli/dispatch/tdd.d.ts +11 -0
  25. package/dist/cli/dispatch/tdd.js +45 -0
  26. package/dist/cli/dispatch/types.d.ts +29 -0
  27. package/dist/cli/dispatch/types.js +2 -0
  28. package/dist/cli/dispatch/workflow.d.ts +11 -0
  29. package/dist/cli/dispatch/workflow.js +67 -0
  30. package/dist/cli/help.d.ts +127 -0
  31. package/dist/cli/help.js +138 -0
  32. package/dist/cli/runtime.d.ts +16 -0
  33. package/dist/cli/runtime.js +38 -0
  34. package/dist/cli/validators.d.ts +17 -0
  35. package/dist/cli/validators.js +35 -0
  36. package/dist/commands/analyze.d.ts +1 -1
  37. package/dist/commands/analyze.js +14 -16
  38. package/dist/commands/ci.d.ts +50 -3
  39. package/dist/commands/ci.js +537 -182
  40. package/dist/commands/doctor.d.ts +2 -2
  41. package/dist/commands/doctor.js +112 -62
  42. package/dist/commands/init/report.d.ts +13 -0
  43. package/dist/commands/init/report.js +13 -0
  44. package/dist/commands/init/steps/agent-skills.d.ts +13 -0
  45. package/dist/commands/init/steps/agent-skills.js +45 -0
  46. package/dist/commands/init/steps/ai-sync.d.ts +15 -0
  47. package/dist/commands/init/steps/ai-sync.js +62 -0
  48. package/dist/commands/init/steps/ci.d.ts +24 -0
  49. package/dist/commands/init/steps/ci.js +74 -0
  50. package/dist/commands/init/steps/claude-md.d.ts +14 -0
  51. package/dist/commands/init/steps/claude-md.js +54 -0
  52. package/dist/commands/init/steps/code-graph.d.ts +16 -0
  53. package/dist/commands/init/steps/code-graph.js +68 -0
  54. package/dist/commands/init/steps/context-dir.d.ts +13 -0
  55. package/dist/commands/init/steps/context-dir.js +47 -0
  56. package/dist/commands/init/steps/docker-deploy.d.ts +16 -0
  57. package/dist/commands/init/steps/docker-deploy.js +60 -0
  58. package/dist/commands/init/steps/ghagga.d.ts +15 -0
  59. package/dist/commands/init/steps/ghagga.js +58 -0
  60. package/dist/commands/init/steps/git.d.ts +25 -0
  61. package/dist/commands/init/steps/git.js +81 -0
  62. package/dist/commands/init/steps/gitignore.d.ts +13 -0
  63. package/dist/commands/init/steps/gitignore.js +39 -0
  64. package/dist/commands/init/steps/local-ai.d.ts +14 -0
  65. package/dist/commands/init/steps/local-ai.js +53 -0
  66. package/dist/commands/init/steps/manifest.d.ts +13 -0
  67. package/dist/commands/init/steps/manifest.js +58 -0
  68. package/dist/commands/init/steps/memory.d.ts +15 -0
  69. package/dist/commands/init/steps/memory.js +60 -0
  70. package/dist/commands/init/steps/mock.d.ts +13 -0
  71. package/dist/commands/init/steps/mock.js +64 -0
  72. package/dist/commands/init/steps/sdd.d.ts +12 -0
  73. package/dist/commands/init/steps/sdd.js +40 -0
  74. package/dist/commands/init/steps/security.d.ts +28 -0
  75. package/dist/commands/init/steps/security.js +103 -0
  76. package/dist/commands/init/types.d.ts +30 -0
  77. package/dist/commands/init/types.js +2 -0
  78. package/dist/commands/init.d.ts +5 -4
  79. package/dist/commands/init.js +42 -387
  80. package/dist/commands/llmstxt.d.ts +1 -1
  81. package/dist/commands/llmstxt.js +36 -34
  82. package/dist/commands/plugin.d.ts +10 -1
  83. package/dist/commands/plugin.js +92 -47
  84. package/dist/commands/security.d.ts +11 -5
  85. package/dist/commands/security.js +236 -77
  86. package/dist/commands/skills/analysis.d.ts +19 -0
  87. package/dist/commands/skills/analysis.js +211 -0
  88. package/dist/commands/skills/benchmark.d.ts +6 -0
  89. package/dist/commands/skills/benchmark.js +82 -0
  90. package/dist/commands/skills/constants.d.ts +10 -0
  91. package/dist/commands/skills/constants.js +27 -0
  92. package/dist/commands/skills/directives.d.ts +21 -0
  93. package/dist/commands/skills/directives.js +101 -0
  94. package/dist/commands/skills/parsing.d.ts +16 -0
  95. package/dist/commands/skills/parsing.js +108 -0
  96. package/dist/commands/skills/rules.d.ts +5 -0
  97. package/dist/commands/skills/rules.js +32 -0
  98. package/dist/commands/skills/scoring.d.ts +47 -0
  99. package/dist/commands/skills/scoring.js +306 -0
  100. package/dist/commands/skills.d.ts +8 -69
  101. package/dist/commands/skills.js +9 -490
  102. package/dist/commands/tdd-pipeline.d.ts +17 -0
  103. package/dist/commands/tdd-pipeline.js +144 -0
  104. package/dist/commands/tdd.d.ts +1 -1
  105. package/dist/commands/tdd.js +21 -18
  106. package/dist/commands/workflow.d.ts +23 -0
  107. package/dist/commands/workflow.js +116 -0
  108. package/dist/constants.d.ts +15 -1
  109. package/dist/constants.js +161 -122
  110. package/dist/index.js +43 -280
  111. package/dist/lib/agent-skills.d.ts +36 -1
  112. package/dist/lib/agent-skills.js +168 -19
  113. package/dist/lib/atlassian-mcp.d.ts +42 -0
  114. package/dist/lib/atlassian-mcp.js +98 -0
  115. package/dist/lib/auto-skill-install.d.ts +37 -0
  116. package/dist/lib/auto-skill-install.js +91 -0
  117. package/dist/lib/auto-wire.d.ts +20 -0
  118. package/dist/lib/auto-wire.js +240 -0
  119. package/dist/lib/ci-config.d.ts +65 -0
  120. package/dist/lib/ci-config.js +297 -0
  121. package/dist/lib/claudemd.d.ts +13 -1
  122. package/dist/lib/claudemd.js +174 -24
  123. package/dist/lib/codex-export.d.ts +1 -1
  124. package/dist/lib/codex-export.js +26 -32
  125. package/dist/lib/common.d.ts +1 -1
  126. package/dist/lib/common.js +52 -44
  127. package/dist/lib/context.d.ts +17 -2
  128. package/dist/lib/context.js +142 -13
  129. package/dist/lib/crash-recovery.d.ts +34 -0
  130. package/dist/lib/crash-recovery.js +123 -0
  131. package/dist/lib/docker.d.ts +23 -2
  132. package/dist/lib/docker.js +168 -131
  133. package/dist/lib/exec.d.ts +10 -0
  134. package/dist/lib/exec.js +11 -0
  135. package/dist/lib/frontmatter.d.ts +1 -1
  136. package/dist/lib/frontmatter.js +29 -15
  137. package/dist/lib/harness-audit.d.ts +35 -0
  138. package/dist/lib/harness-audit.js +277 -0
  139. package/dist/lib/parallel-batch.d.ts +42 -0
  140. package/dist/lib/parallel-batch.js +88 -0
  141. package/dist/lib/plugin.d.ts +9 -3
  142. package/dist/lib/plugin.js +127 -70
  143. package/dist/lib/secret-scanner.d.ts +30 -0
  144. package/dist/lib/secret-scanner.js +274 -0
  145. package/dist/lib/security-analysis.d.ts +74 -0
  146. package/dist/lib/security-analysis.js +489 -0
  147. package/dist/lib/skill-publish.d.ts +40 -0
  148. package/dist/lib/skill-publish.js +164 -0
  149. package/dist/lib/skill-scanner.d.ts +63 -0
  150. package/dist/lib/skill-scanner.js +383 -0
  151. package/dist/lib/stack-detector.d.ts +38 -0
  152. package/dist/lib/stack-detector.js +207 -0
  153. package/dist/lib/supply-chain.d.ts +23 -0
  154. package/dist/lib/supply-chain.js +126 -0
  155. package/dist/lib/team-presets.d.ts +53 -0
  156. package/dist/lib/team-presets.js +201 -0
  157. package/dist/lib/template.d.ts +16 -1
  158. package/dist/lib/template.js +46 -17
  159. package/dist/lib/workflow/discovery.d.ts +27 -0
  160. package/dist/lib/workflow/discovery.js +85 -0
  161. package/dist/lib/workflow/index.d.ts +5 -0
  162. package/dist/lib/workflow/index.js +5 -0
  163. package/dist/lib/workflow/parser.d.ts +16 -0
  164. package/dist/lib/workflow/parser.js +198 -0
  165. package/dist/lib/workflow/renderer.d.ts +9 -0
  166. package/dist/lib/workflow/renderer.js +152 -0
  167. package/dist/lib/workflow/validator.d.ts +10 -0
  168. package/dist/lib/workflow/validator.js +189 -0
  169. package/dist/tasks/index.d.ts +4 -0
  170. package/dist/tasks/index.js +4 -0
  171. package/dist/tasks/scaffold-tasks.d.ts +3 -0
  172. package/dist/tasks/scaffold-tasks.js +14 -0
  173. package/dist/tasks/task-id.d.ts +30 -0
  174. package/dist/tasks/task-id.js +59 -0
  175. package/dist/tasks/task-tracker.d.ts +15 -0
  176. package/dist/tasks/task-tracker.js +81 -0
  177. package/dist/types/index.d.ts +134 -6
  178. package/dist/types/index.js +11 -1
  179. package/dist/ui/AnalyzeUI.d.ts +1 -1
  180. package/dist/ui/AnalyzeUI.js +38 -39
  181. package/dist/ui/App.d.ts +5 -3
  182. package/dist/ui/App.js +86 -46
  183. package/dist/ui/AutoSkills.d.ts +9 -0
  184. package/dist/ui/AutoSkills.js +124 -0
  185. package/dist/ui/CI.d.ts +2 -2
  186. package/dist/ui/CI.js +24 -26
  187. package/dist/ui/CIContext.d.ts +1 -1
  188. package/dist/ui/CIContext.js +2 -2
  189. package/dist/ui/CISelector.d.ts +2 -2
  190. package/dist/ui/CISelector.js +23 -15
  191. package/dist/ui/Doctor.d.ts +1 -1
  192. package/dist/ui/Doctor.js +35 -29
  193. package/dist/ui/Header.d.ts +1 -1
  194. package/dist/ui/Header.js +14 -14
  195. package/dist/ui/HookProfileSelector.d.ts +9 -0
  196. package/dist/ui/HookProfileSelector.js +54 -0
  197. package/dist/ui/LlmsTxt.d.ts +1 -1
  198. package/dist/ui/LlmsTxt.js +31 -22
  199. package/dist/ui/MemorySelector.d.ts +2 -2
  200. package/dist/ui/MemorySelector.js +28 -16
  201. package/dist/ui/NameInput.d.ts +1 -1
  202. package/dist/ui/NameInput.js +21 -21
  203. package/dist/ui/OptionSelector.d.ts +6 -2
  204. package/dist/ui/OptionSelector.js +83 -32
  205. package/dist/ui/Plugin.d.ts +4 -3
  206. package/dist/ui/Plugin.js +78 -35
  207. package/dist/ui/Progress.d.ts +3 -3
  208. package/dist/ui/Progress.js +23 -22
  209. package/dist/ui/Skills.d.ts +2 -2
  210. package/dist/ui/Skills.js +61 -32
  211. package/dist/ui/StackSelector.d.ts +2 -2
  212. package/dist/ui/StackSelector.js +27 -17
  213. package/dist/ui/Summary.d.ts +3 -3
  214. package/dist/ui/Summary.js +60 -50
  215. package/dist/ui/Welcome.d.ts +1 -1
  216. package/dist/ui/Welcome.js +15 -16
  217. package/dist/ui/theme.d.ts +1 -1
  218. package/dist/ui/theme.js +6 -6
  219. package/lib/common.psm1 +167 -0
  220. package/lib/common.sh +30 -0
  221. package/package.json +46 -24
  222. package/templates/common/atlassian/mcp-atlassian-snippet.json +16 -0
  223. package/templates/common/repoforge/mcp-repoforge-snippet.json +11 -0
  224. package/templates/common/repoforge/repoforge.yaml +34 -0
  225. package/templates/github/deploy-docker-zero-downtime.yml +140 -0
  226. package/templates/github/repoforge-graph.yml +45 -0
  227. package/templates/gitlab/deploy-docker-zero-downtime.yml +57 -0
  228. package/templates/local-ai/.env.example +17 -0
  229. package/templates/local-ai/docker-compose.yml +95 -0
  230. package/templates/security-hooks/claude-settings-security.json +30 -0
  231. package/templates/security-hooks/commit-msg-signing +29 -0
  232. package/templates/security-hooks/pre-commit-permissions +74 -0
  233. package/templates/security-hooks/pre-commit-secrets +74 -0
  234. package/templates/security-hooks/pre-push-branch-protection +62 -0
  235. package/templates/security-hooks/pre-push-deps +83 -0
  236. package/templates/security-hooks/pre-push-signing +67 -0
  237. package/templates/woodpecker/deploy-docker-zero-downtime.yml +50 -0
  238. package/templates/workflows/ci-pipeline.dot +15 -0
  239. package/templates/workflows/feature-flow.dot +21 -0
  240. package/templates/workflows/release.dot +16 -0
  241. package/dist/__integration__/helpers.d.ts +0 -20
  242. package/dist/__integration__/helpers.d.ts.map +0 -1
  243. package/dist/__integration__/helpers.js +0 -31
  244. package/dist/__integration__/helpers.js.map +0 -1
  245. package/dist/commands/analyze.d.ts.map +0 -1
  246. package/dist/commands/analyze.js.map +0 -1
  247. package/dist/commands/ci.d.ts.map +0 -1
  248. package/dist/commands/ci.js.map +0 -1
  249. package/dist/commands/doctor.d.ts.map +0 -1
  250. package/dist/commands/doctor.js.map +0 -1
  251. package/dist/commands/init.d.ts.map +0 -1
  252. package/dist/commands/init.js.map +0 -1
  253. package/dist/commands/llmstxt.d.ts.map +0 -1
  254. package/dist/commands/llmstxt.js.map +0 -1
  255. package/dist/commands/plugin.d.ts.map +0 -1
  256. package/dist/commands/plugin.js.map +0 -1
  257. package/dist/commands/security.d.ts.map +0 -1
  258. package/dist/commands/security.js.map +0 -1
  259. package/dist/commands/skills.d.ts.map +0 -1
  260. package/dist/commands/skills.js.map +0 -1
  261. package/dist/commands/tdd.d.ts.map +0 -1
  262. package/dist/commands/tdd.js.map +0 -1
  263. package/dist/constants.d.ts.map +0 -1
  264. package/dist/constants.js.map +0 -1
  265. package/dist/index.d.ts.map +0 -1
  266. package/dist/index.js.map +0 -1
  267. package/dist/lib/agent-skills.d.ts.map +0 -1
  268. package/dist/lib/agent-skills.js.map +0 -1
  269. package/dist/lib/claudemd.d.ts.map +0 -1
  270. package/dist/lib/claudemd.js.map +0 -1
  271. package/dist/lib/codex-export.d.ts.map +0 -1
  272. package/dist/lib/codex-export.js.map +0 -1
  273. package/dist/lib/common.d.ts.map +0 -1
  274. package/dist/lib/common.js.map +0 -1
  275. package/dist/lib/context.d.ts.map +0 -1
  276. package/dist/lib/context.js.map +0 -1
  277. package/dist/lib/docker.d.ts.map +0 -1
  278. package/dist/lib/docker.js.map +0 -1
  279. package/dist/lib/frontmatter.d.ts.map +0 -1
  280. package/dist/lib/frontmatter.js.map +0 -1
  281. package/dist/lib/plugin.d.ts.map +0 -1
  282. package/dist/lib/plugin.js.map +0 -1
  283. package/dist/lib/template.d.ts.map +0 -1
  284. package/dist/lib/template.js.map +0 -1
  285. package/dist/types/index.d.ts.map +0 -1
  286. package/dist/types/index.js.map +0 -1
  287. package/dist/ui/AnalyzeUI.d.ts.map +0 -1
  288. package/dist/ui/AnalyzeUI.js.map +0 -1
  289. package/dist/ui/App.d.ts.map +0 -1
  290. package/dist/ui/App.js.map +0 -1
  291. package/dist/ui/CI.d.ts.map +0 -1
  292. package/dist/ui/CI.js.map +0 -1
  293. package/dist/ui/CIContext.d.ts.map +0 -1
  294. package/dist/ui/CIContext.js.map +0 -1
  295. package/dist/ui/CISelector.d.ts.map +0 -1
  296. package/dist/ui/CISelector.js.map +0 -1
  297. package/dist/ui/Doctor.d.ts.map +0 -1
  298. package/dist/ui/Doctor.js.map +0 -1
  299. package/dist/ui/Header.d.ts.map +0 -1
  300. package/dist/ui/Header.js.map +0 -1
  301. package/dist/ui/LlmsTxt.d.ts.map +0 -1
  302. package/dist/ui/LlmsTxt.js.map +0 -1
  303. package/dist/ui/MemorySelector.d.ts.map +0 -1
  304. package/dist/ui/MemorySelector.js.map +0 -1
  305. package/dist/ui/NameInput.d.ts.map +0 -1
  306. package/dist/ui/NameInput.js.map +0 -1
  307. package/dist/ui/OptionSelector.d.ts.map +0 -1
  308. package/dist/ui/OptionSelector.js.map +0 -1
  309. package/dist/ui/Plugin.d.ts.map +0 -1
  310. package/dist/ui/Plugin.js.map +0 -1
  311. package/dist/ui/Progress.d.ts.map +0 -1
  312. package/dist/ui/Progress.js.map +0 -1
  313. package/dist/ui/Skills.d.ts.map +0 -1
  314. package/dist/ui/Skills.js.map +0 -1
  315. package/dist/ui/StackSelector.d.ts.map +0 -1
  316. package/dist/ui/StackSelector.js.map +0 -1
  317. package/dist/ui/Summary.d.ts.map +0 -1
  318. package/dist/ui/Summary.js.map +0 -1
  319. package/dist/ui/Welcome.d.ts.map +0 -1
  320. package/dist/ui/Welcome.js.map +0 -1
  321. package/dist/ui/theme.d.ts.map +0 -1
  322. package/dist/ui/theme.js.map +0 -1
@@ -0,0 +1,68 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import { TEMPLATES_DIR } from "../../../constants.js";
4
+ import { backupIfExists, ensureDirExists } from "../../../lib/common.js";
5
+ import { report } from "../report.js";
6
+ /**
7
+ * Step 15: Scaffold RepoForge code graph.
8
+ *
9
+ * - When options.codeGraph is false, reports "skipped".
10
+ * - Otherwise:
11
+ * 1. Copies .repoforge.yaml config (skip if exists).
12
+ * 2. Ensures .repoforge/ output dir exists.
13
+ * 3. Copies the graph generation CI workflow when ciProvider === "github".
14
+ * 4. Copies the MCP config snippet with __PROJECT_NAME__ interpolation.
15
+ * - Errors are swallowed and reported as status:"error" — never thrown.
16
+ *
17
+ * Extracted VERBATIM from src/commands/init.ts (PR 5 of 6).
18
+ */
19
+ export const stepCodeGraph = async (ctx) => {
20
+ const { projectDir, dryRun, onStep, options } = ctx;
21
+ const { projectName, ciProvider } = options;
22
+ const stepId = "code-graph";
23
+ report(onStep, stepId, "Scaffold RepoForge code graph", "running");
24
+ try {
25
+ if (options.codeGraph) {
26
+ if (!dryRun) {
27
+ // 1. Copy .repoforge.yaml config
28
+ const repoforgeConfigSrc = path.join(TEMPLATES_DIR, "common", "repoforge", "repoforge.yaml");
29
+ const repoforgeConfigDest = path.join(projectDir, ".repoforge.yaml");
30
+ if (!(await fs.pathExists(repoforgeConfigDest))) {
31
+ await fs.copy(repoforgeConfigSrc, repoforgeConfigDest);
32
+ }
33
+ // 2. Ensure .repoforge/ output dir exists
34
+ await ensureDirExists(path.join(projectDir, ".repoforge"));
35
+ // 3. Copy CI workflow for graph generation (GitHub only)
36
+ if (ciProvider === "github") {
37
+ const graphWorkflowSrc = path.join(TEMPLATES_DIR, "github", "repoforge-graph.yml");
38
+ if (await fs.pathExists(graphWorkflowSrc)) {
39
+ const graphWorkflowDest = path.join(projectDir, ".github", "workflows", "repoforge-graph.yml");
40
+ await ensureDirExists(path.dirname(graphWorkflowDest));
41
+ await backupIfExists(graphWorkflowDest);
42
+ await fs.copy(graphWorkflowSrc, graphWorkflowDest, {
43
+ overwrite: false,
44
+ });
45
+ }
46
+ }
47
+ // 4. Copy MCP config snippet for repoforge code intelligence
48
+ const mcpSnippetSrc = path.join(TEMPLATES_DIR, "common", "repoforge", "mcp-repoforge-snippet.json");
49
+ if (await fs.pathExists(mcpSnippetSrc)) {
50
+ const mcpSnippetDest = path.join(projectDir, ".repoforge", "mcp-config-snippet.json");
51
+ let content = await fs.readFile(mcpSnippetSrc, "utf-8");
52
+ content = content.replace(/__PROJECT_NAME__/g, projectName);
53
+ await fs.writeFile(mcpSnippetDest, content, "utf-8");
54
+ }
55
+ }
56
+ report(onStep, stepId, "Scaffold RepoForge code graph", "done", dryRun
57
+ ? "dry-run: would scaffold .repoforge.yaml + CI + MCP"
58
+ : ".repoforge.yaml + CI + MCP snippet");
59
+ }
60
+ else {
61
+ report(onStep, stepId, "Scaffold RepoForge code graph", "skipped", "not selected");
62
+ }
63
+ }
64
+ catch (e) {
65
+ report(onStep, stepId, "Scaffold RepoForge code graph", "error", String(e));
66
+ }
67
+ };
68
+ //# sourceMappingURL=code-graph.js.map
@@ -0,0 +1,13 @@
1
+ import type { StepFn } from "../types.js";
2
+ /**
3
+ * Step 11: Generate .context/ directory.
4
+ *
5
+ * - When contextDir is false, reports "skipped".
6
+ * - If .context/ already exists, reports "done" with "already exists".
7
+ * - Otherwise generates INDEX.md + summary.md via generateContextDir().
8
+ * - Errors are swallowed and reported as status:"error" — never thrown.
9
+ *
10
+ * Extracted VERBATIM from src/commands/init.ts (PR 4 of 6).
11
+ */
12
+ export declare const stepContextDir: StepFn;
13
+ //# sourceMappingURL=context-dir.d.ts.map
@@ -0,0 +1,47 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import { ensureDirExists } from "../../../lib/common.js";
4
+ import { generateContextDir } from "../../../lib/context.js";
5
+ import { report } from "../report.js";
6
+ /**
7
+ * Step 11: Generate .context/ directory.
8
+ *
9
+ * - When contextDir is false, reports "skipped".
10
+ * - If .context/ already exists, reports "done" with "already exists".
11
+ * - Otherwise generates INDEX.md + summary.md via generateContextDir().
12
+ * - Errors are swallowed and reported as status:"error" — never thrown.
13
+ *
14
+ * Extracted VERBATIM from src/commands/init.ts (PR 4 of 6).
15
+ */
16
+ export const stepContextDir = async (ctx) => {
17
+ const { projectDir, dryRun, onStep, options } = ctx;
18
+ const { contextDir } = options;
19
+ const stepId = "context-dir";
20
+ report(onStep, stepId, "Generate .context/ directory", "running");
21
+ try {
22
+ if (contextDir) {
23
+ const contextDirPath = path.join(projectDir, ".context");
24
+ if (await fs.pathExists(contextDirPath)) {
25
+ report(onStep, stepId, "Generate .context/ directory", "done", "already exists");
26
+ }
27
+ else {
28
+ if (!dryRun) {
29
+ const { index, summary } = await generateContextDir(options);
30
+ await ensureDirExists(contextDirPath);
31
+ await fs.writeFile(path.join(contextDirPath, "INDEX.md"), index, "utf-8");
32
+ await fs.writeFile(path.join(contextDirPath, "summary.md"), summary, "utf-8");
33
+ }
34
+ report(onStep, stepId, "Generate .context/ directory", "done", dryRun
35
+ ? "dry-run: would generate .context/"
36
+ : ".context/INDEX.md + summary.md");
37
+ }
38
+ }
39
+ else {
40
+ report(onStep, stepId, "Generate .context/ directory", "skipped", "not selected");
41
+ }
42
+ }
43
+ catch (e) {
44
+ report(onStep, stepId, "Generate .context/ directory", "error", String(e));
45
+ }
46
+ };
47
+ //# sourceMappingURL=context-dir.js.map
@@ -0,0 +1,16 @@
1
+ import type { StepFn } from "../types.js";
2
+ /**
3
+ * Step 13: Scaffold Docker zero-downtime deploy.
4
+ *
5
+ * - When options.dockerDeploy is false, reports "skipped".
6
+ * - Resolves the deploy destination for the configured CI provider; reports
7
+ * "error" when no destination/template exists for that provider.
8
+ * - If the destination file already exists, reports "done" with "already exists".
9
+ * - Otherwise renders the deploy workflow with options.dockerServiceName ?? "app"
10
+ * and writes it (backing up any existing file).
11
+ * - Errors are swallowed and reported as status:"error" — never thrown.
12
+ *
13
+ * Extracted VERBATIM from src/commands/init.ts (PR 4 of 6).
14
+ */
15
+ export declare const stepDockerDeploy: StepFn;
16
+ //# sourceMappingURL=docker-deploy.d.ts.map
@@ -0,0 +1,60 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import { backupIfExists, ensureDirExists } from "../../../lib/common.js";
4
+ import { generateDeployWorkflow, getDeployDestination, } from "../../../lib/template.js";
5
+ import { report } from "../report.js";
6
+ /**
7
+ * Step 13: Scaffold Docker zero-downtime deploy.
8
+ *
9
+ * - When options.dockerDeploy is false, reports "skipped".
10
+ * - Resolves the deploy destination for the configured CI provider; reports
11
+ * "error" when no destination/template exists for that provider.
12
+ * - If the destination file already exists, reports "done" with "already exists".
13
+ * - Otherwise renders the deploy workflow with options.dockerServiceName ?? "app"
14
+ * and writes it (backing up any existing file).
15
+ * - Errors are swallowed and reported as status:"error" — never thrown.
16
+ *
17
+ * Extracted VERBATIM from src/commands/init.ts (PR 4 of 6).
18
+ */
19
+ export const stepDockerDeploy = async (ctx) => {
20
+ const { projectDir, dryRun, onStep, options } = ctx;
21
+ const { ciProvider } = options;
22
+ const stepId = "docker-deploy";
23
+ report(onStep, stepId, "Scaffold Docker zero-downtime deploy", "running");
24
+ try {
25
+ if (options.dockerDeploy) {
26
+ const deployDest = getDeployDestination(ciProvider);
27
+ if (deployDest) {
28
+ const fullDest = path.join(projectDir, deployDest);
29
+ if (await fs.pathExists(fullDest)) {
30
+ report(onStep, stepId, "Scaffold Docker zero-downtime deploy", "done", "already exists");
31
+ }
32
+ else {
33
+ const serviceName = options.dockerServiceName || "app";
34
+ const content = await generateDeployWorkflow(ciProvider, serviceName);
35
+ if (content) {
36
+ if (!dryRun) {
37
+ await backupIfExists(fullDest);
38
+ await ensureDirExists(path.dirname(fullDest));
39
+ await fs.writeFile(fullDest, content, "utf-8");
40
+ }
41
+ report(onStep, stepId, "Scaffold Docker zero-downtime deploy", "done", dryRun ? `dry-run: would create ${deployDest}` : deployDest);
42
+ }
43
+ else {
44
+ report(onStep, stepId, "Scaffold Docker zero-downtime deploy", "error", `no deploy template for ${ciProvider}`);
45
+ }
46
+ }
47
+ }
48
+ else {
49
+ report(onStep, stepId, "Scaffold Docker zero-downtime deploy", "error", `no deploy destination for ${ciProvider}`);
50
+ }
51
+ }
52
+ else {
53
+ report(onStep, stepId, "Scaffold Docker zero-downtime deploy", "skipped", "not selected");
54
+ }
55
+ }
56
+ catch (e) {
57
+ report(onStep, stepId, "Scaffold Docker zero-downtime deploy", "error", String(e));
58
+ }
59
+ };
60
+ //# sourceMappingURL=docker-deploy.js.map
@@ -0,0 +1,15 @@
1
+ import type { StepFn } from "../types.js";
2
+ /**
3
+ * Step 9: Install GHAGGA review system.
4
+ *
5
+ * - When ghagga is false, reports "skipped".
6
+ * - Copies <MODULES_DIR>/ghagga → <project>/.javi-forge/modules/ghagga (no overwrite).
7
+ * - For GitHub provider, also copies the ghagga-review.yml caller workflow into
8
+ * <project>/.github/workflows/.
9
+ * - If module source dir is missing, reports "error" with "module not found".
10
+ * - Errors are swallowed and reported as status:"error" — never thrown.
11
+ *
12
+ * Extracted VERBATIM from src/commands/init.ts (PR 3 of 6).
13
+ */
14
+ export declare const stepGhagga: StepFn;
15
+ //# sourceMappingURL=ghagga.d.ts.map
@@ -0,0 +1,58 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import { FORGE_ROOT, MODULES_DIR } from "../../../constants.js";
4
+ import { ensureDirExists } from "../../../lib/common.js";
5
+ import { report } from "../report.js";
6
+ /**
7
+ * Step 9: Install GHAGGA review system.
8
+ *
9
+ * - When ghagga is false, reports "skipped".
10
+ * - Copies <MODULES_DIR>/ghagga → <project>/.javi-forge/modules/ghagga (no overwrite).
11
+ * - For GitHub provider, also copies the ghagga-review.yml caller workflow into
12
+ * <project>/.github/workflows/.
13
+ * - If module source dir is missing, reports "error" with "module not found".
14
+ * - Errors are swallowed and reported as status:"error" — never thrown.
15
+ *
16
+ * Extracted VERBATIM from src/commands/init.ts (PR 3 of 6).
17
+ */
18
+ export const stepGhagga = async (ctx) => {
19
+ const { projectDir, dryRun, onStep, options } = ctx;
20
+ const { ghagga, ciProvider } = options;
21
+ const stepId = "ghagga";
22
+ report(onStep, stepId, "Install GHAGGA review system", "running");
23
+ try {
24
+ if (ghagga) {
25
+ const ghaggaSrc = path.join(MODULES_DIR, "ghagga");
26
+ if (await fs.pathExists(ghaggaSrc)) {
27
+ if (!dryRun) {
28
+ const ghaggaDest = path.join(projectDir, ".javi-forge", "modules", "ghagga");
29
+ await ensureDirExists(ghaggaDest);
30
+ await fs.copy(ghaggaSrc, ghaggaDest, {
31
+ overwrite: false,
32
+ errorOnExist: false,
33
+ });
34
+ // Copy ghagga caller workflow to CI provider location
35
+ if (ciProvider === "github") {
36
+ const workflowSrc = path.join(FORGE_ROOT, "templates", "github", "ghagga-review.yml");
37
+ if (await fs.pathExists(workflowSrc)) {
38
+ const workflowDest = path.join(projectDir, ".github", "workflows", "ghagga-review.yml");
39
+ await ensureDirExists(path.dirname(workflowDest));
40
+ await fs.copy(workflowSrc, workflowDest, { overwrite: false });
41
+ }
42
+ }
43
+ }
44
+ report(onStep, stepId, "Install GHAGGA review system", "done");
45
+ }
46
+ else {
47
+ report(onStep, stepId, "Install GHAGGA review system", "error", "module not found");
48
+ }
49
+ }
50
+ else {
51
+ report(onStep, stepId, "Install GHAGGA review system", "skipped", "not selected");
52
+ }
53
+ }
54
+ catch (e) {
55
+ report(onStep, stepId, "Install GHAGGA review system", "error", String(e));
56
+ }
57
+ };
58
+ //# sourceMappingURL=ghagga.js.map
@@ -0,0 +1,25 @@
1
+ import type { StepFn } from "../types.js";
2
+ /**
3
+ * Step 1: Initialize git repository.
4
+ *
5
+ * - If .git is missing, runs `git init` in the project dir.
6
+ * - If .git already exists, reports "done" with detail "already exists".
7
+ * - In dry-run, skips the actual `git init` call but still reports.
8
+ * - Errors are swallowed and reported as status:"error" — never thrown.
9
+ *
10
+ * Extracted VERBATIM from src/commands/init.ts (PR 1 of 6).
11
+ */
12
+ export declare const stepGitInit: StepFn;
13
+ /**
14
+ * Step 2: Configure git hooks path.
15
+ *
16
+ * - Copies templates/ci-local/ → <project>/ci-local/ (no overwrite).
17
+ * - chmod 0755 on hook files.
18
+ * - Sets git config core.hooksPath to ci-local/hooks.
19
+ * - Skips entirely when CI_LOCAL_DIR template is missing.
20
+ * - Errors are swallowed and reported as status:"error" — never thrown.
21
+ *
22
+ * Extracted VERBATIM from src/commands/init.ts (PR 1 of 6).
23
+ */
24
+ export declare const stepGitHooks: StepFn;
25
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1,81 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import { CI_LOCAL_DIR } from "../../../constants.js";
4
+ import { execFileAsync } from "../../../lib/exec.js";
5
+ import { report } from "../report.js";
6
+ /**
7
+ * Step 1: Initialize git repository.
8
+ *
9
+ * - If .git is missing, runs `git init` in the project dir.
10
+ * - If .git already exists, reports "done" with detail "already exists".
11
+ * - In dry-run, skips the actual `git init` call but still reports.
12
+ * - Errors are swallowed and reported as status:"error" — never thrown.
13
+ *
14
+ * Extracted VERBATIM from src/commands/init.ts (PR 1 of 6).
15
+ */
16
+ export const stepGitInit = async (ctx) => {
17
+ const { projectDir, dryRun, onStep } = ctx;
18
+ const stepId = "git-init";
19
+ report(onStep, stepId, "Initialize git repository", "running");
20
+ try {
21
+ const gitDir = path.join(projectDir, ".git");
22
+ if (!(await fs.pathExists(gitDir))) {
23
+ if (!dryRun) {
24
+ await execFileAsync("git", ["init"], { cwd: projectDir });
25
+ }
26
+ report(onStep, stepId, "Initialize git repository", "done", "initialized");
27
+ }
28
+ else {
29
+ report(onStep, stepId, "Initialize git repository", "done", "already exists");
30
+ }
31
+ }
32
+ catch (e) {
33
+ report(onStep, stepId, "Initialize git repository", "error", String(e));
34
+ }
35
+ };
36
+ /**
37
+ * Step 2: Configure git hooks path.
38
+ *
39
+ * - Copies templates/ci-local/ → <project>/ci-local/ (no overwrite).
40
+ * - chmod 0755 on hook files.
41
+ * - Sets git config core.hooksPath to ci-local/hooks.
42
+ * - Skips entirely when CI_LOCAL_DIR template is missing.
43
+ * - Errors are swallowed and reported as status:"error" — never thrown.
44
+ *
45
+ * Extracted VERBATIM from src/commands/init.ts (PR 1 of 6).
46
+ */
47
+ export const stepGitHooks = async (ctx) => {
48
+ const { projectDir, dryRun, onStep } = ctx;
49
+ const stepId = "git-hooks";
50
+ report(onStep, stepId, "Configure git hooks path", "running");
51
+ try {
52
+ const ciLocalSrc = CI_LOCAL_DIR;
53
+ const ciLocalDest = path.join(projectDir, "ci-local");
54
+ if (await fs.pathExists(ciLocalSrc)) {
55
+ if (!dryRun) {
56
+ await fs.copy(ciLocalSrc, ciLocalDest, {
57
+ overwrite: false,
58
+ errorOnExist: false,
59
+ });
60
+ // Set core.hooksPath to ci-local/hooks
61
+ const hooksDir = path.join(ciLocalDest, "hooks");
62
+ if (await fs.pathExists(hooksDir)) {
63
+ // Ensure hooks are executable
64
+ const hookFiles = await fs.readdir(hooksDir);
65
+ for (const hook of hookFiles) {
66
+ await fs.chmod(path.join(hooksDir, hook), 0o755);
67
+ }
68
+ await execFileAsync("git", ["config", "core.hooksPath", "ci-local/hooks"], { cwd: projectDir });
69
+ }
70
+ }
71
+ report(onStep, stepId, "Configure git hooks path", "done", "ci-local/hooks");
72
+ }
73
+ else {
74
+ report(onStep, stepId, "Configure git hooks path", "skipped", "no ci-local dir");
75
+ }
76
+ }
77
+ catch (e) {
78
+ report(onStep, stepId, "Configure git hooks path", "error", String(e));
79
+ }
80
+ };
81
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1,13 @@
1
+ import type { StepFn } from "../types.js";
2
+ /**
3
+ * Step 4: Generate .gitignore.
4
+ *
5
+ * - Copies <FORGE_ROOT>/.gitignore.template → <project>/.gitignore if absent.
6
+ * - If destination already exists, reports "done" with detail "already exists".
7
+ * - If template is missing, reports "skipped" with detail "no template".
8
+ * - Errors are swallowed and reported as status:"error" — never thrown.
9
+ *
10
+ * Extracted VERBATIM from src/commands/init.ts (PR 2 of 6).
11
+ */
12
+ export declare const stepGitignore: StepFn;
13
+ //# sourceMappingURL=gitignore.d.ts.map
@@ -0,0 +1,39 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import { FORGE_ROOT } from "../../../constants.js";
4
+ import { report } from "../report.js";
5
+ /**
6
+ * Step 4: Generate .gitignore.
7
+ *
8
+ * - Copies <FORGE_ROOT>/.gitignore.template → <project>/.gitignore if absent.
9
+ * - If destination already exists, reports "done" with detail "already exists".
10
+ * - If template is missing, reports "skipped" with detail "no template".
11
+ * - Errors are swallowed and reported as status:"error" — never thrown.
12
+ *
13
+ * Extracted VERBATIM from src/commands/init.ts (PR 2 of 6).
14
+ */
15
+ export const stepGitignore = async (ctx) => {
16
+ const { projectDir, dryRun, onStep } = ctx;
17
+ const stepId = "gitignore";
18
+ report(onStep, stepId, "Generate .gitignore", "running");
19
+ try {
20
+ const templatePath = path.join(FORGE_ROOT, ".gitignore.template");
21
+ const dest = path.join(projectDir, ".gitignore");
22
+ if ((await fs.pathExists(templatePath)) && !(await fs.pathExists(dest))) {
23
+ if (!dryRun) {
24
+ await fs.copy(templatePath, dest);
25
+ }
26
+ report(onStep, stepId, "Generate .gitignore", "done", "from template");
27
+ }
28
+ else if (await fs.pathExists(dest)) {
29
+ report(onStep, stepId, "Generate .gitignore", "done", "already exists");
30
+ }
31
+ else {
32
+ report(onStep, stepId, "Generate .gitignore", "skipped", "no template");
33
+ }
34
+ }
35
+ catch (e) {
36
+ report(onStep, stepId, "Generate .gitignore", "error", String(e));
37
+ }
38
+ };
39
+ //# sourceMappingURL=gitignore.js.map
@@ -0,0 +1,14 @@
1
+ import type { StepFn } from "../types.js";
2
+ /**
3
+ * Step 16: Scaffold local AI dev stack.
4
+ *
5
+ * - When options.localAi is false, reports "skipped".
6
+ * - When LOCAL_AI_TEMPLATE_DIR is missing, reports "error".
7
+ * - Otherwise copies docker-compose.yml and .env.example -> .env.local-ai
8
+ * (both skip if the destination already exists).
9
+ * - Errors are swallowed and reported as status:"error" — never thrown.
10
+ *
11
+ * Extracted VERBATIM from src/commands/init.ts (PR 5 of 6).
12
+ */
13
+ export declare const stepLocalAi: StepFn;
14
+ //# sourceMappingURL=local-ai.d.ts.map
@@ -0,0 +1,53 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import { LOCAL_AI_TEMPLATE_DIR } from "../../../constants.js";
4
+ import { report } from "../report.js";
5
+ /**
6
+ * Step 16: Scaffold local AI dev stack.
7
+ *
8
+ * - When options.localAi is false, reports "skipped".
9
+ * - When LOCAL_AI_TEMPLATE_DIR is missing, reports "error".
10
+ * - Otherwise copies docker-compose.yml and .env.example -> .env.local-ai
11
+ * (both skip if the destination already exists).
12
+ * - Errors are swallowed and reported as status:"error" — never thrown.
13
+ *
14
+ * Extracted VERBATIM from src/commands/init.ts (PR 5 of 6).
15
+ */
16
+ export const stepLocalAi = async (ctx) => {
17
+ const { projectDir, dryRun, onStep, options } = ctx;
18
+ const stepId = "local-ai";
19
+ report(onStep, stepId, "Scaffold local AI dev stack", "running");
20
+ try {
21
+ if (options.localAi) {
22
+ if (await fs.pathExists(LOCAL_AI_TEMPLATE_DIR)) {
23
+ const composeDest = path.join(projectDir, "docker-compose.yml");
24
+ const envDest = path.join(projectDir, ".env.local-ai");
25
+ if (!dryRun) {
26
+ // Copy docker-compose.yml (skip if exists)
27
+ if (!(await fs.pathExists(composeDest))) {
28
+ await fs.copy(path.join(LOCAL_AI_TEMPLATE_DIR, "docker-compose.yml"), composeDest);
29
+ }
30
+ // Copy .env.example as .env.local-ai
31
+ const envSrc = path.join(LOCAL_AI_TEMPLATE_DIR, ".env.example");
32
+ if ((await fs.pathExists(envSrc)) &&
33
+ !(await fs.pathExists(envDest))) {
34
+ await fs.copy(envSrc, envDest);
35
+ }
36
+ }
37
+ report(onStep, stepId, "Scaffold local AI dev stack", "done", dryRun
38
+ ? "dry-run: would create docker-compose.yml + .env.local-ai"
39
+ : "docker-compose.yml + .env.local-ai");
40
+ }
41
+ else {
42
+ report(onStep, stepId, "Scaffold local AI dev stack", "error", "local-ai template not found");
43
+ }
44
+ }
45
+ else {
46
+ report(onStep, stepId, "Scaffold local AI dev stack", "skipped", "not selected");
47
+ }
48
+ }
49
+ catch (e) {
50
+ report(onStep, stepId, "Scaffold local AI dev stack", "error", String(e));
51
+ }
52
+ };
53
+ //# sourceMappingURL=local-ai.js.map
@@ -0,0 +1,13 @@
1
+ import type { StepFn } from "../types.js";
2
+ /**
3
+ * Step 18: Write the forge manifest under .javi-forge/manifest.json.
4
+ *
5
+ * - In dry-run mode, reports what would be written without touching disk.
6
+ * - Otherwise materialises .javi-forge/, computes the modules array from
7
+ * selected options, and writes manifest.json (overwriting any existing).
8
+ * - Errors are swallowed and reported as status:"error" — never thrown.
9
+ *
10
+ * Extracted VERBATIM from src/commands/init.ts (PR 6 of 6).
11
+ */
12
+ export declare const stepManifest: StepFn;
13
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1,58 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import { ensureDirExists } from "../../../lib/common.js";
4
+ import { report } from "../report.js";
5
+ /**
6
+ * Step 18: Write the forge manifest under .javi-forge/manifest.json.
7
+ *
8
+ * - In dry-run mode, reports what would be written without touching disk.
9
+ * - Otherwise materialises .javi-forge/, computes the modules array from
10
+ * selected options, and writes manifest.json (overwriting any existing).
11
+ * - Errors are swallowed and reported as status:"error" — never thrown.
12
+ *
13
+ * Extracted VERBATIM from src/commands/init.ts (PR 6 of 6).
14
+ */
15
+ export const stepManifest = async (ctx) => {
16
+ const { projectDir, dryRun, onStep, options } = ctx;
17
+ const { stack, ciProvider, memory, aiSync, sdd, ghagga, contextDir, claudeMd, securityHooks, projectName, dockerDeploy, codeGraph, localAi, } = options;
18
+ const stepId = "manifest";
19
+ report(onStep, stepId, "Write forge manifest", "running");
20
+ try {
21
+ if (!dryRun) {
22
+ const manifestDir = path.join(projectDir, ".javi-forge");
23
+ await ensureDirExists(manifestDir);
24
+ const manifest = {
25
+ version: "0.1.0",
26
+ projectName,
27
+ stack,
28
+ ciProvider,
29
+ memory,
30
+ createdAt: new Date().toISOString(),
31
+ updatedAt: new Date().toISOString(),
32
+ modules: [
33
+ ...(memory !== "none" ? [memory] : []),
34
+ ...(ghagga ? ["ghagga"] : []),
35
+ ...(sdd ? ["sdd"] : []),
36
+ ...(aiSync ? ["ai-config"] : []),
37
+ ...(contextDir ? ["context"] : []),
38
+ ...(claudeMd ? ["claude-md"] : []),
39
+ ...(dockerDeploy ? ["docker-deploy"] : []),
40
+ ...(securityHooks ? ["security-hooks"] : []),
41
+ ...(codeGraph ? ["code-graph"] : []),
42
+ ...(localAi ? ["local-ai"] : []),
43
+ ],
44
+ };
45
+ await fs.writeJson(path.join(manifestDir, "manifest.json"), manifest, {
46
+ spaces: 2,
47
+ });
48
+ report(onStep, stepId, "Write forge manifest", "done", ".javi-forge/manifest.json");
49
+ }
50
+ else {
51
+ report(onStep, stepId, "Write forge manifest", "done", "dry-run: would write .javi-forge/manifest.json");
52
+ }
53
+ }
54
+ catch (e) {
55
+ report(onStep, stepId, "Write forge manifest", "error", String(e));
56
+ }
57
+ };
58
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1,15 @@
1
+ import type { StepFn } from "../types.js";
2
+ /**
3
+ * Step 6: Install memory module.
4
+ *
5
+ * - If memory === "none", reports "skipped".
6
+ * - Otherwise copies <MODULES_DIR>/<memory>/ → <project>/.javi-forge/modules/<memory>/.
7
+ * - For engram specifically, copies .mcp-config-snippet.json to project root
8
+ * replacing __PROJECT_NAME__ placeholders.
9
+ * - If the module source dir is missing, reports "error" with "module not found".
10
+ * - Errors are swallowed and reported as status:"error" — never thrown.
11
+ *
12
+ * Extracted VERBATIM from src/commands/init.ts (PR 2 of 6).
13
+ */
14
+ export declare const stepMemory: StepFn;
15
+ //# sourceMappingURL=memory.d.ts.map