@assistkick/create 1.0.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/src/scaffolder.d.ts +6 -1
  2. package/dist/src/scaffolder.js +20 -9
  3. package/dist/src/scaffolder.js.map +1 -1
  4. package/package.json +3 -2
  5. package/templates/{product-system → assistkick-product-system}/CLAUDE.md +4 -4
  6. package/templates/{product-system → assistkick-product-system}/package.json +5 -5
  7. package/templates/{product-system → assistkick-product-system}/packages/backend/package.json +2 -2
  8. package/templates/{product-system → assistkick-product-system}/packages/backend/src/routes/auth.ts +1 -1
  9. package/templates/{product-system → assistkick-product-system}/packages/backend/src/routes/coherence.ts +1 -1
  10. package/templates/assistkick-product-system/packages/backend/src/routes/git.ts +231 -0
  11. package/templates/{product-system → assistkick-product-system}/packages/backend/src/routes/graph.ts +3 -3
  12. package/templates/{product-system → assistkick-product-system}/packages/backend/src/routes/kanban.ts +6 -6
  13. package/templates/assistkick-product-system/packages/backend/src/routes/pipeline.ts +88 -0
  14. package/templates/assistkick-product-system/packages/backend/src/routes/terminal.ts +82 -0
  15. package/templates/{product-system → assistkick-product-system}/packages/backend/src/server.ts +23 -10
  16. package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/coherence-review.ts +4 -4
  17. package/templates/assistkick-product-system/packages/backend/src/services/github_app_service.ts +146 -0
  18. package/templates/assistkick-product-system/packages/backend/src/services/init.ts +147 -0
  19. package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/invitation_service.ts +1 -1
  20. package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/password_reset_service.ts +1 -1
  21. package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/project_service.ts +72 -1
  22. package/templates/assistkick-product-system/packages/backend/src/services/project_workspace_service.test.ts +87 -0
  23. package/templates/assistkick-product-system/packages/backend/src/services/project_workspace_service.ts +194 -0
  24. package/templates/assistkick-product-system/packages/backend/src/services/pty_session_manager.test.ts +159 -0
  25. package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/pty_session_manager.ts +114 -39
  26. package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/terminal_ws_handler.ts +28 -14
  27. package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/user_management_service.ts +1 -1
  28. package/templates/{product-system → assistkick-product-system}/packages/frontend/package.json +1 -1
  29. package/templates/{product-system → assistkick-product-system}/packages/frontend/src/App.tsx +1 -1
  30. package/templates/{product-system → assistkick-product-system}/packages/frontend/src/api/client.ts +151 -0
  31. package/templates/assistkick-product-system/packages/frontend/src/components/GitRepoModal.tsx +352 -0
  32. package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/KanbanView.tsx +208 -95
  33. package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/ProjectSelector.tsx +17 -1
  34. package/templates/assistkick-product-system/packages/frontend/src/components/TerminalView.tsx +333 -0
  35. package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/Toolbar.tsx +15 -13
  36. package/templates/{product-system → assistkick-product-system}/packages/frontend/src/constants/graph.ts +1 -0
  37. package/templates/{product-system → assistkick-product-system}/packages/frontend/src/hooks/useProjects.ts +4 -0
  38. package/templates/{product-system → assistkick-product-system}/packages/frontend/src/routes/dashboard.tsx +22 -4
  39. package/templates/{product-system → assistkick-product-system}/packages/frontend/src/styles/index.css +486 -38
  40. package/templates/assistkick-product-system/packages/frontend/vite.config.ts +31 -0
  41. package/templates/assistkick-product-system/packages/shared/db/migrations/0001_vengeful_wallop.sql +1 -0
  42. package/templates/assistkick-product-system/packages/shared/db/migrations/0002_greedy_excalibur.sql +4 -0
  43. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0001_snapshot.json +826 -0
  44. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0002_snapshot.json +854 -0
  45. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/_journal.json +27 -0
  46. package/templates/{product-system → assistkick-product-system}/packages/shared/db/schema.ts +5 -0
  47. package/templates/{product-system → assistkick-product-system}/packages/shared/lib/claude-service.ts +54 -1
  48. package/templates/{product-system → assistkick-product-system}/packages/shared/lib/db.ts +1 -1
  49. package/templates/{product-system → assistkick-product-system}/packages/shared/lib/git_workflow.ts +25 -0
  50. package/templates/{product-system → assistkick-product-system}/packages/shared/lib/pipeline-state-store.ts +4 -0
  51. package/templates/{product-system → assistkick-product-system}/packages/shared/lib/pipeline.ts +329 -89
  52. package/templates/assistkick-product-system/packages/shared/lib/pipeline_orchestrator.ts +186 -0
  53. package/templates/{product-system → assistkick-product-system}/packages/shared/lib/prompt_builder.ts +2 -2
  54. package/templates/{product-system → assistkick-product-system}/packages/shared/package.json +1 -1
  55. package/templates/assistkick-product-system/packages/shared/tools/db_explorer.ts +275 -0
  56. package/templates/{product-system → assistkick-product-system}/packages/shared/tools/get_kanban.ts +2 -1
  57. package/templates/{product-system → assistkick-product-system}/packages/shared/tools/move_card.ts +3 -2
  58. package/templates/{product-system → assistkick-product-system}/packages/shared/tools/update_node.ts +2 -2
  59. package/templates/{product-system → assistkick-product-system}/tests/db_sqlite_fallback.test.ts +1 -1
  60. package/templates/{product-system → assistkick-product-system}/tests/kanban.test.ts +1 -1
  61. package/templates/{product-system → assistkick-product-system}/tests/pipeline_stats_all_cards.test.ts +1 -1
  62. package/templates/{product-system → assistkick-product-system}/tests/web_terminal.test.ts +189 -150
  63. package/templates/skills/{product-bootstrap → assistkick-bootstrap}/SKILL.md +36 -28
  64. package/templates/skills/{product-code-reviewer → assistkick-code-reviewer}/SKILL.md +26 -18
  65. package/templates/skills/assistkick-db-explorer/SKILL.md +86 -0
  66. package/templates/skills/{product-debugger → assistkick-debugger}/SKILL.md +35 -27
  67. package/templates/skills/{product-developer → assistkick-developer}/SKILL.md +40 -32
  68. package/templates/skills/{product-interview → assistkick-interview}/SKILL.md +37 -29
  69. package/templates/product-system/packages/backend/src/routes/pipeline.ts +0 -41
  70. package/templates/product-system/packages/backend/src/services/init.ts +0 -80
  71. package/templates/product-system/packages/backend/src/services/pty_session_manager.test.ts +0 -88
  72. package/templates/product-system/packages/frontend/src/components/TerminalView.tsx +0 -200
  73. package/templates/product-system/packages/frontend/vite.config.ts +0 -20
  74. package/templates/product-system/packages/shared/db/migrations/meta/_journal.json +0 -13
  75. /package/templates/{product-system → assistkick-product-system}/.env.example +0 -0
  76. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/middleware/auth_middleware.test.ts +0 -0
  77. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/middleware/auth_middleware.ts +0 -0
  78. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/routes/projects.ts +0 -0
  79. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/routes/users.ts +0 -0
  80. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/auth_service.test.ts +0 -0
  81. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/auth_service.ts +0 -0
  82. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/email_service.ts +0 -0
  83. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/invitation_service.test.ts +0 -0
  84. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/password_reset_service.test.ts +0 -0
  85. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/project_service.test.ts +0 -0
  86. /package/templates/{product-system → assistkick-product-system}/packages/backend/src/services/user_management_service.test.ts +0 -0
  87. /package/templates/{product-system → assistkick-product-system}/packages/backend/tsconfig.json +0 -0
  88. /package/templates/{product-system → assistkick-product-system}/packages/frontend/index.html +0 -0
  89. /package/templates/{product-system → assistkick-product-system}/packages/frontend/package-lock.json +0 -0
  90. /package/templates/{product-system → assistkick-product-system}/packages/frontend/public/favicon.svg +0 -0
  91. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/api/client_projects.test.ts +0 -0
  92. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/api/client_refresh.test.ts +0 -0
  93. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/CoherenceView.tsx +0 -0
  94. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/GraphLegend.tsx +0 -0
  95. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/GraphSettings.tsx +0 -0
  96. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/GraphView.tsx +0 -0
  97. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/InviteUserDialog.tsx +0 -0
  98. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/LoginPage.tsx +0 -0
  99. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/QaIssueSheet.tsx +0 -0
  100. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/SidePanel.tsx +0 -0
  101. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/components/UsersView.tsx +0 -0
  102. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/hooks/useAuth.tsx +0 -0
  103. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/hooks/useGraph.ts +0 -0
  104. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/hooks/useKanban.ts +0 -0
  105. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/hooks/useTheme.ts +0 -0
  106. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/hooks/useToast.tsx +0 -0
  107. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/hooks/use_projects_logic.test.ts +0 -0
  108. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/main.tsx +0 -0
  109. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/pages/accept_invitation_page.tsx +0 -0
  110. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/pages/forgot_password_page.tsx +0 -0
  111. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/pages/register_page.tsx +0 -0
  112. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/pages/reset_password_page.tsx +0 -0
  113. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/routes/ProtectedRoute.tsx +0 -0
  114. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/routes/accept_invitation.tsx +0 -0
  115. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/routes/forgot_password.tsx +0 -0
  116. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/routes/login.tsx +0 -0
  117. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/routes/register.tsx +0 -0
  118. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/routes/reset_password.tsx +0 -0
  119. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/utils/auth_validation.test.ts +0 -0
  120. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/utils/auth_validation.ts +0 -0
  121. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/utils/login_validation.test.ts +0 -0
  122. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/utils/login_validation.ts +0 -0
  123. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/utils/logout.test.ts +0 -0
  124. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/utils/node_sizing.test.ts +0 -0
  125. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/utils/node_sizing.ts +0 -0
  126. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/utils/task_status.test.ts +0 -0
  127. /package/templates/{product-system → assistkick-product-system}/packages/frontend/src/utils/task_status.ts +0 -0
  128. /package/templates/{product-system → assistkick-product-system}/packages/frontend/tsconfig.json +0 -0
  129. /package/templates/{product-system → assistkick-product-system}/packages/shared/.env.example +0 -0
  130. /package/templates/{product-system → assistkick-product-system}/packages/shared/README.md +0 -0
  131. /package/templates/{product-system → assistkick-product-system}/packages/shared/db/migrate.ts +0 -0
  132. /package/templates/{product-system → assistkick-product-system}/packages/shared/db/migrations/0000_dashing_gorgon.sql +0 -0
  133. /package/templates/{product-system → assistkick-product-system}/packages/shared/db/migrations/meta/0000_snapshot.json +0 -0
  134. /package/templates/{product-system → assistkick-product-system}/packages/shared/drizzle.config.js +0 -0
  135. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/coherence.ts +0 -0
  136. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/completeness.ts +0 -0
  137. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/constants.ts +0 -0
  138. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/graph.ts +0 -0
  139. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/kanban.ts +0 -0
  140. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/markdown.ts +0 -0
  141. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/relevance_search.ts +0 -0
  142. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/session.ts +0 -0
  143. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/validator.ts +0 -0
  144. /package/templates/{product-system → assistkick-product-system}/packages/shared/lib/work_summary_parser.ts +0 -0
  145. /package/templates/{product-system → assistkick-product-system}/packages/shared/scripts/assign-project.ts +0 -0
  146. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/add_edge.ts +0 -0
  147. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/add_node.ts +0 -0
  148. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/end_session.ts +0 -0
  149. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/get_gaps.ts +0 -0
  150. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/get_node.ts +0 -0
  151. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/get_status.ts +0 -0
  152. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/migrate_to_turso.ts +0 -0
  153. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/rebuild_index.ts +0 -0
  154. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/remove_edge.ts +0 -0
  155. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/remove_node.ts +0 -0
  156. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/resolve_question.ts +0 -0
  157. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/search_nodes.ts +0 -0
  158. /package/templates/{product-system → assistkick-product-system}/packages/shared/tools/start_session.ts +0 -0
  159. /package/templates/{product-system → assistkick-product-system}/packages/shared/tsconfig.json +0 -0
  160. /package/templates/{product-system → assistkick-product-system}/pnpm-workspace.yaml +0 -0
  161. /package/templates/{product-system → assistkick-product-system}/smoke_test.ts +0 -0
  162. /package/templates/{product-system → assistkick-product-system}/tests/coherence_review.test.ts +0 -0
  163. /package/templates/{product-system → assistkick-product-system}/tests/edge_type_color_coding.test.ts +0 -0
  164. /package/templates/{product-system → assistkick-product-system}/tests/emit-tool-use-events.test.ts +0 -0
  165. /package/templates/{product-system → assistkick-product-system}/tests/feature_kind.test.ts +0 -0
  166. /package/templates/{product-system → assistkick-product-system}/tests/gap_indicators.test.ts +0 -0
  167. /package/templates/{product-system → assistkick-product-system}/tests/graceful_init.test.ts +0 -0
  168. /package/templates/{product-system → assistkick-product-system}/tests/graph_legend.test.ts +0 -0
  169. /package/templates/{product-system → assistkick-product-system}/tests/graph_settings_sheet.test.ts +0 -0
  170. /package/templates/{product-system → assistkick-product-system}/tests/hide_defined_filter.test.ts +0 -0
  171. /package/templates/{product-system → assistkick-product-system}/tests/neighborhood_focus.test.ts +0 -0
  172. /package/templates/{product-system → assistkick-product-system}/tests/node_search.test.ts +0 -0
  173. /package/templates/{product-system → assistkick-product-system}/tests/node_sizing.test.ts +0 -0
  174. /package/templates/{product-system → assistkick-product-system}/tests/node_type_toggle_filters.test.ts +0 -0
  175. /package/templates/{product-system → assistkick-product-system}/tests/node_type_visual_encoding.test.ts +0 -0
  176. /package/templates/{product-system → assistkick-product-system}/tests/pipeline-state-store.test.ts +0 -0
  177. /package/templates/{product-system → assistkick-product-system}/tests/pipeline-unit.test.ts +0 -0
  178. /package/templates/{product-system → assistkick-product-system}/tests/pipeline.test.ts +0 -0
  179. /package/templates/{product-system → assistkick-product-system}/tests/play_all.test.ts +0 -0
  180. /package/templates/{product-system → assistkick-product-system}/tests/qa_issue_sheet.test.ts +0 -0
  181. /package/templates/{product-system → assistkick-product-system}/tests/relevance_search.test.ts +0 -0
  182. /package/templates/{product-system → assistkick-product-system}/tests/search_reorder.test.ts +0 -0
  183. /package/templates/{product-system → assistkick-product-system}/tests/serve_ui.test.ts +0 -0
  184. /package/templates/{product-system → assistkick-product-system}/tests/serve_ui_drizzle.test.ts +0 -0
  185. /package/templates/{product-system → assistkick-product-system}/tests/session_context_recall.test.ts +0 -0
  186. /package/templates/{product-system → assistkick-product-system}/tests/side_panel.test.ts +0 -0
  187. /package/templates/{product-system → assistkick-product-system}/tests/spec_completeness_label.test.ts +0 -0
  188. /package/templates/{product-system → assistkick-product-system}/tests/url_routing_test.ts +0 -0
  189. /package/templates/{product-system → assistkick-product-system}/tests/user_login.test.ts +0 -0
  190. /package/templates/{product-system → assistkick-product-system}/tests/user_registration.test.ts +0 -0
  191. /package/templates/{product-system → assistkick-product-system}/tests/work_summary.test.ts +0 -0
  192. /package/templates/{product-system → assistkick-product-system}/tests/zoom_pan.test.ts +0 -0
  193. /package/templates/{product-system → assistkick-product-system}/tsconfig.json +0 -0
  194. /package/templates/skills/{product-debugger → assistkick-debugger}/references/agent-browser.md +0 -0
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: product-developer
2
+ name: assistkick-developer
3
3
  description: Implement features from the specification knowledge graph following project coding standards. Use when the user wants to build, implement, or develop features defined in the product graph.
