@axhub/genie 0.2.5 → 0.2.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 (139) hide show
  1. package/dist/assets/App-BWSqiXAT.js +220 -0
  2. package/dist/assets/App-DrlLKa8f.css +1 -0
  3. package/dist/assets/ReviewApp-nz3mbArg.js +1 -0
  4. package/dist/assets/{_basePickBy-CFRQvihx.js → _basePickBy-C19AekOu.js} +1 -1
  5. package/dist/assets/{_baseUniq-Dhh8nCvs.js → _baseUniq-JsnevLw_.js} +1 -1
  6. package/dist/assets/{arc-DQ0v3dU4.js → arc-BLpcuBlf.js} +1 -1
  7. package/dist/assets/architectureDiagram-2XIMDMQ5-CarjBOOv.js +36 -0
  8. package/dist/assets/{blockDiagram-WCTKOSBZ-Bbxhj5KC.js → blockDiagram-WCTKOSBZ-DQBLwsUS.js} +3 -3
  9. package/dist/assets/c4Diagram-IC4MRINW-CGobwBIj.js +10 -0
  10. package/dist/assets/channel-DkFNxV_H.js +1 -0
  11. package/dist/assets/{chunk-4BX2VUAB-DlvtrM0q.js → chunk-4BX2VUAB-De63kbgc.js} +1 -1
  12. package/dist/assets/{chunk-55IACEB6-DJUSHyTa.js → chunk-55IACEB6-DtTDDdM9.js} +1 -1
  13. package/dist/assets/{chunk-FMBD7UC4-C6Ch-htf.js → chunk-FMBD7UC4-DHuwd8tw.js} +1 -1
  14. package/dist/assets/{chunk-JSJVCQXG-DzQIht58.js → chunk-JSJVCQXG-BgytFtmO.js} +1 -1
  15. package/dist/assets/{chunk-KX2RTZJC-C05jARMH.js → chunk-KX2RTZJC-nZdp86aN.js} +1 -1
  16. package/dist/assets/chunk-NQ4KR5QH-CMH6EDP2.js +220 -0
  17. package/dist/assets/{chunk-QZHKN3VN-jxti9HTX.js → chunk-QZHKN3VN-DvUQ3mnO.js} +1 -1
  18. package/dist/assets/chunk-WL4C6EOR-Dn7db_6t.js +189 -0
  19. package/dist/assets/classDiagram-VBA2DB6C-DtwCEe8S.js +1 -0
  20. package/dist/assets/classDiagram-v2-RAHNMMFH-DtwCEe8S.js +1 -0
  21. package/dist/assets/clone-C0lCEIEO.js +1 -0
  22. package/dist/assets/cose-bilkent-S5V4N54A-DD_nzqsz.js +1 -0
  23. package/dist/assets/cytoscape.esm-5J0xJHOV.js +321 -0
  24. package/dist/assets/{dagre-KLK3FWXG-DJ3dNSYk.js → dagre-KLK3FWXG-CHYIvW47.js} +1 -1
  25. package/dist/assets/diagram-E7M64L7V-TVdvHtGc.js +24 -0
  26. package/dist/assets/{diagram-IFDJBPK2-Da6K4aP-.js → diagram-IFDJBPK2-Dzsiln_C.js} +1 -1
  27. package/dist/assets/{diagram-P4PSJMXO-vZZKB92A.js → diagram-P4PSJMXO-DKnGbUpE.js} +1 -1
  28. package/dist/assets/erDiagram-INFDFZHY-5Kw0bByo.js +70 -0
  29. package/dist/assets/{flowDiagram-PKNHOUZH-DUV13pHi.js → flowDiagram-PKNHOUZH-BAZ2-jKp.js} +4 -4
  30. package/dist/assets/ganttDiagram-A5KZAMGK-CsADFkcq.js +292 -0
  31. package/dist/assets/{gitGraphDiagram-K3NZZRJ6-BZ5gW69I.js → gitGraphDiagram-K3NZZRJ6-BflpyjGy.js} +1 -1
  32. package/dist/assets/{graph-BbvHswRd.js → graph-suelaXFh.js} +1 -1
  33. package/dist/assets/highlighted-body-OFNGDK62-CZrBMazC.js +1 -0
  34. package/dist/assets/index-B01NxbUv.css +1 -0
  35. package/dist/assets/index-DW5pGgQ_.js +2 -0
  36. package/dist/assets/{infoDiagram-LFFYTUFH-8auUIPKW.js → infoDiagram-LFFYTUFH-pfD1FA3p.js} +1 -1
  37. package/dist/assets/ishikawaDiagram-PHBUUO56-ndm9snwO.js +70 -0
  38. package/dist/assets/journeyDiagram-4ABVD52K-HgF2t7z5.js +139 -0
  39. package/dist/assets/{kanban-definition-K7BYSVSG-Bappd2YO.js → kanban-definition-K7BYSVSG-FWinmur1.js} +5 -5
  40. package/dist/assets/{layout-BmbfFZKy.js → layout-vcz43XvZ.js} +1 -1
  41. package/dist/assets/{linear-WZnF-PT6.js → linear-le4gc0vx.js} +1 -1
  42. package/dist/assets/mermaid-GHXKKRXX-CK8m3lad.js +870 -0
  43. package/dist/assets/mindmap-definition-YRQLILUH-CNq9SKj4.js +68 -0
  44. package/dist/assets/{pieDiagram-SKSYHLDU-uxjlAy1t.js → pieDiagram-SKSYHLDU-C7PKDh3b.js} +2 -2
  45. package/dist/assets/quadrantDiagram-337W2JSQ-B7FnztNO.js +7 -0
  46. package/dist/assets/requirementDiagram-Z7DCOOCP-Bl_BM2Th.js +73 -0
  47. package/dist/assets/{sankeyDiagram-WA2Y5GQK-2-FHHM-R.js → sankeyDiagram-WA2Y5GQK-4gulcOP4.js} +3 -3
  48. package/dist/assets/sequenceDiagram-2WXFIKYE-VEuJDwyJ.js +145 -0
  49. package/dist/assets/{stateDiagram-RAJIS63D-DoW8U53H.js → stateDiagram-RAJIS63D-CB4Vl7qM.js} +1 -1
  50. package/dist/assets/stateDiagram-v2-FVOUBMTO-C85ucl39.js +1 -0
  51. package/dist/assets/timeline-definition-YZTLITO2-BPGKhi7f.js +61 -0
  52. package/dist/assets/{treemap-KZPCXAKY-ajdAP-72.js → treemap-KZPCXAKY-DZSEE6Hz.js} +58 -58
  53. package/dist/assets/vendor-codemirror-CyOKkaQZ.js +31 -0
  54. package/dist/assets/vendor-react-CP4yFTs7.js +8 -0
  55. package/dist/assets/vendor-xterm-DfcmCpbH.js +66 -0
  56. package/dist/assets/{vennDiagram-LZ73GAT5-C9If0AT0.js → vennDiagram-LZ73GAT5-8E_G06fI.js} +4 -4
  57. package/dist/assets/xychartDiagram-JWTSCODW-CbBk50-O.js +7 -0
  58. package/dist/favicon.png +0 -0
  59. package/dist/icons/icon-128x128.png +0 -0
  60. package/dist/icons/icon-144x144.png +0 -0
  61. package/dist/icons/icon-152x152.png +0 -0
  62. package/dist/icons/icon-192x192.png +0 -0
  63. package/dist/icons/icon-384x384.png +0 -0
  64. package/dist/icons/icon-512x512.png +0 -0
  65. package/dist/icons/icon-72x72.png +0 -0
  66. package/dist/icons/icon-96x96.png +0 -0
  67. package/dist/index.html +4 -5
  68. package/dist/logo-128.png +0 -0
  69. package/dist/logo-256.png +0 -0
  70. package/dist/logo-32.png +0 -0
  71. package/dist/logo-512.png +0 -0
  72. package/dist/logo-64.png +0 -0
  73. package/package.json +2 -1
  74. package/server/_legacy-providers/README.md +30 -0
  75. package/server/_legacy-providers/claude-sdk.js +956 -0
  76. package/server/_legacy-providers/gemini-cli.js +368 -0
  77. package/server/_legacy-providers/openai-codex.js +705 -0
  78. package/server/_legacy-providers/opencode-cli.js +674 -0
  79. package/server/acp-runtime/client.js +1805 -0
  80. package/server/acp-runtime/client.test.js +688 -0
  81. package/server/acp-runtime/index.js +419 -0
  82. package/server/acp-runtime/registry.js +45 -0
  83. package/server/acp-runtime/session-store.js +254 -0
  84. package/server/acp-runtime/session-store.test.js +89 -0
  85. package/server/channels/runtime/AgentRuntimeAdapter.js +21 -70
  86. package/server/claude-sdk.js +24 -944
  87. package/server/cli.js +11 -5
  88. package/server/external-agent/service.js +77 -63
  89. package/server/gemini-cli.js +23 -360
  90. package/server/index.js +54 -46
  91. package/server/openai-codex.js +24 -698
  92. package/server/opencode-cli.js +70 -640
  93. package/server/routes/agent.js +2 -0
  94. package/server/routes/codex.js +5 -5
  95. package/server/routes/git.js +3 -20
  96. package/server/routes/mcp.js +18 -34
  97. package/server/routes/session-core.js +44 -10
  98. package/server/session-core/abortSession.js +2 -18
  99. package/server/session-core/eventStore.js +5 -1
  100. package/server/session-core/providerAdapters.js +98 -10
  101. package/server/session-core/providerDiscovery.js +2 -2
  102. package/server/session-core/runtimeState.js +16 -17
  103. package/server/session-core/runtimeWriter.js +19 -12
  104. package/server/utils/codexPath.js +3 -1
  105. package/server/utils/spawnCommand.js +7 -0
  106. package/shared/conversationEvents.js +347 -10
  107. package/shared/conversationEvents.test.js +403 -0
  108. package/dist/assets/App-BxazfNJn.js +0 -484
  109. package/dist/assets/App-qxJ8_QYu.css +0 -32
  110. package/dist/assets/ReviewApp-CsqTAlGU.js +0 -1
  111. package/dist/assets/architectureDiagram-2XIMDMQ5-DmUHdvQH.js +0 -36
  112. package/dist/assets/c4Diagram-IC4MRINW-BOivDlQU.js +0 -10
  113. package/dist/assets/channel-Cj8xVD0X.js +0 -1
  114. package/dist/assets/chunk-NQ4KR5QH-Ci-n7jfu.js +0 -220
  115. package/dist/assets/chunk-WL4C6EOR-C559Mk71.js +0 -189
  116. package/dist/assets/classDiagram-VBA2DB6C-CI2zklxw.js +0 -1
  117. package/dist/assets/classDiagram-v2-RAHNMMFH-CI2zklxw.js +0 -1
  118. package/dist/assets/clone-BEVqubrI.js +0 -1
  119. package/dist/assets/cose-bilkent-S5V4N54A-DNO9ncXL.js +0 -1
  120. package/dist/assets/cytoscape.esm-2ZfV8NB5.js +0 -331
  121. package/dist/assets/diagram-E7M64L7V-Ba_LGLun.js +0 -24
  122. package/dist/assets/erDiagram-INFDFZHY-Csb8dFdP.js +0 -70
  123. package/dist/assets/ganttDiagram-A5KZAMGK-B5Kv9Wfz.js +0 -292
  124. package/dist/assets/highlighted-body-TPN3WLV5-DZJajMGm.js +0 -1
  125. package/dist/assets/index-BFX9lxRB.css +0 -1
  126. package/dist/assets/index-BiErUGrv.js +0 -2
  127. package/dist/assets/ishikawaDiagram-PHBUUO56-JmsNlo2I.js +0 -70
  128. package/dist/assets/journeyDiagram-4ABVD52K-Cuudv7Vv.js +0 -139
  129. package/dist/assets/mermaid-O7DHMXV3-D-2fQRvw.js +0 -988
  130. package/dist/assets/mindmap-definition-YRQLILUH-BQHnzzud.js +0 -68
  131. package/dist/assets/quadrantDiagram-337W2JSQ-DpwZU-f_.js +0 -7
  132. package/dist/assets/requirementDiagram-Z7DCOOCP-C_9ClOWm.js +0 -73
  133. package/dist/assets/sequenceDiagram-2WXFIKYE-egns-0XI.js +0 -145
  134. package/dist/assets/stateDiagram-v2-FVOUBMTO-BoFZZ4Ds.js +0 -1
  135. package/dist/assets/timeline-definition-YZTLITO2-chPa8ppH.js +0 -61
  136. package/dist/assets/vendor-codemirror-Dz7_EqNA.js +0 -39
  137. package/dist/assets/vendor-react-Cpt6D04s.js +0 -59
  138. package/dist/assets/vendor-xterm-DfaPXD3y.js +0 -66
  139. package/dist/assets/xychartDiagram-JWTSCODW-DD42U6Or.js +0 -7
