@aion0/forge 0.5.26 → 0.5.27

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 (253) hide show
  1. package/.forge/worktrees/pipeline-4dd8dc2d/CLAUDE.md +86 -0
  2. package/.forge/worktrees/pipeline-4dd8dc2d/README.md +136 -0
  3. package/.forge/worktrees/pipeline-4dd8dc2d/RELEASE_NOTES.md +36 -0
  4. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/agents/route.ts +17 -0
  5. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/auth/[...nextauth]/route.ts +3 -0
  6. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/auth/verify/route.ts +46 -0
  7. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude/[id]/route.ts +31 -0
  8. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude/[id]/stream/route.ts +63 -0
  9. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude/route.ts +28 -0
  10. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-sessions/[projectName]/entries/route.ts +23 -0
  11. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-sessions/[projectName]/live/route.ts +72 -0
  12. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-sessions/[projectName]/route.ts +37 -0
  13. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-sessions/sync/route.ts +17 -0
  14. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-templates/route.ts +145 -0
  15. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/code/route.ts +299 -0
  16. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/delivery/[id]/route.ts +62 -0
  17. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/delivery/route.ts +40 -0
  18. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/detect-cli/route.ts +46 -0
  19. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/docs/route.ts +176 -0
  20. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/docs/sessions/route.ts +54 -0
  21. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/favorites/route.ts +26 -0
  22. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/flows/route.ts +6 -0
  23. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/flows/run/route.ts +19 -0
  24. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/git/route.ts +149 -0
  25. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/help/route.ts +84 -0
  26. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/issue-scanner/route.ts +116 -0
  27. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/logs/route.ts +100 -0
  28. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/mobile-chat/route.ts +115 -0
  29. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/monitor/route.ts +74 -0
  30. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/notifications/route.ts +42 -0
  31. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/notify/test/route.ts +33 -0
  32. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/online/route.ts +40 -0
  33. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/pipelines/[id]/route.ts +41 -0
  34. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/pipelines/route.ts +90 -0
  35. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/plugins/route.ts +75 -0
  36. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/preview/[...path]/route.ts +64 -0
  37. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/preview/route.ts +156 -0
  38. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/project-pipelines/route.ts +91 -0
  39. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/project-sessions/route.ts +61 -0
  40. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/projects/route.ts +26 -0
  41. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/sessions/[id]/chat/route.ts +64 -0
  42. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/sessions/[id]/messages/route.ts +9 -0
  43. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/sessions/[id]/route.ts +17 -0
  44. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/sessions/route.ts +20 -0
  45. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/settings/route.ts +64 -0
  46. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/skills/local/route.ts +228 -0
  47. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/skills/route.ts +182 -0
  48. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/smith-templates/route.ts +81 -0
  49. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/status/route.ts +12 -0
  50. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tabs/route.ts +25 -0
  51. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/[id]/route.ts +51 -0
  52. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/[id]/stream/route.ts +77 -0
  53. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/link/route.ts +37 -0
  54. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/route.ts +44 -0
  55. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/session/route.ts +14 -0
  56. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/telegram/route.ts +23 -0
  57. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/templates/route.ts +6 -0
  58. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/terminal-bell/route.ts +39 -0
  59. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/terminal-cwd/route.ts +19 -0
  60. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/terminal-state/route.ts +15 -0
  61. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tunnel/route.ts +26 -0
  62. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/upgrade/route.ts +43 -0
  63. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/usage/route.ts +20 -0
  64. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/version/route.ts +78 -0
  65. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/watchers/route.ts +33 -0
  66. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/[id]/agents/route.ts +35 -0
  67. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/[id]/memory/route.ts +23 -0
  68. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/[id]/smith/route.ts +22 -0
  69. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/[id]/stream/route.ts +31 -0
  70. package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/route.ts +79 -0
  71. package/.forge/worktrees/pipeline-4dd8dc2d/app/global-error.tsx +21 -0
  72. package/.forge/worktrees/pipeline-4dd8dc2d/app/globals.css +52 -0
  73. package/.forge/worktrees/pipeline-4dd8dc2d/app/icon.ico +0 -0
  74. package/.forge/worktrees/pipeline-4dd8dc2d/app/icon.png +0 -0
  75. package/.forge/worktrees/pipeline-4dd8dc2d/app/icon.svg +106 -0
  76. package/.forge/worktrees/pipeline-4dd8dc2d/app/layout.tsx +17 -0
  77. package/.forge/worktrees/pipeline-4dd8dc2d/app/login/LoginForm.tsx +96 -0
  78. package/.forge/worktrees/pipeline-4dd8dc2d/app/login/page.tsx +10 -0
  79. package/.forge/worktrees/pipeline-4dd8dc2d/app/mobile/page.tsx +10 -0
  80. package/.forge/worktrees/pipeline-4dd8dc2d/app/page.tsx +22 -0
  81. package/.forge/worktrees/pipeline-4dd8dc2d/bin/forge-server.mjs +484 -0
  82. package/.forge/worktrees/pipeline-4dd8dc2d/check-forge-status.sh +71 -0
  83. package/.forge/worktrees/pipeline-4dd8dc2d/cli/mw.ts +579 -0
  84. package/.forge/worktrees/pipeline-4dd8dc2d/components/BrowserPanel.tsx +175 -0
  85. package/.forge/worktrees/pipeline-4dd8dc2d/components/ChatPanel.tsx +191 -0
  86. package/.forge/worktrees/pipeline-4dd8dc2d/components/ClaudeTerminal.tsx +267 -0
  87. package/.forge/worktrees/pipeline-4dd8dc2d/components/CodeViewer.tsx +787 -0
  88. package/.forge/worktrees/pipeline-4dd8dc2d/components/ConversationEditor.tsx +411 -0
  89. package/.forge/worktrees/pipeline-4dd8dc2d/components/ConversationGraphView.tsx +347 -0
  90. package/.forge/worktrees/pipeline-4dd8dc2d/components/ConversationTerminalView.tsx +303 -0
  91. package/.forge/worktrees/pipeline-4dd8dc2d/components/Dashboard.tsx +807 -0
  92. package/.forge/worktrees/pipeline-4dd8dc2d/components/DashboardWrapper.tsx +9 -0
  93. package/.forge/worktrees/pipeline-4dd8dc2d/components/DeliveryFlowEditor.tsx +491 -0
  94. package/.forge/worktrees/pipeline-4dd8dc2d/components/DeliveryList.tsx +230 -0
  95. package/.forge/worktrees/pipeline-4dd8dc2d/components/DeliveryWorkspace.tsx +589 -0
  96. package/.forge/worktrees/pipeline-4dd8dc2d/components/DocTerminal.tsx +187 -0
  97. package/.forge/worktrees/pipeline-4dd8dc2d/components/DocsViewer.tsx +574 -0
  98. package/.forge/worktrees/pipeline-4dd8dc2d/components/HelpDialog.tsx +169 -0
  99. package/.forge/worktrees/pipeline-4dd8dc2d/components/HelpTerminal.tsx +141 -0
  100. package/.forge/worktrees/pipeline-4dd8dc2d/components/InlinePipelineView.tsx +111 -0
  101. package/.forge/worktrees/pipeline-4dd8dc2d/components/LogViewer.tsx +194 -0
  102. package/.forge/worktrees/pipeline-4dd8dc2d/components/MarkdownContent.tsx +73 -0
  103. package/.forge/worktrees/pipeline-4dd8dc2d/components/MobileView.tsx +385 -0
  104. package/.forge/worktrees/pipeline-4dd8dc2d/components/MonitorPanel.tsx +122 -0
  105. package/.forge/worktrees/pipeline-4dd8dc2d/components/NewSessionModal.tsx +93 -0
  106. package/.forge/worktrees/pipeline-4dd8dc2d/components/NewTaskModal.tsx +492 -0
  107. package/.forge/worktrees/pipeline-4dd8dc2d/components/PipelineEditor.tsx +570 -0
  108. package/.forge/worktrees/pipeline-4dd8dc2d/components/PipelineView.tsx +1018 -0
  109. package/.forge/worktrees/pipeline-4dd8dc2d/components/PluginsPanel.tsx +472 -0
  110. package/.forge/worktrees/pipeline-4dd8dc2d/components/ProjectDetail.tsx +1618 -0
  111. package/.forge/worktrees/pipeline-4dd8dc2d/components/ProjectList.tsx +108 -0
  112. package/.forge/worktrees/pipeline-4dd8dc2d/components/ProjectManager.tsx +401 -0
  113. package/.forge/worktrees/pipeline-4dd8dc2d/components/SessionList.tsx +74 -0
  114. package/.forge/worktrees/pipeline-4dd8dc2d/components/SessionView.tsx +726 -0
  115. package/.forge/worktrees/pipeline-4dd8dc2d/components/SettingsModal.tsx +1647 -0
  116. package/.forge/worktrees/pipeline-4dd8dc2d/components/SkillsPanel.tsx +969 -0
  117. package/.forge/worktrees/pipeline-4dd8dc2d/components/StatusBar.tsx +99 -0
  118. package/.forge/worktrees/pipeline-4dd8dc2d/components/TabBar.tsx +46 -0
  119. package/.forge/worktrees/pipeline-4dd8dc2d/components/TaskBoard.tsx +113 -0
  120. package/.forge/worktrees/pipeline-4dd8dc2d/components/TaskDetail.tsx +372 -0
  121. package/.forge/worktrees/pipeline-4dd8dc2d/components/TerminalLauncher.tsx +398 -0
  122. package/.forge/worktrees/pipeline-4dd8dc2d/components/TunnelToggle.tsx +206 -0
  123. package/.forge/worktrees/pipeline-4dd8dc2d/components/UsagePanel.tsx +207 -0
  124. package/.forge/worktrees/pipeline-4dd8dc2d/components/WebTerminal.tsx +1743 -0
  125. package/.forge/worktrees/pipeline-4dd8dc2d/components/WorkspaceTree.tsx +221 -0
  126. package/.forge/worktrees/pipeline-4dd8dc2d/components/WorkspaceView.tsx +4048 -0
  127. package/.forge/worktrees/pipeline-4dd8dc2d/dev-test.sh +5 -0
  128. package/.forge/worktrees/pipeline-4dd8dc2d/docs/Forge_Memory_Layer_Design.docx +0 -0
  129. package/.forge/worktrees/pipeline-4dd8dc2d/docs/Forge_Strategy_Research_2026.docx +0 -0
  130. package/.forge/worktrees/pipeline-4dd8dc2d/docs/LOCAL-DEPLOY.md +144 -0
  131. package/.forge/worktrees/pipeline-4dd8dc2d/docs/roadmap-multi-agent-workflow.md +330 -0
  132. package/.forge/worktrees/pipeline-4dd8dc2d/forge-logo.png +0 -0
  133. package/.forge/worktrees/pipeline-4dd8dc2d/forge-logo.svg +106 -0
  134. package/.forge/worktrees/pipeline-4dd8dc2d/hooks/useSidebarResize.ts +52 -0
  135. package/.forge/worktrees/pipeline-4dd8dc2d/install.sh +29 -0
  136. package/.forge/worktrees/pipeline-4dd8dc2d/instrumentation.ts +35 -0
  137. package/.forge/worktrees/pipeline-4dd8dc2d/lib/agents/claude-adapter.ts +104 -0
  138. package/.forge/worktrees/pipeline-4dd8dc2d/lib/agents/generic-adapter.ts +64 -0
  139. package/.forge/worktrees/pipeline-4dd8dc2d/lib/agents/index.ts +245 -0
  140. package/.forge/worktrees/pipeline-4dd8dc2d/lib/agents/types.ts +70 -0
  141. package/.forge/worktrees/pipeline-4dd8dc2d/lib/artifacts.ts +106 -0
  142. package/.forge/worktrees/pipeline-4dd8dc2d/lib/auth.ts +62 -0
  143. package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/docker.yaml +70 -0
  144. package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/http.yaml +66 -0
  145. package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/jenkins.yaml +92 -0
  146. package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/llm-vision.yaml +85 -0
  147. package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/playwright.yaml +111 -0
  148. package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/shell-command.yaml +60 -0
  149. package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/slack.yaml +48 -0
  150. package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/webhook.yaml +56 -0
  151. package/.forge/worktrees/pipeline-4dd8dc2d/lib/claude-process.ts +361 -0
  152. package/.forge/worktrees/pipeline-4dd8dc2d/lib/claude-sessions.ts +266 -0
  153. package/.forge/worktrees/pipeline-4dd8dc2d/lib/claude-templates.ts +227 -0
  154. package/.forge/worktrees/pipeline-4dd8dc2d/lib/cloudflared.ts +424 -0
  155. package/.forge/worktrees/pipeline-4dd8dc2d/lib/crypto.ts +67 -0
  156. package/.forge/worktrees/pipeline-4dd8dc2d/lib/delivery.ts +787 -0
  157. package/.forge/worktrees/pipeline-4dd8dc2d/lib/dirs.ts +99 -0
  158. package/.forge/worktrees/pipeline-4dd8dc2d/lib/flows.ts +86 -0
  159. package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-mcp-server.ts +732 -0
  160. package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-skills/forge-inbox.md +38 -0
  161. package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-skills/forge-send.md +47 -0
  162. package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-skills/forge-status.md +32 -0
  163. package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-skills/forge-workspace-sync.md +37 -0
  164. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/00-overview.md +40 -0
  165. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/01-settings.md +194 -0
  166. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/02-telegram.md +41 -0
  167. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/03-tunnel.md +31 -0
  168. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/04-tasks.md +52 -0
  169. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/05-pipelines.md +460 -0
  170. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/06-skills.md +43 -0
  171. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/07-projects.md +73 -0
  172. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/08-rules.md +53 -0
  173. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/09-issue-autofix.md +55 -0
  174. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/10-troubleshooting.md +89 -0
  175. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/11-workspace.md +810 -0
  176. package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/CLAUDE.md +62 -0
  177. package/.forge/worktrees/pipeline-4dd8dc2d/lib/init.ts +266 -0
  178. package/.forge/worktrees/pipeline-4dd8dc2d/lib/issue-scanner.ts +298 -0
  179. package/.forge/worktrees/pipeline-4dd8dc2d/lib/logger.ts +79 -0
  180. package/.forge/worktrees/pipeline-4dd8dc2d/lib/notifications.ts +75 -0
  181. package/.forge/worktrees/pipeline-4dd8dc2d/lib/notify.ts +108 -0
  182. package/.forge/worktrees/pipeline-4dd8dc2d/lib/password.ts +97 -0
  183. package/.forge/worktrees/pipeline-4dd8dc2d/lib/pipeline-scheduler.ts +373 -0
  184. package/.forge/worktrees/pipeline-4dd8dc2d/lib/pipeline.ts +1565 -0
  185. package/.forge/worktrees/pipeline-4dd8dc2d/lib/plugins/executor.ts +347 -0
  186. package/.forge/worktrees/pipeline-4dd8dc2d/lib/plugins/registry.ts +228 -0
  187. package/.forge/worktrees/pipeline-4dd8dc2d/lib/plugins/types.ts +103 -0
  188. package/.forge/worktrees/pipeline-4dd8dc2d/lib/project-sessions.ts +53 -0
  189. package/.forge/worktrees/pipeline-4dd8dc2d/lib/projects.ts +86 -0
  190. package/.forge/worktrees/pipeline-4dd8dc2d/lib/session-manager.ts +156 -0
  191. package/.forge/worktrees/pipeline-4dd8dc2d/lib/session-utils.ts +53 -0
  192. package/.forge/worktrees/pipeline-4dd8dc2d/lib/session-watcher.ts +345 -0
  193. package/.forge/worktrees/pipeline-4dd8dc2d/lib/settings.ts +195 -0
  194. package/.forge/worktrees/pipeline-4dd8dc2d/lib/skills.ts +458 -0
  195. package/.forge/worktrees/pipeline-4dd8dc2d/lib/task-manager.ts +951 -0
  196. package/.forge/worktrees/pipeline-4dd8dc2d/lib/telegram-bot.ts +1477 -0
  197. package/.forge/worktrees/pipeline-4dd8dc2d/lib/telegram-standalone.ts +83 -0
  198. package/.forge/worktrees/pipeline-4dd8dc2d/lib/terminal-server.ts +70 -0
  199. package/.forge/worktrees/pipeline-4dd8dc2d/lib/terminal-standalone.ts +438 -0
  200. package/.forge/worktrees/pipeline-4dd8dc2d/lib/usage-scanner.ts +249 -0
  201. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/__tests__/state-machine.test.ts +388 -0
  202. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/__tests__/workspace.test.ts +311 -0
  203. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/agent-bus.ts +416 -0
  204. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/agent-worker.ts +655 -0
  205. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/backends/api-backend.ts +262 -0
  206. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/backends/cli-backend.ts +491 -0
  207. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/index.ts +84 -0
  208. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/manager.ts +136 -0
  209. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/orchestrator.ts +3415 -0
  210. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/persistence.ts +309 -0
  211. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/presets.ts +649 -0
  212. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/requests.ts +287 -0
  213. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/session-monitor.ts +240 -0
  214. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/skill-installer.ts +275 -0
  215. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/smith-memory.ts +498 -0
  216. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/types.ts +241 -0
  217. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/watch-manager.ts +560 -0
  218. package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace-standalone.ts +978 -0
  219. package/.forge/worktrees/pipeline-4dd8dc2d/middleware.ts +51 -0
  220. package/.forge/worktrees/pipeline-4dd8dc2d/next.config.ts +26 -0
  221. package/.forge/worktrees/pipeline-4dd8dc2d/package.json +74 -0
  222. package/.forge/worktrees/pipeline-4dd8dc2d/pnpm-lock.yaml +3719 -0
  223. package/.forge/worktrees/pipeline-4dd8dc2d/pnpm-workspace.yaml +1 -0
  224. package/.forge/worktrees/pipeline-4dd8dc2d/postcss.config.mjs +7 -0
  225. package/.forge/worktrees/pipeline-4dd8dc2d/publish.sh +133 -0
  226. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/README.md +66 -0
  227. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/results/.gitignore +2 -0
  228. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/run.ts +635 -0
  229. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/01-text-utils/task.md +26 -0
  230. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/01-text-utils/validator.sh +46 -0
  231. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/02-pagination/setup.sh +19 -0
  232. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/02-pagination/task.md +48 -0
  233. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/02-pagination/validator.sh +69 -0
  234. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/03-bug-fix/setup.sh +82 -0
  235. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/03-bug-fix/task.md +30 -0
  236. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/03-bug-fix/validator.sh +29 -0
  237. package/.forge/worktrees/pipeline-4dd8dc2d/scripts/verify-usage.ts +178 -0
  238. package/.forge/worktrees/pipeline-4dd8dc2d/src/config/index.ts +129 -0
  239. package/.forge/worktrees/pipeline-4dd8dc2d/src/core/db/database.ts +259 -0
  240. package/.forge/worktrees/pipeline-4dd8dc2d/src/core/memory/strategy.ts +32 -0
  241. package/.forge/worktrees/pipeline-4dd8dc2d/src/core/providers/chat.ts +65 -0
  242. package/.forge/worktrees/pipeline-4dd8dc2d/src/core/providers/registry.ts +60 -0
  243. package/.forge/worktrees/pipeline-4dd8dc2d/src/core/session/manager.ts +190 -0
  244. package/.forge/worktrees/pipeline-4dd8dc2d/src/types/index.ts +129 -0
  245. package/.forge/worktrees/pipeline-4dd8dc2d/start.sh +32 -0
  246. package/.forge/worktrees/pipeline-4dd8dc2d/templates/smith-lead.json +45 -0
  247. package/.forge/worktrees/pipeline-4dd8dc2d/tsconfig.json +42 -0
  248. package/RELEASE_NOTES.md +11 -28
  249. package/app/api/terminal-bell/route.ts +6 -2
  250. package/components/WebTerminal.tsx +36 -2
  251. package/lib/terminal-standalone.ts +19 -2
  252. package/next-env.d.ts +1 -1
  253. package/package.json +1 -1
