@gokulvenkatareddy/cortex 0.1.7

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 (299) hide show
  1. package/README.md +1295 -0
  2. package/apps/octogent/.github/workflows/ci.yml +40 -0
  3. package/apps/octogent/.shims/claude +4 -0
  4. package/apps/octogent/AGENTS.md +71 -0
  5. package/apps/octogent/CONTRIBUTING.md +72 -0
  6. package/apps/octogent/LICENSE +21 -0
  7. package/apps/octogent/README.md +184 -0
  8. package/apps/octogent/apps/api/AGENTS.md +32 -0
  9. package/apps/octogent/apps/api/package.json +19 -0
  10. package/apps/octogent/apps/api/src/agentStateDetection.ts +181 -0
  11. package/apps/octogent/apps/api/src/claudeSessionScanner.ts +235 -0
  12. package/apps/octogent/apps/api/src/claudeSkills.ts +182 -0
  13. package/apps/octogent/apps/api/src/claudeUsage.ts +922 -0
  14. package/apps/octogent/apps/api/src/cli.ts +595 -0
  15. package/apps/octogent/apps/api/src/codeIntelStore.ts +46 -0
  16. package/apps/octogent/apps/api/src/codexUsage.ts +278 -0
  17. package/apps/octogent/apps/api/src/createApiServer/codeIntelRoutes.ts +60 -0
  18. package/apps/octogent/apps/api/src/createApiServer/conversationRoutes.ts +128 -0
  19. package/apps/octogent/apps/api/src/createApiServer/deckRoutes.ts +873 -0
  20. package/apps/octogent/apps/api/src/createApiServer/gitParsers.ts +140 -0
  21. package/apps/octogent/apps/api/src/createApiServer/gitRoutes.ts +214 -0
  22. package/apps/octogent/apps/api/src/createApiServer/miscRoutes.ts +316 -0
  23. package/apps/octogent/apps/api/src/createApiServer/monitorParsers.ts +137 -0
  24. package/apps/octogent/apps/api/src/createApiServer/monitorRoutes.ts +95 -0
  25. package/apps/octogent/apps/api/src/createApiServer/requestHandler.ts +311 -0
  26. package/apps/octogent/apps/api/src/createApiServer/requestParsers.ts +25 -0
  27. package/apps/octogent/apps/api/src/createApiServer/routeHelpers.ts +97 -0
  28. package/apps/octogent/apps/api/src/createApiServer/security.ts +70 -0
  29. package/apps/octogent/apps/api/src/createApiServer/terminalParsers.ts +167 -0
  30. package/apps/octogent/apps/api/src/createApiServer/terminalRoutes.ts +315 -0
  31. package/apps/octogent/apps/api/src/createApiServer/types.ts +24 -0
  32. package/apps/octogent/apps/api/src/createApiServer/uiStateParsers.ts +255 -0
  33. package/apps/octogent/apps/api/src/createApiServer/upgradeHandler.ts +38 -0
  34. package/apps/octogent/apps/api/src/createApiServer/usageRoutes.ts +84 -0
  35. package/apps/octogent/apps/api/src/createApiServer.ts +176 -0
  36. package/apps/octogent/apps/api/src/deck/readDeckTentacles.ts +595 -0
  37. package/apps/octogent/apps/api/src/githubRepoSummary.ts +397 -0
  38. package/apps/octogent/apps/api/src/logging.ts +9 -0
  39. package/apps/octogent/apps/api/src/monitor/defaults.ts +3 -0
  40. package/apps/octogent/apps/api/src/monitor/index.ts +8 -0
  41. package/apps/octogent/apps/api/src/monitor/repository.ts +303 -0
  42. package/apps/octogent/apps/api/src/monitor/service.ts +349 -0
  43. package/apps/octogent/apps/api/src/monitor/types.ts +120 -0
  44. package/apps/octogent/apps/api/src/monitor/xProvider.ts +587 -0
  45. package/apps/octogent/apps/api/src/projectPersistence.ts +377 -0
  46. package/apps/octogent/apps/api/src/prompts/index.ts +10 -0
  47. package/apps/octogent/apps/api/src/prompts/promptResolver.ts +145 -0
  48. package/apps/octogent/apps/api/src/runtimeMetadata.ts +69 -0
  49. package/apps/octogent/apps/api/src/server.ts +80 -0
  50. package/apps/octogent/apps/api/src/setupState.ts +80 -0
  51. package/apps/octogent/apps/api/src/setupStatus.ts +174 -0
  52. package/apps/octogent/apps/api/src/startupPrerequisites.ts +146 -0
  53. package/apps/octogent/apps/api/src/terminalRuntime/channelMessaging.ts +87 -0
  54. package/apps/octogent/apps/api/src/terminalRuntime/claudeTranscript.ts +279 -0
  55. package/apps/octogent/apps/api/src/terminalRuntime/constants.ts +15 -0
  56. package/apps/octogent/apps/api/src/terminalRuntime/conversations.ts +492 -0
  57. package/apps/octogent/apps/api/src/terminalRuntime/gitOperations.ts +341 -0
  58. package/apps/octogent/apps/api/src/terminalRuntime/hookProcessor.ts +405 -0
  59. package/apps/octogent/apps/api/src/terminalRuntime/protocol.ts +46 -0
  60. package/apps/octogent/apps/api/src/terminalRuntime/ptyEnvironment.ts +50 -0
  61. package/apps/octogent/apps/api/src/terminalRuntime/registry.ts +423 -0
  62. package/apps/octogent/apps/api/src/terminalRuntime/sessionRuntime.ts +671 -0
  63. package/apps/octogent/apps/api/src/terminalRuntime/systemClients.ts +432 -0
  64. package/apps/octogent/apps/api/src/terminalRuntime/types.ts +157 -0
  65. package/apps/octogent/apps/api/src/terminalRuntime/worktreeManager.ts +135 -0
  66. package/apps/octogent/apps/api/src/terminalRuntime.ts +567 -0
  67. package/apps/octogent/apps/api/src/usageUtils.ts +16 -0
  68. package/apps/octogent/apps/api/src/ws-shim.d.ts +28 -0
  69. package/apps/octogent/apps/api/tests/agentStateDetection.test.ts +67 -0
  70. package/apps/octogent/apps/api/tests/claudeUsage.test.ts +583 -0
  71. package/apps/octogent/apps/api/tests/codexUsage.test.ts +107 -0
  72. package/apps/octogent/apps/api/tests/createApiServer.test.ts +3207 -0
  73. package/apps/octogent/apps/api/tests/githubRepoSummary.test.ts +100 -0
  74. package/apps/octogent/apps/api/tests/logging.test.ts +33 -0
  75. package/apps/octogent/apps/api/tests/monitorApi.test.ts +467 -0
  76. package/apps/octogent/apps/api/tests/monitorCore.test.ts +104 -0
  77. package/apps/octogent/apps/api/tests/promptResolver.test.ts +109 -0
  78. package/apps/octogent/apps/api/tests/protocol.test.ts +14 -0
  79. package/apps/octogent/apps/api/tests/sessionRuntime.test.ts +608 -0
  80. package/apps/octogent/apps/api/tests/startupPrerequisites.test.ts +70 -0
  81. package/apps/octogent/apps/api/tests/upgradeHandler.test.ts +40 -0
  82. package/apps/octogent/apps/api/tests/xMonitorProvider.test.ts +109 -0
  83. package/apps/octogent/apps/api/tsconfig.json +7 -0
  84. package/apps/octogent/apps/api/vitest.config.ts +7 -0
  85. package/apps/octogent/apps/web/AGENTS.md +38 -0
  86. package/apps/octogent/apps/web/index.html +13 -0
  87. package/apps/octogent/apps/web/package.json +32 -0
  88. package/apps/octogent/apps/web/public/octopus-favicon.svg +26 -0
  89. package/apps/octogent/apps/web/src/App.tsx +646 -0
  90. package/apps/octogent/apps/web/src/app/canvas/types.ts +34 -0
  91. package/apps/octogent/apps/web/src/app/codeIntelAggregation.ts +278 -0
  92. package/apps/octogent/apps/web/src/app/constants.ts +28 -0
  93. package/apps/octogent/apps/web/src/app/conversationNormalizers.ts +135 -0
  94. package/apps/octogent/apps/web/src/app/formatTimestamp.ts +18 -0
  95. package/apps/octogent/apps/web/src/app/githubMetrics.ts +76 -0
  96. package/apps/octogent/apps/web/src/app/githubNormalizers.ts +91 -0
  97. package/apps/octogent/apps/web/src/app/hooks/useAgentRuntimeStates.ts +18 -0
  98. package/apps/octogent/apps/web/src/app/hooks/useBackendLivenessPolling.ts +53 -0
  99. package/apps/octogent/apps/web/src/app/hooks/useCanvasGraphData.ts +449 -0
  100. package/apps/octogent/apps/web/src/app/hooks/useCanvasTransform.ts +260 -0
  101. package/apps/octogent/apps/web/src/app/hooks/useClaudeUsagePolling.ts +40 -0
  102. package/apps/octogent/apps/web/src/app/hooks/useClickOutside.ts +30 -0
  103. package/apps/octogent/apps/web/src/app/hooks/useCodeIntelRuntime.ts +83 -0
  104. package/apps/octogent/apps/web/src/app/hooks/useCodexUsagePolling.ts +35 -0
  105. package/apps/octogent/apps/web/src/app/hooks/useConsoleKeyboardShortcuts.ts +31 -0
  106. package/apps/octogent/apps/web/src/app/hooks/useConversationsRuntime.ts +377 -0
  107. package/apps/octogent/apps/web/src/app/hooks/useForceSimulation.ts +319 -0
  108. package/apps/octogent/apps/web/src/app/hooks/useGitHubPrimaryViewModel.ts +143 -0
  109. package/apps/octogent/apps/web/src/app/hooks/useGithubSummaryPolling.ts +28 -0
  110. package/apps/octogent/apps/web/src/app/hooks/useInitialColumnsHydration.ts +64 -0
  111. package/apps/octogent/apps/web/src/app/hooks/useMonitorRuntime.ts +220 -0
  112. package/apps/octogent/apps/web/src/app/hooks/usePersistedUiState.ts +536 -0
  113. package/apps/octogent/apps/web/src/app/hooks/usePollingData.ts +79 -0
  114. package/apps/octogent/apps/web/src/app/hooks/usePromptLibrary.ts +185 -0
  115. package/apps/octogent/apps/web/src/app/hooks/useTentacleGitLifecycle.ts +530 -0
  116. package/apps/octogent/apps/web/src/app/hooks/useTerminalCompletionNotification.ts +94 -0
  117. package/apps/octogent/apps/web/src/app/hooks/useTerminalMutations.ts +266 -0
  118. package/apps/octogent/apps/web/src/app/hooks/useTerminalStateReconciliation.ts +23 -0
  119. package/apps/octogent/apps/web/src/app/hooks/useUsageHeatmapPolling.ts +43 -0
  120. package/apps/octogent/apps/web/src/app/hooks/useWorkspaceSetup.ts +80 -0
  121. package/apps/octogent/apps/web/src/app/hotkeys.ts +31 -0
  122. package/apps/octogent/apps/web/src/app/monitorNormalizers.ts +145 -0
  123. package/apps/octogent/apps/web/src/app/notificationSounds.ts +164 -0
  124. package/apps/octogent/apps/web/src/app/terminalRuntimeStateStore.ts +261 -0
  125. package/apps/octogent/apps/web/src/app/terminalState.ts +21 -0
  126. package/apps/octogent/apps/web/src/app/types.ts +42 -0
  127. package/apps/octogent/apps/web/src/app/uiStateNormalizers.ts +113 -0
  128. package/apps/octogent/apps/web/src/app/usageNormalizers.ts +58 -0
  129. package/apps/octogent/apps/web/src/components/ActiveAgentsSidebar.tsx +60 -0
  130. package/apps/octogent/apps/web/src/components/ActivityPrimaryView.tsx +21 -0
  131. package/apps/octogent/apps/web/src/components/AgentStateBadge.tsx +47 -0
  132. package/apps/octogent/apps/web/src/components/CanvasPrimaryView.tsx +1532 -0
  133. package/apps/octogent/apps/web/src/components/ClearAllConversationsDialog.tsx +33 -0
  134. package/apps/octogent/apps/web/src/components/CodeIntelArcDiagram.tsx +245 -0
  135. package/apps/octogent/apps/web/src/components/CodeIntelPrimaryView.tsx +104 -0
  136. package/apps/octogent/apps/web/src/components/CodeIntelTreemap.tsx +138 -0
  137. package/apps/octogent/apps/web/src/components/ConsolePrimaryNav.tsx +31 -0
  138. package/apps/octogent/apps/web/src/components/ConversationsPrimaryView.tsx +243 -0
  139. package/apps/octogent/apps/web/src/components/DeckPrimaryView.tsx +613 -0
  140. package/apps/octogent/apps/web/src/components/DeleteTentacleDialog.tsx +91 -0
  141. package/apps/octogent/apps/web/src/components/EmptyOctopus.tsx +715 -0
  142. package/apps/octogent/apps/web/src/components/GitHubPrimaryView.tsx +494 -0
  143. package/apps/octogent/apps/web/src/components/MonitorPrimaryView.tsx +475 -0
  144. package/apps/octogent/apps/web/src/components/PrimaryViewRouter.tsx +99 -0
  145. package/apps/octogent/apps/web/src/components/PromptsPrimaryView.tsx +243 -0
  146. package/apps/octogent/apps/web/src/components/RuntimeStatusStrip.tsx +273 -0
  147. package/apps/octogent/apps/web/src/components/SettingsPrimaryView.tsx +92 -0
  148. package/apps/octogent/apps/web/src/components/SidebarActionPanel.tsx +124 -0
  149. package/apps/octogent/apps/web/src/components/SidebarConversationsList.tsx +279 -0
  150. package/apps/octogent/apps/web/src/components/SidebarPromptsList.tsx +116 -0
  151. package/apps/octogent/apps/web/src/components/TelemetryTape.tsx +106 -0
  152. package/apps/octogent/apps/web/src/components/TentacleGitActionsDialog.tsx +341 -0
  153. package/apps/octogent/apps/web/src/components/Terminal.tsx +524 -0
  154. package/apps/octogent/apps/web/src/components/TerminalPromptPicker.tsx +140 -0
  155. package/apps/octogent/apps/web/src/components/UsageHeatmap.tsx +702 -0
  156. package/apps/octogent/apps/web/src/components/canvas/CanvasTentaclePanel.tsx +485 -0
  157. package/apps/octogent/apps/web/src/components/canvas/CanvasTerminalColumn.tsx +89 -0
  158. package/apps/octogent/apps/web/src/components/canvas/DeleteAllTerminalsDialog.tsx +221 -0
  159. package/apps/octogent/apps/web/src/components/canvas/OctopusNode.tsx +307 -0
  160. package/apps/octogent/apps/web/src/components/canvas/SessionNode.tsx +185 -0
  161. package/apps/octogent/apps/web/src/components/deck/ActionCards.tsx +118 -0
  162. package/apps/octogent/apps/web/src/components/deck/AddTentacleForm.tsx +269 -0
  163. package/apps/octogent/apps/web/src/components/deck/DeckBottomActions.tsx +56 -0
  164. package/apps/octogent/apps/web/src/components/deck/TentaclePod.tsx +334 -0
  165. package/apps/octogent/apps/web/src/components/deck/WorkspaceSetupCard.tsx +105 -0
  166. package/apps/octogent/apps/web/src/components/deck/octopusVisuals.ts +72 -0
  167. package/apps/octogent/apps/web/src/components/terminalReplay.ts +62 -0
  168. package/apps/octogent/apps/web/src/components/terminalWheel.ts +54 -0
  169. package/apps/octogent/apps/web/src/components/ui/ActionButton.tsx +34 -0
  170. package/apps/octogent/apps/web/src/components/ui/ConfirmationDialog.tsx +86 -0
  171. package/apps/octogent/apps/web/src/components/ui/MarkdownContent.tsx +43 -0
  172. package/apps/octogent/apps/web/src/components/ui/SettingsToggle.tsx +34 -0
  173. package/apps/octogent/apps/web/src/components/ui/StatusBadge.tsx +24 -0
  174. package/apps/octogent/apps/web/src/main.tsx +17 -0
  175. package/apps/octogent/apps/web/src/runtime/HttpTerminalSnapshotReader.ts +87 -0
  176. package/apps/octogent/apps/web/src/runtime/runtimeEndpoints.ts +412 -0
  177. package/apps/octogent/apps/web/src/styles/chrome-and-buttons.css +272 -0
  178. package/apps/octogent/apps/web/src/styles/console-canvas-activity.css +358 -0
  179. package/apps/octogent/apps/web/src/styles/console-canvas-canvas.css +1843 -0
  180. package/apps/octogent/apps/web/src/styles/console-canvas-code-intel.css +227 -0
  181. package/apps/octogent/apps/web/src/styles/console-canvas-conversations.css +705 -0
  182. package/apps/octogent/apps/web/src/styles/console-canvas-deck.css +1524 -0
  183. package/apps/octogent/apps/web/src/styles/console-canvas-github.css +541 -0
  184. package/apps/octogent/apps/web/src/styles/console-canvas-monitor.css +595 -0
  185. package/apps/octogent/apps/web/src/styles/console-canvas-pixpack.css +81 -0
  186. package/apps/octogent/apps/web/src/styles/console-canvas-prompts.css +474 -0
  187. package/apps/octogent/apps/web/src/styles/console-canvas-settings.css +207 -0
  188. package/apps/octogent/apps/web/src/styles/console-chrome-status-nav.css +441 -0
  189. package/apps/octogent/apps/web/src/styles/console-overrides-telemetry.css +320 -0
  190. package/apps/octogent/apps/web/src/styles/console-theme-tokens.css +25 -0
  191. package/apps/octogent/apps/web/src/styles/cortex-theme.css +412 -0
  192. package/apps/octogent/apps/web/src/styles/foundation.css +100 -0
  193. package/apps/octogent/apps/web/src/styles/sidebar-and-scrollbars.css +447 -0
  194. package/apps/octogent/apps/web/src/styles/terminal-and-status.css +356 -0
  195. package/apps/octogent/apps/web/src/styles.css +25 -0
  196. package/apps/octogent/apps/web/src/types/ws.d.ts +23 -0
  197. package/apps/octogent/apps/web/tests/CanvasPrimaryView.test.tsx +347 -0
  198. package/apps/octogent/apps/web/tests/HttpTerminalSnapshotReader.test.tsx +54 -0
  199. package/apps/octogent/apps/web/tests/RuntimeStatusStrip.test.tsx +70 -0
  200. package/apps/octogent/apps/web/tests/Terminal.test.tsx +87 -0
  201. package/apps/octogent/apps/web/tests/add-tentacle-form.test.tsx +48 -0
  202. package/apps/octogent/apps/web/tests/app-github-runtime.test.tsx +162 -0
  203. package/apps/octogent/apps/web/tests/app-monitor-runtime.test.tsx +657 -0
  204. package/apps/octogent/apps/web/tests/app-shell-navigation.test.tsx +109 -0
  205. package/apps/octogent/apps/web/tests/app-swarm-refresh.test.tsx +268 -0
  206. package/apps/octogent/apps/web/tests/app-ui-state-persistence.test.tsx +116 -0
  207. package/apps/octogent/apps/web/tests/app-workspace-setup.test.tsx +217 -0
  208. package/apps/octogent/apps/web/tests/canvas-tentacle-panel.test.tsx +195 -0
  209. package/apps/octogent/apps/web/tests/delete-all-terminals-dialog.test.tsx +76 -0
  210. package/apps/octogent/apps/web/tests/githubMetrics.test.tsx +52 -0
  211. package/apps/octogent/apps/web/tests/hotkeys.test.tsx +44 -0
  212. package/apps/octogent/apps/web/tests/runtimeEndpoints.test.tsx +240 -0
  213. package/apps/octogent/apps/web/tests/setup.ts +39 -0
  214. package/apps/octogent/apps/web/tests/tentacle-pod.test.tsx +62 -0
  215. package/apps/octogent/apps/web/tests/terminalReplay.test.ts +71 -0
  216. package/apps/octogent/apps/web/tests/terminalState.test.tsx +49 -0
  217. package/apps/octogent/apps/web/tests/terminalWheel.test.tsx +51 -0
  218. package/apps/octogent/apps/web/tests/test-utils/appTestHarness.ts +48 -0
  219. package/apps/octogent/apps/web/tests/uiPrimitives.test.tsx +31 -0
  220. package/apps/octogent/apps/web/tests/useAgentRuntimeStates.test.tsx +47 -0
  221. package/apps/octogent/apps/web/tsconfig.json +8 -0
  222. package/apps/octogent/apps/web/vite.api.bundle.config.mts +32 -0
  223. package/apps/octogent/apps/web/vite.config.ts +22 -0
  224. package/apps/octogent/bin/octogent +3 -0
  225. package/apps/octogent/biome.json +21 -0
  226. package/apps/octogent/docs/concepts/mental-model.md +79 -0
  227. package/apps/octogent/docs/concepts/runtime-and-api.md +60 -0
  228. package/apps/octogent/docs/concepts/tentacles.md +85 -0
  229. package/apps/octogent/docs/getting-started/installation.md +54 -0
  230. package/apps/octogent/docs/getting-started/quickstart.md +79 -0
  231. package/apps/octogent/docs/guides/inter-agent-messaging.md +43 -0
  232. package/apps/octogent/docs/guides/orchestrating-child-agents.md +49 -0
  233. package/apps/octogent/docs/guides/working-with-todos.md +56 -0
  234. package/apps/octogent/docs/index.md +40 -0
  235. package/apps/octogent/docs/reference/api.md +103 -0
  236. package/apps/octogent/docs/reference/cli.md +71 -0
  237. package/apps/octogent/docs/reference/experimental-features.md +28 -0
  238. package/apps/octogent/docs/reference/filesystem-layout.md +62 -0
  239. package/apps/octogent/docs/reference/troubleshooting.md +49 -0
  240. package/apps/octogent/package.json +35 -0
  241. package/apps/octogent/packages/core/AGENTS.md +31 -0
  242. package/apps/octogent/packages/core/package.json +12 -0
  243. package/apps/octogent/packages/core/src/adapters/InMemoryTerminalSnapshotReader.ts +10 -0
  244. package/apps/octogent/packages/core/src/application/buildTerminalList.ts +13 -0
  245. package/apps/octogent/packages/core/src/domain/agentRuntime.ts +18 -0
  246. package/apps/octogent/packages/core/src/domain/channel.ts +8 -0
  247. package/apps/octogent/packages/core/src/domain/completionSound.ts +14 -0
  248. package/apps/octogent/packages/core/src/domain/conversation.ts +48 -0
  249. package/apps/octogent/packages/core/src/domain/deck.ts +33 -0
  250. package/apps/octogent/packages/core/src/domain/git.ts +32 -0
  251. package/apps/octogent/packages/core/src/domain/monitor.ts +62 -0
  252. package/apps/octogent/packages/core/src/domain/setup.ts +27 -0
  253. package/apps/octogent/packages/core/src/domain/terminal.ts +17 -0
  254. package/apps/octogent/packages/core/src/domain/uiState.ts +22 -0
  255. package/apps/octogent/packages/core/src/domain/usage.ts +60 -0
  256. package/apps/octogent/packages/core/src/index.ts +15 -0
  257. package/apps/octogent/packages/core/src/ports/TerminalSnapshotReader.ts +5 -0
  258. package/apps/octogent/packages/core/src/util/typeCoercion.ts +20 -0
  259. package/apps/octogent/packages/core/tests/buildTerminalList.test.ts +75 -0
  260. package/apps/octogent/packages/core/tsconfig.json +7 -0
  261. package/apps/octogent/packages/core/tsconfig.tsbuildinfo +1 -0
  262. package/apps/octogent/packages/core/vitest.config.ts +7 -0
  263. package/apps/octogent/pnpm-lock.yaml +3212 -0
  264. package/apps/octogent/pnpm-workspace.yaml +3 -0
  265. package/apps/octogent/prompts/meta-prompt-generator.md +223 -0
  266. package/apps/octogent/prompts/octoboss-clean-contexts.md +30 -0
  267. package/apps/octogent/prompts/octoboss-reorganize-tentacles.md +29 -0
  268. package/apps/octogent/prompts/octoboss-reorganize-todos.md +27 -0
  269. package/apps/octogent/prompts/sandbox-init.md +3 -0
  270. package/apps/octogent/prompts/swarm-parent.md +83 -0
  271. package/apps/octogent/prompts/swarm-worker.md +50 -0
  272. package/apps/octogent/prompts/tentacle-context-init.md +1 -0
  273. package/apps/octogent/prompts/tentacle-planner.md +110 -0
  274. package/apps/octogent/prompts/tentacle-reorganize-todos.md +20 -0
  275. package/apps/octogent/prompts/tentacle-update-tentacle.md +18 -0
  276. package/apps/octogent/scripts/build-package.mjs +23 -0
  277. package/apps/octogent/scripts/dev.mjs +158 -0
  278. package/apps/octogent/scripts/smoke-public-install.mjs +271 -0
  279. package/apps/octogent/static/images/octogent-header.png +0 -0
  280. package/apps/octogent/static/images/preview_1.jpg +0 -0
  281. package/apps/octogent/static/images/preview_2.jpg +0 -0
  282. package/apps/octogent/static/images/preview_3.jpg +0 -0
  283. package/apps/octogent/static/images/preview_4.jpg +0 -0
  284. package/apps/octogent/static/images/preview_5.jpg +0 -0
  285. package/apps/octogent/static/images/preview_6.jpg +0 -0
  286. package/apps/octogent/tsconfig.base.json +16 -0
  287. package/bin/AGI +3 -0
  288. package/bin/AGI-install-app +71 -0
  289. package/bin/AGI-ui +16 -0
  290. package/bin/AGI-voice +15 -0
  291. package/bin/AGI-web +16 -0
  292. package/bin/cortex +109 -0
  293. package/bin/cortex-octogent +99 -0
  294. package/bin/import-specifier.mjs +13 -0
  295. package/bin/import-specifier.test.mjs +13 -0
  296. package/bin/octo +150 -0
  297. package/dist/cli.mjs +555650 -0
  298. package/package.json +157 -0
  299. package/scripts/setup-wizard.ts +390 -0
