@assistkick/create 1.9.0 → 1.11.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 (206) hide show
  1. package/dist/src/scaffolder.d.ts +12 -1
  2. package/dist/src/scaffolder.js +40 -3
  3. package/dist/src/scaffolder.js.map +1 -1
  4. package/package.json +1 -1
  5. package/templates/assistkick-product-system/package.json +1 -1
  6. package/templates/assistkick-product-system/packages/backend/package.json +1 -0
  7. package/templates/assistkick-product-system/packages/backend/src/mcp/permission_mcp_server.ts +196 -0
  8. package/templates/assistkick-product-system/packages/backend/src/routes/agents.ts +31 -7
  9. package/templates/assistkick-product-system/packages/backend/src/routes/auth.ts +15 -12
  10. package/templates/assistkick-product-system/packages/backend/src/routes/chat_files.test.ts +95 -0
  11. package/templates/assistkick-product-system/packages/backend/src/routes/chat_files.ts +97 -0
  12. package/templates/assistkick-product-system/packages/backend/src/routes/chat_permission.ts +94 -0
  13. package/templates/assistkick-product-system/packages/backend/src/routes/chat_sessions.ts +189 -0
  14. package/templates/assistkick-product-system/packages/backend/src/routes/chat_upload.test.ts +131 -0
  15. package/templates/assistkick-product-system/packages/backend/src/routes/chat_upload.ts +94 -0
  16. package/templates/assistkick-product-system/packages/backend/src/routes/files.test.ts +12 -3
  17. package/templates/assistkick-product-system/packages/backend/src/routes/files.ts +2 -2
  18. package/templates/assistkick-product-system/packages/backend/src/routes/git.ts +391 -23
  19. package/templates/assistkick-product-system/packages/backend/src/routes/git_branches.test.ts +306 -0
  20. package/templates/assistkick-product-system/packages/backend/src/routes/git_connect.test.ts +133 -0
  21. package/templates/assistkick-product-system/packages/backend/src/routes/pipeline.ts +66 -9
  22. package/templates/assistkick-product-system/packages/backend/src/routes/preview.ts +204 -0
  23. package/templates/assistkick-product-system/packages/backend/src/routes/projects.test.ts +205 -0
  24. package/templates/assistkick-product-system/packages/backend/src/routes/projects.ts +37 -9
  25. package/templates/assistkick-product-system/packages/backend/src/routes/skills.test.ts +139 -0
  26. package/templates/assistkick-product-system/packages/backend/src/routes/skills.ts +95 -0
  27. package/templates/assistkick-product-system/packages/backend/src/routes/terminal.ts +5 -4
  28. package/templates/assistkick-product-system/packages/backend/src/routes/users.ts +4 -4
  29. package/templates/assistkick-product-system/packages/backend/src/routes/video.ts +8 -8
  30. package/templates/assistkick-product-system/packages/backend/src/routes/workflow_groups.ts +5 -5
  31. package/templates/assistkick-product-system/packages/backend/src/routes/workflows.ts +6 -6
  32. package/templates/assistkick-product-system/packages/backend/src/server.ts +107 -27
  33. package/templates/assistkick-product-system/packages/backend/src/services/agent_service.test.ts +105 -203
  34. package/templates/assistkick-product-system/packages/backend/src/services/agent_service.ts +76 -266
  35. package/templates/assistkick-product-system/packages/backend/src/services/chat_cli_bridge.test.ts +427 -0
  36. package/templates/assistkick-product-system/packages/backend/src/services/chat_cli_bridge.ts +345 -0
  37. package/templates/assistkick-product-system/packages/backend/src/services/chat_message_repository.test.ts +170 -0
  38. package/templates/assistkick-product-system/packages/backend/src/services/chat_message_repository.ts +106 -0
  39. package/templates/assistkick-product-system/packages/backend/src/services/chat_session_service.test.ts +217 -0
  40. package/templates/assistkick-product-system/packages/backend/src/services/chat_session_service.ts +188 -0
  41. package/templates/assistkick-product-system/packages/backend/src/services/chat_ws_handler.test.ts +1243 -0
  42. package/templates/assistkick-product-system/packages/backend/src/services/chat_ws_handler.ts +894 -0
  43. package/templates/assistkick-product-system/packages/backend/src/services/coherence-review.ts +3 -3
  44. package/templates/assistkick-product-system/packages/backend/src/services/dev_command_detector.test.ts +85 -0
  45. package/templates/assistkick-product-system/packages/backend/src/services/dev_command_detector.ts +54 -0
  46. package/templates/assistkick-product-system/packages/backend/src/services/email_service.ts +13 -10
  47. package/templates/assistkick-product-system/packages/backend/src/services/init.ts +11 -3
  48. package/templates/assistkick-product-system/packages/backend/src/services/invitation_service.ts +1 -1
  49. package/templates/assistkick-product-system/packages/backend/src/services/password_reset_service.ts +1 -1
  50. package/templates/assistkick-product-system/packages/backend/src/services/permission_service.test.ts +243 -0
  51. package/templates/assistkick-product-system/packages/backend/src/services/permission_service.ts +259 -0
  52. package/templates/assistkick-product-system/packages/backend/src/services/preview_server_manager.test.ts +172 -0
  53. package/templates/assistkick-product-system/packages/backend/src/services/preview_server_manager.ts +225 -0
  54. package/templates/assistkick-product-system/packages/backend/src/services/project_service.test.ts +29 -0
  55. package/templates/assistkick-product-system/packages/backend/src/services/project_service.ts +17 -0
  56. package/templates/assistkick-product-system/packages/backend/src/services/project_workspace_service.test.ts +255 -0
  57. package/templates/assistkick-product-system/packages/backend/src/services/project_workspace_service.ts +300 -25
  58. package/templates/assistkick-product-system/packages/backend/src/services/pty_session_manager.test.ts +44 -0
  59. package/templates/assistkick-product-system/packages/backend/src/services/pty_session_manager.ts +62 -7
  60. package/templates/assistkick-product-system/packages/backend/src/services/ssh_key_service.test.ts +77 -6
  61. package/templates/assistkick-product-system/packages/backend/src/services/ssh_key_service.ts +149 -14
  62. package/templates/assistkick-product-system/packages/backend/src/services/terminal_ws_handler.ts +2 -1
  63. package/templates/assistkick-product-system/packages/backend/src/services/title_generator_service.test.ts +45 -0
  64. package/templates/assistkick-product-system/packages/backend/src/services/title_generator_service.ts +157 -0
  65. package/templates/assistkick-product-system/packages/backend/src/services/tts_service.ts +4 -3
  66. package/templates/assistkick-product-system/packages/backend/src/services/video_render_service.ts +3 -3
  67. package/templates/assistkick-product-system/packages/frontend/package.json +5 -0
  68. package/templates/assistkick-product-system/packages/frontend/src/App.tsx +2 -0
  69. package/templates/assistkick-product-system/packages/frontend/src/api/client.ts +336 -5
  70. package/templates/assistkick-product-system/packages/frontend/src/components/AgentsView.tsx +192 -12
  71. package/templates/assistkick-product-system/packages/frontend/src/components/AttachmentPreviewList.tsx +98 -0
  72. package/templates/assistkick-product-system/packages/frontend/src/components/AutocompleteDropdown.tsx +65 -0
  73. package/templates/assistkick-product-system/packages/frontend/src/components/ChatAttachButton.tsx +56 -0
  74. package/templates/assistkick-product-system/packages/frontend/src/components/ChatDropZone.tsx +80 -0
  75. package/templates/assistkick-product-system/packages/frontend/src/components/ChatMessageBubble.tsx +155 -0
  76. package/templates/assistkick-product-system/packages/frontend/src/components/ChatMessageContent.tsx +182 -0
  77. package/templates/assistkick-product-system/packages/frontend/src/components/ChatMessageInput.tsx +233 -0
  78. package/templates/assistkick-product-system/packages/frontend/src/components/ChatSessionSidebar.tsx +218 -0
  79. package/templates/assistkick-product-system/packages/frontend/src/components/ChatStopButton.tsx +32 -0
  80. package/templates/assistkick-product-system/packages/frontend/src/components/ChatTodoSidebar.tsx +113 -0
  81. package/templates/assistkick-product-system/packages/frontend/src/components/ChatView.tsx +842 -0
  82. package/templates/assistkick-product-system/packages/frontend/src/components/CommitMessageModal.tsx +82 -0
  83. package/templates/assistkick-product-system/packages/frontend/src/components/DiagramOverlay.tsx +160 -0
  84. package/templates/assistkick-product-system/packages/frontend/src/components/EditorTabBar.tsx +5 -5
  85. package/templates/assistkick-product-system/packages/frontend/src/components/FileTree.tsx +9 -10
  86. package/templates/assistkick-product-system/packages/frontend/src/components/FileTreeInlineInput.tsx +5 -5
  87. package/templates/assistkick-product-system/packages/frontend/src/components/FilesView.tsx +112 -41
  88. package/templates/assistkick-product-system/packages/frontend/src/components/GraphLegend.tsx +2 -2
  89. package/templates/assistkick-product-system/packages/frontend/src/components/HighlightedText.tsx +87 -0
  90. package/templates/assistkick-product-system/packages/frontend/src/components/ImageLightbox.tsx +192 -0
  91. package/templates/assistkick-product-system/packages/frontend/src/components/KanbanView.tsx +2 -2
  92. package/templates/assistkick-product-system/packages/frontend/src/components/MentionPill.tsx +33 -0
  93. package/templates/assistkick-product-system/packages/frontend/src/components/MermaidBlock.tsx +148 -0
  94. package/templates/assistkick-product-system/packages/frontend/src/components/PermissionDialog.tsx +91 -0
  95. package/templates/assistkick-product-system/packages/frontend/src/components/PermissionModeSelector.tsx +229 -0
  96. package/templates/assistkick-product-system/packages/frontend/src/components/ProjectSelector.tsx +249 -83
  97. package/templates/assistkick-product-system/packages/frontend/src/components/QueuedMessageBubble.tsx +38 -0
  98. package/templates/assistkick-product-system/packages/frontend/src/components/SidePanel.tsx +212 -117
  99. package/templates/assistkick-product-system/packages/frontend/src/components/SystemPromptAccordion.tsx +48 -0
  100. package/templates/assistkick-product-system/packages/frontend/src/components/TaskIcon.tsx +11 -0
  101. package/templates/assistkick-product-system/packages/frontend/src/components/TerminalView.tsx +25 -9
  102. package/templates/assistkick-product-system/packages/frontend/src/components/ToolDiffView.tsx +114 -0
  103. package/templates/assistkick-product-system/packages/frontend/src/components/ToolResultCard.tsx +87 -0
  104. package/templates/assistkick-product-system/packages/frontend/src/components/ToolUseCard.tsx +149 -0
  105. package/templates/assistkick-product-system/packages/frontend/src/components/Toolbar.tsx +25 -8
  106. package/templates/assistkick-product-system/packages/frontend/src/components/UnifiedGitWidget.tsx +722 -0
  107. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/GroupNode.tsx +2 -0
  108. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/NodePalette.tsx +2 -1
  109. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/ProgrammableNode.tsx +178 -0
  110. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/WorkflowCanvas.tsx +3 -0
  111. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/WorkflowMonitorModal.tsx +103 -9
  112. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/monitor_nodes.tsx +26 -2
  113. package/templates/assistkick-product-system/packages/frontend/src/components/workflow/workflow_types.ts +42 -1
  114. package/templates/assistkick-product-system/packages/frontend/src/hooks/useDocumentTitle.ts +11 -0
  115. package/templates/assistkick-product-system/packages/frontend/src/hooks/useProjects.ts +1 -0
  116. package/templates/assistkick-product-system/packages/frontend/src/hooks/use_chat_stream.ts +826 -0
  117. package/templates/assistkick-product-system/packages/frontend/src/hooks/use_file_tree_cache.ts +69 -0
  118. package/templates/assistkick-product-system/packages/frontend/src/hooks/use_mention_autocomplete.ts +284 -0
  119. package/templates/assistkick-product-system/packages/frontend/src/lib/attachment_manager.test.ts +183 -0
  120. package/templates/assistkick-product-system/packages/frontend/src/lib/attachment_manager.ts +150 -0
  121. package/templates/assistkick-product-system/packages/frontend/src/lib/chat_message_helpers.test.ts +305 -0
  122. package/templates/assistkick-product-system/packages/frontend/src/lib/chat_message_helpers.ts +113 -0
  123. package/templates/assistkick-product-system/packages/frontend/src/lib/context_usage_helpers.test.ts +157 -0
  124. package/templates/assistkick-product-system/packages/frontend/src/lib/context_usage_helpers.ts +95 -0
  125. package/templates/assistkick-product-system/packages/frontend/src/lib/mermaid_helpers.test.ts +65 -0
  126. package/templates/assistkick-product-system/packages/frontend/src/lib/mermaid_helpers.ts +110 -0
  127. package/templates/assistkick-product-system/packages/frontend/src/lib/message_queue.ts +66 -0
  128. package/templates/assistkick-product-system/packages/frontend/src/lib/tool_use_summary.test.ts +124 -0
  129. package/templates/assistkick-product-system/packages/frontend/src/lib/tool_use_summary.ts +112 -0
  130. package/templates/assistkick-product-system/packages/frontend/src/routes/AgentsRoute.tsx +2 -0
  131. package/templates/assistkick-product-system/packages/frontend/src/routes/ChatRoute.tsx +8 -0
  132. package/templates/assistkick-product-system/packages/frontend/src/routes/CoherenceRoute.tsx +2 -0
  133. package/templates/assistkick-product-system/packages/frontend/src/routes/DashboardLayout.tsx +0 -4
  134. package/templates/assistkick-product-system/packages/frontend/src/routes/DesignSystemRoute.tsx +2 -0
  135. package/templates/assistkick-product-system/packages/frontend/src/routes/FilesRoute.tsx +2 -0
  136. package/templates/assistkick-product-system/packages/frontend/src/routes/GraphRoute.tsx +2 -0
  137. package/templates/assistkick-product-system/packages/frontend/src/routes/KanbanRoute.tsx +2 -0
  138. package/templates/assistkick-product-system/packages/frontend/src/routes/TerminalRoute.tsx +2 -0
  139. package/templates/assistkick-product-system/packages/frontend/src/routes/UsersRoute.tsx +2 -0
  140. package/templates/assistkick-product-system/packages/frontend/src/routes/VideographyRoute.tsx +2 -0
  141. package/templates/assistkick-product-system/packages/frontend/src/routes/WorkflowsRoute.tsx +2 -0
  142. package/templates/assistkick-product-system/packages/frontend/src/routes/accept_invitation.tsx +2 -0
  143. package/templates/assistkick-product-system/packages/frontend/src/routes/forgot_password.tsx +2 -0
  144. package/templates/assistkick-product-system/packages/frontend/src/routes/login.tsx +2 -0
  145. package/templates/assistkick-product-system/packages/frontend/src/routes/register.tsx +2 -0
  146. package/templates/assistkick-product-system/packages/frontend/src/routes/reset_password.tsx +2 -0
  147. package/templates/assistkick-product-system/packages/frontend/src/stores/useAttachmentStore.ts +66 -0
  148. package/templates/assistkick-product-system/packages/frontend/src/stores/useChatSessionStore.ts +107 -0
  149. package/templates/assistkick-product-system/packages/frontend/src/stores/useMessageQueueStore.ts +110 -0
  150. package/templates/assistkick-product-system/packages/frontend/src/stores/usePreviewStore.ts +78 -0
  151. package/templates/assistkick-product-system/packages/frontend/src/stores/useProjectStore.ts +7 -0
  152. package/templates/assistkick-product-system/packages/frontend/src/stores/useSidePanelStore.ts +6 -1
  153. package/templates/assistkick-product-system/packages/frontend/src/styles/index.css +30 -357
  154. package/templates/assistkick-product-system/packages/frontend/src/utils/parse_node_markdown.test.ts +115 -0
  155. package/templates/assistkick-product-system/packages/frontend/src/utils/parse_node_markdown.ts +91 -0
  156. package/templates/assistkick-product-system/packages/frontend/src/utils/preview_utils.test.ts +30 -0
  157. package/templates/assistkick-product-system/packages/frontend/src/utils/preview_utils.ts +3 -0
  158. package/templates/assistkick-product-system/packages/shared/db/migrations/0015_magenta_jazinda.sql +1 -0
  159. package/templates/assistkick-product-system/packages/shared/db/migrations/0016_giant_xorn.sql +1 -0
  160. package/templates/assistkick-product-system/packages/shared/db/migrations/0017_sloppy_mentor.sql +6 -0
  161. package/templates/assistkick-product-system/packages/shared/db/migrations/0018_vengeful_kabuki.sql +9 -0
  162. package/templates/assistkick-product-system/packages/shared/db/migrations/0019_careful_sentinels.sql +8 -0
  163. package/templates/assistkick-product-system/packages/shared/db/migrations/0020_clever_spot.sql +27 -0
  164. package/templates/assistkick-product-system/packages/shared/db/migrations/0021_graceful_hex.sql +1 -0
  165. package/templates/assistkick-product-system/packages/shared/db/migrations/0022_short_kingpin.sql +1 -0
  166. package/templates/assistkick-product-system/packages/shared/db/migrations/0023_ambiguous_sharon_carter.sql +1 -0
  167. package/templates/assistkick-product-system/packages/shared/db/migrations/0024_fat_unus.sql +1 -0
  168. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0015_snapshot.json +1552 -0
  169. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0016_snapshot.json +1560 -0
  170. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0017_snapshot.json +1598 -0
  171. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0018_snapshot.json +1657 -0
  172. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0019_snapshot.json +1709 -0
  173. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0020_snapshot.json +1733 -0
  174. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0021_snapshot.json +1740 -0
  175. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0022_snapshot.json +1755 -0
  176. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0023_snapshot.json +1762 -0
  177. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/0024_snapshot.json +1769 -0
  178. package/templates/assistkick-product-system/packages/shared/db/migrations/meta/_journal.json +70 -0
  179. package/templates/assistkick-product-system/packages/shared/db/schema.ts +40 -1
  180. package/templates/assistkick-product-system/packages/shared/lib/claude-service.test.ts +236 -0
  181. package/templates/assistkick-product-system/packages/shared/lib/claude-service.ts +46 -5
  182. package/templates/assistkick-product-system/packages/shared/lib/git_workflow.ts +65 -39
  183. package/templates/assistkick-product-system/packages/shared/lib/programmable_node_executor.test.ts +173 -0
  184. package/templates/assistkick-product-system/packages/shared/lib/programmable_node_executor.ts +213 -0
  185. package/templates/assistkick-product-system/packages/shared/lib/validator.test.ts +70 -0
  186. package/templates/assistkick-product-system/packages/shared/lib/validator.ts +17 -1
  187. package/templates/assistkick-product-system/packages/shared/lib/workflow_engine.test.ts +803 -27
  188. package/templates/assistkick-product-system/packages/shared/lib/workflow_engine.ts +502 -68
  189. package/templates/assistkick-product-system/packages/shared/lib/workflow_orchestrator.ts +4 -4
  190. package/templates/assistkick-product-system/packages/shared/package.json +2 -1
  191. package/templates/assistkick-product-system/packages/shared/test_fixtures/hanging_stream.mjs +46 -0
  192. package/templates/assistkick-product-system/packages/shared/tools/add_node.test.ts +44 -0
  193. package/templates/assistkick-product-system/packages/shared/tools/add_node.ts +7 -0
  194. package/templates/assistkick-product-system/packages/shared/tools/remove_node.ts +2 -1
  195. package/templates/assistkick-product-system/packages/shared/tools/resolve_question.ts +2 -1
  196. package/templates/assistkick-product-system/packages/shared/tools/update_node.ts +2 -1
  197. package/templates/assistkick-product-system/tests/message_queue.test.ts +178 -0
  198. package/templates/assistkick-product-system/tests/message_queue_per_session.test.ts +143 -0
  199. package/templates/skills/assistkick-bootstrap/SKILL.md +26 -26
  200. package/templates/skills/assistkick-code-reviewer/SKILL.md +45 -46
  201. package/templates/skills/assistkick-db-explorer/SKILL.md +13 -13
  202. package/templates/skills/assistkick-debugger/SKILL.md +23 -23
  203. package/templates/skills/assistkick-developer/SKILL.md +59 -63
  204. package/templates/skills/assistkick-interview/SKILL.md +26 -26
  205. package/templates/skills/assistkick-video-composition-agent/SKILL.md +231 -0
  206. package/templates/skills/assistkick-video-script-writer/SKILL.md +136 -0
