@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,207 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # Multi-Agent Pipeline: Plan Agent Launcher
4
+ # =============================================================================
5
+ # Usage: ./plan.sh --name <task-name> --type <dev-type> --requirement "<requirement>"
6
+ #
7
+ # This script:
8
+ # 1. Creates task directory
9
+ # 2. Starts Plan Agent in background
10
+ # 3. Plan Agent produces fully configured task directory
11
+ #
12
+ # After completion, use start.sh to launch the Dispatch Agent.
13
+ #
14
+ # Prerequisites:
15
+ # - .claude/agents/plan.md must exist
16
+ # - Developer must be initialized
17
+ # =============================================================================
18
+
19
+ set -e
20
+
21
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
22
+ source "$SCRIPT_DIR/../common/paths.sh"
23
+ source "$SCRIPT_DIR/../common/developer.sh"
24
+
25
+ # Colors
26
+ RED='\033[0;31m'
27
+ GREEN='\033[0;32m'
28
+ YELLOW='\033[1;33m'
29
+ BLUE='\033[0;34m'
30
+ NC='\033[0m'
31
+
32
+ log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
33
+ log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
34
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
35
+ log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
36
+
37
+ # =============================================================================
38
+ # Constants
39
+ # =============================================================================
40
+ PROJECT_ROOT=$(get_repo_root)
41
+ PLAN_MD_PATH=".claude/agents/plan.md"
42
+
43
+ # =============================================================================
44
+ # Parse Arguments
45
+ # =============================================================================
46
+ TASK_NAME=""
47
+ DEV_TYPE=""
48
+ REQUIREMENT=""
49
+
50
+ show_usage() {
51
+ cat << EOF
52
+ Usage: $0 --name <task-name> --type <dev-type> --requirement "<requirement>"
53
+
54
+ Arguments:
55
+ --name, -n Task name (e.g., user-auth, add-rate-limiting)
56
+ --type, -t Development type: backend | frontend | fullstack
57
+ --requirement, -r Requirement description (quote if contains spaces)
58
+
59
+ Examples:
60
+ $0 --name user-auth --type backend --requirement "Add JWT-based user authentication"
61
+ $0 -n rate-limit -t backend -r "Add rate limiting to API endpoints"
62
+
63
+ The Plan Agent runs in background. Monitor with:
64
+ tail -f <task-dir>/.plan-log
65
+ EOF
66
+ }
67
+
68
+ while [[ $# -gt 0 ]]; do
69
+ case $1 in
70
+ --name|-n)
71
+ TASK_NAME="$2"
72
+ shift 2
73
+ ;;
74
+ --type|-t)
75
+ DEV_TYPE="$2"
76
+ shift 2
77
+ ;;
78
+ --requirement|-r)
79
+ REQUIREMENT="$2"
80
+ shift 2
81
+ ;;
82
+ --help|-h)
83
+ show_usage
84
+ exit 0
85
+ ;;
86
+ *)
87
+ log_error "Unknown argument: $1"
88
+ show_usage
89
+ exit 1
90
+ ;;
91
+ esac
92
+ done
93
+
94
+ # =============================================================================
95
+ # Validation
96
+ # =============================================================================
97
+ if [ -z "$TASK_NAME" ]; then
98
+ log_error "Task name is required (--name)"
99
+ show_usage
100
+ exit 1
101
+ fi
102
+
103
+ if [ -z "$DEV_TYPE" ]; then
104
+ log_error "Development type is required (--type)"
105
+ show_usage
106
+ exit 1
107
+ fi
108
+
109
+ if [[ ! "$DEV_TYPE" =~ ^(backend|frontend|fullstack)$ ]]; then
110
+ log_error "Invalid dev type: $DEV_TYPE (must be: backend, frontend, fullstack)"
111
+ exit 1
112
+ fi
113
+
114
+ if [ -z "$REQUIREMENT" ]; then
115
+ log_error "Requirement is required (--requirement)"
116
+ show_usage
117
+ exit 1
118
+ fi
119
+
120
+ PLAN_MD="${PROJECT_ROOT}/${PLAN_MD_PATH}"
121
+ if [ ! -f "$PLAN_MD" ]; then
122
+ log_error "plan.md not found at ${PLAN_MD}"
123
+ exit 1
124
+ fi
125
+
126
+ ensure_developer "$PROJECT_ROOT"
127
+
128
+ # =============================================================================
129
+ # Step 1: Create Task Directory
130
+ # =============================================================================
131
+ echo ""
132
+ echo -e "${BLUE}=== Multi-Agent Pipeline: Plan ===${NC}"
133
+ log_info "Task: ${TASK_NAME}"
134
+ log_info "Type: ${DEV_TYPE}"
135
+ log_info "Requirement: ${REQUIREMENT}"
136
+ echo ""
137
+
138
+ log_info "Step 1: Creating task directory..."
139
+
140
+ # Create task (use requirement as title, task name as slug)
141
+ TASK_DIR=$("$SCRIPT_DIR/../task.sh" create "$REQUIREMENT" --slug "$TASK_NAME")
142
+ TASK_DIR_ABS="${PROJECT_ROOT}/${TASK_DIR}"
143
+
144
+ log_success "Task directory: ${TASK_DIR}"
145
+
146
+ # =============================================================================
147
+ # Step 2: Prepare and Start Plan Agent
148
+ # =============================================================================
149
+ log_info "Step 2: Starting Plan Agent in background..."
150
+
151
+ LOG_FILE="${TASK_DIR_ABS}/.plan-log"
152
+ touch "$LOG_FILE"
153
+
154
+ # Create a temporary runner script (will be deleted after agent starts)
155
+ RUNNER_SCRIPT=$(mktemp)
156
+ cat > "$RUNNER_SCRIPT" << RUNNER_EOF
157
+ #!/bin/bash
158
+ cd "${PROJECT_ROOT}"
159
+
160
+ export PLAN_TASK_NAME="${TASK_NAME}"
161
+ export PLAN_DEV_TYPE="${DEV_TYPE}"
162
+ export PLAN_TASK_DIR="${TASK_DIR}"
163
+ export PLAN_REQUIREMENT="${REQUIREMENT}"
164
+
165
+ export https_proxy="\${AGENT_HTTPS_PROXY:-}"
166
+ export http_proxy="\${AGENT_HTTP_PROXY:-}"
167
+ export all_proxy="\${AGENT_ALL_PROXY:-}"
168
+ export CLAUDE_NON_INTERACTIVE=1
169
+
170
+ # Use --agent flag to load plan agent directly
171
+ claude -p --agent plan --dangerously-skip-permissions --output-format stream-json --verbose "Start planning for task: ${TASK_NAME}"
172
+
173
+ # Self-delete the runner script
174
+ rm -f "\$0"
175
+ RUNNER_EOF
176
+ chmod +x "$RUNNER_SCRIPT"
177
+
178
+ # Start agent in background
179
+ AGENT_HTTPS_PROXY="${https_proxy:-}" \
180
+ AGENT_HTTP_PROXY="${http_proxy:-}" \
181
+ AGENT_ALL_PROXY="${all_proxy:-}" \
182
+ nohup "$RUNNER_SCRIPT" > "$LOG_FILE" 2>&1 &
183
+ AGENT_PID=$!
184
+
185
+ log_success "Plan Agent started (PID: ${AGENT_PID})"
186
+
187
+ # =============================================================================
188
+ # Summary
189
+ # =============================================================================
190
+ echo ""
191
+ echo -e "${GREEN}=== Plan Agent Running ===${NC}"
192
+ echo ""
193
+ echo " Task: $TASK_NAME"
194
+ echo " Type: $DEV_TYPE"
195
+ echo " Dir: $TASK_DIR"
196
+ echo " Log: $LOG_FILE"
197
+ echo " PID: $AGENT_PID"
198
+ echo ""
199
+ echo -e "${YELLOW}To monitor:${NC}"
200
+ echo " tail -f $LOG_FILE"
201
+ echo ""
202
+ echo -e "${YELLOW}To check status:${NC}"
203
+ echo " ps -p $AGENT_PID"
204
+ echo " ls -la $TASK_DIR"
205
+ echo ""
206
+ echo -e "${YELLOW}After completion, run:${NC}"
207
+ echo " ./.aim-studio/scripts/multi-agent/start.sh $TASK_DIR"
@@ -0,0 +1,317 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # Multi-Agent Pipeline: Start Worktree Agent
4
+ # =============================================================================
5
+ # Usage: ./start.sh <task-dir>
6
+ # Example: ./start.sh .aim-studio/tasks/01-21-my-task
7
+ #
8
+ # This script:
9
+ # 1. Creates worktree (if not exists) with dependency install
10
+ # 2. Copies environment files (from worktree.yaml config)
11
+ # 3. Sets .current-task in worktree
12
+ # 4. Starts claude agent in background
13
+ # 5. Registers agent to registry.json
14
+ #
15
+ # Prerequisites:
16
+ # - task.json must exist with 'branch' field
17
+ # - .claude/agents/dispatch.md must exist
18
+ #
19
+ # Configuration: .aim-studio/worktree.yaml
20
+ # =============================================================================
21
+
22
+ set -e
23
+
24
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
25
+ source "$SCRIPT_DIR/../common/paths.sh"
26
+ source "$SCRIPT_DIR/../common/worktree.sh"
27
+ source "$SCRIPT_DIR/../common/developer.sh"
28
+ source "$SCRIPT_DIR/../common/registry.sh"
29
+
30
+ # Colors
31
+ RED='\033[0;31m'
32
+ GREEN='\033[0;32m'
33
+ YELLOW='\033[1;33m'
34
+ BLUE='\033[0;34m'
35
+ NC='\033[0m'
36
+
37
+ log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
38
+ log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
39
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
40
+ log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
41
+
42
+ # =============================================================================
43
+ # Constants
44
+ # =============================================================================
45
+ PROJECT_ROOT=$(get_repo_root)
46
+ DISPATCH_MD_PATH=".claude/agents/dispatch.md"
47
+
48
+ # =============================================================================
49
+ # Parse Arguments
50
+ # =============================================================================
51
+ TASK_DIR=$1
52
+ if [ -z "$TASK_DIR" ]; then
53
+ log_error "Task directory required"
54
+ echo "Usage: $0 <task-dir>"
55
+ echo "Example: $0 .aim-studio/tasks/01-21-my-task"
56
+ exit 1
57
+ fi
58
+
59
+ # Normalize paths
60
+ if [[ "$TASK_DIR" = /* ]]; then
61
+ TASK_DIR_RELATIVE="${TASK_DIR#$PROJECT_ROOT/}"
62
+ TASK_DIR_ABS="$TASK_DIR"
63
+ else
64
+ TASK_DIR_RELATIVE="$TASK_DIR"
65
+ TASK_DIR_ABS="${PROJECT_ROOT}/${TASK_DIR}"
66
+ fi
67
+
68
+ TASK_JSON="${TASK_DIR_ABS}/$FILE_TASK_JSON"
69
+
70
+ # =============================================================================
71
+ # Validation
72
+ # =============================================================================
73
+ if [ ! -f "$TASK_JSON" ]; then
74
+ log_error "task.json not found at ${TASK_JSON}"
75
+ exit 1
76
+ fi
77
+
78
+ DISPATCH_MD="${PROJECT_ROOT}/${DISPATCH_MD_PATH}"
79
+ if [ ! -f "$DISPATCH_MD" ]; then
80
+ log_error "dispatch.md not found at ${DISPATCH_MD}"
81
+ exit 1
82
+ fi
83
+
84
+ CONFIG_FILE=$(get_worktree_config "$PROJECT_ROOT")
85
+ if [ ! -f "$CONFIG_FILE" ]; then
86
+ log_error "worktree.yaml not found at ${CONFIG_FILE}"
87
+ exit 1
88
+ fi
89
+
90
+ # =============================================================================
91
+ # Read Task Config
92
+ # =============================================================================
93
+ echo ""
94
+ echo -e "${BLUE}=== Multi-Agent Pipeline: Start ===${NC}"
95
+ log_info "Task: ${TASK_DIR_ABS}"
96
+
97
+ BRANCH=$(jq -r '.branch' "$TASK_JSON")
98
+ TASK_NAME=$(jq -r '.name' "$TASK_JSON")
99
+ TASK_STATUS=$(jq -r '.status' "$TASK_JSON")
100
+ WORKTREE_PATH=$(jq -r '.worktree_path // empty' "$TASK_JSON")
101
+ CONFIGURED_BASE_BRANCH=$(jq -r '.base_branch // empty' "$TASK_JSON")
102
+
103
+ # Check if task was rejected
104
+ if [ "$TASK_STATUS" = "rejected" ]; then
105
+ log_error "Task was rejected by Plan Agent"
106
+ if [ -f "${TASK_DIR_ABS}/REJECTED.md" ]; then
107
+ echo ""
108
+ echo -e "${YELLOW}Rejection reason:${NC}"
109
+ cat "${TASK_DIR_ABS}/REJECTED.md"
110
+ fi
111
+ echo ""
112
+ log_info "To retry, delete this directory and run plan.sh again with revised requirements"
113
+ exit 1
114
+ fi
115
+
116
+ # Check if prd.md exists (plan completed successfully)
117
+ if [ ! -f "${TASK_DIR_ABS}/prd.md" ]; then
118
+ log_error "prd.md not found - Plan Agent may not have completed"
119
+ log_info "Check plan log: ${TASK_DIR_ABS}/.plan-log"
120
+ exit 1
121
+ fi
122
+
123
+ if [ -z "$BRANCH" ] || [ "$BRANCH" = "null" ]; then
124
+ log_error "branch field not set in task.json"
125
+ log_info "Please set branch field first, e.g.:"
126
+ log_info " jq '.branch = \"task/my-task\"' task.json > tmp && mv tmp task.json"
127
+ exit 1
128
+ fi
129
+
130
+ log_info "Branch: ${BRANCH}"
131
+ log_info "Name: ${TASK_NAME}"
132
+
133
+ # =============================================================================
134
+ # Step 1: Create Worktree (if not exists)
135
+ # =============================================================================
136
+ if [ -z "$WORKTREE_PATH" ] || [ ! -d "$WORKTREE_PATH" ]; then
137
+ log_info "Step 1: Creating worktree..."
138
+
139
+ # Determine base_branch (PR target)
140
+ # Priority: 1) task.json configured value, 2) current branch
141
+ if [ -n "$CONFIGURED_BASE_BRANCH" ]; then
142
+ BASE_BRANCH="$CONFIGURED_BASE_BRANCH"
143
+ log_info "Base branch (from task.json): ${BASE_BRANCH}"
144
+ else
145
+ BASE_BRANCH=$(git -C "$PROJECT_ROOT" branch --show-current)
146
+ log_info "Base branch (current branch): ${BASE_BRANCH}"
147
+ fi
148
+
149
+ # Calculate worktree path
150
+ WORKTREE_BASE=$(get_worktree_base_dir "$PROJECT_ROOT")
151
+ mkdir -p "$WORKTREE_BASE"
152
+ WORKTREE_BASE="$(cd "$WORKTREE_BASE" && pwd)"
153
+ WORKTREE_PATH="${WORKTREE_BASE}/${BRANCH}"
154
+
155
+ # Create parent directory
156
+ mkdir -p "$(dirname "$WORKTREE_PATH")"
157
+ cd "$PROJECT_ROOT"
158
+
159
+ # Create branch if not exists
160
+ if git show-ref --verify --quiet "refs/heads/${BRANCH}"; then
161
+ log_info "Branch exists, checking out..."
162
+ git worktree add "$WORKTREE_PATH" "$BRANCH"
163
+ else
164
+ log_info "Creating new branch: $BRANCH"
165
+ git worktree add -b "$BRANCH" "$WORKTREE_PATH"
166
+ fi
167
+
168
+ log_success "Worktree created: ${WORKTREE_PATH}"
169
+
170
+ # Update task.json with worktree_path and base_branch
171
+ jq --arg path "$WORKTREE_PATH" --arg base "$BASE_BRANCH" \
172
+ '.worktree_path = $path | .base_branch = $base' "$TASK_JSON" > "${TASK_JSON}.tmp"
173
+ mv "${TASK_JSON}.tmp" "$TASK_JSON"
174
+
175
+ # ----- Copy environment files -----
176
+ log_info "Copying environment files..."
177
+ cd "$WORKTREE_PATH"
178
+
179
+ COPY_LIST=$(get_worktree_copy_files "$PROJECT_ROOT")
180
+ COPY_COUNT=0
181
+
182
+ while IFS= read -r item; do
183
+ [ -z "$item" ] && continue
184
+
185
+ SOURCE="${PROJECT_ROOT}/${item}"
186
+ TARGET="${WORKTREE_PATH}/${item}"
187
+
188
+ if [ -f "$SOURCE" ]; then
189
+ mkdir -p "$(dirname "$TARGET")"
190
+ cp "$SOURCE" "$TARGET"
191
+ ((COPY_COUNT++))
192
+ fi
193
+ done <<< "$COPY_LIST"
194
+
195
+ if [ $COPY_COUNT -gt 0 ]; then
196
+ log_success "Copied $COPY_COUNT file(s)"
197
+ fi
198
+
199
+ # ----- Copy task directory (may not be committed yet) -----
200
+ log_info "Copying task directory..."
201
+ TASK_TARGET_DIR="${WORKTREE_PATH}/${TASK_DIR_RELATIVE}"
202
+ mkdir -p "$(dirname "$TASK_TARGET_DIR")"
203
+ cp -r "$TASK_DIR_ABS" "$(dirname "$TASK_TARGET_DIR")/"
204
+ log_success "Task directory copied to worktree"
205
+
206
+ # ----- Run post_create hooks -----
207
+ log_info "Running post_create hooks..."
208
+
209
+ POST_CREATE=$(get_worktree_post_create_hooks "$PROJECT_ROOT")
210
+ HOOK_COUNT=0
211
+
212
+ while IFS= read -r cmd; do
213
+ [ -z "$cmd" ] && continue
214
+
215
+ log_info " Running: $cmd"
216
+ if eval "$cmd"; then
217
+ ((HOOK_COUNT++))
218
+ else
219
+ log_error "Hook failed: $cmd"
220
+ exit 1
221
+ fi
222
+ done <<< "$POST_CREATE"
223
+
224
+ if [ $HOOK_COUNT -gt 0 ]; then
225
+ log_success "Ran $HOOK_COUNT hook(s)"
226
+ fi
227
+
228
+ else
229
+ log_info "Step 1: Using existing worktree: ${WORKTREE_PATH}"
230
+ fi
231
+
232
+ # =============================================================================
233
+ # Step 2: Set .current-task in Worktree
234
+ # =============================================================================
235
+ log_info "Step 2: Setting current task in worktree..."
236
+
237
+ mkdir -p "${WORKTREE_PATH}/$DIR_WORKFLOW"
238
+ echo "$TASK_DIR_RELATIVE" > "${WORKTREE_PATH}/$DIR_WORKFLOW/$FILE_CURRENT_TASK"
239
+ log_success "Current task set: ${TASK_DIR_RELATIVE}"
240
+
241
+ # =============================================================================
242
+ # Step 3: Prepare and Start Claude Agent
243
+ # =============================================================================
244
+ log_info "Step 3: Starting Claude agent..."
245
+
246
+ # Update task status
247
+ jq '.status = "in_progress"' "$TASK_JSON" > "${TASK_JSON}.tmp"
248
+ mv "${TASK_JSON}.tmp" "$TASK_JSON"
249
+
250
+ cd "$WORKTREE_PATH"
251
+
252
+ LOG_FILE="${WORKTREE_PATH}/.agent-log"
253
+ RUNNER_SCRIPT="${WORKTREE_PATH}/.agent-runner.sh"
254
+ SESSION_ID_FILE="${WORKTREE_PATH}/.session-id"
255
+
256
+ touch "$LOG_FILE"
257
+
258
+ # Generate session ID for resume support
259
+ SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
260
+ echo "$SESSION_ID" > "$SESSION_ID_FILE"
261
+ log_info "Session ID: ${SESSION_ID}"
262
+
263
+ # Create runner script (uses --agent flag to load dispatch agent directly)
264
+ cat > "$RUNNER_SCRIPT" << RUNNER_EOF
265
+ #!/bin/bash
266
+ cd "\$(dirname "\$0")"
267
+ export https_proxy="\${AGENT_HTTPS_PROXY:-}"
268
+ export http_proxy="\${AGENT_HTTP_PROXY:-}"
269
+ export all_proxy="\${AGENT_ALL_PROXY:-}"
270
+ export CLAUDE_NON_INTERACTIVE=1
271
+
272
+ claude -p --agent dispatch --session-id "${SESSION_ID}" --dangerously-skip-permissions --output-format stream-json --verbose "Start the pipeline"
273
+ RUNNER_EOF
274
+ chmod +x "$RUNNER_SCRIPT"
275
+
276
+ # Start agent in background
277
+ AGENT_HTTPS_PROXY="${https_proxy:-}" \
278
+ AGENT_HTTP_PROXY="${http_proxy:-}" \
279
+ AGENT_ALL_PROXY="${all_proxy:-}" \
280
+ nohup "$RUNNER_SCRIPT" > "$LOG_FILE" 2>&1 &
281
+ AGENT_PID=$!
282
+
283
+ log_success "Agent started with PID: ${AGENT_PID}"
284
+
285
+ # =============================================================================
286
+ # Step 4: Register to Registry (in main repo, not worktree)
287
+ # =============================================================================
288
+ log_info "Step 4: Registering agent to registry..."
289
+
290
+ # Generate agent ID
291
+ TASK_ID=$(jq -r '.id // empty' "$TASK_JSON")
292
+ if [ -z "$TASK_ID" ]; then
293
+ TASK_ID=$(echo "$BRANCH" | sed 's/\//-/g')
294
+ fi
295
+
296
+ # Use common registry function
297
+ registry_add_agent "$TASK_ID" "$WORKTREE_PATH" "$AGENT_PID" "$TASK_DIR_RELATIVE" "$PROJECT_ROOT"
298
+
299
+ log_success "Agent registered: ${TASK_ID}"
300
+
301
+ # =============================================================================
302
+ # Summary
303
+ # =============================================================================
304
+ echo ""
305
+ echo -e "${GREEN}=== Agent Started ===${NC}"
306
+ echo ""
307
+ echo " ID: $TASK_ID"
308
+ echo " PID: $AGENT_PID"
309
+ echo " Session: $SESSION_ID"
310
+ echo " Worktree: $WORKTREE_PATH"
311
+ echo " Task: $TASK_DIR_RELATIVE"
312
+ echo " Log: $LOG_FILE"
313
+ echo " Registry: $(registry_get_file "$PROJECT_ROOT")"
314
+ echo ""
315
+ echo -e "${YELLOW}To monitor:${NC} tail -f $LOG_FILE"
316
+ echo -e "${YELLOW}To stop:${NC} kill $AGENT_PID"
317
+ echo -e "${YELLOW}To resume:${NC} cd $WORKTREE_PATH && claude --resume $SESSION_ID"