@@ -0,0 +1,80 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import type { WorkspaceSetupStepId } from "@octogent/core";
4
+
5
+ const SETUP_STATE_RELATIVE_PATH = join("state", "setup.json");
6
+ const VERIFIED_SETUP_STEP_IDS = ["check-claude", "check-git", "check-curl"] as const;
7
+
8
+ type VerifiedSetupStepId = (typeof VERIFIED_SETUP_STEP_IDS)[number];
9
+
10
+ export type SetupState = {
11
+ version: 1;
12
+ tentaclesInitializedAt?: string;
13
+ verifiedSteps?: Partial<Record<VerifiedSetupStepId, string>>;
14
+ };
15
+
16
+ const isVerifiedSetupStepId = (value: WorkspaceSetupStepId): value is VerifiedSetupStepId =>
17
+ VERIFIED_SETUP_STEP_IDS.includes(value as VerifiedSetupStepId);
18
+
19
+ export const readSetupState = (stateDir: string): SetupState => {
20
+ const filePath = join(stateDir, SETUP_STATE_RELATIVE_PATH);
21
+ if (!existsSync(filePath)) {
22
+ return { version: 1 };
23
+ }
24
+
25
+ try {
26
+ const raw = JSON.parse(readFileSync(filePath, "utf-8")) as Partial<SetupState>;
27
+ const verifiedSteps: Partial<Record<VerifiedSetupStepId, string>> = {};
28
+ const rawVerifiedSteps = raw.verifiedSteps;
29
+ if (rawVerifiedSteps && typeof rawVerifiedSteps === "object") {
30
+ for (const stepId of VERIFIED_SETUP_STEP_IDS) {
31
+ const checkedAt = rawVerifiedSteps[stepId];
32
+ if (typeof checkedAt === "string") {
33
+ verifiedSteps[stepId] = checkedAt;
34
+ }
35
+ }
36
+ }
37
+
38
+ return {
39
+ version: 1,
40
+ ...(typeof raw.tentaclesInitializedAt === "string"
41
+ ? { tentaclesInitializedAt: raw.tentaclesInitializedAt }
42
+ : {}),
43
+ ...(Object.keys(verifiedSteps).length > 0 ? { verifiedSteps } : {}),
44
+ };
45
+ } catch {
46
+ return { version: 1 };
47
+ }
48
+ };
49
+
50
+ export const writeSetupState = (stateDir: string, state: SetupState) => {
51
+ mkdirSync(join(stateDir, "state"), { recursive: true });
52
+ writeFileSync(join(stateDir, SETUP_STATE_RELATIVE_PATH), `${JSON.stringify(state, null, 2)}\n`);
53
+ };
54
+
55
+ export const markSetupStepVerified = (stateDir: string, stepId: WorkspaceSetupStepId) => {
56
+ if (!isVerifiedSetupStepId(stepId)) {
57
+ return;
58
+ }
59
+
60
+ const currentState = readSetupState(stateDir);
61
+ writeSetupState(stateDir, {
62
+ ...currentState,
63
+ verifiedSteps: {
64
+ ...currentState.verifiedSteps,
65
+ [stepId]: new Date().toISOString(),
66
+ },
67
+ });
68
+ };
69
+
70
+ export const markTentaclesInitialized = (stateDir: string) => {
71
+ const currentState = readSetupState(stateDir);
72
+ if (currentState.tentaclesInitializedAt) {
73
+ return;
74
+ }
75
+
76
+ writeSetupState(stateDir, {
77
+ ...currentState,
78
+ tentaclesInitializedAt: new Date().toISOString(),
79
+ });
80
+ };
@@ -0,0 +1,174 @@
1
+ import { existsSync, mkdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+
4
+ import type { WorkspaceSetupSnapshot, WorkspaceSetupStep } from "@octogent/core";
5
+
6
+ import { readDeckTentacles } from "./deck/readDeckTentacles";
7
+ import {
8
+ deriveProjectIdFromWorkspace,
9
+ ensureOctogentGitignoreEntry,
10
+ ensureProjectScaffold,
11
+ hasOctogentGitignoreEntry,
12
+ loadProjectConfig,
13
+ migrateStateToGlobal,
14
+ registerProject,
15
+ } from "./projectPersistence";
16
+ import { readSetupState } from "./setupState";
17
+ import { collectStartupPrerequisiteReport } from "./startupPrerequisites";
18
+
19
+ export const initializeWorkspaceFiles = (workspaceCwd: string, projectStateDir: string) => {
20
+ const projectName = loadProjectConfig(workspaceCwd)?.displayName;
21
+ const projectConfig = ensureProjectScaffold(
22
+ workspaceCwd,
23
+ projectName,
24
+ deriveProjectIdFromWorkspace(workspaceCwd),
25
+ );
26
+ registerProject(workspaceCwd, projectConfig.displayName);
27
+ mkdirSync(join(projectStateDir, "state"), { recursive: true });
28
+ migrateStateToGlobal(workspaceCwd, projectStateDir);
29
+
30
+ return { projectConfig, projectStateDir };
31
+ };
32
+
33
+ export const ensureWorkspaceGitignore = (workspaceCwd: string) =>
34
+ ensureOctogentGitignoreEntry(workspaceCwd);
35
+
36
+ export const readWorkspaceSetupSnapshot = (
37
+ workspaceCwd: string,
38
+ projectStateDir: string,
39
+ ): WorkspaceSetupSnapshot => {
40
+ const prerequisites = collectStartupPrerequisiteReport();
41
+ const projectConfig = loadProjectConfig(workspaceCwd);
42
+ const octogentDir = join(workspaceCwd, ".octogent");
43
+ const hasProjectScaffold =
44
+ projectConfig !== null &&
45
+ existsSync(join(octogentDir, "tentacles")) &&
46
+ existsSync(join(octogentDir, "worktrees")) &&
47
+ existsSync(join(projectStateDir, "state"));
48
+ const hasGitignore = hasOctogentGitignoreEntry(workspaceCwd);
49
+ const tentacles = readDeckTentacles(workspaceCwd, projectStateDir);
50
+ const tentacleCount = tentacles.length;
51
+ const hasAnyTentacles = tentacleCount > 0;
52
+ const setupState = readSetupState(projectStateDir);
53
+ const isFirstRun = !hasAnyTentacles && !setupState.tentaclesInitializedAt;
54
+ const verifiedSteps = setupState.verifiedSteps ?? {};
55
+ const isClaudeVerified = Boolean(verifiedSteps["check-claude"]);
56
+ const isGitVerified = Boolean(verifiedSteps["check-git"]);
57
+ const isCurlVerified = Boolean(verifiedSteps["check-curl"]);
58
+ const hasClaudeCode = prerequisites.availability.claude;
59
+ const hasGit = prerequisites.availability.git;
60
+ const hasCurl = prerequisites.availability.curl;
61
+
62
+ const steps: WorkspaceSetupStep[] = [
63
+ {
64
+ id: "initialize-workspace",
65
+ title: "Initialize workspace",
66
+ description: "Create Octogent project files and runtime directories.",
67
+ complete: hasProjectScaffold,
68
+ required: true,
69
+ actionLabel: "Initialize workspace",
70
+ statusText: hasProjectScaffold
71
+ ? "Workspace files are ready."
72
+ : "Create .octogent project files before continuing.",
73
+ guidance: hasProjectScaffold
74
+ ? null
75
+ : "Workspace initialization failed. Run the Octogent initializer in this repository.",
76
+ command: hasProjectScaffold ? null : "octogent init",
77
+ },
78
+ {
79
+ id: "ensure-gitignore",
80
+ title: "Ignore .octogent",
81
+ description: "Add .octogent to .gitignore, or create .gitignore when it is missing.",
82
+ complete: hasGitignore,
83
+ required: true,
84
+ actionLabel: "Update .gitignore",
85
+ statusText: hasGitignore
86
+ ? ".gitignore covers .octogent."
87
+ : "Add .octogent to .gitignore before creating tentacles.",
88
+ guidance: hasGitignore
89
+ ? null
90
+ : "Git ignore entry is missing. Create or update .gitignore with the Octogent workspace path.",
91
+ command: hasGitignore ? null : "printf '.octogent\\n' >> .gitignore",
92
+ },
93
+ {
94
+ id: "check-claude",
95
+ title: "Check Claude Code",
96
+ description: "Verify the default Claude Code workflow is available on this machine.",
97
+ complete: hasClaudeCode && isClaudeVerified,
98
+ required: false,
99
+ actionLabel: "Check Claude Code",
100
+ statusText: hasClaudeCode
101
+ ? isClaudeVerified
102
+ ? "Claude Code is available."
103
+ : "Confirm Claude Code before using the planner."
104
+ : "Claude Code is unavailable.",
105
+ guidance: hasClaudeCode
106
+ ? isClaudeVerified
107
+ ? null
108
+ : "Click to verify the Claude Code workflow on this machine."
109
+ : "Install Claude Code and log in before using the default Claude workflow.",
110
+ command: hasClaudeCode ? null : "claude login",
111
+ },
112
+ {
113
+ id: "check-git",
114
+ title: "Check Git",
115
+ description: "Verify Git is available for worktree-backed tentacles.",
116
+ complete: hasGit && isGitVerified,
117
+ required: false,
118
+ actionLabel: "Check Git",
119
+ statusText: hasGit
120
+ ? isGitVerified
121
+ ? "Git is available."
122
+ : "Confirm Git before launching worktree-backed tentacles."
123
+ : "Git is unavailable.",
124
+ guidance: hasGit
125
+ ? isGitVerified
126
+ ? null
127
+ : "Click to verify Git support for worktree terminal flows."
128
+ : "Install Git to enable worktree terminals and branch flows.",
129
+ command: hasGit ? null : "git --version",
130
+ },
131
+ {
132
+ id: "check-curl",
133
+ title: "Check curl",
134
+ description: "Verify curl is available for Claude hook callbacks.",
135
+ complete: hasCurl && isCurlVerified,
136
+ required: false,
137
+ actionLabel: "Check curl",
138
+ statusText: hasCurl
139
+ ? isCurlVerified
140
+ ? "curl is available."
141
+ : "Confirm curl before using Claude hook callbacks."
142
+ : "curl is unavailable.",
143
+ guidance: hasCurl
144
+ ? isCurlVerified
145
+ ? null
146
+ : "Click to verify hook callback support on this machine."
147
+ : "Install curl to restore Claude hook callbacks.",
148
+ command: hasCurl ? null : "curl --version",
149
+ },
150
+ {
151
+ id: "create-tentacles",
152
+ title: "Create tentacles",
153
+ description: "Create at least one tentacle before launching a coding agent.",
154
+ complete: hasAnyTentacles,
155
+ required: true,
156
+ actionLabel: null,
157
+ statusText: hasAnyTentacles
158
+ ? `${tentacleCount} tentacle${tentacleCount === 1 ? "" : "s"} ready.`
159
+ : "Create your first tentacle to continue.",
160
+ guidance: hasAnyTentacles
161
+ ? null
162
+ : "Use the planner or manual creation to add at least one tentacle.",
163
+ command: null,
164
+ },
165
+ ];
166
+
167
+ return {
168
+ isFirstRun,
169
+ shouldShowSetupCard: isFirstRun || (!hasAnyTentacles && (!hasProjectScaffold || !hasGitignore)),
170
+ hasAnyTentacles,
171
+ tentacleCount,
172
+ steps,
173
+ };
174
+ };
@@ -0,0 +1,146 @@
1
+ import { execFileSync } from "node:child_process";
2
+
3
+ export type StartupPrerequisiteSeverity = "error" | "warning";
4
+
5
+ export type StartupPrerequisiteIssue = {
6
+ command: string;
7
+ severity: StartupPrerequisiteSeverity;
8
+ summary: string;
9
+ guidance: string;
10
+ };
11
+
12
+ export type StartupPrerequisiteAvailability = Record<
13
+ "claude" | "codex" | "git" | "gh" | "curl",
14
+ boolean
15
+ >;
16
+
17
+ export type StartupPrerequisiteReport = {
18
+ availability: StartupPrerequisiteAvailability;
19
+ errors: StartupPrerequisiteIssue[];
20
+ warnings: StartupPrerequisiteIssue[];
21
+ };
22
+
23
+ type CommandAvailabilityChecker = (command: string) => boolean;
24
+
25
+ type CommandAvailabilityOptions = {
26
+ platform?: NodeJS.Platform;
27
+ execFileSyncImpl?: typeof execFileSync;
28
+ };
29
+
30
+ const resolveLookupCommand = (platform: NodeJS.Platform) =>
31
+ platform === "win32"
32
+ ? { file: "where", args: [] as string[] }
33
+ : { file: "which", args: [] as string[] };
34
+
35
+ export const isCommandAvailable = (
36
+ command: string,
37
+ options: CommandAvailabilityOptions = {},
38
+ ): boolean => {
39
+ const lookup = resolveLookupCommand(options.platform ?? process.platform);
40
+
41
+ try {
42
+ (options.execFileSyncImpl ?? execFileSync)(lookup.file, [...lookup.args, command], {
43
+ stdio: "ignore",
44
+ });
45
+ return true;
46
+ } catch {
47
+ return false;
48
+ }
49
+ };
50
+
51
+ export const collectStartupPrerequisiteReport = (
52
+ isAvailable: CommandAvailabilityChecker = (command) => isCommandAvailable(command),
53
+ ): StartupPrerequisiteReport => {
54
+ const availability: StartupPrerequisiteAvailability = {
55
+ claude: isAvailable("claude"),
56
+ codex: isAvailable("codex"),
57
+ git: isAvailable("git"),
58
+ gh: isAvailable("gh"),
59
+ curl: isAvailable("curl"),
60
+ };
61
+
62
+ const errors: StartupPrerequisiteIssue[] = [];
63
+ const warnings: StartupPrerequisiteIssue[] = [];
64
+
65
+ if (!availability.claude && !availability.codex) {
66
+ errors.push({
67
+ command: "claude/codex",
68
+ severity: "error",
69
+ summary: "Neither `claude` nor `codex` is installed.",
70
+ guidance:
71
+ "Install at least one agent CLI before starting Octogent. Claude-backed terminals use `claude`; Codex-backed terminals use `codex`.",
72
+ });
73
+ } else {
74
+ if (!availability.claude) {
75
+ warnings.push({
76
+ command: "claude",
77
+ severity: "warning",
78
+ summary: "`claude` is not installed.",
79
+ guidance:
80
+ "Claude-backed terminals are unavailable. Install Claude Code and run `claude login` if you want the default Claude provider.",
81
+ });
82
+ }
83
+
84
+ if (!availability.codex) {
85
+ warnings.push({
86
+ command: "codex",
87
+ severity: "warning",
88
+ summary: "`codex` is not installed.",
89
+ guidance:
90
+ "Codex-backed terminals and Codex usage telemetry are unavailable. Install Codex CLI and run `codex login` if you want Codex terminals.",
91
+ });
92
+ }
93
+ }
94
+
95
+ if (!availability.git) {
96
+ warnings.push({
97
+ command: "git",
98
+ severity: "warning",
99
+ summary: "`git` is not installed.",
100
+ guidance:
101
+ "Worktree terminals and git lifecycle actions are unavailable. Install Git to enable branch/worktree flows.",
102
+ });
103
+ }
104
+
105
+ if (!availability.gh) {
106
+ warnings.push({
107
+ command: "gh",
108
+ severity: "warning",
109
+ summary: "`gh` is not installed.",
110
+ guidance:
111
+ "GitHub pull request features are unavailable. Install GitHub CLI and run `gh auth login` to enable PR actions.",
112
+ });
113
+ }
114
+
115
+ if (!availability.curl) {
116
+ warnings.push({
117
+ command: "curl",
118
+ severity: "warning",
119
+ summary: "`curl` is not installed.",
120
+ guidance:
121
+ "Claude hook command callbacks for SessionStart, UserPromptSubmit, and Stop are unavailable. Install curl to restore full Claude hook delivery.",
122
+ });
123
+ }
124
+
125
+ return { availability, errors, warnings };
126
+ };
127
+
128
+ export const formatStartupPrerequisiteReport = (report: StartupPrerequisiteReport): string[] => {
129
+ if (report.errors.length === 0 && report.warnings.length === 0) {
130
+ return [];
131
+ }
132
+
133
+ const lines = ["Octogent startup preflight:"];
134
+
135
+ for (const issue of report.errors) {
136
+ lines.push(` Error: ${issue.summary}`);
137
+ lines.push(` ${issue.guidance}`);
138
+ }
139
+
140
+ for (const issue of report.warnings) {
141
+ lines.push(` Warning: ${issue.summary}`);
142
+ lines.push(` ${issue.guidance}`);
143
+ }
144
+
145
+ return lines;
146
+ };
@@ -0,0 +1,87 @@
1
+ import { logVerbose } from "../logging";
2
+ import type { ChannelMessage, PersistedTerminal, TerminalSession } from "./types";
3
+
4
+ export const createChannelMessaging = (deps: {
5
+ terminals: Map<string, PersistedTerminal>;
6
+ sessions: Map<string, TerminalSession>;
7
+ writeInput: (terminalId: string, data: string) => boolean;
8
+ }) => {
9
+ const { terminals, sessions, writeInput } = deps;
10
+ const channelQueues = new Map<string, ChannelMessage[]>();
11
+ let channelMessageCounter = 0;
12
+
13
+ const deliverChannelMessages = (terminalId: string): void => {
14
+ const queue = channelQueues.get(terminalId);
15
+ if (!queue || queue.length === 0) {
16
+ return;
17
+ }
18
+
19
+ const session = sessions.get(terminalId);
20
+ if (!session) {
21
+ return;
22
+ }
23
+
24
+ const undelivered = queue.filter((m) => !m.delivered);
25
+ if (undelivered.length === 0) {
26
+ return;
27
+ }
28
+
29
+ // Compose all pending messages into a single prompt injection.
30
+ const lines = undelivered.map(
31
+ (m) => `[Channel message from ${m.fromTerminalId}]: ${m.content}`,
32
+ );
33
+ const prompt = `${lines.join("\n")}\r`;
34
+
35
+ logVerbose(`[Channel] Delivering ${undelivered.length} message(s) to ${terminalId}`);
36
+
37
+ for (const m of undelivered) {
38
+ m.delivered = true;
39
+ }
40
+
41
+ writeInput(terminalId, prompt);
42
+ };
43
+
44
+ return {
45
+ sendChannelMessage(
46
+ toTerminalId: string,
47
+ fromTerminalId: string,
48
+ content: string,
49
+ ): ChannelMessage | null {
50
+ if (!terminals.has(toTerminalId)) {
51
+ return null;
52
+ }
53
+
54
+ channelMessageCounter += 1;
55
+ const message: ChannelMessage = {
56
+ messageId: `msg-${channelMessageCounter}`,
57
+ fromTerminalId,
58
+ toTerminalId,
59
+ content,
60
+ timestamp: new Date().toISOString(),
61
+ delivered: false,
62
+ };
63
+
64
+ const queue = channelQueues.get(toTerminalId) ?? [];
65
+ queue.push(message);
66
+ channelQueues.set(toTerminalId, queue);
67
+
68
+ logVerbose(
69
+ `[Channel] Queued message ${message.messageId} from=${fromTerminalId} to=${toTerminalId}`,
70
+ );
71
+
72
+ // If the target session is idle, deliver immediately.
73
+ const targetSession = sessions.get(toTerminalId);
74
+ if (targetSession && targetSession.agentState === "idle") {
75
+ deliverChannelMessages(toTerminalId);
76
+ }
77
+
78
+ return message;
79
+ },
80
+
81
+ listChannelMessages(terminalId: string): ChannelMessage[] {
82
+ return channelQueues.get(terminalId) ?? [];
83
+ },
84
+
85
+ deliverChannelMessages,
86
+ };
87
+ };