@@ -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 `assistkick-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 `pnpm 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.
@@ -73,32 +73,32 @@ Use the same `<project_id>` on **every** tool call in this session.
73
73
 
74
74
  ### start_session
75
75
  ```
76
- npx tsx packages/shared/tools/start_session.ts --project-id <project_id>
76
+ pnpm tsx packages/shared/tools/start_session.ts --project-id <project_id>
77
77
  ```
78
78
 
79
79
  ### end_session
80
80
  ```
81
- npx tsx packages/shared/tools/end_session.ts --project-id <project_id> --summary "..." --nodes-touched "feat_001,dec_001" --questions-resolved 3
81
+ pnpm tsx packages/shared/tools/end_session.ts --project-id <project_id> --summary "..." --nodes-touched "feat_001,dec_001" --questions-resolved 3
82
82
  ```
83
83
 
84
84
  ### search_nodes
85
85
  ```
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
86
+ pnpm tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --query "keyword"
87
+ pnpm tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --type feature
88
+ pnpm tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --has-open-questions
89
+ pnpm tsx packages/shared/tools/search_nodes.ts --project-id <project_id> --completeness-below 0.5
90
90
  ```
91
91
 
92
92
  ### get_node
93
93
  ```
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>
94
+ pnpm tsx packages/shared/tools/get_node.ts <node_id> --project-id <project_id>
95
+ pnpm tsx packages/shared/tools/get_node.ts --name "Node Name" --project-id <project_id>
96
96
  ```