4
4
  ---
5
5
 
@@ -11,7 +11,7 @@ Your goal is to pick up features from the kanban board, implement them following
11
11
  the project's coding standards, and move them through the pipeline. You interact
12
12
  with the project spec and kanban exclusively through the tools below.
13
13
 
14
- All tools live in `product-system/packages/shared/tools/` and are run with `npx tsx`.
14
+ All tools live in `assistkick-product-system/packages/shared/tools/` and are run with `npx tsx`.
15
15
 
16
16
  ## Session Start Protocol
17
17
  1. Call `get_status` — understand current project state
@@ -72,18 +72,26 @@ Features may be sent back to `todo` with rejection notes:
72
72
  ### Browser Support
73
73
  - Latest Chrome and Firefox
74
74
 
75
+ ## Project ID
76
+
77
+ All tools require `--project-id <project_id>`. Resolve it at session start:
78
+ - If the user passed a project ID in the invocation arguments → use it directly
79
+ - Otherwise → ask the user: "Which project ID should I use?"
80
+
81
+ Use the same `<project_id>` on **every** tool call in this session.
82
+
75
83
  ## Tool Reference
76
84
 
77
85
  ### get_kanban
78
86
  ```
79
- npx tsx packages/shared/tools/get_kanban.ts # show all columns
80
- npx tsx packages/shared/tools/get_kanban.ts --column todo # only todo items
81
- npx tsx packages/shared/tools/get_kanban.ts --column qa # only qa items
87
+ npx tsx packages/shared/tools/get_kanban.ts --project-id <project_id> # show all columns
88
+ npx tsx packages/shared/tools/get_kanban.ts --project-id <project_id> --column todo # only todo items
89
+ npx tsx packages/shared/tools/get_kanban.ts --project-id <project_id> --column qa # only qa items
82
90
  ```