package/server/index.js CHANGED
@@ -97,10 +97,13 @@ import fetch from 'node-fetch';
97
97
  import mime from 'mime-types';
98
98
 
99
99
  import { getProjects, getSessions, getSessionMessages, renameProject, deleteSession, deleteProject, addProjectManually, extractProjectDirectory, clearProjectDirectoryCache, clearProviderSessionLookupCaches, getGeminiSessionMessages } from './projects.js';
100
- import { queryClaudeSDK, isClaudeSDKSessionActive, getActiveClaudeSDKSessions, resolveToolApproval } from './claude-sdk.js';
101
- import { queryCodex, isCodexSessionActive, getActiveCodexSessions } from './openai-codex.js';
102
- import { queryGemini, isGeminiSessionActive, getActiveGeminiSessions } from './gemini-cli.js';
103
- import { queryOpencode, isOpencodeSessionActive, getActiveOpencodeSessions } from './opencode-cli.js';
100
+ import {
101
+ executeAgentPrompt,
102
+ getActiveAgentSessions,
103
+ isAgentSessionActive,
104
+ resolveAgentPermission,
105
+ setAgentSessionMode
106
+ } from './acp-runtime/index.js';
104
107
  import gitRoutes from './routes/git.js';
105
108
  import authRoutes from './routes/auth.js';
