@fifine/aim-studio 0.0.1

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 (289) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/bin/aim.js +3 -0
  4. package/dist/cli/index.d.ts +3 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +89 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/commands/init.d.ts +13 -0
  9. package/dist/commands/init.d.ts.map +1 -0
  10. package/dist/commands/init.js +513 -0
  11. package/dist/commands/init.js.map +1 -0
  12. package/dist/commands/update.d.ts +27 -0
  13. package/dist/commands/update.d.ts.map +1 -0
  14. package/dist/commands/update.js +1275 -0
  15. package/dist/commands/update.js.map +1 -0
  16. package/dist/configurators/claude.d.ts +32 -0
  17. package/dist/configurators/claude.d.ts.map +1 -0
  18. package/dist/configurators/claude.js +98 -0
  19. package/dist/configurators/claude.js.map +1 -0
  20. package/dist/configurators/index.d.ts +51 -0
  21. package/dist/configurators/index.d.ts.map +1 -0
  22. package/dist/configurators/index.js +113 -0
  23. package/dist/configurators/index.js.map +1 -0
  24. package/dist/configurators/shared.d.ts +12 -0
  25. package/dist/configurators/shared.d.ts.map +1 -0
  26. package/dist/configurators/shared.js +21 -0
  27. package/dist/configurators/shared.js.map +1 -0
  28. package/dist/configurators/workflow.d.ts +28 -0
  29. package/dist/configurators/workflow.d.ts.map +1 -0
  30. package/dist/configurators/workflow.js +147 -0
  31. package/dist/configurators/workflow.js.map +1 -0
  32. package/dist/constants/paths.d.ts +68 -0
  33. package/dist/constants/paths.d.ts.map +1 -0
  34. package/dist/constants/paths.js +77 -0
  35. package/dist/constants/paths.js.map +1 -0
  36. package/dist/constants/version.d.ts +9 -0
  37. package/dist/constants/version.d.ts.map +1 -0
  38. package/dist/constants/version.js +15 -0
  39. package/dist/constants/version.js.map +1 -0
  40. package/dist/index.d.ts +9 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +9 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/migrations/index.d.ts +54 -0
  45. package/dist/migrations/index.d.ts.map +1 -0
  46. package/dist/migrations/index.js +160 -0
  47. package/dist/migrations/index.js.map +1 -0
  48. package/dist/migrations/manifests/0.0.1.json +9 -0
  49. package/dist/migrations/manifests/0.1.9.json +30 -0
  50. package/dist/migrations/manifests/0.2.0.json +49 -0
  51. package/dist/migrations/manifests/0.2.12.json +9 -0
  52. package/dist/migrations/manifests/0.2.13.json +9 -0
  53. package/dist/migrations/manifests/0.2.14.json +175 -0
  54. package/dist/migrations/manifests/0.2.15.json +33 -0
  55. package/dist/migrations/manifests/0.3.0-beta.0.json +278 -0
  56. package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
  57. package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
  58. package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
  59. package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
  60. package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
  61. package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
  62. package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
  63. package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
  64. package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
  65. package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
  66. package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
  67. package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
  68. package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
  69. package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
  70. package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
  71. package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
  72. package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
  73. package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
  74. package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
  75. package/dist/templates/CLAUDE.md +71 -0
  76. package/dist/templates/aim/gitignore.txt +29 -0
  77. package/dist/templates/aim/index.d.ts +49 -0
  78. package/dist/templates/aim/index.d.ts.map +1 -0
  79. package/dist/templates/aim/index.js +92 -0
  80. package/dist/templates/aim/index.js.map +1 -0
  81. package/dist/templates/aim/scripts/__init__.py +5 -0
  82. package/dist/templates/aim/scripts/add_session.py +392 -0
  83. package/dist/templates/aim/scripts/common/__init__.py +80 -0
  84. package/dist/templates/aim/scripts/common/cli_adapter.py +435 -0
  85. package/dist/templates/aim/scripts/common/developer.py +190 -0
  86. package/dist/templates/aim/scripts/common/git_context.py +383 -0
  87. package/dist/templates/aim/scripts/common/paths.py +347 -0
  88. package/dist/templates/aim/scripts/common/phase.py +253 -0
  89. package/dist/templates/aim/scripts/common/registry.py +366 -0
  90. package/dist/templates/aim/scripts/common/task_queue.py +255 -0
  91. package/dist/templates/aim/scripts/common/task_utils.py +178 -0
  92. package/dist/templates/aim/scripts/common/worktree.py +219 -0
  93. package/dist/templates/aim/scripts/create_bootstrap.py +290 -0
  94. package/dist/templates/aim/scripts/get_context.py +16 -0
  95. package/dist/templates/aim/scripts/get_developer.py +26 -0
  96. package/dist/templates/aim/scripts/init_developer.py +51 -0
  97. package/dist/templates/aim/scripts/multi_agent/__init__.py +5 -0
  98. package/dist/templates/aim/scripts/multi_agent/cleanup.py +403 -0
  99. package/dist/templates/aim/scripts/multi_agent/create_pr.py +329 -0
  100. package/dist/templates/aim/scripts/multi_agent/plan.py +233 -0
  101. package/dist/templates/aim/scripts/multi_agent/start.py +461 -0
  102. package/dist/templates/aim/scripts/multi_agent/status.py +817 -0
  103. package/dist/templates/aim/scripts/task.py +1068 -0
  104. package/dist/templates/aim/scripts-shell-archive/add-session.sh +384 -0
  105. package/dist/templates/aim/scripts-shell-archive/common/developer.sh +129 -0
  106. package/dist/templates/aim/scripts-shell-archive/common/git-context.sh +263 -0
  107. package/dist/templates/aim/scripts-shell-archive/common/paths.sh +208 -0
  108. package/dist/templates/aim/scripts-shell-archive/common/phase.sh +150 -0
  109. package/dist/templates/aim/scripts-shell-archive/common/registry.sh +247 -0
  110. package/dist/templates/aim/scripts-shell-archive/common/task-queue.sh +142 -0
  111. package/dist/templates/aim/scripts-shell-archive/common/task-utils.sh +151 -0
  112. package/dist/templates/aim/scripts-shell-archive/common/worktree.sh +128 -0
  113. package/dist/templates/aim/scripts-shell-archive/create-bootstrap.sh +299 -0
  114. package/dist/templates/aim/scripts-shell-archive/get-context.sh +7 -0
  115. package/dist/templates/aim/scripts-shell-archive/get-developer.sh +15 -0
  116. package/dist/templates/aim/scripts-shell-archive/init-developer.sh +34 -0
  117. package/dist/templates/aim/scripts-shell-archive/multi-agent/cleanup.sh +396 -0
  118. package/dist/templates/aim/scripts-shell-archive/multi-agent/create-pr.sh +241 -0
  119. package/dist/templates/aim/scripts-shell-archive/multi-agent/plan.sh +207 -0
  120. package/dist/templates/aim/scripts-shell-archive/multi-agent/start.sh +317 -0
  121. package/dist/templates/aim/scripts-shell-archive/multi-agent/status.sh +828 -0
  122. package/dist/templates/aim/scripts-shell-archive/task.sh +1204 -0
  123. package/dist/templates/aim/tasks/.gitkeep +0 -0
  124. package/dist/templates/aim/workflow.md +258 -0
  125. package/dist/templates/aim/worktree.yaml +47 -0
  126. package/dist/templates/claude/agents/check.md +122 -0
  127. package/dist/templates/claude/agents/debug.md +106 -0
  128. package/dist/templates/claude/agents/dispatch.md +230 -0
  129. package/dist/templates/claude/agents/implement.md +96 -0
  130. package/dist/templates/claude/agents/plan.md +396 -0
  131. package/dist/templates/claude/agents/research.md +120 -0
  132. package/dist/templates/claude/agents/story.md +53 -0
  133. package/dist/templates/claude/commands/aim/before-backend-dev.md +13 -0
  134. package/dist/templates/claude/commands/aim/before-frontend-dev.md +13 -0
  135. package/dist/templates/claude/commands/aim/break-loop.md +153 -0
  136. package/dist/templates/claude/commands/aim/check-backend.md +13 -0
  137. package/dist/templates/claude/commands/aim/check-cross-layer.md +153 -0
  138. package/dist/templates/claude/commands/aim/check-frontend.md +13 -0
  139. package/dist/templates/claude/commands/aim/check-story.md +59 -0
  140. package/dist/templates/claude/commands/aim/create-command.md +154 -0
  141. package/dist/templates/claude/commands/aim/export.md +187 -0
  142. package/dist/templates/claude/commands/aim/finish-work.md +104 -0
  143. package/dist/templates/claude/commands/aim/integrate-skill.md +219 -0
  144. package/dist/templates/claude/commands/aim/onboard.md +358 -0
  145. package/dist/templates/claude/commands/aim/parallel.md +217 -0
  146. package/dist/templates/claude/commands/aim/portrait.md +170 -0
  147. package/dist/templates/claude/commands/aim/record-session.md +92 -0
  148. package/dist/templates/claude/commands/aim/start.md +112 -0
  149. package/dist/templates/claude/commands/aim/story.md +140 -0
  150. package/dist/templates/claude/commands/aim/update-spec.md +285 -0
  151. package/dist/templates/claude/commands/aim/visualize.md +182 -0
  152. package/dist/templates/claude/commands/trellis/before-backend-dev.md +13 -0
  153. package/dist/templates/claude/commands/trellis/before-frontend-dev.md +13 -0
  154. package/dist/templates/claude/commands/trellis/break-loop.md +125 -0
  155. package/dist/templates/claude/commands/trellis/check-backend.md +13 -0
  156. package/dist/templates/claude/commands/trellis/check-cross-layer.md +153 -0
  157. package/dist/templates/claude/commands/trellis/check-frontend.md +13 -0
  158. package/dist/templates/claude/commands/trellis/create-command.md +154 -0
  159. package/dist/templates/claude/commands/trellis/finish-work.md +129 -0
  160. package/dist/templates/claude/commands/trellis/integrate-skill.md +219 -0
  161. package/dist/templates/claude/commands/trellis/onboard.md +358 -0
  162. package/dist/templates/claude/commands/trellis/parallel.md +193 -0
  163. package/dist/templates/claude/commands/trellis/record-session.md +62 -0
  164. package/dist/templates/claude/commands/trellis/start.md +280 -0
  165. package/dist/templates/claude/commands/trellis/update-spec.md +285 -0
  166. package/dist/templates/claude/hooks/inject-subagent-context.py +772 -0
  167. package/dist/templates/claude/hooks/ralph-loop.py +388 -0
  168. package/dist/templates/claude/hooks/session-start.py +142 -0
  169. package/dist/templates/claude/index.d.ts +54 -0
  170. package/dist/templates/claude/index.d.ts.map +1 -0
  171. package/dist/templates/claude/index.js +85 -0
  172. package/dist/templates/claude/index.js.map +1 -0
  173. package/dist/templates/claude/settings.json +41 -0
  174. package/dist/templates/extract.d.ts +68 -0
  175. package/dist/templates/extract.d.ts.map +1 -0
  176. package/dist/templates/extract.js +128 -0
  177. package/dist/templates/extract.js.map +1 -0
  178. package/dist/templates/markdown/agents.md +25 -0
  179. package/dist/templates/markdown/gitignore.txt +12 -0
  180. package/dist/templates/markdown/index.d.ts +32 -0
  181. package/dist/templates/markdown/index.d.ts.map +1 -0
  182. package/dist/templates/markdown/index.js +58 -0
  183. package/dist/templates/markdown/index.js.map +1 -0
  184. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  185. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  186. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  187. package/dist/templates/markdown/spec/backend/index.md +40 -0
  188. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  189. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  190. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  191. package/dist/templates/markdown/spec/backend/script-conventions.md +467 -0
  192. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  193. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  194. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  195. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  196. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  197. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  198. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  199. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md +118 -0
  200. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +92 -0
  201. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +94 -0
  202. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md +394 -0
  203. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +319 -0
  204. package/dist/templates/markdown/spec/guides/index.md.txt +89 -0
  205. package/dist/templates/markdown/spec/story/character.md.txt +95 -0
  206. package/dist/templates/markdown/spec/story/index.md.txt +31 -0
  207. package/dist/templates/markdown/spec/story/script.md.txt +313 -0
  208. package/dist/templates/markdown/spec/story/world.md.txt +92 -0
  209. package/dist/templates/markdown/workspace-index.md +123 -0
  210. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  211. package/dist/templates/trellis/gitignore.txt +29 -0
  212. package/dist/templates/trellis/index.d.ts +49 -0
  213. package/dist/templates/trellis/index.d.ts.map +1 -0
  214. package/dist/templates/trellis/index.js +92 -0
  215. package/dist/templates/trellis/index.js.map +1 -0
  216. package/dist/templates/trellis/scripts/__init__.py +5 -0
  217. package/dist/templates/trellis/scripts/add_session.py +392 -0
  218. package/dist/templates/trellis/scripts/common/__init__.py +80 -0
  219. package/dist/templates/trellis/scripts/common/cli_adapter.py +435 -0
  220. package/dist/templates/trellis/scripts/common/developer.py +190 -0
  221. package/dist/templates/trellis/scripts/common/git_context.py +383 -0
  222. package/dist/templates/trellis/scripts/common/paths.py +347 -0
  223. package/dist/templates/trellis/scripts/common/phase.py +253 -0
  224. package/dist/templates/trellis/scripts/common/registry.py +366 -0
  225. package/dist/templates/trellis/scripts/common/task_queue.py +255 -0
  226. package/dist/templates/trellis/scripts/common/task_utils.py +178 -0
  227. package/dist/templates/trellis/scripts/common/worktree.py +219 -0
  228. package/dist/templates/trellis/scripts/create_bootstrap.py +290 -0
  229. package/dist/templates/trellis/scripts/get_context.py +16 -0
  230. package/dist/templates/trellis/scripts/get_developer.py +26 -0
  231. package/dist/templates/trellis/scripts/init_developer.py +51 -0
  232. package/dist/templates/trellis/scripts/multi_agent/__init__.py +5 -0
  233. package/dist/templates/trellis/scripts/multi_agent/cleanup.py +403 -0
  234. package/dist/templates/trellis/scripts/multi_agent/create_pr.py +329 -0
  235. package/dist/templates/trellis/scripts/multi_agent/plan.py +233 -0
  236. package/dist/templates/trellis/scripts/multi_agent/start.py +461 -0
  237. package/dist/templates/trellis/scripts/multi_agent/status.py +817 -0
  238. package/dist/templates/trellis/scripts/task.py +1056 -0
  239. package/dist/templates/trellis/scripts-shell-archive/add-session.sh +384 -0
  240. package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +129 -0
  241. package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +263 -0
  242. package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +208 -0
  243. package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +150 -0
  244. package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +247 -0
  245. package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +142 -0
  246. package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +151 -0
  247. package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +128 -0
  248. package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +299 -0
  249. package/dist/templates/trellis/scripts-shell-archive/get-context.sh +7 -0
  250. package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +15 -0
  251. package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +34 -0
  252. package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +396 -0
  253. package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +241 -0
  254. package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +207 -0
  255. package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +317 -0
  256. package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +828 -0
  257. package/dist/templates/trellis/scripts-shell-archive/task.sh +1204 -0
  258. package/dist/templates/trellis/tasks/.gitkeep +0 -0
  259. package/dist/templates/trellis/workflow.md +416 -0
  260. package/dist/templates/trellis/worktree.yaml +47 -0
  261. package/dist/types/ai-tools.d.ts +48 -0
  262. package/dist/types/ai-tools.d.ts.map +1 -0
  263. package/dist/types/ai-tools.js +32 -0
  264. package/dist/types/ai-tools.js.map +1 -0
  265. package/dist/types/migration.d.ts +86 -0
  266. package/dist/types/migration.d.ts.map +1 -0
  267. package/dist/types/migration.js +8 -0
  268. package/dist/types/migration.js.map +1 -0
  269. package/dist/utils/compare-versions.d.ts +12 -0
  270. package/dist/utils/compare-versions.d.ts.map +1 -0
  271. package/dist/utils/compare-versions.js +76 -0
  272. package/dist/utils/compare-versions.js.map +1 -0
  273. package/dist/utils/file-writer.d.ts +23 -0
  274. package/dist/utils/file-writer.d.ts.map +1 -0
  275. package/dist/utils/file-writer.js +140 -0
  276. package/dist/utils/file-writer.js.map +1 -0
  277. package/dist/utils/project-detector.d.ts +16 -0
  278. package/dist/utils/project-detector.d.ts.map +1 -0
  279. package/dist/utils/project-detector.js +188 -0
  280. package/dist/utils/project-detector.js.map +1 -0
  281. package/dist/utils/template-fetcher.d.ts +51 -0
  282. package/dist/utils/template-fetcher.d.ts.map +1 -0
  283. package/dist/utils/template-fetcher.js +174 -0
  284. package/dist/utils/template-fetcher.js.map +1 -0
  285. package/dist/utils/template-hash.d.ts +78 -0
  286. package/dist/utils/template-hash.d.ts.map +1 -0
  287. package/dist/utils/template-hash.js +239 -0
  288. package/dist/utils/template-hash.js.map +1 -0
  289. package/package.json +87 -0