83
91
 
84
92
  ### move_card
85
93
  ```
86
- npx tsx packages/shared/tools/move_card.ts <feature_id> <target_column>
94
+ npx tsx packages/shared/tools/move_card.ts <feature_id> <target_column> --project-id <project_id>
87
95
  ```
88
96
  Your allowed transitions:
89
97
  - `todo` → `in_progress`
@@ -91,32 +99,32 @@ Your allowed transitions:
91
99
 
92
100
  ### start_session
93
101
  ```
94
- npx tsx packages/shared/tools/start_session.ts
102
+ npx tsx packages/shared/tools/start_session.ts --project-id <project_id>
95
103
  ```
96
104
 
97
105
  ### end_session
98
106
  ```
99
- npx tsx packages/shared/tools/end_session.ts --summary "..." --nodes-touched "feat_001,dec_001" --questions-resolved 3
107
+ npx tsx packages/shared/tools/end_session.ts --project-id <project_id> --summary "..." --nodes-touched "feat_001,dec_001" --questions-resolved 3
100
108
  ```
101
109
 
102
110
  ### search_nodes
103
111
  ```
104
- npx tsx packages/shared/tools/search_nodes.ts --query "keyword"
105
- npx tsx packages/shared/tools/search_nodes.ts --type feature
106
- npx tsx packages/shared/tools/search_nodes.ts --has-open-questions
107
- npx tsx packages/shared/tools/search_nodes.ts --completeness-below 0.5
112
+ npx tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --query "keyword"
113
+ npx tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --type feature
114
+ npx tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --has-open-questions
115
+ npx tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --completeness-below 0.5
108
116
  ```