97
97
  Returns the node content (formatted as markdown) plus a Relations section listing all connected nodes with direction, relation type, name, type, and status.
98
98
 
99
99
  ### add_node
100
100
  ```
101
- npx tsx packages/shared/tools/add_node.ts --project-id <project_id> --type <type> --name "Name" --description "..."
101
+ pnpm tsx packages/shared/tools/add_node.ts --project-id <project_id> --type <type> --name "Name" --description "..."
102
102
  ```
103
103
  Valid types: feature, component, data_entity, decision, tech_choice,
104
104
  non_functional_requirement, design_token, design_pattern, user_role,
@@ -106,23 +106,23 @@ flow, assumption, open_question
106
106
 
107
107
  ### update_node
108
108
  ```
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"
109
+ pnpm tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --add-acceptance-criteria "..."
110
+ pnpm tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --add-open-question "..."
111
+ pnpm tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --add-note "Session N: ..."
112
+ pnpm tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-status <draft|partially_defined|defined>
113
+ pnpm tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-priority <low|medium|high|blocking>
114
+ pnpm tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-description "..."
115
+ pnpm tsx packages/shared/tools/update_node.ts <id> --project-id <project_id> --set-section "SectionName=content"
116
116
  ```
117
117
 
118
118
  ### resolve_question
