@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,384 @@
1
+ #!/bin/bash
2
+ # Add a new session to journal file and update index.md
3
+ #
4
+ # Usage:
5
+ # ./.aim-studio/scripts/add-session.sh --title "Title" --commit "hash" --summary "Summary"
6
+ # echo "content" | ./.aim-studio/scripts/add-session.sh --title "Title" --commit "hash"
7
+
8
+ set -e
9
+
10
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ source "$SCRIPT_DIR/common/paths.sh"
12
+ source "$SCRIPT_DIR/common/developer.sh"
13
+
14
+ MAX_LINES=2000
15
+ TODAY=$(date +%Y-%m-%d)
16
+
17
+ # Ensure developer is initialized
18
+ ensure_developer
19
+
20
+ DEVELOPER=$(get_developer)
21
+ REPO_ROOT=$(get_repo_root)
22
+ DEV_DIR="$REPO_ROOT/$DIR_WORKFLOW/$DIR_WORKSPACE/$DEVELOPER"
23
+ INDEX_FILE="$DEV_DIR/index.md"
24
+
25
+ # =============================================================================
26
+ # Helper Functions
27
+ # =============================================================================
28
+
29
+ get_latest_journal_info() {
30
+ local latest_file=""
31
+ local latest_num=-1 # Start at -1 so journal-0.md can be detected (0 > -1)
32
+
33
+ for f in "$DEV_DIR"/${FILE_JOURNAL_PREFIX}*.md; do
34
+ if [[ -f "$f" ]]; then
35
+ local num=$(basename "$f" | sed "s/${FILE_JOURNAL_PREFIX}\([0-9]*\)\.md/\1/")
36
+ if [[ "$num" -gt "$latest_num" ]]; then
37
+ latest_num=$num
38
+ latest_file="$f"
39
+ fi
40
+ fi
41
+ done
42
+
43
+ if [[ -n "$latest_file" ]]; then
44
+ local lines=$(wc -l < "$latest_file" | tr -d ' ')
45
+ echo "$latest_file:$latest_num:$lines"
46
+ else
47
+ echo ":0:0"
48
+ fi
49
+ }
50
+
51
+ get_current_session() {
52
+ local line=$(grep "Total Sessions" "$INDEX_FILE" 2>/dev/null | head -1)
53
+ echo "$line" | sed 's/.*: //' | tr -d ' '
54
+ }
55
+
56
+ count_journal_files() {
57
+ local result=""
58
+ local journal_info=$(get_latest_journal_info)
59
+ local active_num=$(echo "$journal_info" | cut -d: -f2)
60
+ local active_file="${FILE_JOURNAL_PREFIX}$active_num.md"
61
+
62
+ for f in $(ls -v "$DEV_DIR"/${FILE_JOURNAL_PREFIX}*.md 2>/dev/null | sort -t- -k2 -n -r); do
63
+ if [[ -f "$f" ]]; then
64
+ local filename=$(basename "$f")
65
+ local lines=$(wc -l < "$f" | tr -d ' ')
66
+
67
+ local status="Archived"
68
+ if [[ "$filename" == "$active_file" ]]; then
69
+ status="Active"
70
+ fi
71
+
72
+ result="${result}| \`$filename\` | ~$lines | $status |
73
+ "
74
+ fi
75
+ done
76
+ echo "$result" | sed '/^$/d'
77
+ }
78
+
79
+ create_new_journal_file() {
80
+ local num=$1
81
+ local prev_num=$((num - 1))
82
+ local new_file="$DEV_DIR/${FILE_JOURNAL_PREFIX}$num.md"
83
+
84
+ cat > "$new_file" << EOF
85
+ # Journal - $DEVELOPER (Part $num)
86
+
87
+ > Continuation from \`${FILE_JOURNAL_PREFIX}$prev_num.md\` (archived at ~$MAX_LINES lines)
88
+ > Started: $TODAY
89
+
90
+ ---
91
+
92
+ EOF
93
+ echo "$new_file"
94
+ }
95
+
96
+ generate_session_content() {
97
+ local session_num=$1
98
+ local title=$2
99
+ local commit=$3
100
+ local summary=$4
101
+ local extra_content=$5
102
+
103
+ local commit_table=""
104
+ if [[ -n "$commit" && "$commit" != "-" ]]; then
105
+ commit_table="| Hash | Message |
106
+ |------|---------|"
107
+ IFS=',' read -ra COMMITS <<< "$commit"
108
+ for c in "${COMMITS[@]}"; do
109
+ c=$(echo "$c" | tr -d ' ')
110
+ commit_table="$commit_table
111
+ | \`$c\` | (see git log) |"
112
+ done
113
+ else
114
+ commit_table="(No commits - planning session)"
115
+ fi
116
+
117
+ cat << EOF
118
+
119
+ ## Session $session_num: $title
120
+
121
+ **Date**: $TODAY
122
+ **Task**: $title
123
+
124
+ ### Summary
125
+
126
+ $summary
127
+
128
+ ### Main Changes
129
+
130
+ $extra_content
131
+
132
+ ### Git Commits
133
+
134
+ $commit_table
135
+
136
+ ### Testing
137
+
138
+ - [OK] (Add test results)
139
+
140
+ ### Status
141
+
142
+ [OK] **Completed**
143
+
144
+ ### Next Steps
145
+
146
+ - None - task complete
147
+ EOF
148
+ }
149
+
150
+ # =============================================================================
151
+ # Update Index.md
152
+ # =============================================================================
153
+
154
+ update_index() {
155
+ local title="$1"
156
+ local commit="$2"
157
+ local new_session="$3"
158
+ local active_file="$4"
159
+
160
+ # Format commit for display
161
+ local commit_display="-"
162
+ if [[ -n "$commit" && "$commit" != "-" ]]; then
163
+ commit_display=$(echo "$commit" | sed 's/,/, /g' | sed 's/\([a-f0-9]\{7,\}\)/`\1`/g')
164
+ fi
165
+
166
+ local files_table=$(count_journal_files)
167
+
168
+ echo "Updating index.md for session $new_session..."
169
+ echo " Title: $title"
170
+ echo " Commit: $commit_display"
171
+ echo " Active File: $active_file"
172
+ echo ""
173
+
174
+ if ! grep -q "@@@auto:current-status" "$INDEX_FILE"; then
175
+ echo "Error: Markers not found in index.md. Please ensure markers exist." >&2
176
+ exit 1
177
+ fi
178
+
179
+ local tmp_file=$(mktemp)
180
+
181
+ local in_current_status=false
182
+ local in_active_documents=false
183
+ local in_session_history=false
184
+ local header_written=false
185
+
186
+ while IFS= read -r line || [[ -n "$line" ]]; do
187
+ if [[ "$line" == *"@@@auto:current-status"* ]]; then
188
+ echo "$line" >> "$tmp_file"
189
+ in_current_status=true
190
+ echo "- **Active File**: \`$active_file\`" >> "$tmp_file"
191
+ echo "- **Total Sessions**: $new_session" >> "$tmp_file"
192
+ echo "- **Last Active**: $TODAY" >> "$tmp_file"
193
+ continue
194
+ fi
195
+
196
+ if [[ "$line" == *"@@@/auto:current-status"* ]]; then
197
+ in_current_status=false
198
+ echo "$line" >> "$tmp_file"
199
+ continue
200
+ fi
201
+
202
+ if [[ "$line" == *"@@@auto:active-documents"* ]]; then
203
+ echo "$line" >> "$tmp_file"
204
+ in_active_documents=true
205
+ echo "| File | Lines | Status |" >> "$tmp_file"
206
+ echo "|------|-------|--------|" >> "$tmp_file"
207
+ echo "$files_table" >> "$tmp_file"
208
+ continue
209
+ fi
210
+
211
+ if [[ "$line" == *"@@@/auto:active-documents"* ]]; then
212
+ in_active_documents=false
213
+ echo "$line" >> "$tmp_file"
214
+ continue
215
+ fi
216
+
217
+ if [[ "$line" == *"@@@auto:session-history"* ]]; then
218
+ echo "$line" >> "$tmp_file"
219
+ in_session_history=true
220
+ header_written=false
221
+ continue
222
+ fi
223
+
224
+ if [[ "$line" == *"@@@/auto:session-history"* ]]; then
225
+ in_session_history=false
226
+ echo "$line" >> "$tmp_file"
227
+ continue
228
+ fi
229
+
230
+ if $in_current_status; then
231
+ continue
232
+ fi
233
+
234
+ if $in_active_documents; then
235
+ continue
236
+ fi
237
+
238
+ if $in_session_history; then
239
+ echo "$line" >> "$tmp_file"
240
+ if [[ "$line" == "|---"* ]] && ! $header_written; then
241
+ echo "| $new_session | $TODAY | $title | $commit_display |" >> "$tmp_file"
242
+ header_written=true
243
+ fi
244
+ continue
245
+ fi
246
+
247
+ echo "$line" >> "$tmp_file"
248
+ done < "$INDEX_FILE"
249
+
250
+ mv "$tmp_file" "$INDEX_FILE"
251
+
252
+ echo "[OK] Updated index.md successfully!"
253
+ }
254
+
255
+ # =============================================================================
256
+ # Main Function
257
+ # =============================================================================
258
+
259
+ add_session() {
260
+ local title=""
261
+ local commit="-"
262
+ local summary="(Add summary)"
263
+ local content_file=""
264
+ local extra_content="(Add details)"
265
+
266
+ while [[ $# -gt 0 ]]; do
267
+ case $1 in
268
+ --title)
269
+ title="$2"
270
+ shift 2
271
+ ;;
272
+ --commit)
273
+ commit="$2"
274
+ shift 2
275
+ ;;
276
+ --summary)
277
+ summary="$2"
278
+ shift 2
279
+ ;;
280
+ --content-file)
281
+ content_file="$2"
282
+ shift 2
283
+ ;;
284
+ *)
285
+ shift
286
+ ;;
287
+ esac
288
+ done
289
+
290
+ if [[ -z "$title" ]]; then
291
+ echo "Error: --title is required" >&2
292
+ echo "Usage: $0 --title \"Session Title\" [--commit \"hash1,hash2\"] [--summary \"Brief summary\"]" >&2
293
+ exit 1
294
+ fi
295
+
296
+ if [[ -n "$content_file" && -f "$content_file" ]]; then
297
+ extra_content=$(cat "$content_file")
298
+ elif [[ ! -t 0 ]]; then
299
+ extra_content=$(cat)
300
+ fi
301
+
302
+ local journal_info=$(get_latest_journal_info)
303
+ local current_file=$(echo "$journal_info" | cut -d: -f1)
304
+ local current_num=$(echo "$journal_info" | cut -d: -f2)
305
+ local current_lines=$(echo "$journal_info" | cut -d: -f3)
306
+ local current_session=$(get_current_session)
307
+ local new_session=$((current_session + 1))
308
+
309
+ local session_content=$(generate_session_content "$new_session" "$title" "$commit" "$summary" "$extra_content")
310
+ local content_lines=$(echo "$session_content" | wc -l | tr -d ' ')
311
+
312
+ echo "========================================" >&2
313
+ echo "ADD SESSION" >&2
314
+ echo "========================================" >&2
315
+ echo "" >&2
316
+ echo "Session: $new_session" >&2
317
+ echo "Title: $title" >&2
318
+ echo "Commit: $commit" >&2
319
+ echo "" >&2
320
+ echo "Current journal file: ${FILE_JOURNAL_PREFIX}$current_num.md" >&2
321
+ echo "Current lines: $current_lines" >&2
322
+ echo "New content lines: $content_lines" >&2
323
+ echo "Total after append: $((current_lines + content_lines))" >&2
324
+ echo "" >&2
325
+
326
+ local target_file="$current_file"
327
+ local target_num=$current_num
328
+
329
+ if [[ $((current_lines + content_lines)) -gt $MAX_LINES ]]; then
330
+ target_num=$((current_num + 1))
331
+ echo "[!] Exceeds $MAX_LINES lines, creating ${FILE_JOURNAL_PREFIX}$target_num.md" >&2
332
+ target_file=$(create_new_journal_file "$target_num")
333
+ echo "Created: $target_file" >&2
334
+ fi
335
+
336
+ echo "$session_content" >> "$target_file"
337
+ echo "[OK] Appended session to $(basename "$target_file")" >&2
338
+
339
+ echo "" >&2
340
+
341
+ # Update index.md directly
342
+ local active_file="${FILE_JOURNAL_PREFIX}$target_num.md"
343
+ update_index "$title" "$commit" "$new_session" "$active_file"
344
+
345
+ echo "" >&2
346
+ echo "========================================" >&2
347
+ echo "[OK] Session $new_session added successfully!" >&2
348
+ echo "========================================" >&2
349
+ echo "" >&2
350
+ echo "Files updated:" >&2
351
+ echo " - $(basename "$target_file")" >&2
352
+ echo " - index.md" >&2
353
+ }
354
+
355
+ show_help() {
356
+ echo "Usage: $0 --title \"Title\" [options]"
357
+ echo ""
358
+ echo "Add a new session to journal file and update index.md automatically."
359
+ echo ""
360
+ echo "Options:"
361
+ echo " --title TEXT Session title (required)"
362
+ echo " --commit HASHES Comma-separated commit hashes (optional)"
363
+ echo " --summary TEXT Brief summary of the session (optional)"
364
+ echo " --content-file Path to file with detailed content (optional)"
365
+ echo ""
366
+ echo "You can also pipe content via stdin:"
367
+ echo " echo \"Details\" | $0 --title \"Title\" --commit \"abc123\""
368
+ echo ""
369
+ echo "Examples:"
370
+ echo " $0 --title \"Fix login bug\" --commit \"abc1234\" --summary \"Fixed auth issue\""
371
+ }
372
+
373
+ # =============================================================================
374
+ # Main Entry
375
+ # =============================================================================
376
+
377
+ case "${1:-}" in
378
+ --help|-h|help)
379
+ show_help
380
+ ;;
381
+ *)
382
+ add_session "$@"
383
+ ;;
384
+ esac
@@ -0,0 +1,129 @@
1
+ #!/bin/bash
2
+ # Developer management utilities
3
+ #
4
+ # Usage: source this file in other scripts
5
+ # source "$(dirname "$0")/common/developer.sh"
6
+ #
7
+ # Provides:
8
+ # init_developer - Initialize developer
9
+ # ensure_developer - Ensure developer is initialized (exit if not)
10
+ # show_developer_info - Show developer information
11
+
12
+ # Ensure paths.sh is loaded
13
+ if ! type get_repo_root &>/dev/null; then
14
+ source "$(dirname "${BASH_SOURCE[0]}")/paths.sh"
15
+ fi
16
+
17
+ # =============================================================================
18
+ # Developer Initialization
19
+ # =============================================================================
20
+
21
+ init_developer() {
22
+ local name="$1"
23
+ local repo_root="${2:-$(get_repo_root)}"
24
+
25
+ if [[ -z "$name" ]]; then
26
+ echo "Error: developer name is required" >&2
27
+ return 1
28
+ fi
29
+
30
+ local dev_file="$repo_root/$DIR_WORKFLOW/$FILE_DEVELOPER"
31
+ local workspace_dir="$repo_root/$DIR_WORKFLOW/$DIR_WORKSPACE/$name"
32
+
33
+ # Create .developer file
34
+ cat > "$dev_file" << EOF
35
+ name=$name
36
+ initialized_at=$(date -Iseconds)
37
+ EOF
38
+
39
+ # Create workspace directory structure
40
+ mkdir -p "$workspace_dir"
41
+
42
+ # Create initial journal file
43
+ local journal_file="$workspace_dir/${FILE_JOURNAL_PREFIX}1.md"
44
+ if [[ ! -f "$journal_file" ]]; then
45
+ cat > "$journal_file" << JOURNAL_EOF
46
+ # Journal - $name (Part 1)
47
+
48
+ > AI development session journal
49
+ > Started: $(date +%Y-%m-%d)
50
+
51
+ ---
52
+
53
+ JOURNAL_EOF
54
+ fi
55
+
56
+ # Create index.md with markers for auto-update
57
+ local index_file="$workspace_dir/index.md"
58
+ if [[ ! -f "$index_file" ]]; then
59
+ cat > "$index_file" << INDEX_EOF
60
+ # Workspace Index - $name
61
+
62
+ > Journal tracking for AI development sessions.
63
+
64
+ ---
65
+
66
+ ## Current Status
67
+
68
+ <!-- @@@auto:current-status -->
69
+ - **Active File**: \`journal-1.md\`
70
+ - **Total Sessions**: 0
71
+ - **Last Active**: -
72
+ <!-- @@@/auto:current-status -->
73
+
74
+ ---
75
+
76
+ ## Active Documents
77
+
78
+ <!-- @@@auto:active-documents -->
79
+ | File | Lines | Status |
80
+ |------|-------|--------|
81
+ | \`journal-1.md\` | ~0 | Active |
82
+ <!-- @@@/auto:active-documents -->
83
+
84
+ ---
85
+
86
+ ## Session History
87
+
88
+ <!-- @@@auto:session-history -->
89
+ | # | Date | Title | Commits |
90
+ |---|------|-------|---------|
91
+ <!-- @@@/auto:session-history -->
92
+
93
+ ---
94
+
95
+ ## Notes
96
+
97
+ - Sessions are appended to journal files
98
+ - New journal file created when current exceeds 2000 lines
99
+ - Use \`add-session.sh\` to record sessions
100
+ INDEX_EOF
101
+ fi
102
+
103
+ echo "Developer initialized: $name"
104
+ echo " .developer file: $dev_file"
105
+ echo " Workspace dir: $workspace_dir"
106
+ }
107
+
108
+ ensure_developer() {
109
+ local repo_root="${1:-$(get_repo_root)}"
110
+
111
+ if ! check_developer "$repo_root"; then
112
+ echo "Error: Developer not initialized." >&2
113
+ echo "Run: ./.aim-studio/scripts/init-developer.sh <your-name>" >&2
114
+ exit 1
115
+ fi
116
+ }
117
+
118
+ show_developer_info() {
119
+ local repo_root="${1:-$(get_repo_root)}"
120
+ local developer=$(get_developer "$repo_root")
121
+
122
+ if [[ -z "$developer" ]]; then
123
+ echo "Developer: (not initialized)"
124
+ else
125
+ echo "Developer: $developer"
126
+ echo "Workspace: $DIR_WORKFLOW/$DIR_WORKSPACE/$developer/"
127
+ echo "Tasks: $DIR_WORKFLOW/$DIR_TASKS/"
128
+ fi
129
+ }