109
117
 
110
118
  ### get_node
111
119
  ```
112
- npx tsx packages/shared/tools/get_node.ts <node_id>
113
- npx tsx packages/shared/tools/get_node.ts --name "Node Name"
120
+ npx tsx packages/shared/tools/get_node.ts <node_id> --project-id <project_id>
121
+ npx tsx packages/shared/tools/get_node.ts --name "Node Name" --project-id <project_id>
114
122
  ```
115
123
  Returns full .md content plus a Relations section listing all connected nodes with direction, relation type, name, type, and status.
116
124
 
117
125
  ### add_node
118
126
  ```
119
- npx tsx packages/shared/tools/add_node.ts --type <type> --name "Name" --description "..."
127
+ npx tsx packages/shared/tools/add_node.ts --project-id <project_id> --type <type> --name "Name" --description "..."
120
128
  ```
121
129
  Valid types: feature, component, data_entity, decision, tech_choice,
122
130
  non_functional_requirement, design_token, design_pattern, user_role,
@@ -124,23 +132,23 @@ flow, assumption, open_question
124
132
 
125
133
  ### update_node
126
134
  ```
127
- npx tsx packages/shared/tools/update_node.ts <id> --add-acceptance-criteria "..."
128
- npx tsx packages/shared/tools/update_node.ts <id> --add-open-question "..."
129
- npx tsx packages/shared/tools/update_node.ts <id> --add-note "Session N: ..."
130
- npx tsx packages/shared/tools/update_node.ts <id> --set-status <draft|partially_defined|defined>
131
- npx tsx packages/shared/tools/update_node.ts <id> --set-priority <low|medium|high|blocking>
132
- npx tsx packages/shared/tools/update_node.ts <id> --set-description "..."
133
- npx tsx packages/shared/tools/update_node.ts <id> --set-section "SectionName=content"
135
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --add-acceptance-criteria "..."
136
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --add-open-question "..."
137
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --add-note "Session N: ..."
138
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-status <draft|partially_defined|defined>
139
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-priority <low|medium|high|blocking>
140
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-description "..."
141
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-section "SectionName=content"
134
142
  ```