@@ -0,0 +1,460 @@
1
+ # Pipelines (Workflows)
2
+
3
+ ## What Are Pipelines?
4
+
5
+ Pipelines chain multiple tasks into a DAG (directed acyclic graph). Each step can depend on previous steps, pass outputs forward, and run in parallel. Pipelines are defined as YAML workflow files.
6
+
7
+ ## YAML Workflow Format
8
+
9
+ ```yaml
10
+ name: my-workflow
11
+ description: "What this workflow does"
12
+ input:
13
+ feature: "Feature description" # required input fields
14
+ priority: "Priority level (optional)"
15
+ vars:
16
+ project: my-app # default variables
17
+ nodes:
18
+ design:
19
+ project: "{{vars.project}}"
20
+ prompt: "Design: {{input.feature}}"
21
+ outputs:
22
+ - name: spec
23
+ extract: result
24
+ implement:
25
+ project: "{{vars.project}}"
26
+ depends_on: [design]
27
+ prompt: "Implement based on: {{nodes.design.outputs.spec}}"
28
+ outputs:
29
+ - name: diff
30
+ extract: git_diff
31
+ review:
32
+ project: "{{vars.project}}"
33
+ depends_on: [implement]
34
+ prompt: "Review the changes"
35
+ ```
36
+
37
+ ## Node Options
38
+
39
+ | Field | Description | Default |
40
+ |-------|-------------|---------|
41
+ | `project` | Project name (supports templates) | required |
42
+ | `prompt` | Claude Code prompt or shell command | required |
43
+ | `mode` | `claude` (AI agent) or `shell` (raw command) | `claude` |
44
+ | `branch` | Auto-checkout branch before running (supports templates) | none |
45
+ | `depends_on` | List of node IDs that must complete first | `[]` |
46
+ | `outputs` | Extract results (see Output Extraction) | `[]` |
47
+ | `routes` | Conditional routing to next nodes (see Routing) | `[]` |
48
+ | `max_iterations` | Max loop iterations for routed nodes | `3` |
49
+
50
+ ## Node Modes
51
+
52
+ ### `claude` (default)
53
+ Runs the prompt via Claude Code (`claude -p`). The AI agent reads the codebase, makes changes, and returns a result.
54
+
55
+ ### `shell`
56
+ Runs the prompt as a raw shell command (`bash -c "..."`). Useful for git operations, CLI tools, API calls, etc.
57
+
58
+ ```yaml
59
+ nodes:
60
+ setup:
61
+ mode: shell
62
+ project: my-app
63
+ prompt: |
64
+ git checkout main && git pull && echo "READY"
65
+ outputs:
66
+ - name: info
67
+ extract: stdout
68
+ ```
69
+
70
+ **Shell escaping**: Template values in shell mode are automatically escaped (single quotes `'` → `'\''`) to prevent injection.
71
+
72
+ ## Template Variables
73
+
74
+ Templates use `{{...}}` syntax and are resolved before execution:
75
+
76
+ - `{{input.xxx}}` — pipeline input values provided at trigger time
77
+ - `{{vars.xxx}}` — workflow-level variables defined in YAML
78
+ - `{{nodes.<node_id>.outputs.<output_name>}}` — outputs from completed nodes
79
+
80
+ Node IDs can contain hyphens (e.g., `{{nodes.fetch-issue.outputs.data}}`).
81
+
82
+ ### Examples
83
+
84
+ ```yaml
85
+ prompt: "Fix issue #{{input.issue_id}} in {{input.project}}"
86
+ prompt: "Based on: {{nodes.design.outputs.spec}}"
87
+ prompt: |
88
+ REPO={{nodes.setup.outputs.repo}} && \
89
+ gh pr create --title "Fix #{{input.issue_id}}" -R "$REPO"
90
+ ```
91
+
92
+ ## Output Extraction
93
+
94
+ Each node can extract outputs for downstream nodes:
95
+
96
+ | Extract Type | Description |
97
+ |-------------|-------------|
98
+ | `result` | Claude's final response text |
99
+ | `stdout` | Shell command stdout (same as result for shell mode) |
100
+ | `git_diff` | Git diff of changes made during the task |
101
+
102
+ ```yaml
103
+ outputs:
104
+ - name: summary
105
+ extract: result
106
+ - name: changes
107
+ extract: git_diff
108
+ ```
109
+
110
+ ## Skip Convention (`__SKIP__`)
111
+
112
+ If a shell node outputs `__SKIP__` in its stdout and exits with code 0, the node is marked as `skipped` instead of `done`. All downstream dependent nodes are also skipped. The pipeline completes successfully (not failed).
113
+
114
+ ```yaml
115
+ nodes:
116
+ check:
117
+ mode: shell
118
+ project: my-app
119
+ prompt: |
120
+ if [ -z "{{input.issue_id}}" ]; then
121
+ echo "__SKIP__ No issue_id provided"
122
+ exit 0
123
+ fi
124
+ echo "Processing issue {{input.issue_id}}"
125
+ ```
126
+
127
+ Use this for optional steps that should gracefully skip when preconditions aren't met.
128
+
129
+ ## Conditional Routing
130
+
131
+ Nodes can route to different next steps based on output content:
132
+
133
+ ```yaml
134
+ nodes:
135
+ analyze:
136
+ project: my-app
137
+ prompt: "Analyze the issue. Reply SIMPLE or COMPLEX."
138
+ outputs:
139
+ - name: complexity
140
+ extract: result
141
+ routes:
142
+ - condition: "{{outputs.complexity contains 'SIMPLE'}}"
143
+ next: quick-fix
144
+ - condition: default
145
+ next: deep-fix
146
+ quick-fix:
147
+ depends_on: [analyze]
148
+ project: my-app
149
+ prompt: "Apply a quick fix"
150
+ deep-fix:
151
+ depends_on: [analyze]
152
+ project: my-app
153
+ prompt: "Do a thorough analysis and fix"
154
+ ```
155
+
156
+ ### Route Conditions
157
+
158
+ - `{{outputs.<name> contains '<keyword>'}}` — check if output contains a keyword
159
+ - `default` — fallback route (always matches)
160
+
161
+ ### Loops
162
+
163
+ If a route points back to the same node, it creates a loop (up to `max_iterations`):
164
+
165
+ ```yaml
166
+ nodes:
167
+ fix-and-test:
168
+ project: my-app
169
+ prompt: "Fix the failing test, then run tests."
170
+ max_iterations: 5
171
+ outputs:
172
+ - name: test_result
173
+ extract: result
174
+ routes:
175
+ - condition: "{{outputs.test_result contains 'PASS'}}"
176
+ next: done
177
+ - condition: default
178
+ next: fix-and-test # loop back to retry
179
+ done:
180
+ depends_on: [fix-and-test]
181
+ mode: shell
182
+ project: my-app
183
+ prompt: "echo 'All tests passing!'"
184
+ ```
185
+
186
+ ## Branch Auto-checkout
187
+
188
+ Pipeline steps automatically use **git worktree** for isolated execution. Each step gets its own working copy — your main working directory is never affected.
189
+
190
+ ```yaml
191
+ nodes:
192
+ work:
193
+ project: my-app
194
+ branch: "feature/{{input.feature_name}}" # optional: custom branch name
195
+ prompt: "Implement the feature"
196
+ ```
197
+
198
+ **How it works:**
199
+ - If `branch` is specified, a worktree is created at `<project>/.forge/worktrees/<branch>/`
200
+ - If `branch` is omitted, an auto-generated branch `pipeline/<id>` is used
201
+ - **All step modes** (shell, agent, prompt, plugin) run inside the worktree
202
+ - After completion, the worktree is preserved for review
203
+ - Clean up: `git worktree remove <path>` after reviewing changes
204
+
205
+ **Shell steps in worktree:**
206
+
207
+ Shell steps receive 3 environment variables for worktree context:
208
+
209
+ | Variable | Value | Example |
210
+ |----------|-------|---------|
211
+ | `FORGE_WORKTREE` | Worktree path (current working directory) | `/project/.forge/worktrees/pipeline-abc12345` |
212
+ | `FORGE_WORKTREE_BRANCH` | Branch name for this worktree | `pipeline/abc12345` or `feature/my-feature` |
213
+ | `FORGE_PROJECT_ROOT` | Original project root path | `/Users/me/projects/my-app` |
214
+
215
+ Use these when shell scripts need to reference the original repo:
216
+
217
+ ```yaml
218
+ nodes:
219
+ push-changes:
220
+ mode: shell
221
+ prompt: |
222
+ git add -A && git commit -m "Pipeline changes" &&
223
+ git push origin "$FORGE_WORKTREE_BRANCH"
224
+ ```
225
+
226
+ To operate on the original repo from a shell step:
227
+ ```yaml
228
+ check-main:
229
+ mode: shell
230
+ prompt: |
231
+ cd "$FORGE_PROJECT_ROOT" && git log --oneline -5
232
+ ```
233
+
234
+ **Benefits:**
235
+ - Your working directory stays clean during pipeline execution
236
+ - Multiple pipelines can run in parallel on the same project
237
+ - Changes are isolated on branches, easy to review/merge/discard
238
+ - All step modes use the same isolation — consistent behavior
239
+
240
+ ## Parallel Execution
241
+
242
+ Nodes without dependency relationships run in parallel:
243
+
244
+ ```yaml
245
+ nodes:
246
+ frontend:
247
+ project: my-app
248
+ prompt: "Build frontend component"
249
+ backend:
250
+ project: my-app
251
+ prompt: "Build API endpoint"
252
+ integration:
253
+ depends_on: [frontend, backend] # waits for both
254
+ project: my-app
255
+ prompt: "Integration test"
256
+ ```
257
+
258
+ `frontend` and `backend` run simultaneously; `integration` starts when both finish.
259
+
260
+ ## Built-in Workflows
261
+
262
+ ### issue-fix-and-review
263
+ Complete issue resolution: fetch GitHub issue → fix code on new branch → create PR.
264
+
265
+ **Input**: `issue_id`, `project`, `base_branch` (optional), `extra_context` (optional)
266
+
267
+ **Steps**: setup → fetch-issue → fix-code → push-and-pr → notify
268
+
269
+ **Prerequisites**: `gh` CLI installed and authenticated (`gh auth login`), project has GitHub remote.
270
+
271
+ ### pr-review
272
+ Review a pull request: fetch PR diff → AI review → report.
273
+
274
+ **Input**: `pr_number`, `project`
275
+
276
+ **Steps**: setup → fetch-pr → review → post-review
277
+
278
+ ## Project Pipeline Bindings
279
+
280
+ Projects can bind workflows for easy access and scheduled execution.
281
+
282
+ ### Binding a Workflow to a Project
283
+
284
+ 1. Go to **Projects → select project → Pipelines tab**
285
+ 2. Click **+ Add** to attach a workflow
286
+ 3. Configure:
287
+ - **Enabled**: toggle on/off
288
+ - **Schedule**: Manual only, or periodic (15min to 24h intervals)
289
+ 4. Click **Run** to manually trigger
290
+
291
+ ### Scheduled Execution
292
+
293
+ When a schedule is set (e.g., "Every 30 min"):
294
+ - The scheduler checks all bindings every 60 seconds
295
+ - If the interval has elapsed since last run, the pipeline triggers automatically
296
+ - Running pipelines are not re-triggered (prevents overlap)
297
+ - `Last run` and `Next run` times are shown in the UI
298
+
299
+ Schedule options: Manual only, 15min, 30min, 1h, 2h, 6h, 12h, 24h.
300
+
301
+ ### API
302
+
303
+ ```bash
304
+ # List bindings + runs + workflows for a project
305
+ curl "http://localhost:8403/api/project-pipelines?project=/path/to/project"
306
+
307
+ # Add binding
308
+ curl -X POST http://localhost:8403/api/project-pipelines \
309
+ -H 'Content-Type: application/json' \
310
+ -d '{"action":"add","projectPath":"/path","projectName":"my-app","workflowName":"issue-fix-and-review"}'
311
+
312
+ # Update binding (enable/disable, change config/schedule)
313
+ curl -X POST http://localhost:8403/api/project-pipelines \
314
+ -H 'Content-Type: application/json' \
315
+ -d '{"action":"update","projectPath":"/path","workflowName":"issue-fix-and-review","config":{"interval":30}}'
316
+
317
+ # Trigger pipeline manually
318
+ curl -X POST http://localhost:8403/api/project-pipelines \
319
+ -H 'Content-Type: application/json' \
320
+ -d '{"action":"trigger","projectPath":"/path","projectName":"my-app","workflowName":"issue-fix-and-review","input":{"issue_id":"42"}}'
321
+
322
+ # Remove binding
323
+ curl -X POST http://localhost:8403/api/project-pipelines \
324
+ -H 'Content-Type: application/json' \
325
+ -d '{"action":"remove","projectPath":"/path","workflowName":"issue-fix-and-review"}'
326
+ ```
327
+
328
+ ## CLI
329
+
330
+ ```bash
331
+ forge flows # list available workflows
332
+ forge run my-workflow # execute a workflow
333
+ ```
334
+
335
+ ## Import a Workflow
336
+
337
+ 1. In **Pipelines** tab, click **Import**
338
+ 2. Paste YAML workflow content
339
+ 3. Click **Save Workflow**
340
+
341
+ Or save YAML directly to `~/.forge/data/flows/<name>.yaml`.
342
+
343
+ To create a workflow via Help AI: ask "Create a pipeline that does X" — the AI will generate the YAML for you to import.
344
+
345
+ ## Creating Workflows via API
346
+
347
+ ```bash
348
+ curl -X POST http://localhost:8403/api/pipelines \
349
+ -H 'Content-Type: application/json' \
350
+ -d '{"action": "save-workflow", "yaml": "<yaml content>"}'
351
+ ```
352
+
353
+ ## Conversation Mode (Multi-Agent Dialogue)
354
+
355
+ Conversation mode enables multiple agents to collaborate through structured dialogue. Instead of a DAG of tasks, Forge acts as a message broker — sending prompts between agents in rounds until a stop condition is met.
356
+
357
+ ### YAML Format
358
+
359
+ ```yaml
360
+ name: architect-implementer
361
+ type: conversation
362
+ description: "Architect designs, implementer builds"
363
+ input:
364
+ project: "Project name"
365
+ task: "What to build"
366
+ agents:
367
+ - id: architect
368
+ agent: claude
369
+ role: "You are a software architect. Design the solution, define interfaces, and review implementations."
370
+ - id: implementer
371
+ agent: codex
372
+ role: "You are a developer. Implement what the architect designs."
373
+ max_rounds: 10
374
+ stop_condition: "both agents say DONE"
375
+ initial_prompt: "Build: {{input.task}}"
376
+ ```
377
+
378
+ ### Fields
379
+
380
+ | Field | Description | Default |
381
+ |-------|-------------|---------|
382
+ | `type` | Must be `conversation` | required |
383
+ | `agents` | List of participating agents | required |
384
+ | `agents[].id` | Logical ID within conversation | required |
385
+ | `agents[].agent` | Agent registry ID (`claude`, `codex`, `aider`, etc.) | `claude` |
386
+ | `agents[].role` | System prompt / role description | none |
387
+ | `agents[].project` | Project context (overrides input.project) | none |
388
+ | `max_rounds` | Maximum number of full rounds | `10` |
389
+ | `stop_condition` | When to stop early | none |
390
+ | `initial_prompt` | The seed prompt (supports `{{input.*}}` templates) | required |
391
+ | `context_strategy` | How to pass history between agents: `full`, `window`, `summary` | `summary` |
392
+ | `context_window` | Number of recent messages to include in full (for `window`/`summary`) | `4` |
393
+ | `max_content_length` | Truncate each message to this many characters | `3000` |
394
+
395
+ ### Context Strategies
396
+
397
+ Agents don't share memory — Forge acts as broker and decides what context to forward.
398
+
399
+ - **`summary`** (default): Older messages are compressed to one-line summaries. The most recent N messages (set by `context_window`) are passed in full. Best balance of context quality and token usage.
400
+ - **`window`**: Only the last N messages are passed, older ones are dropped entirely. Lowest token usage.
401
+ - **`full`**: All messages from all rounds are passed in full (each truncated to `max_content_length`). Most context but token-heavy.
402
+
403
+ ### Execution Flow
404
+
405
+ 1. Forge sends `initial_prompt` + role to the first agent
406
+ 2. Agent responds → Forge collects the response
407
+ 3. Forge builds context (per `context_strategy`) and sends to the next agent
408
+ 4. Repeat through all agents = 1 round
409
+ 5. Continue rounds until `stop_condition` or `max_rounds`
410
+
411
+ ### Stop Conditions
412
+
413
+ - `"any agent says DONE"` — stops when any agent includes "DONE" in its response
414
+ - `"both agents say DONE"` / `"all agents say DONE"` — stops when all agents have said "DONE"
415
+ - If no stop condition, runs until `max_rounds`
416
+
417
+ ### UI
418
+
419
+ Conversation pipelines show a chat-like view with color-coded agent bubbles, round numbers, and linked task IDs. The sidebar shows round progress (e.g., R3/10).
420
+
421
+ ### Example: Code Review Dialogue
422
+
423
+ ```yaml
424
+ name: review-dialogue
425
+ type: conversation
426
+ description: "Two agents discuss code quality"
427
+ input:
428
+ project: "Project name"
429
+ pr_number: "PR number to review"
430
+ agents:
431
+ - id: reviewer
432
+ agent: claude
433
+ role: "You are a code reviewer. Find bugs, security issues, and suggest improvements."
434
+ - id: author
435
+ agent: claude
436
+ role: "You are the code author. Address review feedback, explain design decisions, and fix issues."
437
+ max_rounds: 5
438
+ stop_condition: "all agents say DONE"
439
+ initial_prompt: "Review PR #{{input.pr_number}} in project {{input.project}}. Reviewer: analyze the diff. Author: be ready to address feedback."
440
+ ```
441
+
442
+ ## Pipeline Model
443
+
444
+ In **Settings → Pipeline Model**, you can select which Claude model runs pipeline tasks. Set to `default` to use the same model as regular tasks.
445
+
446
+ ## Storage
447
+
448
+ - Workflow YAML: `~/.forge/data/flows/`
449
+ - Execution state: `~/.forge/data/pipelines/`
450
+ - Binding config & run history: SQLite database (`~/.forge/data/forge.db`)
451
+
452
+ ## Tips for Writing Workflows
453
+
454
+ 1. **Start with shell nodes** for setup (git checkout, environment checks)
455
+ 2. **Use `__SKIP__`** for optional steps with precondition checks
456
+ 3. **Extract outputs** to pass data between nodes
457
+ 4. **Use routes** for conditional logic (simple/complex paths, retry loops)
458
+ 5. **Keep prompts focused** — each node should do one thing well
459
+ 6. **Test manually first** before setting up schedules
460
+ 7. **Use `depends_on`** to control execution order; nodes without dependencies run in parallel
@@ -0,0 +1,43 @@
1
+ # Skills Marketplace
2
+
3
+ ## Overview
4
+
5
+ Browse, install, and manage Claude Code skills and commands from the Forge Skills registry.
6
+
7
+ ## Types
8
+
9
+ | | Skills | Commands |
10
+ |---|---|---|
11
+ | Location | `~/.claude/skills/<name>/` | `~/.claude/commands/<name>.md` |
12
+ | Entry file | `SKILL.md` | Single `.md` file |
13
+ | Complexity | Multi-file with templates | Simple slash command |
14
+
15
+ Both register as `/slash-command` in Claude Code.
16
+
17
+ ## Install
18
+
19
+ 1. Go to **Skills** tab in Forge
20
+ 2. Click **Sync** to fetch latest registry
21
+ 3. Click **Install** on any skill → choose Global or specific project
22
+ 4. Use in Claude Code with `/<skill-name>`
23
+
24
+ ## Update
25
+
26
+ Skills with newer versions show a yellow "update" indicator. Click to update (checks for local modifications first).
27
+
28
+ ## Local Skills
29
+
30
+ The **Local** tab shows skills/commands installed on your machine (both from marketplace and manually created). You can:
31
+ - **Install to...** — Copy a local skill to another project or global
32
+ - **Delete** — Remove from project or global
33
+ - **Edit** — View and modify installed files
34
+
35
+ ## Registry
36
+
37
+ Default: `https://raw.githubusercontent.com/aiwatching/forge-skills/main`
38
+
39
+ Change in Settings → Skills Repo URL.
40
+
41
+ ## Custom Skills
42
+
43
+ Create your own: put a `.md` file in `<project>/.claude/commands/` or a directory in `<project>/.claude/skills/<name>/`.
@@ -0,0 +1,73 @@
1
+ # Projects
2
+
3
+ ## Setup
4
+
5
+ Add project directories in Settings → **Project Roots** (e.g. `~/Projects`). Forge scans subdirectories automatically.
6
+
7
+ ## Features
8
+
9
+ ### Code Tab
10
+ - File tree browser
11
+ - Syntax-highlighted code viewer
12
+ - Git diff view (click changed files)
13
+ - Git operations: commit, push, pull
14
+ - Commit history
15
+
16
+ ### Skills & Commands Tab
17
+ - View installed skills/commands for this project
18
+ - Scope indicator: G (global), P (project), G+P (both)
19
+ - Edit files, update from marketplace, uninstall
20
+
21
+ ### CLAUDE.md Tab
22
+ - View and edit project's CLAUDE.md
23
+ - Apply rule templates (built-in or custom)
24
+ - Templates auto-injected with dedup markers
25
+
26
+ ### Issues Tab
27
+ - Enable GitHub Issue Auto-fix per project
28
+ - Configure scan interval and label filters
29
+ - Manual trigger: enter issue # and click Fix Issue
30
+ - Processed issues history with retry/delete
31
+ - Auto-chains: fix → create PR → review
32
+
33
+ ### Workspace Tab
34
+ - Configure multi-agent workspace (Forge Smiths)
35
+ - Add smiths with roles, steps, and dependencies
36
+ - Start/stop daemon, monitor execution
37
+ - See [Workspace documentation](11-workspace.md) for details
38
+
39
+ ## Favorites
40
+
41
+ Click ★ next to a project to favorite it. Favorites appear at the top of the sidebar.
42
+
43
+ ## Terminal
44
+
45
+ ### Opening a Terminal
46
+
47
+ There are two ways to open a terminal for a project:
48
+
49
+ **1. Project Header Button**
50
+ - Click **Terminal** in the project header → opens with default agent (claude)
51
+ - Click **▾** dropdown to select a different agent or profile
52
+ - If the agent supports sessions (claude-code), a dialog shows: New Session / Resume Latest / Browse Sessions
53
+ - Non-session agents (codex, aider) open directly
54
+
55
+ **2. Terminal Tab "+" Button**
56
+ - Click **+** in the terminal tab bar → select a project root → expand to see projects
57
+ - Click an agent button (C = Claude, X = Codex, A = Aider, ● = Profile) to open
58
+ - The terminal launches with the agent's configured env vars and model
59
+
60
+ ### Agent & Profile Selection
61
+
62
+ When selecting an agent or profile for a terminal:
63
+ - **Base agents** (Claude, Codex, Aider): Use their default configuration
64
+ - **Profiles** (e.g., Forti K2, Claude Opus): Apply the profile's environment variables and model override
65
+ - Environment variables are exported in the terminal before launching the CLI
66
+ - Model is passed via `--model` flag (for claude-code agents)
67
+
68
+ ### Terminal Features
69
+ - Full xterm.js terminal with tmux session persistence
70
+ - Split panes (horizontal/vertical)
71
+ - Multiple tabs per project
72
+ - Tab state preserved across page refreshes
73
+ - Tabs can be renamed and reordered
@@ -0,0 +1,53 @@
1
+ # Rules (CLAUDE.md Templates)
2
+
3
+ ## What Are Rules?
4
+
5
+ Reusable markdown snippets that get appended to project CLAUDE.md files. They define coding conventions, security rules, workflow guidelines, etc.
6
+
7
+ ## Built-in Templates
8
+
9
+ | Template | Description |
10
+ |----------|-------------|
11
+ | TypeScript Rules | Coding conventions (const, types, early returns) |
12
+ | Git Workflow | Commit messages, branch naming |
13
+ | Obsidian Vault | Vault integration instructions |
14
+ | Security Rules | OWASP guidelines, no hardcoded secrets |
15
+
16
+ ## Manage Rules
17
+
18
+ **Skills tab → Rules sub-tab**:
19
+ - View all templates (built-in + custom)
20
+ - Create new: click "+ New"
21
+ - Edit any template (including built-in)
22
+ - Delete custom templates
23
+ - Set as "default" — auto-applied to new projects
24
+ - Batch apply: select template → check projects → click "Apply"
25
+
26
+ ## Apply to Project
27
+
28
+ **Project → CLAUDE.md tab**:
29
+ - Left sidebar shows CLAUDE.md content + template list
30
+ - Click "+ add" to inject a template
31
+ - Click "added" to remove
32
+ - Templates wrapped in `<!-- forge:template:id -->` markers (prevents duplicate injection)
33
+
34
+ ## Default Templates
35
+
36
+ Templates marked as "default" are automatically injected into new projects when they first appear in the project list.
37
+
38
+ ## Custom Templates
39
+
40
+ Stored in `~/.forge/data/claude-templates/`. Each is a `.md` file with YAML frontmatter:
41
+
42
+ ```markdown
43
+ ---
44
+ name: My Rule
45
+ description: What this rule does
46
+ tags: [category]
47
+ builtin: false
48
+ isDefault: false
49
+ ---
50
+
51
+ ## My Custom Rule
52
+ Your content here...
53
+ ```
@@ -0,0 +1,55 @@
1
+ # Issue Auto-fix
2
+
3
+ ## Overview
4
+
5
+ Automatically scan GitHub Issues, fix code, create PRs — all hands-free. Uses the built-in `issue-fix-and-review` pipeline workflow with integrated issue scanning.
6
+
7
+ ## Prerequisites
8
+
9
+ - `gh` CLI installed and authenticated: `gh auth login`
10
+ - Project has a GitHub remote
11
+
12
+ ## Setup
13
+
14
+ 1. Go to **Projects → select project → Pipelines tab**
15
+ 2. Click **+ Add** and select `issue-fix-and-review`
16
+ 3. Enable the binding
17
+ 4. Check **Auto-scan GitHub Issues** to enable automatic scanning
18
+ 5. Configure:
19
+ - **Schedule**: How often to scan (e.g., Every 30 min)
20
+ - **Labels**: Filter issues by label (comma-separated, empty = all)
21
+ - **Base Branch**: Leave empty for auto-detect (main/master)
22
+ 6. Click **Scan** to manually trigger a scan
23
+
24
+ ## Flow
25
+
26
+ ```
27
+ Scan Issues → For each new issue:
28
+ Setup → Fetch Issue → Fix Code (new branch) → Push & Create PR → Notify
29
+ ```
30
+
31
+ 1. **Scan**: `gh issue list` finds open issues matching labels
32
+ 2. **Dedup**: Already-processed issues are skipped (tracked in `pipeline_runs`)
33
+ 3. **Setup**: Checks for clean working directory, detects repo and base branch
34
+ 4. **Fetch Issue**: `gh issue view` fetches issue data
35
+ 5. **Fix Code**: Claude analyzes issue and fixes code on `fix/<id>-<description>` branch
36
+ 6. **Push & PR**: Pushes branch and creates Pull Request via `gh pr create`
37
+ 7. **Notify**: Switches back to original branch, reports PR URL
38
+
39
+ ## Manual Trigger
40
+
41
+ - **Run** button: Triggers the workflow with custom input (requires `issue_id`)
42
+ - **Scan** button: Scans for all open issues and triggers fixes for new ones
43
+
44
+ ## Dedup
45
+
46
+ Each processed issue is tracked with a `dedup_key` (e.g., `issue:42`) in the pipeline runs table. Once an issue has been processed, it won't be triggered again even if it's still open. To re-process an issue, delete its run from the execution history.
47
+
48
+ ## Safety
49
+
50
+ - Checks for uncommitted changes before starting (aborts if dirty)
51
+ - Always works on new branches (never modifies main/master)
52
+ - Cleans up old fix branches for the same issue
53
+ - Switches back to original branch after completion
54
+ - Uses `--force-with-lease` for safe push
55
+ - Running pipelines are not re-triggered (one fix per issue at a time)