106
109
  import mcpRoutes from './routes/mcp.js';
@@ -566,7 +569,7 @@ app.post('/api/system/update', authenticateToken, async (req, res) => {
566
569
  console.log('Starting system update from directory:', projectRoot);
567
570
 
568
571
  const npmCommand = getNpmCommand();
569
- const updateArgs = ['update', '-g', UPDATE_PACKAGE_NAME];
572
+ const updateArgs = ['install', '-g', `${UPDATE_PACKAGE_NAME}@latest`];
570
573
 
571
574
  // Run npm global update command
572
575
  const child = spawn(npmCommand, updateArgs, {
@@ -1112,31 +1115,24 @@ function handleChatConnection(ws) {
1112
1115
  try {
1113
1116
  data = JSON.parse(message);
1114
1117
 
1115
- if (data.type === 'claude-command') {
1116
- console.log('[DEBUG] User message:', data.command || '[Continue/Resume]');
1117
- console.log('📁 Project:', data.options?.projectPath || 'Unknown');
1118
- console.log('🔄 Session:', data.options?.sessionId ? 'Resume' : 'New');
1118
+ const agentCommandTypes = ['claude-command', 'codex-command', 'gemini-command', 'opencode-command'];
1119
1119
 
1120
- // Use Claude Agents SDK
1121
- await queryClaudeSDK(data.command, data.options, new SessionEventMirrorWriter(baseWriter, 'claude'));
1122
- } else if (data.type === 'codex-command') {
1123
- console.log('[DEBUG] Codex message:', data.command || '[Continue/Resume]');
1124
- console.log('📁 Project:', data.options?.projectPath || data.options?.cwd || 'Unknown');
1125
- console.log('🔄 Session:', data.options?.sessionId ? 'Resume' : 'New');
1126
- console.log('🤖 Model:', data.options?.model || 'default');
1127
- await queryCodex(data.command, data.options, new SessionEventMirrorWriter(baseWriter, 'codex'));
1128
- } else if (data.type === 'gemini-command') {
1129
- console.log('[DEBUG] Gemini message:', data.command || '[Continue/Resume]');
1120
+ if (agentCommandTypes.includes(data.type)) {
1121
+ const agentKey = data.type.replace(/-command$/, '');
1122
+ console.log(`[DEBUG] ${agentKey} message:`, data.command || '[Continue/Resume]');
1130
1123
  console.log('📁 Project:', data.options?.projectPath || data.options?.cwd || 'Unknown');
1131
1124
  console.log('🔄 Session:', data.options?.sessionId ? 'Resume' : 'New');
1132
1125
  console.log('🤖 Model:', data.options?.model || 'default');
1133
- await queryGemini(data.command, data.options, new SessionEventMirrorWriter(baseWriter, 'gemini'));
1134
- } else if (data.type === 'opencode-command') {
1135
- console.log('[DEBUG] OpenCode message:', data.command || '[Continue/Resume]');
1136
- console.log('📁 Project:', data.options?.projectPath || data.options?.cwd || 'Unknown');
1137
- console.log('🔄 Session:', data.options?.sessionId ? 'Resume' : 'New');
1138
- console.log('🤖 Model:', data.options?.model || 'default');
1139
- await queryOpencode(data.command, data.options, new SessionEventMirrorWriter(baseWriter, 'opencode'));
1126
+
1127
+ await executeAgentPrompt({
1128
+ agentKey,
1129
+ command: data.command,
1130
+ options: {
1131
+ ...(data.options || {}),
1132
+ clientRequestId: data.clientRequestId || data.options?.clientRequestId || null
1133
+ },
1134
+ writer: new SessionEventMirrorWriter(baseWriter, agentKey)
1135
+ });
1140
1136
  } else if (data.type === 'abort-session') {
1141
1137
  console.log('[DEBUG] Abort session request:', data.sessionId);
1142
1138
  const provider = typeof data.provider === 'string' && data.provider.trim()
@@ -1147,13 +1143,29 @@ function handleChatConnection(ws) {
1147
1143
  sessionId: data.sessionId,
1148
1144
  writer: getSessionWriter(provider)
1149
1145
  });
1150
- } else if (data.type === 'claude-permission-response') {
1151
- // Relay UI approval decisions back into the SDK control flow.
1152
- // This does not persist permissions; it only resolves the in-flight request,
1153
- // introduced so the SDK can resume once the user clicks Allow/Deny.
1146
+ } else if (data.type === 'set-session-mode') {
1147
+ const provider = typeof data.provider === 'string' && data.provider.trim()
1148
+ ? data.provider.trim().toLowerCase()
1149
+ : 'claude';
1150
+ const modeId = String(data.modeId || '').trim();
1151
+ if (!data.sessionId || !modeId) {
1152
+ throw new Error('set-session-mode requires sessionId and modeId');
1153
+ }
1154
+
1155
+ const changed = await setAgentSessionMode(provider, data.sessionId, modeId, {
1156
+ writer: getSessionWriter(provider)
1157
+ });
1158
+
1159
+ if (!changed) {
1160
+ throw new Error(`Unable to set session mode for ${provider}:${data.sessionId}`);
1161
+ }
1162
+ } else if (data.type === 'permission-response' || data.type === 'claude-permission-response') {
1154
1163
  if (data.requestId) {
1155
- resolveToolApproval(data.requestId, {
1164
+ resolveAgentPermission(data.requestId, {
1156
1165
  allow: Boolean(data.allow),
1166
+ optionId: data.optionId,
1167
+ outcome: data.outcome,
1168
+ cancelled: data.outcome?.outcome === 'cancelled' || Boolean(data.cancelled),
1157
1169
  updatedInput: data.updatedInput,
1158
1170
  message: data.message,
1159
1171
  rememberEntry: data.rememberEntry
@@ -1164,17 +1176,7 @@ function handleChatConnection(ws) {
1164
1176
  const provider = data.provider || 'claude';
1165
1177
  const sessionId = data.sessionId;
1166
1178
  const sessionWriter = getSessionWriter(provider);
1167
- let isActive;
1168
- if (provider === 'codex') {
1169
- isActive = isCodexSessionActive(sessionId);
1170
- } else if (provider === 'gemini') {
1171
- isActive = isGeminiSessionActive(sessionId);
1172
- } else if (provider === 'opencode') {
1173
- isActive = isOpencodeSessionActive(sessionId);
1174
- } else {
1175
- // Use Claude Agents SDK
1176
- isActive = isClaudeSDKSessionActive(sessionId);
1177
- }
1179
+ const isActive = isAgentSessionActive(provider, sessionId);
1178
1180
 
1179
1181
  sessionWriter.send({
1180
1182
  type: 'session-status',
@@ -1185,9 +1187,10 @@ function handleChatConnection(ws) {
1185
1187
  } else if (data.type === 'get-active-sessions') {
1186
1188
  // Get all currently active sessions
1187
1189
  const activeSessions = {
1188
- claude: getActiveClaudeSDKSessions(), codex: getActiveCodexSessions(),
1189
- gemini: getActiveGeminiSessions(),
1190
- opencode: getActiveOpencodeSessions()
1190
+ claude: getActiveAgentSessions('claude'),
1191
+ codex: getActiveAgentSessions('codex'),
1192
+ gemini: getActiveAgentSessions('gemini'),
1193
+ opencode: getActiveAgentSessions('opencode')
1191
1194
  };
1192
1195
  baseWriter.send({
1193
1196
  type: 'active-sessions',
@@ -2119,13 +2122,18 @@ async function startServer() {
2119
2122
  // Check if running in production mode (dist folder exists)
2120
2123
  const distIndexPath = path.join(__dirname, '../dist/index.html');
2121
2124
  const isProduction = fs.existsSync(distIndexPath);
2125
+ const runtimeEnvironment = resolveRuntimeEnvironment(isProduction);
2126
+ const frontendMode = isProduction ? 'BUILT DIST' : 'VITE DEV SERVER';
2122
2127
 
2123
2128
  // Log Claude implementation mode
2124
2129
  console.log(`${c.info('[INFO]')} Using Claude Agents SDK for Claude integration`);
2125
- console.log(`${c.info('[INFO]')} Running in ${c.bright(isProduction ? 'PRODUCTION' : 'DEVELOPMENT')} mode`);
2130
+ console.log(`${c.info('[INFO]')} Runtime environment: ${c.bright(String(runtimeEnvironment).toUpperCase())}`);
2131
+ console.log(`${c.info('[INFO]')} Frontend source: ${c.bright(frontendMode)}`);
2126
2132
 
2127
2133
  if (!isProduction) {
2128
2134
  console.log(`${c.warn('[WARN]')} Note: Requests will be proxied to Vite dev server at ${c.dim('http://localhost:' + (process.env.VITE_PORT || 5173))}`);
2135
+ } else {
2136
+ console.log(`${c.info('[INFO]')} Serving frontend assets from ${c.dim(path.join(__dirname, '../dist'))}`);
2129
2137
  }
2130
2138
 
2131
2139
  server.listen(PORT, '0.0.0.0', async () => {