135
143
 
136
144
  ### resolve_question
137
145
  ```
138
- npx tsx packages/shared/tools/resolve_question.ts <id> --question "..." --answer "..."
146
+ npx tsx packages/shared/tools/resolve_question.ts <id> --project-id <project_id> --question "..." --answer "..."
139
147
  ```
140
148
 
141
149
  ### add_edge
142
150
  ```
143
- npx tsx packages/shared/tools/add_edge.ts <from_id> <relation> <to_id>
151
+ npx tsx packages/shared/tools/add_edge.ts <from_id> <relation> <to_id> --project-id <project_id>
144
152
  ```
145
153
  Valid relations: contains, depends_on, governed_by, constrained_by,
146
154
  implemented_with, reads_writes, exposes, consumes, performed_by,
@@ -148,25 +156,25 @@ escalates_to, relates_to
148
156
 
149
157
  ### remove_edge
150
158
  ```
151
- npx tsx packages/shared/tools/remove_edge.ts <from_id> <relation> <to_id>
159
+ npx tsx packages/shared/tools/remove_edge.ts <from_id> <relation> <to_id> --project-id <project_id>
152
160
  ```
153
161
 
154
162
  ### get_gaps
155
163
  ```
156
- npx tsx packages/shared/tools/get_gaps.ts
157
- npx tsx packages/shared/tools/get_gaps.ts --blocking-only
158
- npx tsx packages/shared/tools/get_gaps.ts --type feature
164
+ npx tsx packages/shared/tools/get_gaps.ts --project-id <project_id>
165
+ npx tsx packages/shared/tools/get_gaps.ts --project-id <project_id> --blocking-only
166
+ npx tsx packages/shared/tools/get_gaps.ts --project-id <project_id> --type feature
159
167
  ```
160
168
 
161
169
  ### get_status
162
170
  ```
163
- npx tsx packages/shared/tools/get_status.ts
171
+ npx tsx packages/shared/tools/get_status.ts --project-id <project_id>
164
172
  ```
165
173
 
166
174
  ### rebuild_index
167
175
  ```
168
- npx tsx packages/shared/tools/rebuild_index.ts
169
- npx tsx packages/shared/tools/rebuild_index.ts --dry-run
176
+ npx tsx packages/shared/tools/rebuild_index.ts --project-id <project_id>
177
+ npx tsx packages/shared/tools/rebuild_index.ts --project-id <project_id> --dry-run
170
178
  ```
171
179
 
172
180
  ## Rules
@@ -178,5 +186,5 @@ npx tsx packages/shared/tools/rebuild_index.ts --dry-run
178
186
  6. Write tests for every feature — test logic and data transformations
179
187
  7. If a spec is ambiguous, add an open question to the node and ask the user — do not guess
180
188
  8. Check for rejection notes when picking up a feature that was sent back to todo
181
- 9. All tool commands must be run from the `product-system/` directory
189
+ 9. All tool commands must be run from the `assistkick-product-system/` directory
182
190
  10. The `move_card` tool validates transitions — trust the error if a move is rejected
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: product-interview
2
+ name: assistkick-interview
3
3
  description: Conduct a structured requirements interview to build a specification knowledge graph. Use when the user wants to define software requirements, gather specs, build a PRD, or interview about a project's features and architecture.
4
4
  ---
5
5
 
@@ -10,7 +10,7 @@ You are conducting a structured requirements interview. Your goal is to
10
10
  progressively build a complete specification graph by asking the user-focused questions. You interact with the project exclusively through
11
11
  the tools below.
12
12
 
13
- All tools live in `product-system/packages/shared/tools/` and are run with `npx tsx`.
13
+ All tools live in `assistkick-product-system/packages/shared/tools/` and are run with `npx tsx`.
14
14
 
15
15
  ## Session Start Protocol
16
16
  1. Call `start_session` — this automatically loads context from recent sessions (last 3 session summaries, recently modified nodes, and recent decisions). Use this context to understand what was previously discussed and avoid re-asking resolved questions.
@@ -61,36 +61,44 @@ either the user has no more topics, or you've processed all their answers.
61
61
  3. Call `end_session` with summary
62
62
  4. Summarize what was covered this session in 3-5 sentences
63
63
 
64
+ ## Project ID
65
+
66
+ All tools require `--project-id <project_id>`. Resolve it at session start:
67
+ - If the user passed a project ID in the invocation arguments → use it directly
68
+ - Otherwise → ask the user: "Which project ID should I use?"
69
+
70
+ Use the same `<project_id>` on **every** tool call in this session.
71
+
64
72
  ## Tool Reference
65
73
 
66
74
  ### start_session
67
75
  ```
68
- npx tsx packages/shared/tools/start_session.ts
76
+ npx tsx packages/shared/tools/start_session.ts --project-id <project_id>
69
77
  ```
70
78
 
71
79
  ### end_session
