@bhimudev/gnanai 0.4.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 (274) hide show
  1. package/README.md +270 -0
  2. package/dist/bin/cli.d.ts +3 -0
  3. package/dist/bin/cli.d.ts.map +1 -0
  4. package/dist/bin/cli.js +188 -0
  5. package/dist/bin/cli.js.map +1 -0
  6. package/dist/commands/cleanup.d.ts +21 -0
  7. package/dist/commands/cleanup.d.ts.map +1 -0
  8. package/dist/commands/cleanup.js +380 -0
  9. package/dist/commands/cleanup.js.map +1 -0
  10. package/dist/commands/dispatch.d.ts +13 -0
  11. package/dist/commands/dispatch.d.ts.map +1 -0
  12. package/dist/commands/dispatch.js +85 -0
  13. package/dist/commands/dispatch.js.map +1 -0
  14. package/dist/commands/doctor.d.ts +2 -0
  15. package/dist/commands/doctor.d.ts.map +1 -0
  16. package/dist/commands/doctor.js +155 -0
  17. package/dist/commands/doctor.js.map +1 -0
  18. package/dist/commands/generate.d.ts +3 -0
  19. package/dist/commands/generate.d.ts.map +1 -0
  20. package/dist/commands/generate.js +167 -0
  21. package/dist/commands/generate.js.map +1 -0
  22. package/dist/commands/init.d.ts +10 -0
  23. package/dist/commands/init.d.ts.map +1 -0
  24. package/dist/commands/init.js +711 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/knowledge-sync.d.ts +69 -0
  27. package/dist/commands/knowledge-sync.d.ts.map +1 -0
  28. package/dist/commands/knowledge-sync.js +661 -0
  29. package/dist/commands/knowledge-sync.js.map +1 -0
  30. package/dist/commands/knowledge.d.ts +35 -0
  31. package/dist/commands/knowledge.d.ts.map +1 -0
  32. package/dist/commands/knowledge.js +254 -0
  33. package/dist/commands/knowledge.js.map +1 -0
  34. package/dist/commands/rollback.d.ts +13 -0
  35. package/dist/commands/rollback.d.ts.map +1 -0
  36. package/dist/commands/rollback.js +186 -0
  37. package/dist/commands/rollback.js.map +1 -0
  38. package/dist/commands/setup-config.d.ts +6 -0
  39. package/dist/commands/setup-config.d.ts.map +1 -0
  40. package/dist/commands/setup-config.js +663 -0
  41. package/dist/commands/setup-config.js.map +1 -0
  42. package/dist/commands/setup-project.d.ts +6 -0
  43. package/dist/commands/setup-project.d.ts.map +1 -0
  44. package/dist/commands/setup-project.js +361 -0
  45. package/dist/commands/setup-project.js.map +1 -0
  46. package/dist/commands/setup.d.ts +3 -0
  47. package/dist/commands/setup.d.ts.map +1 -0
  48. package/dist/commands/setup.js +293 -0
  49. package/dist/commands/setup.js.map +1 -0
  50. package/dist/commands/status.d.ts +51 -0
  51. package/dist/commands/status.d.ts.map +1 -0
  52. package/dist/commands/status.js +182 -0
  53. package/dist/commands/status.js.map +1 -0
  54. package/dist/commands/uninstall.d.ts +3 -0
  55. package/dist/commands/uninstall.d.ts.map +1 -0
  56. package/dist/commands/uninstall.js +173 -0
  57. package/dist/commands/uninstall.js.map +1 -0
  58. package/dist/commands/update.d.ts +10 -0
  59. package/dist/commands/update.d.ts.map +1 -0
  60. package/dist/commands/update.js +435 -0
  61. package/dist/commands/update.js.map +1 -0
  62. package/dist/commands/worktree.d.ts +30 -0
  63. package/dist/commands/worktree.d.ts.map +1 -0
  64. package/dist/commands/worktree.js +262 -0
  65. package/dist/commands/worktree.js.map +1 -0
  66. package/dist/generator/claude-cli.d.ts +24 -0
  67. package/dist/generator/claude-cli.d.ts.map +1 -0
  68. package/dist/generator/claude-cli.js +239 -0
  69. package/dist/generator/claude-cli.js.map +1 -0
  70. package/dist/generator/prompt-builder.d.ts +7 -0
  71. package/dist/generator/prompt-builder.d.ts.map +1 -0
  72. package/dist/generator/prompt-builder.js +144 -0
  73. package/dist/generator/prompt-builder.js.map +1 -0
  74. package/dist/index.d.ts +36 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +45 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/mcp/embeddings.d.ts +53 -0
  79. package/dist/mcp/embeddings.d.ts.map +1 -0
  80. package/dist/mcp/embeddings.js +68 -0
  81. package/dist/mcp/embeddings.js.map +1 -0
  82. package/dist/mcp/hybrid-search.d.ts +25 -0
  83. package/dist/mcp/hybrid-search.d.ts.map +1 -0
  84. package/dist/mcp/hybrid-search.js +72 -0
  85. package/dist/mcp/hybrid-search.js.map +1 -0
  86. package/dist/mcp/knowledge-server.d.ts +4 -0
  87. package/dist/mcp/knowledge-server.d.ts.map +1 -0
  88. package/dist/mcp/knowledge-server.js +294 -0
  89. package/dist/mcp/knowledge-server.js.map +1 -0
  90. package/dist/mcp/knowledge-utils.d.ts +65 -0
  91. package/dist/mcp/knowledge-utils.d.ts.map +1 -0
  92. package/dist/mcp/knowledge-utils.js +207 -0
  93. package/dist/mcp/knowledge-utils.js.map +1 -0
  94. package/dist/mcp/search-factory.d.ts +9 -0
  95. package/dist/mcp/search-factory.d.ts.map +1 -0
  96. package/dist/mcp/search-factory.js +23 -0
  97. package/dist/mcp/search-factory.js.map +1 -0
  98. package/dist/mcp/search-index.d.ts +45 -0
  99. package/dist/mcp/search-index.d.ts.map +1 -0
  100. package/dist/mcp/search-index.js +2 -0
  101. package/dist/mcp/search-index.js.map +1 -0
  102. package/dist/mcp/search-minisearch.d.ts +46 -0
  103. package/dist/mcp/search-minisearch.d.ts.map +1 -0
  104. package/dist/mcp/search-minisearch.js +99 -0
  105. package/dist/mcp/search-minisearch.js.map +1 -0
  106. package/dist/mcp/search-sqlite.d.ts +30 -0
  107. package/dist/mcp/search-sqlite.d.ts.map +1 -0
  108. package/dist/mcp/search-sqlite.js +188 -0
  109. package/dist/mcp/search-sqlite.js.map +1 -0
  110. package/dist/mcp/vector-store.d.ts +52 -0
  111. package/dist/mcp/vector-store.d.ts.map +1 -0
  112. package/dist/mcp/vector-store.js +183 -0
  113. package/dist/mcp/vector-store.js.map +1 -0
  114. package/dist/scaffold/copy-core-agents.d.ts +2 -0
  115. package/dist/scaffold/copy-core-agents.d.ts.map +1 -0
  116. package/dist/scaffold/copy-core-agents.js +90 -0
  117. package/dist/scaffold/copy-core-agents.js.map +1 -0
  118. package/dist/scaffold/create-claude-settings.d.ts +40 -0
  119. package/dist/scaffold/create-claude-settings.d.ts.map +1 -0
  120. package/dist/scaffold/create-claude-settings.js +422 -0
  121. package/dist/scaffold/create-claude-settings.js.map +1 -0
  122. package/dist/scaffold/create-config.d.ts +14 -0
  123. package/dist/scaffold/create-config.d.ts.map +1 -0
  124. package/dist/scaffold/create-config.js +199 -0
  125. package/dist/scaffold/create-config.js.map +1 -0
  126. package/dist/scaffold/create-project-description.d.ts +12 -0
  127. package/dist/scaffold/create-project-description.d.ts.map +1 -0
  128. package/dist/scaffold/create-project-description.js +104 -0
  129. package/dist/scaffold/create-project-description.js.map +1 -0
  130. package/dist/scaffold/create-structure.d.ts +2 -0
  131. package/dist/scaffold/create-structure.d.ts.map +1 -0
  132. package/dist/scaffold/create-structure.js +146 -0
  133. package/dist/scaffold/create-structure.js.map +1 -0
  134. package/dist/types/dependency-analysis.d.ts +11 -0
  135. package/dist/types/dependency-analysis.d.ts.map +1 -0
  136. package/dist/types/dependency-analysis.js +2 -0
  137. package/dist/types/dependency-analysis.js.map +1 -0
  138. package/dist/types/index.d.ts +526 -0
  139. package/dist/types/index.d.ts.map +1 -0
  140. package/dist/types/index.js +3 -0
  141. package/dist/types/index.js.map +1 -0
  142. package/dist/types/task.d.ts +25 -0
  143. package/dist/types/task.d.ts.map +1 -0
  144. package/dist/types/task.js +3 -0
  145. package/dist/types/task.js.map +1 -0
  146. package/dist/utils/analyze-files.d.ts +7 -0
  147. package/dist/utils/analyze-files.d.ts.map +1 -0
  148. package/dist/utils/analyze-files.js +27 -0
  149. package/dist/utils/analyze-files.js.map +1 -0
  150. package/dist/utils/backup.d.ts +102 -0
  151. package/dist/utils/backup.d.ts.map +1 -0
  152. package/dist/utils/backup.js +352 -0
  153. package/dist/utils/backup.js.map +1 -0
  154. package/dist/utils/ci-provider.d.ts +23 -0
  155. package/dist/utils/ci-provider.d.ts.map +1 -0
  156. package/dist/utils/ci-provider.js +525 -0
  157. package/dist/utils/ci-provider.js.map +1 -0
  158. package/dist/utils/ci-status.d.ts +57 -0
  159. package/dist/utils/ci-status.d.ts.map +1 -0
  160. package/dist/utils/ci-status.js +349 -0
  161. package/dist/utils/ci-status.js.map +1 -0
  162. package/dist/utils/dependency-analysis.d.ts +34 -0
  163. package/dist/utils/dependency-analysis.d.ts.map +1 -0
  164. package/dist/utils/dependency-analysis.js +298 -0
  165. package/dist/utils/dependency-analysis.js.map +1 -0
  166. package/dist/utils/detect-git.d.ts +57 -0
  167. package/dist/utils/detect-git.d.ts.map +1 -0
  168. package/dist/utils/detect-git.js +439 -0
  169. package/dist/utils/detect-git.js.map +1 -0
  170. package/dist/utils/detect-mcp.d.ts +32 -0
  171. package/dist/utils/detect-mcp.d.ts.map +1 -0
  172. package/dist/utils/detect-mcp.js +178 -0
  173. package/dist/utils/detect-mcp.js.map +1 -0
  174. package/dist/utils/detect-project.d.ts +3 -0
  175. package/dist/utils/detect-project.d.ts.map +1 -0
  176. package/dist/utils/detect-project.js +155 -0
  177. package/dist/utils/detect-project.js.map +1 -0
  178. package/dist/utils/file-comparison.d.ts +89 -0
  179. package/dist/utils/file-comparison.d.ts.map +1 -0
  180. package/dist/utils/file-comparison.js +301 -0
  181. package/dist/utils/file-comparison.js.map +1 -0
  182. package/dist/utils/file-merger.d.ts +74 -0
  183. package/dist/utils/file-merger.d.ts.map +1 -0
  184. package/dist/utils/file-merger.js +350 -0
  185. package/dist/utils/file-merger.js.map +1 -0
  186. package/dist/utils/logger.d.ts +26 -0
  187. package/dist/utils/logger.d.ts.map +1 -0
  188. package/dist/utils/logger.js +72 -0
  189. package/dist/utils/logger.js.map +1 -0
  190. package/dist/utils/managed-process.d.ts +109 -0
  191. package/dist/utils/managed-process.d.ts.map +1 -0
  192. package/dist/utils/managed-process.js +481 -0
  193. package/dist/utils/managed-process.js.map +1 -0
  194. package/dist/utils/merge-claude-settings.d.ts +65 -0
  195. package/dist/utils/merge-claude-settings.d.ts.map +1 -0
  196. package/dist/utils/merge-claude-settings.js +133 -0
  197. package/dist/utils/merge-claude-settings.js.map +1 -0
  198. package/dist/utils/migration.d.ts +74 -0
  199. package/dist/utils/migration.d.ts.map +1 -0
  200. package/dist/utils/migration.js +345 -0
  201. package/dist/utils/migration.js.map +1 -0
  202. package/dist/utils/process-health.d.ts +51 -0
  203. package/dist/utils/process-health.d.ts.map +1 -0
  204. package/dist/utils/process-health.js +123 -0
  205. package/dist/utils/process-health.js.map +1 -0
  206. package/dist/utils/process-registry.d.ts +20 -0
  207. package/dist/utils/process-registry.d.ts.map +1 -0
  208. package/dist/utils/process-registry.js +151 -0
  209. package/dist/utils/process-registry.js.map +1 -0
  210. package/dist/utils/process-tree.d.ts +51 -0
  211. package/dist/utils/process-tree.d.ts.map +1 -0
  212. package/dist/utils/process-tree.js +499 -0
  213. package/dist/utils/process-tree.js.map +1 -0
  214. package/dist/utils/repair-mcp-config.d.ts +15 -0
  215. package/dist/utils/repair-mcp-config.d.ts.map +1 -0
  216. package/dist/utils/repair-mcp-config.js +129 -0
  217. package/dist/utils/repair-mcp-config.js.map +1 -0
  218. package/dist/utils/task-lifecycle.d.ts +60 -0
  219. package/dist/utils/task-lifecycle.d.ts.map +1 -0
  220. package/dist/utils/task-lifecycle.js +310 -0
  221. package/dist/utils/task-lifecycle.js.map +1 -0
  222. package/dist/utils/update-agent-mcp.d.ts +7 -0
  223. package/dist/utils/update-agent-mcp.d.ts.map +1 -0
  224. package/dist/utils/update-agent-mcp.js +115 -0
  225. package/dist/utils/update-agent-mcp.js.map +1 -0
  226. package/dist/utils/update-agent-templates.d.ts +6 -0
  227. package/dist/utils/update-agent-templates.d.ts.map +1 -0
  228. package/dist/utils/update-agent-templates.js +56 -0
  229. package/dist/utils/update-agent-templates.js.map +1 -0
  230. package/dist/utils/update-config-ci.d.ts +7 -0
  231. package/dist/utils/update-config-ci.d.ts.map +1 -0
  232. package/dist/utils/update-config-ci.js +72 -0
  233. package/dist/utils/update-config-ci.js.map +1 -0
  234. package/dist/utils/update-config-git.d.ts +18 -0
  235. package/dist/utils/update-config-git.d.ts.map +1 -0
  236. package/dist/utils/update-config-git.js +146 -0
  237. package/dist/utils/update-config-git.js.map +1 -0
  238. package/dist/utils/update-config-mcp.d.ts +7 -0
  239. package/dist/utils/update-config-mcp.d.ts.map +1 -0
  240. package/dist/utils/update-config-mcp.js +98 -0
  241. package/dist/utils/update-config-mcp.js.map +1 -0
  242. package/dist/utils/validate-config.d.ts +3 -0
  243. package/dist/utils/validate-config.d.ts.map +1 -0
  244. package/dist/utils/validate-config.js +109 -0
  245. package/dist/utils/validate-config.js.map +1 -0
  246. package/dist/utils/version-tracker.d.ts +130 -0
  247. package/dist/utils/version-tracker.d.ts.map +1 -0
  248. package/dist/utils/version-tracker.js +298 -0
  249. package/dist/utils/version-tracker.js.map +1 -0
  250. package/dist/utils/worktree.d.ts +68 -0
  251. package/dist/utils/worktree.d.ts.map +1 -0
  252. package/dist/utils/worktree.js +446 -0
  253. package/dist/utils/worktree.js.map +1 -0
  254. package/package.json +77 -0
  255. package/templates/ARCHAI_README.md +329 -0
  256. package/templates/CLAUDE.md +67 -0
  257. package/templates/PROMPTS.md +506 -0
  258. package/templates/core-agents/boss-agent.md +671 -0
  259. package/templates/core-agents/cleanup-agent.md +145 -0
  260. package/templates/core-agents/code-reviewer.md +175 -0
  261. package/templates/core-agents/critical-reviewer.md +117 -0
  262. package/templates/core-agents/deep-analyst.md +216 -0
  263. package/templates/core-agents/finalization-agent.md +252 -0
  264. package/templates/core-agents/git-coordinator.md +240 -0
  265. package/templates/core-agents/implementation-agent.md +151 -0
  266. package/templates/core-agents/maestro-agent.md +413 -0
  267. package/templates/core-agents/maestro-headless-agent.md +422 -0
  268. package/templates/core-agents/plan-validator.md +198 -0
  269. package/templates/core-agents/quick-fix.md +56 -0
  270. package/templates/core-agents/routing-templates.md +338 -0
  271. package/templates/core-agents/task-orchestrator.md +143 -0
  272. package/templates/core-agents/task-prep.md +202 -0
  273. package/templates/core-agents/tdd-designer.md +143 -0
  274. package/templates/specialist-meta.md +275 -0