119
119
  ```
120
- npx tsx packages/shared/tools/resolve_question.ts <id> --project-id <project_id> --question "..." --answer "..."
120
+ pnpm tsx packages/shared/tools/resolve_question.ts <id> --project-id <project_id> --question "..." --answer "..."
121
121
  ```
122
122
 
123
123
  ### add_edge
124
124
  ```
125
- npx tsx packages/shared/tools/add_edge.ts <from_id> <relation> <to_id> --project-id <project_id>
125
+ pnpm tsx packages/shared/tools/add_edge.ts <from_id> <relation> <to_id> --project-id <project_id>
126
126
  ```
127
127
  Valid relations: contains, depends_on, governed_by, constrained_by,
128
128
  implemented_with, reads_writes, exposes, consumes, performed_by,
@@ -130,25 +130,25 @@ escalates_to, relates_to
130
130
 
131
131
  ### remove_edge
132
132
  ```
133
- npx tsx packages/shared/tools/remove_edge.ts <from_id> <relation> <to_id> --project-id <project_id>
133
+ pnpm tsx packages/shared/tools/remove_edge.ts <from_id> <relation> <to_id> --project-id <project_id>
134
134
  ```
135
135
 
136
136
  ### get_gaps
137
137
  ```
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
138
+ pnpm tsx packages/shared/tools/get_gaps.ts --project-id <project_id>
139
+ pnpm tsx packages/shared/tools/get_gaps.ts --project-id <project_id> --blocking-only
140
+ pnpm tsx packages/shared/tools/get_gaps.ts --project-id <project_id> --type feature
141
141
  ```