72
80
  ```
73
- npx tsx packages/shared/tools/end_session.ts --summary "..." --nodes-touched "feat_001,dec_001" --questions-resolved 3
81
+ npx tsx packages/shared/tools/end_session.ts --project-id <project_id> --summary "..." --nodes-touched "feat_001,dec_001" --questions-resolved 3
74
82
  ```
75
83
 
76
84
  ### search_nodes
77
85
  ```
78
- npx tsx packages/shared/tools/search_nodes.ts --query "keyword"
79
- npx tsx packages/shared/tools/search_nodes.ts --type feature
80
- npx tsx packages/shared/tools/search_nodes.ts --has-open-questions
81
- npx tsx packages/shared/tools/search_nodes.ts --completeness-below 0.5
86
+ npx tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --query "keyword"
87
+ npx tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --type feature
88
+ npx tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --has-open-questions
89
+ npx tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --completeness-below 0.5
82
90
  ```
83
91
 
84
92
  ### get_node
85
93
  ```
86
- npx tsx packages/shared/tools/get_node.ts <node_id>
87
- npx tsx packages/shared/tools/get_node.ts --name "Node Name"
94
+ npx tsx packages/shared/tools/get_node.ts <node_id> --project-id <project_id>
95
+ npx tsx packages/shared/tools/get_node.ts --name "Node Name" --project-id <project_id>
88
96
  ```
89
97
  Returns full .md content plus a Relations section listing all connected nodes with direction, relation type, name, type, and status.
90
98
 
91
99
  ### add_node
92
100
  ```
93
- npx tsx packages/shared/tools/add_node.ts --type <type> --name "Name" --description "..."
101
+ npx tsx packages/shared/tools/add_node.ts --project-id <project_id> --type <type> --name "Name" --description "..."
94
102
  ```
95
103
  Valid types: feature, component, data_entity, decision, tech_choice,
96
104
  non_functional_requirement, design_token, design_pattern, user_role,
@@ -98,23 +106,23 @@ flow, assumption, open_question
98
106
 
99
107
  ### update_node
100
108
  ```
101
- npx tsx packages/shared/tools/update_node.ts <id> --add-acceptance-criteria "..."
102
- npx tsx packages/shared/tools/update_node.ts <id> --add-open-question "..."
103
- npx tsx packages/shared/tools/update_node.ts <id> --add-note "Session N: ..."
104
- npx tsx packages/shared/tools/update_node.ts <id> --set-status <draft|partially_defined|defined>
105
- npx tsx packages/shared/tools/update_node.ts <id> --set-priority <low|medium|high|blocking>
106
- npx tsx packages/shared/tools/update_node.ts <id> --set-description "..."
107
- npx tsx packages/shared/tools/update_node.ts <id> --set-section "SectionName=content"
109
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --add-acceptance-criteria "..."
110
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --add-open-question "..."
111
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --add-note "Session N: ..."
112
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-status <draft|partially_defined|defined>
113
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-priority <low|medium|high|blocking>
114
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-description "..."
115
+ npx tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-section "SectionName=content"
108
116
  ```
109
117
 
110
118
  ### resolve_question
111
119
  ```
112
- npx tsx packages/shared/tools/resolve_question.ts <id> --question "..." --answer "..."
120
+ npx tsx packages/shared/tools/resolve_question.ts <id> --project-id <project_id> --question "..." --answer "..."
113
121
  ```
114
122
 
115
123
  ### add_edge
116
124
  ```
117
- npx tsx packages/shared/tools/add_edge.ts <from_id> <relation> <to_id>
125
+ npx tsx packages/shared/tools/add_edge.ts <from_id> <relation> <to_id> --project-id <project_id>
118
126
  ```
119
127
  Valid relations: contains, depends_on, governed_by, constrained_by,
120
128
  implemented_with, reads_writes, exposes, consumes, performed_by,
@@ -122,25 +130,25 @@ escalates_to, relates_to
122
130
 
123
131
  ### remove_edge
124
132
  ```
125
- npx tsx packages/shared/tools/remove_edge.ts <from_id> <relation> <to_id>
133
+ npx tsx packages/shared/tools/remove_edge.ts <from_id> <relation> <to_id> --project-id <project_id>
126
134
  ```
127
135
 
128
136
  ### get_gaps
129
137
  ```
130
- npx tsx packages/shared/tools/get_gaps.ts
131
- npx tsx packages/shared/tools/get_gaps.ts --blocking-only
132
- npx tsx packages/shared/tools/get_gaps.ts --type feature
138
+ npx tsx packages/shared/tools/get_gaps.ts --project-id <project_id>
139
+ npx tsx packages/shared/tools/get_gaps.ts --project-id <project_id> --blocking-only
140
+ npx tsx packages/shared/tools/get_gaps.ts --project-id <project_id> --type feature
133
141
  ```
134
142
 
135
143
  ### get_status
136
144
  ```
137
- npx tsx packages/shared/tools/get_status.ts
145
+ npx tsx packages/shared/tools/get_status.ts --project-id <project_id>
138
146
  ```
139
147
 
140
148
  ### rebuild_index
141
149
  ```
142
- npx tsx packages/shared/tools/rebuild_index.ts
143
- npx tsx packages/shared/tools/rebuild_index.ts --dry-run
150
+ npx tsx packages/shared/tools/rebuild_index.ts --project-id <project_id>
151
+ npx tsx packages/shared/tools/rebuild_index.ts --project-id <project_id> --dry-run
144
152
  ```