@@ -0,0 +1,513 @@
1
+ import { execSync } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import readline from "node:readline";
5
+ import chalk from "chalk";
6
+ import figlet from "figlet";
7
+ import inquirer from "inquirer";
8
+ import { createWorkflowStructure } from "../configurators/workflow.js";
9
+ import { getInitToolChoices, resolveCliFlag, configurePlatform, getPlatformsWithPythonHooks, } from "../configurators/index.js";
10
+ import { AI_TOOLS } from "../types/ai-tools.js";
11
+ import { DIR_NAMES, FILE_NAMES, PATHS } from "../constants/paths.js";
12
+ import { VERSION } from "../constants/version.js";
13
+ import { agentsMdContent } from "../templates/markdown/index.js";
14
+ import { setWriteMode, writeFile, } from "../utils/file-writer.js";
15
+ import { detectProjectType, } from "../utils/project-detector.js";
16
+ import { initializeHashes } from "../utils/template-hash.js";
17
+ import { fetchTemplateIndex, downloadTemplateById, } from "../utils/template-fetcher.js";
18
+ /**
19
+ * Detect available Python command (python3 or python)
20
+ */
21
+ function getPythonCommand() {
22
+ // Try python3 first (preferred on macOS/Linux)
23
+ try {
24
+ execSync("python3 --version", { stdio: "pipe" });
25
+ return "python3";
26
+ }
27
+ catch {
28
+ // Fall back to python (common on Windows)
29
+ try {
30
+ execSync("python --version", { stdio: "pipe" });
31
+ return "python";
32
+ }
33
+ catch {
34
+ // Default to python3, let it fail with a clear error
35
+ return "python3";
36
+ }
37
+ }
38
+ }
39
+ // =============================================================================
40
+ // Bootstrap Task Creation
41
+ // =============================================================================
42
+ const BOOTSTRAP_TASK_NAME = "00-bootstrap-guidelines";
43
+ function getBootstrapPrdContent(projectType) {
44
+ const header = `# Bootstrap: Fill Project Development Guidelines
45
+
46
+ ## Purpose
47
+
48
+ Welcome to AIM Studio! This is your first task.
49
+
50
+ AI agents use \`.aim-studio/spec/\` to understand YOUR project's coding conventions.
51
+ **Empty templates = AI writes generic code that doesn't match your project style.**
52
+
53
+ Filling these guidelines is a one-time setup that pays off for every future AI session.
54
+
55
+ ---
56
+
57
+ ## Your Task
58
+
59
+ Fill in the guideline files based on your **existing codebase**.
60
+ `;
61
+ const backendSection = `
62
+
63
+ ### Backend Guidelines
64
+
65
+ | File | What to Document |
66
+ |------|------------------|
67
+ | \`.aim-studio/spec/backend/directory-structure.md\` | Where different file types go (routes, services, utils) |
68
+ | \`.aim-studio/spec/backend/database-guidelines.md\` | ORM, migrations, query patterns, naming conventions |
69
+ | \`.aim-studio/spec/backend/error-handling.md\` | How errors are caught, logged, and returned |
70
+ | \`.aim-studio/spec/backend/logging-guidelines.md\` | Log levels, format, what to log |
71
+ | \`.aim-studio/spec/backend/quality-guidelines.md\` | Code review standards, testing requirements |
72
+ `;
73
+ const frontendSection = `
74
+
75
+ ### Frontend Guidelines
76
+
77
+ | File | What to Document |
78
+ |------|------------------|
79
+ | \`.aim-studio/spec/frontend/directory-structure.md\` | Component/page/hook organization |
80
+ | \`.aim-studio/spec/frontend/component-guidelines.md\` | Component patterns, props conventions |
81
+ | \`.aim-studio/spec/frontend/hook-guidelines.md\` | Custom hook naming, patterns |
82
+ | \`.aim-studio/spec/frontend/state-management.md\` | State library, patterns, what goes where |
83
+ | \`.aim-studio/spec/frontend/type-safety.md\` | TypeScript conventions, type organization |
84
+ | \`.aim-studio/spec/frontend/quality-guidelines.md\` | Linting, testing, accessibility |
85
+ `;
86
+ const footer = `
87
+
88
+ ### Thinking Guides (Optional)
89
+
90
+ The \`.aim-studio/spec/guides/\` directory contains thinking guides that are already
91
+ filled with general best practices. You can customize them for your project if needed.
92
+
93
+ ---
94
+
95
+ ## How to Fill Guidelines
96
+
97
+ ### Principle: Document Reality, Not Ideals
98
+
99
+ Write what your codebase **actually does**, not what you wish it did.
100
+ AI needs to match existing patterns, not introduce new ones.
101
+
102
+ ### Steps
103
+
104
+ 1. **Look at existing code** - Find 2-3 examples of each pattern
105
+ 2. **Document the pattern** - Describe what you see
106
+ 3. **Include file paths** - Reference real files as examples
107
+ 4. **List anti-patterns** - What does your team avoid?
108
+
109
+ ---
110
+
111
+ ## Tips for Using AI
112
+
113
+ Ask AI to help analyze your codebase:
114
+
115
+ - "Look at my codebase and document the patterns you see"
116
+ - "Analyze my code structure and summarize the conventions"
117
+ - "Find error handling patterns and document them"
118
+
119
+ The AI will read your code and help you document it.
120
+
121
+ ---
122
+
123
+ ## Completion Checklist
124
+
125
+ - [ ] Guidelines filled for your project type
126
+ - [ ] At least 2-3 real code examples in each guideline
127
+ - [ ] Anti-patterns documented
128
+
129
+ When done:
130
+
131
+ \`\`\`bash
132
+ python3 ./.aim-studio/scripts/task.py finish
133
+ python3 ./.aim-studio/scripts/task.py archive 00-bootstrap-guidelines
134
+ \`\`\`
135
+
136
+ ---
137
+
138
+ ## Why This Matters
139
+
140
+ After completing this task:
141
+
142
+ 1. AI will write code that matches your project style
143
+ 2. Relevant \`/aim:before-*-dev\` commands will inject real context
144
+ 3. \`/aim:check-*\` commands will validate against your actual standards
145
+ 4. Future developers (human or AI) will onboard faster
146
+ `;
147
+ let content = header;
148
+ if (projectType === "frontend") {
149
+ content += frontendSection;
150
+ }
151
+ else if (projectType === "backend") {
152
+ content += backendSection;
153
+ }
154
+ else {
155
+ // fullstack
156
+ content += backendSection;
157
+ content += frontendSection;
158
+ }
159
+ content += footer;
160
+ return content;
161
+ }
162
+ function getBootstrapTaskJson(developer, projectType) {
163
+ const today = new Date().toISOString().split("T")[0];
164
+ let subtasks;
165
+ let relatedFiles;
166
+ if (projectType === "frontend") {
167
+ subtasks = [
168
+ { name: "Fill frontend guidelines", status: "pending" },
169
+ { name: "Add code examples", status: "pending" },
170
+ ];
171
+ relatedFiles = [".aim-studio/spec/frontend/"];
172
+ }
173
+ else if (projectType === "backend") {
174
+ subtasks = [
175
+ { name: "Fill backend guidelines", status: "pending" },
176
+ { name: "Add code examples", status: "pending" },
177
+ ];
178
+ relatedFiles = [".aim-studio/spec/backend/"];
179
+ }
180
+ else {
181
+ // fullstack
182
+ subtasks = [
183
+ { name: "Fill backend guidelines", status: "pending" },
184
+ { name: "Fill frontend guidelines", status: "pending" },
185
+ { name: "Add code examples", status: "pending" },
186
+ ];
187
+ relatedFiles = [".aim-studio/spec/backend/", ".aim-studio/spec/frontend/"];
188
+ }
189
+ return {
190
+ id: BOOTSTRAP_TASK_NAME,
191
+ name: "Bootstrap Guidelines",
192
+ description: "Fill in project development guidelines for AI agents",
193
+ status: "in_progress",
194
+ dev_type: "docs",
195
+ priority: "P1",
196
+ creator: developer,
197
+ assignee: developer,
198
+ createdAt: today,
199
+ completedAt: null,
200
+ commit: null,
201
+ subtasks,
202
+ relatedFiles,
203
+ notes: `First-time setup task created by aim init (${projectType} project)`,
204
+ };
205
+ }
206
+ /**
207
+ * Create bootstrap task for first-time setup
208
+ */
209
+ function createBootstrapTask(cwd, developer, projectType) {
210
+ const taskDir = path.join(cwd, PATHS.TASKS, BOOTSTRAP_TASK_NAME);
211
+ const taskRelativePath = `${PATHS.TASKS}/${BOOTSTRAP_TASK_NAME}`;
212
+ // Check if already exists
213
+ if (fs.existsSync(taskDir)) {
214
+ return true; // Already exists, not an error
215
+ }
216
+ try {
217
+ // Create task directory
218
+ fs.mkdirSync(taskDir, { recursive: true });
219
+ // Write task.json
220
+ const taskJson = getBootstrapTaskJson(developer, projectType);
221
+ fs.writeFileSync(path.join(taskDir, FILE_NAMES.TASK_JSON), JSON.stringify(taskJson, null, 2), "utf-8");
222
+ // Write prd.md
223
+ const prdContent = getBootstrapPrdContent(projectType);
224
+ fs.writeFileSync(path.join(taskDir, FILE_NAMES.PRD), prdContent, "utf-8");
225
+ // Set as current task
226
+ const currentTaskFile = path.join(cwd, PATHS.CURRENT_TASK_FILE);
227
+ fs.writeFileSync(currentTaskFile, taskRelativePath, "utf-8");
228
+ return true;
229
+ }
230
+ catch {
231
+ return false;
232
+ }
233
+ }
234
+ const _cliFlagCheck = true;
235
+ export async function init(options) {
236
+ const cwd = process.cwd();
237
+ // Generate ASCII art banner dynamically using FIGlet "Rebel" font
238
+ const banner = figlet.textSync("AIM Studio", { font: "Rebel" });
239
+ console.log(chalk.cyan(`\n${banner.trimEnd()}`));
240
+ console.log(chalk.gray("\n Specialized CLI for AI comic and drama generation. Formerly Trellis.\n"));
241
+ // Set write mode based on options
242
+ let writeMode = "ask";
243
+ if (options.force) {
244
+ writeMode = "force";
245
+ console.log(chalk.gray("Mode: Force overwrite existing files\n"));
246
+ }
247
+ else if (options.skipExisting) {
248
+ writeMode = "skip";
249
+ console.log(chalk.gray("Mode: Skip existing files\n"));
250
+ }
251
+ setWriteMode(writeMode);
252
+ // Detect developer name from git config or options
253
+ let developerName = options.user;
254
+ if (!developerName) {
255
+ // Only detect from git if current directory is a git repo
256
+ const isGitRepo = fs.existsSync(path.join(cwd, ".git"));
257
+ if (isGitRepo) {
258
+ try {
259
+ developerName = execSync("git config user.name", {
260
+ cwd,
261
+ encoding: "utf-8",
262
+ }).trim();
263
+ }
264
+ catch {
265
+ // Git not available or no user.name configured
266
+ }
267
+ }
268
+ }
269
+ if (developerName) {
270
+ console.log(chalk.blue("👤 Developer:"), chalk.gray(developerName));
271
+ }
272
+ else if (!options.yes) {
273
+ // Ask for developer name if not detected and not in yes mode
274
+ console.log(chalk.gray("\nAIM Studio supports team collaboration - each developer has their own\n" +
275
+ `workspace directory (${PATHS.WORKSPACE}/{name}/) to track AI sessions.\n` +
276
+ "Tip: Usually this is your git username (git config user.name).\n"));
277
+ developerName = await askInput("Your name: ");
278
+ while (!developerName) {
279
+ console.log(chalk.yellow("Name is required"));
280
+ developerName = await askInput("Your name: ");
281
+ }
282
+ console.log(chalk.blue("👤 Developer:"), chalk.gray(developerName));
283
+ }
284
+ // Detect project type (silent - no output)
285
+ const detectedType = detectProjectType(cwd);
286
+ // Tool definitions derived from platform registry
287
+ const TOOLS = getInitToolChoices();
288
+ // Build tools from explicit flags
289
+ const explicitTools = TOOLS.filter((t) => options[t.key]).map((t) => t.key);
290
+ let tools;
291
+ if (explicitTools.length > 0) {
292
+ // Explicit flags take precedence (works with or without -y)
293
+ tools = explicitTools;
294
+ }
295
+ else if (options.yes) {
296
+ // No explicit tools + -y: default to Cursor and Claude
297
+ tools = TOOLS.filter((t) => t.defaultChecked).map((t) => t.key);
298
+ }
299
+ else {
300
+ // Interactive mode
301
+ const answers = await inquirer.prompt([
302
+ {
303
+ type: "checkbox",
304
+ name: "tools",
305
+ message: "Select AI tools to configure:",
306
+ choices: TOOLS.map((t) => ({
307
+ name: t.name,
308
+ value: t.key,
309
+ checked: t.defaultChecked,
310
+ })),
311
+ },
312
+ ]);
313
+ tools = answers.tools;
314
+ }
315
+ // Treat unknown project type as fullstack
316
+ const projectType = detectedType === "unknown" ? "fullstack" : detectedType;
317
+ if (tools.length === 0) {
318
+ console.log(chalk.yellow("No tools selected. At least one tool is required."));
319
+ return;
320
+ }
321
+ // ==========================================================================
322
+ // Template Selection
323
+ // ==========================================================================
324
+ let selectedTemplate = null;
325
+ let templateStrategy = "skip";
326
+ // Determine template strategy from flags
327
+ if (options.overwrite) {
328
+ templateStrategy = "overwrite";
329
+ }
330
+ else if (options.append) {
331
+ templateStrategy = "append";
332
+ }
333
+ if (options.template) {
334
+ // Template specified via --template flag
335
+ selectedTemplate = options.template;
336
+ }
337
+ else if (!options.yes) {
338
+ // Interactive mode: show template selection
339
+ const templates = await fetchTemplateIndex();
340
+ if (templates.length > 0) {
341
+ // Build template choices with "blank" as first (default)
342
+ const templateChoices = [
343
+ {
344
+ name: "blank (default - empty templates)",
345
+ value: "blank",
346
+ },
347
+ ...templates
348
+ .filter((t) => t.type === "spec") // MVP: only spec templates
349
+ .map((t) => ({
350
+ name: `${t.id} (${t.name})`,
351
+ value: t.id,
352
+ })),
353
+ ];
354
+ const templateAnswer = await inquirer.prompt([
355
+ {
356
+ type: "list",
357
+ name: "template",
358
+ message: "Select a spec template:",
359
+ choices: templateChoices,
360
+ default: "blank",
361
+ },
362
+ ]);
363
+ if (templateAnswer.template !== "blank") {
364
+ selectedTemplate = templateAnswer.template;
365
+ // Check if spec directory already exists and ask what to do
366
+ const specDir = path.join(cwd, PATHS.SPEC);
367
+ if (fs.existsSync(specDir) && !options.overwrite && !options.append) {
368
+ const actionAnswer = await inquirer.prompt([
369
+ {
370
+ type: "list",
371
+ name: "action",
372
+ message: `Directory ${PATHS.SPEC} already exists. What do you want to do?`,
373
+ choices: [
374
+ { name: "Skip (keep existing)", value: "skip" },
375
+ { name: "Overwrite (replace all)", value: "overwrite" },
376
+ { name: "Append (add missing files only)", value: "append" },
377
+ ],
378
+ default: "skip",
379
+ },
380
+ ]);
381
+ templateStrategy = actionAnswer.action;
382
+ }
383
+ }
384
+ }
385
+ }
386
+ // If -y flag: selectedTemplate stays null, use blank templates
387
+ // ==========================================================================
388
+ // Download Remote Template (if selected)
389
+ // ==========================================================================
390
+ let useRemoteTemplate = false;
391
+ if (selectedTemplate) {
392
+ console.log(chalk.blue(`📦 Downloading template "${selectedTemplate}"...`));
393
+ const result = await downloadTemplateById(cwd, selectedTemplate, templateStrategy);
394
+ if (result.success) {
395
+ if (result.skipped) {
396
+ console.log(chalk.gray(` ${result.message}`));
397
+ }
398
+ else {
399
+ console.log(chalk.green(` ${result.message}`));
400
+ useRemoteTemplate = true;
401
+ }
402
+ }
403
+ else {
404
+ console.log(chalk.yellow(` ${result.message}`));
405
+ console.log(chalk.gray(" Falling back to blank templates..."));
406
+ }
407
+ }
408
+ // ==========================================================================
409
+ // Create Workflow Structure
410
+ // ==========================================================================
411
+ // Create workflow structure with project type
412
+ // Multi-agent is enabled by default
413
+ console.log(chalk.blue("📁 Creating workflow structure..."));
414
+ await createWorkflowStructure(cwd, {
415
+ projectType,
416
+ multiAgent: true,
417
+ skipSpecTemplates: useRemoteTemplate,
418
+ });
419
+ // Write version file for update tracking
420
+ const versionPath = path.join(cwd, DIR_NAMES.WORKFLOW, ".version");
421
+ fs.writeFileSync(versionPath, VERSION);
422
+ // Configure selected tools by copying entire directories (dogfooding)
423
+ for (const tool of tools) {
424
+ const platformId = resolveCliFlag(tool);
425
+ if (platformId) {
426
+ console.log(chalk.blue(`📝 Configuring ${AI_TOOLS[platformId].name}...`));
427
+ await configurePlatform(platformId, cwd);
428
+ }
429
+ }
430
+ // Show Windows platform detection notice
431
+ if (process.platform === "win32") {
432
+ const pythonPlatforms = getPlatformsWithPythonHooks();
433
+ const hasSelectedPythonPlatform = pythonPlatforms.some((id) => tools.includes(AI_TOOLS[id].cliFlag));
434
+ if (hasSelectedPythonPlatform) {
435
+ console.log(chalk.yellow('📌 Windows detected: Using "python" for hooks'));
436
+ }
437
+ }
438
+ // Create root files (skip if exists)
439
+ await createRootFiles(cwd);
440
+ // Initialize template hashes for modification tracking
441
+ const hashedCount = initializeHashes(cwd);
442
+ if (hashedCount > 0) {
443
+ console.log(chalk.gray(`📋 Tracking ${hashedCount} template files for updates`));
444
+ }
445
+ // Initialize developer identity (silent - no output)
446
+ if (developerName) {
447
+ try {
448
+ const pythonCmd = getPythonCommand();
449
+ const scriptPath = path.join(cwd, PATHS.SCRIPTS, "init_developer.py");
450
+ execSync(`${pythonCmd} "${scriptPath}" "${developerName}"`, {
451
+ cwd,
452
+ stdio: "pipe", // Silent
453
+ });
454
+ // Create bootstrap task to guide user through filling guidelines
455
+ createBootstrapTask(cwd, developerName, projectType);
456
+ }
457
+ catch {
458
+ // Silent failure - user can run init_developer.py manually
459
+ }
460
+ }
461
+ // Print "What We Solve" section
462
+ printWhatWeSolve();
463
+ }
464
+ /**
465
+ * Simple readline-based input (no flickering like inquirer)
466
+ */
467
+ function askInput(prompt) {
468
+ const rl = readline.createInterface({
469
+ input: process.stdin,
470
+ output: process.stdout,
471
+ });
472
+ return new Promise((resolve) => {
473
+ rl.question(prompt, (answer) => {
474
+ rl.close();
475
+ resolve(answer.trim());
476
+ });
477
+ });
478
+ }
479
+ async function createRootFiles(cwd) {
480
+ const agentsPath = path.join(cwd, "AGENTS.md");
481
+ // Write AGENTS.md from template
482
+ const agentsWritten = await writeFile(agentsPath, agentsMdContent);
483
+ if (agentsWritten) {
484
+ console.log(chalk.blue("📄 Created AGENTS.md"));
485
+ }
486
+ }
487
+ /**
488
+ * Print "What We Solve" section showing AIM Studio value proposition
489
+ * Styled like a meme/rant to resonate with developer pain points
490
+ */
491
+ function printWhatWeSolve() {
492
+ console.log(chalk.gray("\nSound familiar? ") +
493
+ chalk.bold("You'll never say these again!!\n"));
494
+ // Pain point 1: Bug loop → Thinking Guides + Ralph Loop
495
+ console.log(chalk.gray("✗ ") + '"Fix A → break B → fix B → break A..."');
496
+ console.log(chalk.green(" ✓ ") +
497
+ chalk.white("Thinking Guides + Ralph Loop: Think first, verify after"));
498
+ // Pain point 2: Instructions ignored/forgotten → Sub-agents + per-agent spec injection
499
+ console.log(chalk.gray("✗ ") +
500
+ '"Wrote CLAUDE.md, AI ignored it. Reminded AI, it forgot 5 turns later."');
501
+ console.log(chalk.green(" ✓ ") +
502
+ chalk.white("Spec Injection: Rules enforced per task, not per chat"));
503
+ // Pain point 3: Missing connections → Cross-Layer Guide
504
+ console.log(chalk.gray("✗ ") + '"Code works but nothing connects..."');
505
+ console.log(chalk.green(" ✓ ") +
506
+ chalk.white("Cross-Layer Guide: Map data flow before coding"));
507
+ // Pain point 4: Code explosion → Plan Agent
508
+ console.log(chalk.gray("✗ ") + '"Asked for a button, got 9000 lines"');
509
+ console.log(chalk.green(" ✓ ") +
510
+ chalk.white("Plan Agent: Rejects and splits oversized tasks"));
511
+ console.log("");
512
+ }
513
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { MigrationItem } from "../types/migration.js";
2
+ export interface UpdateOptions {
3
+ dryRun?: boolean;
4
+ force?: boolean;
5
+ skipAll?: boolean;
6
+ createNew?: boolean;
7
+ allowDowngrade?: boolean;
8
+ migrate?: boolean;
9
+ }
10
+ /**
11
+ * Clean up empty directories after file migration
12
+ * Recursively removes empty parent directories up to .aim-studio root
13
+ */
14
+ /** @internal Exported for testing only */
15
+ export declare function cleanupEmptyDirs(cwd: string, dirPath: string): void;
16
+ /**
17
+ * Sort migrations for safe execution order
18
+ * - rename-dir with deeper paths first (to handle nested directories)
19
+ * - rename-dir before rename/delete
20
+ */
21
+ /** @internal Exported for testing only */
22
+ export declare function sortMigrationsForExecution(migrations: MigrationItem[]): MigrationItem[];
23
+ /**
24
+ * Main update command
25
+ */
26
+ export declare function update(options: UpdateOptions): Promise<void>;
27
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,uBAAuB,CAAC;AA8E/B,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA2tBD;;;GAGG;AACH,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAoCnE;AAED;;;;GAIG;AACH,0CAA0C;AAC1C,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,aAAa,EAAE,GAC1B,aAAa,EAAE,CAajB;AAsLD;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwlBlE"}