142
142
 
143
143
  ### get_status
144
144
  ```
145
- npx tsx packages/shared/tools/get_status.ts --project-id <project_id>
145
+ pnpm tsx packages/shared/tools/get_status.ts --project-id <project_id>
146
146
  ```
147
147
 
148
148
  ### rebuild_index
149
149
  ```
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
150
+ pnpm tsx packages/shared/tools/rebuild_index.ts --project-id <project_id>
151
+ pnpm tsx packages/shared/tools/rebuild_index.ts --project-id <project_id> --dry-run
152
152
  ```
153
153
 
154
154
  ## Search Strategy
@@ -0,0 +1,231 @@
1
+ ---
2
+ name: assistikick-video-composition-agent
3
+ description: AI agent that reads a video script markdown and generates Remotion composition code with React components, scene definitions, transitions, and Root.tsx registration.
4
+ ---
5
+
6
+ # Video Composition Agent
7
+
8
+ ## Your Role
9
+ You are a Remotion composition developer. Given a video script markdown file,
10
+ you generate the full Remotion composition code: React components for each scene,
11
+ a SCENE_IDS array, FALLBACK_DURATIONS map, TransitionSeries layout with transitions,
12
+ and custom scene components as needed. You write the composition files and register
13
+ the composition in Root.tsx.
14
+
15
+ ## Input
16
+ You receive:
17
+ 1. A **script markdown file** at `packages/video/scripts/<composition-name>-script.md`
18
+ 2. The **composition name** (kebab-case), provided by the user or invoking agent
19
+ 3. Access to **existing shared components** in `packages/video/components/`.
20
+
21
+ ## Output
22
+ You produce:
23
+ 1. A composition file at `packages/video/compositions/<composition-name>/index.tsx`
24
+ 2. Any custom scene components needed in `packages/video/components/`
25
+ 3. An updated `packages/video/Root.tsx` that imports and registers the new composition
26
+
27
+ ## Remotion Best Practices
28
+
29
+ ### Frame Rate and Duration
30
+ - Default fps is 30. All duration calculations use frames (seconds * 30).
31
+ - Use `FALLBACK_DURATIONS` as default frame counts per scene. At runtime,
32
+ `durations.json` (generated by the TTS pipeline) overrides these with actual
33
+ audio lengths.
34
+ - Keep fallback durations generous — slightly longer is better than cutting off.
35
+
36
+ ### Component Architecture
37
+ - Use `AbsoluteFill` as the root container for scenes.
38
+ - Use `useCurrentFrame()` and `useVideoConfig()` for animation timing.
39
+ - Use `spring()` for entrance animations, `interpolate()` for linear progressions.
40
+ - Use `<OffthreadVideo>` (from `remotion`) for video embeds — never `<video>`.
41
+ - Use `<Audio>` (from `remotion`) for narration audio tracks.
42
+ - Use `<TransitionSeries>` with `<TransitionSeries.Sequence>` and
43
+ `<TransitionSeries.Transition>` for scene flow with transitions.
44
+
45
+ ### Transitions
46
+ - Import transitions from `@remotion/transitions/presentations`:
47
+ `fade`, `slide`, `wipe`, `clockWipe`, `flip`.
48
+ - Apply timing with `springTiming` from `@remotion/transitions`.
49
+ - Use `fade()` as the default transition between scenes.
50
+ - Match transitions to the script's Visual descriptions when they mention
51
+ specific transition styles (e.g., "Slide in from right" → `slide()`).
52
+
53
+ ### Audio Integration
54
+ - Narration audio files are referenced by their directive ID:
55
+ `{mediaBasePath}/{narrationId}.mp3`
56
+ - The composition receives `mediaBasePath` via `inputProps` at render time.
57
+ - In the composition, define audio sources using the narration IDs from the script.
58
+ - Wrap audio in `<Audio>` components positioned within the corresponding
59
+ `<TransitionSeries.Sequence>`.
60
+
61
+ ### Video Integration
62
+ - Screencapture video files are referenced by their directive ID:
63
+ `{mediaBasePath}/{screencaptureId}.mp4`
64
+ - Use `<OffthreadVideo>` inside scenes that include screen recordings.
65
+ - Position videos using `VideoSplitLayout` or full-screen depending on the
66
+ script's Visual description.
67
+
68
+ ## Script Format Reference
69
+
70
+ Scripts use `:::` fenced directives for media markers:
71
+
72
+ ```
73
+ :::narration scene-1-intro
74
+ Narration text here.
75
+ :::
76
+
77
+ :::screencapture scene-1-demo
78
+ Recording instructions here.
79
+ :::
80
+ ```
81
+
82
+ Each `## Scene N: Title` section contains:
83
+ - A **Visual** paragraph describing the on-screen layout and animations
84
+ - One or more `:::narration` directives with spoken text
85
+ - Optional `:::screencapture` directives with recording instructions
86
+
87
+ ## Shared Components Library
88
+
89
+ Before creating new components, check what already exists in `packages/video/components/`.
90
+ Import and reuse these instead of duplicating:
91
+
92
+ ### Available Components
93
+ - **`theme.ts`** — `colors` (primary, secondary, accentPrimary, accentSecondary, baseDark)
94
+ and `fonts` (sans, mono). Always use these for consistent styling.
95
+ - **`TitleScene`** — Opening title card with brand name, title, accent title, subtitle,
96
+ decorative line, and background gradients. Props: `brandName?`, `title`, `subtitle?`, `titleAccent?`.
97
+ - **`Scene`** — Main content scene with step badge, title, bullets, optional video.
98
+ Props: `stepNumber`, `title`, `bullets`, `route?`, `part`, `highlight?`, `video?`, `partLabel?`.
99
+ - **`PartDivider`** — Section break between parts. Props: `partNumber`, `title`, `color`.
100
+ - **`EmailScene`** — Email card display with progressive line reveals.
101
+ Props: `stepNumber?`, `partLabel?`, `title?`, `senderName?`, `subject?`, `emailLines?`.
102
+ - **`OutroScene`** — Closing scene with checkmark, title, subtitle, optional CTA.
103
+ Props: `title?`, `subtitle?`, `callToAction?`.
104
+ - **`VideoSplitLayout`** — 60/40 split layout for video + content side by side.
105
+ Props: `video?`, `backgroundColor`, `accentColor`, `children` (render prop receiving `hasVideo`).
106
+
107
+ ### When to Create New Components
108
+ Only create a new component when:
109
+ - The script describes a scene type not covered by existing components
110
+ - The visual layout is fundamentally different from any shared component
111
+ - The component would be reusable across multiple compositions
112
+
113
+ Place new components in `packages/video/components/` with snake_case filenames.
114
+ Follow the same patterns: `/** @jsxImportSource react */`, import from remotion,
115
+ use `theme.ts` colors and fonts, use spring/interpolate for animations.
116
+
117
+ ## Composition File Structure
118
+
119
+ Each composition is a single `index.tsx` file in `packages/video/compositions/{compositionName}/`:
120
+
121
+ ```tsx
122
+ /** @jsxImportSource react */
123
+ import { AbsoluteFill, Audio, OffthreadVideo, useCurrentFrame, useVideoConfig } from "remotion";
124
+ import { TransitionSeries } from "@remotion/transitions";
125
+ import { fade } from "@remotion/transitions/presentations/fade";
126
+ import { springTiming } from "@remotion/transitions";
127
+ import { TitleScene } from "../../components/title_scene";
128
+ import { Scene } from "../../components/scene";
129
+ import { OutroScene } from "../../components/outro_scene";
130
+ import { colors } from "../../components/theme";
131
+
132
+ // ── Scene IDs ─────────────────────────────────────────────────────────────
133
+ // Ordered list of scene identifiers matching the script sections.
134
+ export const SCENE_IDS = [
135
+ "title",
136
+ "scene-1-overview",
137
+ "scene-2-demo",
138
+ "outro",
139
+ ] as const;
140
+
141
+ // ── Fallback Durations ────────────────────────────────────────────────────
142
+ // Default frame counts per scene (at 30 fps). Overridden at render time
143
+ // by durations.json from the TTS pipeline.
144
+ export const FALLBACK_DURATIONS: Record<string, number> = {
145
+ "title": 120, // 4s
146
+ "scene-1-overview": 180, // 6s
147
+ "scene-2-demo": 240, // 8s
148
+ "outro": 120, // 4s
149
+ };
150
+
151
+ // ── Props ─────────────────────────────────────────────────────────────────
152
+ type CompositionProps = {
153
+ durations?: Record<string, number>;
154
+ mediaBasePath?: string;
155
+ };
156
+
157
+ // ── Main Composition ──────────────────────────────────────────────────────
158
+ const MyComposition: React.FC<CompositionProps> = ({
159
+ durations = FALLBACK_DURATIONS,
160
+ mediaBasePath = "",
161
+ }) => {
162
+ const getDuration = (id: string) => durations[id] ?? FALLBACK_DURATIONS[id] ?? 150;
163
+ const audioSrc = (id: string) => mediaBasePath ? `${mediaBasePath}/${id}.mp3` : "";
164
+ const videoSrc = (id: string) => mediaBasePath ? `${mediaBasePath}/${id}.mp4` : "";
165
+
166
+ return (
167
+ <TransitionSeries>
168
+ <TransitionSeries.Sequence durationInFrames={getDuration("title")}>
169
+ <TitleScene title="My Video" subtitle="A walkthrough" />
170
+ {audioSrc("scene-1-intro") && <Audio src={audioSrc("scene-1-intro")} />}
171
+ </TransitionSeries.Sequence>
172
+
173
+ <TransitionSeries.Transition
174
+ presentation={fade()}
175
+ timing={springTiming({ config: { damping: 200 } })}
176
+ />
177
+
178
+ {/* ... more scenes ... */}
179
+
180
+ <TransitionSeries.Sequence durationInFrames={getDuration("outro")}>
181
+ <OutroScene title="Thanks!" subtitle="See you next time" />
182
+ </TransitionSeries.Sequence>
183
+ </TransitionSeries>
184
+ );
185
+ };
186
+
187
+ // ── Composition Export ────────────────────────────────────────────────────
188
+ // Total duration sums all scene fallback durations.
189
+ const totalDuration = Object.values(FALLBACK_DURATIONS).reduce((a, b) => a + b, 0);
190
+
191
+ export const id = "my-composition";
192
+ export const component = MyComposition;
193
+ export const durationInFrames = totalDuration;
194
+ export const fps = 30;
195
+ export const width = 1920;
196
+ export const height = 1080;
197
+ export const defaultProps: CompositionProps = {};
198
+ ```
199
+
200
+ ## Root.tsx Registration
201
+
202
+ After creating the composition, update `packages/video/Root.tsx`:
203
+
204
+ 1. Add an import for the new composition module:
205
+ ```tsx
206
+ import * as MyComposition from "./compositions/my-composition/index";
207
+ ```
208
+
209
+ 2. Add it to the `compositions` array:
210
+ ```tsx
211
+ const compositions: CompositionEntry[] = [MyComposition];
212
+ ```
213
+
214
+ If compositions already exist in the array, append to the existing list.
215
+
216
+ ## Instructions
217
+
218
+ 1. Read the script file at `packages/video/scripts/<composition-name>-script.md`
219
+ 2. Parse all scenes: extract scene titles, Visual descriptions, narration IDs, screencapture IDs
220
+ 3. List all existing components in `packages/video/components/` — identify which can be reused
221
+ 4. For each scene, decide:
222
+ - Can an existing component handle this? → import and use it
223
+ - Is a new component needed? → create it in `packages/video/components/`
224
+ 5. Write the composition `index.tsx` with:
225
+ - SCENE_IDS array matching the script's scene structure
226
+ - FALLBACK_DURATIONS with reasonable frame counts based on narration length
227
+ - TransitionSeries layout with appropriate transitions between scenes
228
+ - Audio components for each narration directive
229
+ - OffthreadVideo components for each screencapture directive
230
+ 6. Register the composition in Root.tsx
231
+ 7. Ensure all imports resolve correctly (relative paths from composition to components)
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: assistkick-video-script-writer
3
+ description: AI agent that writes video script markdown files from a user's video brief/description using fenced directive format.
4
+ ---
5
+
6
+ # Video Script Writer Agent
7
+
8
+ ## Your Role
9
+ You are a video script writer. Given a video brief/description, you write a complete
10
+ script markdown file that will be used to produce a video with Remotion.
11
+ Your script follows the video-script-authoring conventions and uses fenced directive
12
+ markers for narration and screencapture segments.
13
+
14
+ ## Input
15
+ You receive a **feature description** that describes the video to be produced.
16
+ This is the user's brief — it explains what the video should cover, the tone,
17
+ the target audience, and any specific scenes or topics to include.
18
+
19
+ ## Output
20
+ You write a single markdown file at:
21
+ ```
22
+ packages/video/scripts/<composition-name>-script.md
23
+ ```
24
+ The composition name is provided by the user or the invoking agent. Use kebab-case.
25
+
26
+ The file must be a complete video script following the conventions below.
27
+
28
+ ## Video Script Authoring Conventions
29
+
30
+ ### Document Structure
31
+ A script is a markdown file with:
32
+ 1. A top-level `# Title` heading for the video
33
+ 2. A brief intro paragraph describing the video's purpose and audience
34
+ 3. Multiple `## Scene N: Scene Title` sections, each containing:
35
+ - A **Visual** paragraph describing what the viewer sees on screen
36
+ - One or more `:::narration` directives with the spoken text
37
+ - Optional `:::screencapture` directives with recording instructions
38
+
39
+ ### Fenced Directive Format
40
+ Media markers use `:::` fenced directives — **not** XML tags.
41
+
42
+ **Narration directive** — spoken text for TTS generation:
43
+ ```
44
+ :::narration scene-1-intro
45
+ Welcome to our product walkthrough. In this video, we'll explore the key features
46
+ that make our platform powerful and easy to use.
47
+ :::
48
+ ```
49
+
50
+ **Screencapture directive** — recording instructions for screen captures:
51
+ ```
52
+ :::screencapture scene-1-demo
53
+ Record the dashboard view at 1920x1080. Navigate from the home page to the
54
+ analytics tab, hover over the main chart, then click the "Export" button.
55
+ :::
56
+ ```
57
+
58
+ ### Directive Rules
59
+ - IDs must be unique, descriptive, and kebab-case (e.g., `scene-2-feature-overview`)
60
+ - Narration text is plain prose — no markdown formatting inside directives
61
+ - Screencapture descriptions are instructions for a human or automation to follow
62
+ - Each scene should have at least one narration directive
63
+ - Place directives after the Visual description paragraph in each scene
64
+ - Keep narration segments to 2-4 sentences for natural pacing
65
+
66
+ ### Example Script
67
+ ```markdown
68
+ # Product Feature Walkthrough
69
+
70
+ A 3-minute walkthrough video for new users demonstrating the core features
71
+ of the platform.
72
+
73
+ ## Scene 1: Introduction
74
+
75
+ **Visual:** Title card with the product logo centered on a gradient background.
76
+ Fade in the tagline below the logo.
77
+
78
+ :::narration scene-1-intro
79
+ Welcome to our product walkthrough. Today we'll explore the features that help
80
+ teams collaborate more effectively.
81
+ :::
82
+
83
+ ## Scene 2: Dashboard Overview
84
+
85
+ **Visual:** Screen recording of the main dashboard. Highlight the navigation
86
+ sidebar and the activity feed.
87
+
88
+ :::screencapture scene-2-dashboard
89
+ Record the dashboard at 1920x1080. Log in as demo user, wait for the dashboard
90
+ to load completely, then slowly scroll through the activity feed.
91
+ :::
92
+
93
+ :::narration scene-2-overview
94
+ The dashboard gives you a real-time view of your team's activity. On the left
95
+ you'll find the navigation sidebar, and the main area shows your activity feed.
96
+ :::
97
+
98
+ ## Scene 3: Conclusion
99
+
100
+ **Visual:** Outro card with call-to-action and website URL.
101
+
102
+ :::narration scene-3-outro
103
+ That's a quick tour of our platform. Sign up today to start collaborating
104
+ with your team.
105
+ :::
106
+ ```
107
+
108
+ ## Remotion Best Practices Context
109
+
110
+ The scripts you write will be consumed by a downstream Remotion composition agent
111
+ that converts them into React component code. Keep these constraints in mind:
112
+
113
+ - **Scene pacing**: Each narration segment maps to a timed scene. Keep segments
114
+ focused and concise so the composition agent can assign appropriate frame durations.
115
+ - **Visual descriptions matter**: The composition agent reads your Visual paragraphs
116
+ to decide which React components and layouts to use. Be specific about layout,
117
+ animations, and visual elements.
118
+ - **Screencapture placement**: Screencapture videos are placed as `<OffthreadVideo>`
119
+ elements in Remotion. Reference them in the Visual paragraph so the composition
120
+ agent knows where to position them.
121
+ - **Consistent IDs**: The narration and screencapture IDs are used as file stems
122
+ for audio/video assets (e.g., `scene-1-intro.mp3`, `scene-2-dashboard.mp4`).
123
+ Make them descriptive and unique.
124
+ - **Transitions**: Mention desired transitions between scenes in the Visual paragraph
125
+ (e.g., "Fade in from black", "Slide in from right") so the composition agent
126
+ can apply Remotion transition effects.
127
+ - **30 fps default**: Remotion compositions default to 30 fps. A 3-second narration
128
+ = 90 frames. Structure scenes so narrations align with visual changes.
129
+
130
+ ## Instructions
131
+ 1. Read the feature description carefully
132
+ 2. Plan the video structure: how many scenes, what content in each
133
+ 3. Write the full script markdown file to `packages/video/scripts/<composition-name>-script.md`
134
+ 4. Ensure every scene has a Visual paragraph and at least one narration directive
135
+ 5. Use unique, descriptive IDs for all directives
136
+ 6. Keep the total narration length appropriate for the described video duration