145
153
 
146
154
  ## Search Strategy
@@ -216,5 +224,5 @@ own codebase that you have full access to.
216
224
  3. Always record answers via resolve_question — don't just add a note
217
225
  4. Nodes you create should reflect what the user actually said, not your inferences — use assumption node type for inferences
218
226
  5. If the user contradicts something in the graph, update it and add a note
219
- 6. All tool commands must be run from the `product-system/` directory
220
- 7. Never modify features that are in the Done column on the Kanban board — check `get_kanban` first. If a Done feature needs changes, create a new feature that `depends_on` the original and place it in Todo
227
+ 6. All tool commands must be run from the `assistkick-product-system/` directory
228
+ 7. Never modify features that are in the Done column on the Kanban board — check `get_kanban` first. If a Done feature needs changes, create a new feature that `depends_on` the original and place it in Backlog
@@ -1,41 +0,0 @@
1
- /**
2
- * Pipeline API routes — start/status/unblock dev pipeline.
3
- */
4
-
5
- import { Router } from 'express';
6
- import { log, pipeline } from '../services/init.js';
7
-
8
- const router: Router = Router();
9
-
10
- // POST /api/kanban/:id/develop
11
- router.post('/:id/develop', async (req, res) => {
12
- const featureId = req.params.id;
13
- try {
14
- const result = await pipeline.start(featureId);
15
- res.status(result.status).json(result.error ? { error: result.error } : { started: result.started, feature_id: result.feature_id });
16
- } catch (err: any) {
17
- log('DEVELOP', `UNEXPECTED ERROR: ${err.message}`);
18
- res.status(500).json({ error: err.message });
19
- }
20
- });
21
-
22
- // GET /api/kanban/:id/pipeline
23
- router.get('/:id/pipeline', async (req, res) => {
24
- const featureId = req.params.id;
25
- const result = await pipeline.getStatus(featureId);
26
- res.json(result);
27
- });
28
-
29
- // POST /api/kanban/:id/unblock
30
- router.post('/:id/unblock', async (req, res) => {
31
- const featureId = req.params.id;
32
- try {
33
- const result = await pipeline.unblock(featureId);
34
- res.status(result.status).json(result.error ? { error: result.error } : { unblocked: result.unblocked, feature_id: result.feature_id });
35
- } catch (err: any) {
36
- log('UNBLOCK', `ERROR: ${err.message}`);
37
- res.status(500).json({ error: err.message });
38
- }
39
- });
40
-
41
- export default router;
@@ -1,80 +0,0 @@
1
- /**
2
- * Service initialization — creates pipeline, claude service, and related instances.
3
- * Deferred until VERBOSE flag is set at startup.
4
- */
5
-
6
- import { join, dirname } from 'node:path';
7
- import { fileURLToPath } from 'node:url';
8
- import { existsSync } from 'node:fs';
9
- import { createClaudeService } from '@interview-system/shared/lib/claude-service.js';
10
- import { Pipeline } from '@interview-system/shared/lib/pipeline.js';
11
- import { PipelineStateStore } from '@interview-system/shared/lib/pipeline-state-store.js';
12
- import { PromptBuilder } from '@interview-system/shared/lib/prompt_builder.js';
13
- import { GitWorkflow } from '@interview-system/shared/lib/git_workflow.js';
14
- import { getDb } from '@interview-system/shared/lib/db.js';
15
- import { getKanbanEntry, saveKanbanEntry } from '@interview-system/shared/lib/kanban.js';
16
- import { getNode } from '@interview-system/shared/lib/graph.js';
17
- import { WorkSummaryParser } from '@interview-system/shared/lib/work_summary_parser.js';
18
-
19
- const __dirname = dirname(fileURLToPath(import.meta.url));
20
- // Navigate from packages/backend/src/services/ up to product-system/
21
- const SKILL_ROOT = join(__dirname, '..', '..', '..', '..');
22
- const SHARED_DIR = join(SKILL_ROOT, 'packages', 'shared');
23
-
24
- const IS_DEV = import.meta.url.endsWith('.ts');
25
- const TOOL_EXT = IS_DEV ? '.ts' : '.js';
26
- const TOOL_RUNNER = IS_DEV ? 'tsx' : 'node';
27
- const TOOLS_DIR = IS_DEV ? join(SHARED_DIR, 'tools') : join(__dirname, '..', '..', '..', 'shared', 'build', 'tools');
28
- const DATA_DIR = SHARED_DIR;
29
- const PROJECT_ROOT = join(SKILL_ROOT, '..');
30
- const SKILLS_DIR = join(PROJECT_ROOT, '.claude', 'skills');
31
- const WORKTREES_DIR = join(PROJECT_ROOT, '.worktrees');
32
- const DEVELOPER_SKILL_PATH = join(SKILLS_DIR, 'product-developer', 'SKILL.md');
33
- const REVIEWER_SKILL_PATH = join(SKILLS_DIR, 'product-code-reviewer', 'SKILL.md');
34
- const DEBUGGER_SKILL_PATH = join(SKILLS_DIR, 'product-debugger', 'SKILL.md');
35
-
36
- export const log = (tag: string, ...args: any[]) => {
37
- const ts = new Date().toISOString().slice(11, 23);
38
- console.log(`[${ts}] [${tag}]`, ...args);
39
- };
40
-
41
- export let claudeService: any;
42
- export let pipeline: any;
43
- export let pipelineStateStore: any;
44
-
45
- export const paths = {
46
- projectRoot: PROJECT_ROOT,
47
- worktreesDir: WORKTREES_DIR,
48
- skillsDir: SKILLS_DIR,
49
- toolsDir: TOOLS_DIR,
50
- dataDir: DATA_DIR,
51
- developerSkillPath: DEVELOPER_SKILL_PATH,
52
- reviewerSkillPath: REVIEWER_SKILL_PATH,
53
- debuggerSkillPath: DEBUGGER_SKILL_PATH,
54
- toolExt: TOOL_EXT,
55
- toolRunner: TOOL_RUNNER,
56
- };
57
-
58
- export const initServices = (verbose: boolean) => {
59
- claudeService = createClaudeService({ verbose, log });
60
- pipelineStateStore = new PipelineStateStore({ getDb });
61
- const promptBuilder = new PromptBuilder({ paths, log });
62
- const gitWorkflow = new GitWorkflow({ claudeService, projectRoot: PROJECT_ROOT, worktreesDir: WORKTREES_DIR, log });
63
- const workSummaryParser = new WorkSummaryParser();
64
- pipeline = new Pipeline({
65
- promptBuilder,
66
- gitWorkflow,
67
- claudeService,
68
- kanban: { getKanbanEntry, saveKanbanEntry },
69
- paths,
70
- log,
71
- stateStore: pipelineStateStore,
72
- workSummaryParser,
73
- getNode,
74
- });
75
-
76
- // Mark any active pipeline states as interrupted (server restart recovery)
77
- pipelineStateStore.markInterrupted().catch((err: any) => {
78
- log('STARTUP', `Failed to mark interrupted pipelines: ${err.message}`);
79
- });
80
- };
@@ -1,88 +0,0 @@
1
- import { describe, it, mock, beforeEach } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { PtySessionManager } from './pty_session_manager.ts';
4
-
5
- const createMockPty = () => {
6
- const listeners: Record<string, Function> = {};
7
- return {
8
- onData: mock.fn((cb: Function) => { listeners.data = cb; }),
9
- onExit: mock.fn((cb: Function) => { listeners.exit = cb; }),
10
- write: mock.fn(),
11
- resize: mock.fn(),
12
- kill: mock.fn(),
13
- _emit: (event: string, data: unknown) => listeners[event]?.(data),
14
- };
15
- };
16
-
17
- describe('PtySessionManager', () => {
18
- let manager: PtySessionManager;
19
- let spawnMock: ReturnType<typeof mock.fn>;
20
- let logMock: ReturnType<typeof mock.fn>;
21
- let mockPty: ReturnType<typeof createMockPty>;
22
- const PROJECT_ROOT = '/test/project/root';
23
-
24
- beforeEach(() => {
25
- mockPty = createMockPty();
26
- spawnMock = mock.fn(() => mockPty);
27
- logMock = mock.fn();
28
- manager = new PtySessionManager({ spawn: spawnMock as any, log: logMock, projectRoot: PROJECT_ROOT });
29
- });
30
-
31
- describe('spawnCommand uses projectRoot as cwd', () => {
32
- it('passes projectRoot as cwd when spawning a command', () => {
33
- manager.createSession('user1', 80, 24);
34
-
35
- // Simulate typing "claude" + Enter
36
- manager.writeToSession('user1', 'claude\r');
37
-
38
- assert.equal(spawnMock.mock.calls.length, 1);
39
- const spawnOptions = spawnMock.mock.calls[0].arguments[2] as Record<string, unknown>;
40
- assert.equal(spawnOptions.cwd, PROJECT_ROOT);
41
- });
42
- });
43
-
44
- describe('validateCommand', () => {
45
- it('allows "claude" command', () => {
46
- const result = manager.validateCommand('claude');
47
- assert.equal(result.valid, true);
48
- });
49
-
50
- it('allows "claude" with arguments', () => {
51
- const result = manager.validateCommand('claude --help');
52
- assert.equal(result.valid, true);
53
- });
54
-
55
- it('rejects disallowed commands', () => {
56
- const result = manager.validateCommand('rm -rf /');
57
- assert.equal(result.valid, false);
58
- assert.ok(result.error?.includes('not allowed'));
59
- });
60
-
61
- it('rejects empty command', () => {
62
- const result = manager.validateCommand('');
63
- assert.equal(result.valid, false);
64
- });
65
- });
66
-
67
- describe('session lifecycle', () => {
68
- it('creates a new session', () => {
69
- const session = manager.createSession('user1', 80, 24);
70
- assert.equal(session.userId, 'user1');
71
- assert.equal(session.state, 'idle');
72
- });
73
-
74
- it('reuses existing session', () => {
75
- const s1 = manager.createSession('user1', 80, 24);
76
- const s2 = manager.createSession('user1', 80, 24);
77
- assert.strictEqual(s1, s2);
78
- });
79
-
80
- it('destroys session and kills pty', () => {
81
- manager.createSession('user1', 80, 24);
82
- manager.writeToSession('user1', 'claude\r');
83
- manager.destroySession('user1');
84
- assert.equal(mockPty.kill.mock.calls.length, 1);
85
- assert.equal(manager.getSession('user1'), undefined);
86
- });
87
- });
88
- });