@@ -0,0 +1,422 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ // Irreversible/dangerous actions - ALWAYS denied even in permissive mode
4
+ const ALWAYS_DENY = [
5
+ // Destructive file operations
6
+ 'rm -rf *',
7
+ 'rm -r *',
8
+ 'rmdir *',
9
+ 'del /s *',
10
+ 'rd /s *',
11
+ // Destructive git
12
+ 'git push --force*',
13
+ 'git push -f*',
14
+ 'git reset --hard*',
15
+ 'git clean -fd*',
16
+ 'git clean -f*',
17
+ 'git checkout -- .',
18
+ // System damage
19
+ 'sudo *',
20
+ 'chmod 777 *',
21
+ 'chmod -R 777 *',
22
+ 'chown *',
23
+ '> /dev/*',
24
+ 'mkfs*',
25
+ 'dd if=*',
26
+ 'format *',
27
+ // Credential exposure
28
+ 'cat ~/.ssh/*',
29
+ 'cat *id_rsa*',
30
+ 'cat *credentials*',
31
+ 'cat *.pem',
32
+ 'cat .env',
33
+ 'type .env',
34
+ 'echo $*SECRET*',
35
+ 'echo $*PASSWORD*',
36
+ 'echo $*TOKEN*',
37
+ 'echo $*API_KEY*',
38
+ 'printenv *SECRET*',
39
+ 'printenv *PASSWORD*',
40
+ // Remote code execution
41
+ 'curl * | bash',
42
+ 'curl * | sh',
43
+ 'wget * -O - | bash',
44
+ 'wget * | sh',
45
+ 'eval *',
46
+ // Command substitution attacks
47
+ // Note: *$(cmd) patterns are omitted because the $( causes mismatched
48
+ // parentheses inside the Bash(pattern) wrapper in settings.local.json.
49
+ // The backtick variants and direct command denials still provide coverage.
50
+ '*`rm *',
51
+ '*`sudo *',
52
+ // Pipe to dangerous commands
53
+ '*| rm *',
54
+ '*| sudo *',
55
+ '*| sh',
56
+ '*| bash',
57
+ '*| sh -c *',
58
+ '*| bash -c *',
59
+ // Process/system destruction
60
+ 'kill -9 *',
61
+ 'killall *',
62
+ 'pkill -9 *',
63
+ 'taskkill /f *',
64
+ 'shutdown*',
65
+ 'reboot*',
66
+ 'halt*',
67
+ 'poweroff*',
68
+ // Database destruction
69
+ '*DROP DATABASE*',
70
+ '*DROP TABLE*',
71
+ '*TRUNCATE TABLE*',
72
+ '*DELETE FROM * WHERE 1*',
73
+ '*DELETE FROM * WHERE true*',
74
+ // Container/infra destruction
75
+ 'docker system prune -a*',
76
+ 'docker rm -f *',
77
+ 'docker rmi -f*',
78
+ 'kubectl delete namespace*',
79
+ 'terraform destroy*',
80
+ ];
81
+ // Commands allowed in strict mode (safe operations)
82
+ const STRICT_ALLOW = [
83
+ // Package managers - read/install only
84
+ '{pm} install*',
85
+ '{pm} ci',
86
+ '{pm} run *',
87
+ '{pm} test*',
88
+ '{pm} exec *',
89
+ '{pm} list*',
90
+ '{pm} outdated*',
91
+ '{pm} audit*',
92
+ // Build & test tools
93
+ 'tsc *',
94
+ 'tsc',
95
+ 'eslint *',
96
+ 'prettier --check *',
97
+ 'prettier --write *',
98
+ 'jest *',
99
+ 'jest',
100
+ 'vitest *',
101
+ 'vitest',
102
+ 'pytest *',
103
+ 'pytest',
104
+ 'cargo test*',
105
+ 'cargo build*',
106
+ 'cargo check*',
107
+ 'cargo clippy*',
108
+ 'go test*',
109
+ 'go build*',
110
+ 'go vet*',
111
+ // Read-only operations
112
+ 'cat *',
113
+ 'head *',
114
+ 'tail *',
115
+ 'less *',
116
+ 'more *',
117
+ 'grep *',
118
+ 'rg *',
119
+ 'find *',
120
+ 'fd *',
121
+ 'ls *',
122
+ 'ls',
123
+ 'dir *',
124
+ 'dir',
125
+ 'pwd',
126
+ 'echo *',
127
+ 'wc *',
128
+ 'tree *',
129
+ 'tree',
130
+ 'which *',
131
+ 'where *',
132
+ 'type *',
133
+ // Git - safe operations
134
+ 'git status*',
135
+ 'git log*',
136
+ 'git diff*',
137
+ 'git show*',
138
+ 'git branch*',
139
+ 'git add *',
140
+ 'git commit *',
141
+ 'git stash*',
142
+ 'git fetch*',
143
+ 'git pull*',
144
+ 'git checkout -b *',
145
+ 'git switch *',
146
+ 'git merge *',
147
+ 'git rebase *',
148
+ 'git worktree *',
149
+ // Version checks
150
+ 'node --version',
151
+ 'node -v',
152
+ 'npm --version',
153
+ 'npm -v',
154
+ 'python --version',
155
+ 'python -V',
156
+ 'python3 --version',
157
+ 'go version',
158
+ 'cargo --version',
159
+ 'rustc --version',
160
+ ];
161
+ // Additional commands denied in strict mode
162
+ const STRICT_DENY = [
163
+ // No push in strict
164
+ 'git push*',
165
+ // No publishing
166
+ '{pm} publish*',
167
+ 'cargo publish*',
168
+ // No network calls
169
+ 'curl *',
170
+ 'wget *',
171
+ 'http *',
172
+ 'ssh *',
173
+ 'scp *',
174
+ 'rsync *',
175
+ // No arbitrary scripts
176
+ 'node -e *',
177
+ 'python -c *',
178
+ 'python3 -c *',
179
+ ];
180
+ /**
181
+ * Get the list of commands for a preset
182
+ */
183
+ export function getPresetCommands(preset, packageManager) {
184
+ const replacePm = (cmd) => cmd.replace('{pm}', packageManager);
185
+ switch (preset) {
186
+ case 'permissive':
187
+ return {
188
+ allow: ['*'], // Allow everything...
189
+ deny: ALWAYS_DENY.map(replacePm), // ...except dangerous stuff
190
+ };
191
+ case 'strict':
192
+ return {
193
+ allow: STRICT_ALLOW.map(replacePm),
194
+ deny: [...ALWAYS_DENY, ...STRICT_DENY].map(replacePm),
195
+ };
196
+ case 'custom':
197
+ case 'skip':
198
+ default:
199
+ return { allow: [], deny: [] };
200
+ }
201
+ }
202
+ /**
203
+ * Get human-readable description of a preset
204
+ */
205
+ export function getPresetDescription(preset) {
206
+ switch (preset) {
207
+ case 'permissive':
208
+ return 'Allow everything except irreversible/dangerous actions';
209
+ case 'strict':
210
+ return 'Only safe operations - no network, no push, no publish';
211
+ case 'custom':
212
+ return 'Define your own allowed commands';
213
+ case 'skip':
214
+ return 'Configure manually later';
215
+ default:
216
+ return '';
217
+ }
218
+ }
219
+ // Edit/Write rules for agent working directories - always added to allow list
220
+ const AGENT_WORKING_DIRS_ALLOW = [
221
+ 'Edit(.claude/state/**)',
222
+ 'Write(.claude/state/**)',
223
+ 'Edit(.claude/plans/**)',
224
+ 'Write(.claude/plans/**)',
225
+ 'Edit(.claude/scripts/**)',
226
+ 'Write(.claude/scripts/**)',
227
+ 'Edit(.tasks/**)',
228
+ 'Write(.tasks/**)',
229
+ 'Edit(.knowledge/**)',
230
+ 'Write(.knowledge/**)',
231
+ ];
232
+ // Edit/Write rules for protected paths - always added to deny list
233
+ const AGENT_PROTECTED_PATHS_DENY = [
234
+ 'Edit(.claude/agents/**)',
235
+ 'Write(.claude/agents/**)',
236
+ 'Edit(.claude/settings*)',
237
+ 'Write(.claude/settings*)',
238
+ ];
239
+ /**
240
+ * Format allow commands for Claude Code settings.local.json
241
+ * Uses Bash or Bash(pattern) format per Claude Code docs
242
+ */
243
+ function formatAllowRules(commands) {
244
+ return commands.map(cmd => {
245
+ if (cmd === '*') {
246
+ return 'Bash';
247
+ }
248
+ return `Bash(${cmd})`;
249
+ });
250
+ }
251
+ /**
252
+ * Format deny commands for Claude Code settings.local.json
253
+ * For each denied pattern, also blocks it when chained via &&, ||, or ;
254
+ * e.g. "rm -rf *" also blocks "echo hi && rm -rf /"
255
+ */
256
+ function formatDenyRules(commands) {
257
+ const rules = [];
258
+ const chainPrefixes = ['*&& ', '*|| ', '*; '];
259
+ for (const cmd of commands) {
260
+ // Direct match (command run alone)
261
+ rules.push(`Bash(${cmd})`);
262
+ // Skip chain variants for patterns that already start with *
263
+ // (they already match anywhere in the command string)
264
+ if (cmd.startsWith('*'))
265
+ continue;
266
+ // Chained variants: catch dangerous command after &&, ||, or ;
267
+ for (const prefix of chainPrefixes) {
268
+ rules.push(`Bash(${prefix}${cmd})`);
269
+ }
270
+ }
271
+ return rules;
272
+ }
273
+ /**
274
+ * Generate .claude/settings.local.json content
275
+ */
276
+ export function generateSettingsJson(config) {
277
+ const { allow, deny } = config.preset === 'custom'
278
+ ? {
279
+ allow: config.customAllowCommands || [],
280
+ deny: [...ALWAYS_DENY, ...(config.customDenyCommands || [])]
281
+ }
282
+ : getPresetCommands(config.preset, config.packageManager);
283
+ const settings = {
284
+ permissions: {
285
+ allow: [...formatAllowRules(allow), ...AGENT_WORKING_DIRS_ALLOW],
286
+ deny: [...formatDenyRules(deny), ...AGENT_PROTECTED_PATHS_DENY],
287
+ },
288
+ attribution: {
289
+ commit: "Assisted with [archai](https://www.npmjs.com/package/@zik000/archai)\n\nCo-Authored-By: Archai ",
290
+ pr: "Assisted with [archai](https://www.npmjs.com/package/@zik000/archai)",
291
+ },
292
+ };
293
+ return JSON.stringify(settings, null, 2);
294
+ }
295
+ /**
296
+ * Generate permissions section for archai.config.md
297
+ */
298
+ export function generatePermissionsMarkdown(config) {
299
+ const { allow, deny } = config.preset === 'custom'
300
+ ? {
301
+ allow: config.customAllowCommands || [],
302
+ deny: config.customDenyCommands || []
303
+ }
304
+ : getPresetCommands(config.preset, config.packageManager);
305
+ const presetLabel = config.preset.charAt(0).toUpperCase() + config.preset.slice(1);
306
+ let content = `## Permissions
307
+
308
+ **Mode:** ${presetLabel}
309
+ **Description:** ${getPresetDescription(config.preset)}
310
+
311
+ `;
312
+ if (config.preset === 'permissive') {
313
+ content += `### Allowed
314
+ - Everything except dangerous operations
315
+
316
+ ### Denied (Irreversible Actions)
317
+ `;
318
+ // Show first 10 denied patterns
319
+ deny.slice(0, 10).forEach(cmd => {
320
+ content += `- \`${cmd}\`\n`;
321
+ });
322
+ if (deny.length > 10) {
323
+ content += `- ... and ${deny.length - 10} more patterns\n`;
324
+ }
325
+ }
326
+ else if (config.preset === 'strict') {
327
+ content += `### Allowed Commands
328
+ `;
329
+ allow.slice(0, 15).forEach(cmd => {
330
+ content += `- \`${cmd}\`\n`;
331
+ });
332
+ if (allow.length > 15) {
333
+ content += `- ... and ${allow.length - 15} more\n`;
334
+ }
335
+ content += `
336
+ ### Denied
337
+ - Network operations (curl, wget, ssh)
338
+ - git push (manual review required)
339
+ - Publishing (npm publish, cargo publish)
340
+ - All irreversible actions
341
+ `;
342
+ }
343
+ else if (config.preset === 'custom') {
344
+ content += `### Allowed Commands
345
+ `;
346
+ allow.forEach(cmd => {
347
+ content += `- \`${cmd}\`\n`;
348
+ });
349
+ if (allow.length === 0) {
350
+ content += `- [No commands allowed]\n`;
351
+ }
352
+ }
353
+ else {
354
+ content += `[Not configured - edit .claude/settings.local.json manually]
355
+ `;
356
+ }
357
+ content += `
358
+ > Permissions are enforced in \`.claude/settings.local.json\`
359
+ `;
360
+ return content;
361
+ }
362
+ /**
363
+ * Create or update .claude/settings.local.json
364
+ */
365
+ export async function createClaudeSettings(config) {
366
+ if (config.preset === 'skip') {
367
+ return; // Don't create file
368
+ }
369
+ const settingsDir = '.claude';
370
+ const settingsPath = path.join(settingsDir, 'settings.local.json');
371
+ await fs.ensureDir(settingsDir);
372
+ const content = generateSettingsJson(config);
373
+ await fs.writeFile(settingsPath, content);
374
+ }
375
+ /**
376
+ * Validate a command against allow/deny lists
377
+ * Handles && chained commands
378
+ */
379
+ export function validateCommand(fullCommand, allow, deny) {
380
+ // Split by && and || (command chains)
381
+ const segments = fullCommand.split(/\s*(?:&&|\|\|)\s*/);
382
+ for (const segment of segments) {
383
+ const trimmed = segment.trim();
384
+ if (!trimmed)
385
+ continue;
386
+ // Check deny list first (deny takes precedence)
387
+ for (const pattern of deny) {
388
+ if (matchesPattern(trimmed, pattern)) {
389
+ return {
390
+ allowed: false,
391
+ reason: `Blocked by deny pattern: "${pattern}"`,
392
+ blockedSegment: trimmed,
393
+ };
394
+ }
395
+ }
396
+ // If not allow-all, check against allow list
397
+ if (!allow.includes('*')) {
398
+ const isAllowed = allow.some(p => matchesPattern(trimmed, p));
399
+ if (!isAllowed) {
400
+ return {
401
+ allowed: false,
402
+ reason: 'Not in allow list',
403
+ blockedSegment: trimmed,
404
+ };
405
+ }
406
+ }
407
+ }
408
+ return { allowed: true };
409
+ }
410
+ /**
411
+ * Simple wildcard pattern matching
412
+ */
413
+ function matchesPattern(command, pattern) {
414
+ // Convert pattern to regex
415
+ // * matches anything, escape other special chars
416
+ const escaped = pattern
417
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&') // Escape special regex chars
418
+ .replace(/\*/g, '.*'); // Convert * to .*
419
+ const regex = new RegExp(`^${escaped}$`, 'i');
420
+ return regex.test(command);
421
+ }
422
+ //# sourceMappingURL=create-claude-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-claude-settings.js","sourceRoot":"","sources":["../../src/scaffold/create-claude-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAWxB,yEAAyE;AACzE,MAAM,WAAW,GAAG;IAClB,8BAA8B;IAC9B,UAAU;IACV,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IAET,kBAAkB;IAClB,mBAAmB;IACnB,cAAc;IACd,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,mBAAmB;IAEnB,gBAAgB;IAChB,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,SAAS;IACT,UAAU;IACV,OAAO;IACP,SAAS;IACT,UAAU;IAEV,sBAAsB;IACtB,cAAc;IACd,cAAc;IACd,mBAAmB;IACnB,WAAW;IACX,UAAU;IACV,WAAW;IACX,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,iBAAiB;IACjB,mBAAmB;IACnB,qBAAqB;IAErB,wBAAwB;IACxB,eAAe;IACf,aAAa;IACb,oBAAoB;IACpB,aAAa;IACb,QAAQ;IAER,+BAA+B;IAC/B,sEAAsE;IACtE,uEAAuE;IACvE,2EAA2E;IAC3E,QAAQ;IACR,UAAU;IAEV,6BAA6B;IAC7B,SAAS;IACT,WAAW;IACX,OAAO;IACP,SAAS;IACT,YAAY;IACZ,cAAc;IAEd,6BAA6B;IAC7B,WAAW;IACX,WAAW;IACX,YAAY;IACZ,eAAe;IACf,WAAW;IACX,SAAS;IACT,OAAO;IACP,WAAW;IAEX,uBAAuB;IACvB,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,yBAAyB;IACzB,4BAA4B;IAE5B,8BAA8B;IAC9B,yBAAyB;IACzB,gBAAgB;IAChB,gBAAgB;IAChB,2BAA2B;IAC3B,oBAAoB;CACrB,CAAC;AAEF,oDAAoD;AACpD,MAAM,YAAY,GAAG;IACnB,uCAAuC;IACvC,eAAe;IACf,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,aAAa;IAEb,qBAAqB;IACrB,OAAO;IACP,KAAK;IACL,UAAU;IACV,oBAAoB;IACpB,oBAAoB;IACpB,QAAQ;IACR,MAAM;IACN,UAAU;IACV,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,aAAa;IACb,cAAc;IACd,cAAc;IACd,eAAe;IACf,UAAU;IACV,WAAW;IACX,SAAS;IAET,uBAAuB;IACvB,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,IAAI;IACJ,OAAO;IACP,KAAK;IACL,KAAK;IACL,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;IAER,wBAAwB;IACxB,aAAa;IACb,UAAU;IACV,WAAW;IACX,WAAW;IACX,aAAa;IACb,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,mBAAmB;IACnB,cAAc;IACd,aAAa;IACb,cAAc;IACd,gBAAgB;IAEhB,iBAAiB;IACjB,gBAAgB;IAChB,SAAS;IACT,eAAe;IACf,QAAQ;IACR,kBAAkB;IAClB,WAAW;IACX,mBAAmB;IACnB,YAAY;IACZ,iBAAiB;IACjB,iBAAiB;CAClB,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,GAAG;IAClB,oBAAoB;IACpB,WAAW;IAEX,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAEhB,mBAAmB;IACnB,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IAET,uBAAuB;IACvB,WAAW;IACX,aAAa;IACb,cAAc;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAwB,EAAE,cAAsB;IAChF,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEvE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY;YACf,OAAO;gBACL,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,sBAAsB;gBACpC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,4BAA4B;aAC/D,CAAC;QAEJ,KAAK,QAAQ;YACX,OAAO;gBACL,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;gBAClC,IAAI,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;aACtD,CAAC;QAEJ,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAwB;IAC3D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY;YACf,OAAO,wDAAwD,CAAC;QAClE,KAAK,QAAQ;YACX,OAAO,wDAAwD,CAAC;QAClE,KAAK,QAAQ;YACX,OAAO,kCAAkC,CAAC;QAC5C,KAAK,MAAM;YACT,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,wBAAwB,GAAG;IAC/B,wBAAwB;IACxB,yBAAyB;IACzB,wBAAwB;IACxB,yBAAyB;IACzB,0BAA0B;IAC1B,2BAA2B;IAC3B,iBAAiB;IACjB,kBAAkB;IAClB,qBAAqB;IACrB,sBAAsB;CACvB,CAAC;AAEF,mEAAmE;AACnE,MAAM,0BAA0B,GAAG;IACjC,yBAAyB;IACzB,0BAA0B;IAC1B,yBAAyB;IACzB,0BAA0B;CAC3B,CAAC;AAEF;;;GAGG;AACH,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACxB,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,QAAQ,GAAG,GAAG,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,QAAkB;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAE9C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,mCAAmC;QACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;QAE3B,6DAA6D;QAC7D,sDAAsD;QACtD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAElC,+DAA+D;QAC/D,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAwB;IAC3D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ;QAChD,CAAC,CAAC;YACE,KAAK,EAAE,MAAM,CAAC,mBAAmB,IAAI,EAAE;YACvC,IAAI,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;SAC7D;QACH,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAG;QACf,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,wBAAwB,CAAC;YAChE,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,0BAA0B,CAAC;SAChE;QACD,WAAW,EAAE;YACX,MAAM,EAAE,iGAAiG;YACzG,EAAE,EAAE,sEAAsE;SAC3E;KACF,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAwB;IAClE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ;QAChD,CAAC,CAAC;YACE,KAAK,EAAE,MAAM,CAAC,mBAAmB,IAAI,EAAE;YACvC,IAAI,EAAE,MAAM,CAAC,kBAAkB,IAAI,EAAE;SACtC;QACH,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAE5D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnF,IAAI,OAAO,GAAG;;YAEJ,WAAW;mBACJ,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC;;CAErD,CAAC;IAEA,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACnC,OAAO,IAAI;;;;CAId,CAAC;QACE,gCAAgC;QAChC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC9B,OAAO,IAAI,OAAO,GAAG,MAAM,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACrB,OAAO,IAAI,aAAa,IAAI,CAAC,MAAM,GAAG,EAAE,kBAAkB,CAAC;QAC7D,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI;CACd,CAAC;QACE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC/B,OAAO,IAAI,OAAO,GAAG,MAAM,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACtB,OAAO,IAAI,aAAa,KAAK,CAAC,MAAM,GAAG,EAAE,SAAS,CAAC;QACrD,CAAC;QAED,OAAO,IAAI;;;;;;CAMd,CAAC;IACA,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI;CACd,CAAC;QACE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAClB,OAAO,IAAI,OAAO,GAAG,MAAM,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,2BAA2B,CAAC;QACzC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,IAAI;CACd,CAAC;IACA,CAAC;IAED,OAAO,IAAI;;CAEZ,CAAC;IAEA,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAwB;IACjE,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,oBAAoB;IAC9B,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC;IAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAEnE,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,KAAe,EACf,IAAc;IAEd,sCAAsC;IACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAExD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,gDAAgD;QAChD,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,IAAI,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,6BAA6B,OAAO,GAAG;oBAC/C,cAAc,EAAE,OAAO;iBACxB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,mBAAmB;oBAC3B,cAAc,EAAE,OAAO;iBACxB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,OAAe;IACtD,2BAA2B;IAC3B,iDAAiD;IACjD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,6BAA6B;SAClE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB;IAE3C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,14 @@
1
+ interface ConfigInput {
2
+ projectName: string;
3
+ projectType: string;
4
+ isMonorepo: boolean;
5
+ languages?: string;
6
+ frameworks?: string;
7
+ testFramework?: string;
8
+ packageManager?: string;
9
+ platform?: string;
10
+ shell?: string;
11
+ }
12
+ export declare function createConfigTemplate(answers: ConfigInput): Promise<void>;
13
+ export {};
14
+ //# sourceMappingURL=create-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-config.d.ts","sourceRoot":"","sources":["../../src/scaffold/create-config.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6I9E"}
@@ -0,0 +1,199 @@
1
+ import fs from 'fs-extra';
2
+ export async function createConfigTemplate(answers) {
3
+ const pm = answers.packageManager || '';
4
+ const pmCommands = getPackageManagerCommands(pm || 'other');
5
+ // Build environment lines
6
+ const platform = answers.platform || 'unknown';
7
+ const shell = answers.shell || 'unknown';
8
+ // Build tech stack lines — use detected values, mark remaining required fields
9
+ const languages = answers.languages || '[REQUIRED: TypeScript, Python, Go, etc.]';
10
+ const frameworks = answers.frameworks || '[optional: React, Express, Django, etc.]';
11
+ const testFramework = answers.testFramework || '[REQUIRED: vitest, jest, pytest, etc.]';
12
+ const packageManager = pm || '[optional: npm, pnpm, yarn, pip, cargo, go]';
13
+ // Build command table — auto-filled if package manager detected
14
+ const testCmd = pmCommands.test || '[REQUIRED]';
15
+ const installCmd = pmCommands.install || '[optional]';
16
+ const buildCmd = pmCommands.build || '[optional]';
17
+ const lintCmd = pmCommands.lint || '[optional]';
18
+ const devCmd = pmCommands.dev || '[optional]';
19
+ // Specialist section — only show example if not auto-filled
20
+ const specialistSection = `## Specialists to Generate
21
+
22
+ <!-- Optional: list specialist agents for \`archai generate\` to create. -->
23
+ <!-- Examples: frontend, backend, database, api, auth -->
24
+ `;
25
+ const config = `# archai Project Configuration
26
+
27
+ > Fill in this file, then run: \`archai generate\`
28
+ > Fields marked **[REQUIRED]** must be filled for agents to work correctly.
29
+ > Fields marked **[optional]** can be left as-is or removed.
30
+
31
+ ---
32
+
33
+ ## Project Info
34
+
35
+ **Name:** ${answers.projectName}
36
+ **Type:** ${answers.projectType || '[optional: web, mobile, cli, game, ml, devops]'}
37
+ **Monorepo:** ${answers.isMonorepo ? 'Yes' : 'No'}
38
+
39
+ ---
40
+
41
+ ## Environment
42
+
43
+ **Platform:** ${platform}
44
+ **Shell:** ${shell}
45
+
46
+ ---
47
+
48
+ ## Tech Stack
49
+
50
+ **Languages:** ${languages}
51
+ **Frameworks:** ${frameworks}
52
+ **Testing:** ${testFramework}
53
+
54
+ ---
55
+
56
+ ## Commands
57
+
58
+ **Package Manager:** ${packageManager}
59
+
60
+ | Command | Script |
61
+ |---------|--------|
62
+ | Install | ${installCmd} |
63
+ | Build | ${buildCmd} |
64
+ | Test | ${testCmd} |
65
+ | Lint | ${lintCmd} |
66
+ | Dev | ${devCmd} |
67
+
68
+ ---
69
+
70
+ ## Project Structure
71
+
72
+ **Source Directory:** src/
73
+ **Tests Directory:** tests/
74
+
75
+ ### Key Files
76
+ <!-- [optional] List important files agents should know about -->
77
+ | File | Purpose |
78
+ |------|---------|
79
+ | | |
80
+
81
+ ---
82
+
83
+ ${specialistSection}
84
+ ---
85
+
86
+ ## Permissions
87
+
88
+ <!-- Commands agents are allowed to run -->
89
+ - ${pm ? `${pm} *` : '[optional: package manager commands]'}
90
+ - npx *
91
+
92
+ ---
93
+
94
+ ## Git Configuration
95
+
96
+ <!-- Auto-configured by \`archai setup --git\`. Run it to detect your Git settings. -->
97
+ [Run \`archai setup --git\` to auto-configure]
98
+
99
+ ### Worktree Support
100
+
101
+ <!-- Worktree isolation for parallel agent tasks. Managed by \`archai worktree\` commands. -->
102
+ **Enabled:** No
103
+ **Path:** .claude/worktrees
104
+ **Max Concurrent:** 3
105
+ **Merge Strategy:** merge
106
+
107
+ ---
108
+
109
+ ## Git Conventions
110
+
111
+ <!-- Auto-configured by \`archai setup --git\`. Detects branch naming, merge strategy, and PR workflow. -->
112
+ [Run \`archai setup --git\` to auto-configure]
113
+
114
+ ---
115
+
116
+ ## CI/CD
117
+
118
+ <!-- Auto-configured by \`archai setup --ci\`. -->
119
+ [Run \`archai setup --ci\` to auto-configure]
120
+
121
+ ---
122
+
123
+ ## MCP Servers & Skills
124
+
125
+ <!-- Auto-configured by \`archai setup --mcp\`. Run it to detect your MCP servers. -->
126
+ [Run \`archai setup --mcp\` to auto-configure]
127
+
128
+
129
+ ---
130
+
131
+ ## Notes
132
+
133
+ <!-- [optional] Any other context for agents -->
134
+
135
+ `;
136
+ await fs.writeFile('archai.config.md', config);
137
+ }
138
+ function getPackageManagerCommands(pm) {
139
+ const commands = {
140
+ npm: {
141
+ install: 'npm install',
142
+ build: 'npm run build',
143
+ test: 'npm test',
144
+ lint: 'npm run lint',
145
+ dev: 'npm run dev',
146
+ },
147
+ pnpm: {
148
+ install: 'pnpm install',
149
+ build: 'pnpm build',
150
+ test: 'pnpm test',
151
+ lint: 'pnpm lint',
152
+ dev: 'pnpm dev',
153
+ },
154
+ yarn: {
155
+ install: 'yarn',
156
+ build: 'yarn build',
157
+ test: 'yarn test',
158
+ lint: 'yarn lint',
159
+ dev: 'yarn dev',
160
+ },
161
+ bun: {
162
+ install: 'bun install',
163
+ build: 'bun run build',
164
+ test: 'bun test',
165
+ lint: 'bun run lint',
166
+ dev: 'bun run dev',
167
+ },
168
+ pip: {
169
+ install: 'pip install -r requirements.txt',
170
+ build: 'python -m build',
171
+ test: 'pytest',
172
+ lint: 'ruff check .',
173
+ dev: 'python main.py',
174
+ },
175
+ cargo: {
176
+ install: 'cargo build',
177
+ build: 'cargo build --release',
178
+ test: 'cargo test',
179
+ lint: 'cargo clippy',
180
+ dev: 'cargo run',
181
+ },
182
+ go: {
183
+ install: 'go mod download',
184
+ build: 'go build',
185
+ test: 'go test ./...',
186
+ lint: 'golangci-lint run',
187
+ dev: 'go run .',
188
+ },
189
+ other: {
190
+ install: '',
191
+ build: '',
192
+ test: '',
193
+ lint: '',
194
+ dev: '',
195
+ },
196
+ };
197
+ return commands[pm] || commands.other;
198
+ }
199
+ //# sourceMappingURL=create-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-config.js","sourceRoot":"","sources":["../../src/scaffold/create-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ interface WizardAnswers {
2
+ projectName: string;
3
+ projectType: string;
4
+ isMonorepo: boolean;
5
+ languages?: string;
6
+ frameworks?: string;
7
+ testFramework?: string;
8
+ packageManager?: string;
9
+ }
10
+ export declare function createProjectDescription(answers: WizardAnswers): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=create-project-description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project-description.d.ts","sourceRoot":"","sources":["../../src/scaffold/create-project-description.ts"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGpF"}