@axhub/genie 0.2.9 → 0.2.10

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 (96) hide show
  1. package/dist/api-docs.html +2 -2
  2. package/dist/assets/App-CYCCsgwf.js +264 -0
  3. package/dist/assets/{ReviewApp-C9K--AQE.js → ReviewApp-0srHIXwb.js} +1 -1
  4. package/dist/assets/{_basePickBy-DR_8uFCo.js → _basePickBy-DVVb07UV.js} +1 -1
  5. package/dist/assets/{_baseUniq-D0njlQ_7.js → _baseUniq-BtbziL5G.js} +1 -1
  6. package/dist/assets/{arc-CKlr_Rec.js → arc-BsCC8yBD.js} +1 -1
  7. package/dist/assets/{architectureDiagram-2XIMDMQ5-BmO_uLUH.js → architectureDiagram-2XIMDMQ5-woFp6eNI.js} +1 -1
  8. package/dist/assets/{blockDiagram-WCTKOSBZ-DhAeO-56.js → blockDiagram-WCTKOSBZ-ya8VAc2k.js} +1 -1
  9. package/dist/assets/{c4Diagram-IC4MRINW-C67kFoXx.js → c4Diagram-IC4MRINW-CY1dZmIZ.js} +1 -1
  10. package/dist/assets/channel-BMhScXFe.js +1 -0
  11. package/dist/assets/{chunk-4BX2VUAB-mLLagvJi.js → chunk-4BX2VUAB-CR1lAd74.js} +1 -1
  12. package/dist/assets/{chunk-55IACEB6-Lx-hOjlM.js → chunk-55IACEB6-CP98WcFC.js} +1 -1
  13. package/dist/assets/{chunk-FMBD7UC4-Bt-XmVUV.js → chunk-FMBD7UC4-D9c7ijAB.js} +1 -1
  14. package/dist/assets/{chunk-JSJVCQXG-Cya6gaDV.js → chunk-JSJVCQXG-DQAGYOn-.js} +1 -1
  15. package/dist/assets/{chunk-KX2RTZJC-Bd7Ig6tF.js → chunk-KX2RTZJC-BbTXiDq7.js} +1 -1
  16. package/dist/assets/{chunk-NQ4KR5QH-5UAE0Vg-.js → chunk-NQ4KR5QH-BI6AX0dr.js} +1 -1
  17. package/dist/assets/{chunk-QZHKN3VN-BAxZ8m7w.js → chunk-QZHKN3VN-DB3V2Ifo.js} +1 -1
  18. package/dist/assets/{chunk-WL4C6EOR-DjDPvUUP.js → chunk-WL4C6EOR-DhzTthv6.js} +1 -1
  19. package/dist/assets/classDiagram-VBA2DB6C-CMIxlWcT.js +1 -0
  20. package/dist/assets/classDiagram-v2-RAHNMMFH-CMIxlWcT.js +1 -0
  21. package/dist/assets/clone-BPqOt4r3.js +1 -0
  22. package/dist/assets/{cose-bilkent-S5V4N54A-D-60XrkJ.js → cose-bilkent-S5V4N54A-BQ09ZE2j.js} +1 -1
  23. package/dist/assets/{dagre-KLK3FWXG-bqu3ZS4K.js → dagre-KLK3FWXG-Dc2ueD_R.js} +1 -1
  24. package/dist/assets/{diagram-E7M64L7V-BueeqoYm.js → diagram-E7M64L7V-DP-LsQoL.js} +1 -1
  25. package/dist/assets/{diagram-IFDJBPK2-D4fDv2E7.js → diagram-IFDJBPK2-Cg6r42cB.js} +1 -1
  26. package/dist/assets/{diagram-P4PSJMXO-WqipY3fN.js → diagram-P4PSJMXO-aHsfoUZE.js} +1 -1
  27. package/dist/assets/{erDiagram-INFDFZHY-D0oVnO-x.js → erDiagram-INFDFZHY-qBXJ4aAz.js} +1 -1
  28. package/dist/assets/{flowDiagram-PKNHOUZH-DzbGyxrr.js → flowDiagram-PKNHOUZH-D_13emJM.js} +1 -1
  29. package/dist/assets/{ganttDiagram-A5KZAMGK-BwhbbgCP.js → ganttDiagram-A5KZAMGK-BvIcOLwz.js} +1 -1
  30. package/dist/assets/{gitGraphDiagram-K3NZZRJ6-DZgAh_KM.js → gitGraphDiagram-K3NZZRJ6-ad0vvNcU.js} +1 -1
  31. package/dist/assets/{graph-DzKos-N0.js → graph-CeJCMjan.js} +1 -1
  32. package/dist/assets/{highlighted-body-TPN3WLV5-CKDMgz3X.js → highlighted-body-TPN3WLV5-B_novwSz.js} +1 -1
  33. package/dist/assets/index-C514cLyb.js +2 -0
  34. package/dist/assets/index-h1DBl_g3.css +1 -0
  35. package/dist/assets/{infoDiagram-LFFYTUFH-BFicZbTf.js → infoDiagram-LFFYTUFH-lOxAqb3m.js} +1 -1
  36. package/dist/assets/{ishikawaDiagram-PHBUUO56-CtihxDxl.js → ishikawaDiagram-PHBUUO56-DIr-51gj.js} +1 -1
  37. package/dist/assets/{journeyDiagram-4ABVD52K-Du00J8_d.js → journeyDiagram-4ABVD52K-CYcIW0ZU.js} +1 -1
  38. package/dist/assets/{kanban-definition-K7BYSVSG-BJi9S0iQ.js → kanban-definition-K7BYSVSG-C1ZK616a.js} +1 -1
  39. package/dist/assets/{layout-B80Sityu.js → layout-CI2RM-v6.js} +1 -1
  40. package/dist/assets/{linear-sRQLOf5H.js → linear-DE7bISck.js} +1 -1
  41. package/dist/assets/{mermaid-O7DHMXV3-CBuVs4eJ.js → mermaid-O7DHMXV3-XxAJo8EK.js} +6 -6
  42. package/dist/assets/{mindmap-definition-YRQLILUH-C5IL_xi-.js → mindmap-definition-YRQLILUH-Dz6EFjmn.js} +1 -1
  43. package/dist/assets/{pieDiagram-SKSYHLDU-CeTwlJ8z.js → pieDiagram-SKSYHLDU-DPpEzUed.js} +1 -1
  44. package/dist/assets/{quadrantDiagram-337W2JSQ-COfUcLWt.js → quadrantDiagram-337W2JSQ-xdoXNet7.js} +1 -1
  45. package/dist/assets/{requirementDiagram-Z7DCOOCP-DSb-CJ5B.js → requirementDiagram-Z7DCOOCP-DUq8H3CL.js} +1 -1
  46. package/dist/assets/{sankeyDiagram-WA2Y5GQK-8jtuVb45.js → sankeyDiagram-WA2Y5GQK-CmqEUxRu.js} +1 -1
  47. package/dist/assets/{sequenceDiagram-2WXFIKYE-C2VpkMwA.js → sequenceDiagram-2WXFIKYE-DhtXRNiH.js} +1 -1
  48. package/dist/assets/{stateDiagram-RAJIS63D-fmwMqxxc.js → stateDiagram-RAJIS63D-Dj0HOlbN.js} +1 -1
  49. package/dist/assets/stateDiagram-v2-FVOUBMTO-C9utf5gv.js +1 -0
  50. package/dist/assets/{timeline-definition-YZTLITO2-Dx1hP5lg.js → timeline-definition-YZTLITO2-DUuJzZB5.js} +1 -1
  51. package/dist/assets/{treemap-KZPCXAKY-CkLOdYCZ.js → treemap-KZPCXAKY-DpYBQ0qr.js} +1 -1
  52. package/dist/assets/vendor-codemirror-CMHSJ_9p.js +9 -0
  53. package/dist/assets/{vennDiagram-LZ73GAT5-D6KWcnln.js → vennDiagram-LZ73GAT5-DpePUyOd.js} +1 -1
  54. package/dist/assets/{xychartDiagram-JWTSCODW-6fh6qmzN.js → xychartDiagram-JWTSCODW-Cfp1I4_U.js} +1 -1
  55. package/dist/index.html +3 -3
  56. package/package.json +6 -5
  57. package/server/acp-runtime/client.js +120 -14
  58. package/server/acp-runtime/index.js +54 -0
  59. package/server/acp-runtime/registry.js +2 -2
  60. package/server/acp-runtime/session-store.js +75 -1
  61. package/server/cli.js +32 -8
  62. package/server/database/db.js +20 -0
  63. package/server/external-agent/ws.js +477 -24
  64. package/server/index.js +78 -146
  65. package/server/lan-access/core.js +79 -0
  66. package/server/lan-access/state.js +102 -0
  67. package/server/middleware/auth.js +57 -14
  68. package/server/projects.js +423 -535
  69. package/server/routes/auth.js +24 -4
  70. package/server/routes/cli-auth.js +21 -25
  71. package/server/routes/codex.js +84 -298
  72. package/server/routes/commands.js +322 -407
  73. package/server/routes/lan-access.js +231 -0
  74. package/server/routes/projects.js +154 -158
  75. package/server/routes/session-core.js +13 -7
  76. package/server/routes/settings.js +113 -99
  77. package/server/session-core/eventStore.js +15 -2
  78. package/server/session-core/providerAdapters.js +28 -28
  79. package/server/session-core/sessionListMerge.js +47 -0
  80. package/shared/conversationEvents.js +96 -1
  81. package/shared/modelConstants.js +79 -99
  82. package/dist/assets/App-GBcTeeUS.js +0 -460
  83. package/dist/assets/channel-V3MBjKys.js +0 -1
  84. package/dist/assets/classDiagram-VBA2DB6C-C790yYiY.js +0 -1
  85. package/dist/assets/classDiagram-v2-RAHNMMFH-C790yYiY.js +0 -1
  86. package/dist/assets/clone-BbMGfZwt.js +0 -1
  87. package/dist/assets/index-DiQlHzGj.js +0 -2
  88. package/dist/assets/index-Drat2nB9.css +0 -1
  89. package/dist/assets/stateDiagram-v2-FVOUBMTO-9GGXVWrR.js +0 -1
  90. package/dist/assets/vendor-codemirror-BxPY6emf.js +0 -39
  91. package/server/routes/git.js +0 -1110
  92. package/server/routes/mcp-utils.js +0 -48
  93. package/server/routes/mcp.js +0 -536
  94. package/server/routes/taskmaster.js +0 -1963
  95. package/server/utils/mcp-detector.js +0 -198
  96. package/server/utils/taskmaster-websocket.js +0 -129
package/server/cli.js CHANGED
@@ -169,6 +169,18 @@ async function waitForRuntimeStatus(pid, timeoutMs = 10000) {
169
169
  return null;
170
170
  }
171
171
 
172
+ function shouldAutoOpenHomepage(options = {}, env = process.env) {
173
+ if (options.noOpen || env.AXHUB_GENIE_NO_OPEN === 'true') {
174
+ return false;
175
+ }
176
+
177
+ if (options.open || env.AXHUB_GENIE_OPEN === 'true') {
178
+ return true;
179
+ }
180
+
181
+ return false;
182
+ }
183
+
172
184
  function isProcessAlive(pid) {
173
185
  if (!Number.isInteger(pid) || pid <= 0) {
174
186
  return false;
@@ -548,7 +560,9 @@ function buildEditorRequest(positionals, options) {
548
560
  }
549
561
 
550
562
  const channel = requireOption(options, 'channel', '--channel is required for editor commands');
551
- const targetClientId = requireOption(options, 'targetClientId', '--target-client-id is required for editor commands');
563
+ const targetClientId = typeof options.targetClientId === 'string' && options.targetClientId.trim()
564
+ ? options.targetClientId.trim()
565
+ : null;
552
566
 
553
567
  if (commandPath === 'editor snapshot') {
554
568
  return {
@@ -558,7 +572,10 @@ function buildEditorRequest(positionals, options) {
558
572
  message: {
559
573
  type: 'integration.editor.snapshot.get',
560
574
  requestId: scope.requestId,
561
- payload: { channel, targetClientId },
575
+ payload: {
576
+ channel,
577
+ ...(targetClientId ? { targetClientId } : {}),
578
+ },
562
579
  },
563
580
  };
564
581
  }
@@ -573,7 +590,7 @@ function buildEditorRequest(positionals, options) {
573
590
  requestId: scope.requestId,
574
591
  payload: {
575
592
  channel,
576
- targetClientId,
593
+ ...(targetClientId ? { targetClientId } : {}),
577
594
  ...(options.status ? { status: parseCommaSeparatedList(options.status) } : {}),
578
595
  ...(options.elementKey ? { elementKey: String(options.elementKey).trim() } : {}),
579
596
  ...(options.limit ? { limit: parsePositiveInteger(options.limit, '--limit') } : {}),
@@ -592,7 +609,7 @@ function buildEditorRequest(positionals, options) {
592
609
  requestId: scope.requestId,
593
610
  payload: {
594
611
  channel,
595
- targetClientId,
612
+ ...(targetClientId ? { targetClientId } : {}),
596
613
  elementKey: requireOption(options, 'elementKey', '--element-key is required'),
597
614
  downloadPath: resolveOutputDirPath(options.outputDir),
598
615
  },
@@ -610,7 +627,7 @@ function buildEditorRequest(positionals, options) {
610
627
  requestId: scope.requestId,
611
628
  payload: {
612
629
  channel,
613
- targetClientId,
630
+ ...(targetClientId ? { targetClientId } : {}),
614
631
  downloadPath: resolveOutputDirPath(options.outputDir),
615
632
  },
616
633
  },
@@ -627,7 +644,7 @@ function buildEditorRequest(positionals, options) {
627
644
  requestId: scope.requestId,
628
645
  payload: {
629
646
  channel,
630
- targetClientId,
647
+ ...(targetClientId ? { targetClientId } : {}),
631
648
  elementKey: requireOption(options, 'elementKey', '--element-key is required'),
632
649
  state: requireOption(options, 'state', '--state is required'),
633
650
  ...(buildTaskRef(options) ? { taskRef: buildTaskRef(options) } : {}),
@@ -947,7 +964,8 @@ Environment Variables:
947
964
  CLAUDE_CLI_PATH Set custom Claude CLI path
948
965
  CONTEXT_WINDOW Set context window size (default: 160000)
949
966
  AXHUB_GENIE_STATUS_PATH Set runtime status file path
950
- AXHUB_GENIE_NO_OPEN Set to true to disable auto-opening the homepage
967
+ AXHUB_GENIE_OPEN Set to true to auto-open the homepage after startup
968
+ AXHUB_GENIE_NO_OPEN Set to true to force-disable homepage auto-open
951
969
 
952
970
  Documentation:
953
971
  ${packageJson.homepage || defaultProjectUrl}
@@ -1032,7 +1050,7 @@ async function startServer() {
1032
1050
  // Import and run the server
1033
1051
  await import('./index.js');
1034
1052
 
1035
- if (process.env.AXHUB_GENIE_NO_OPEN === 'true') {
1053
+ if (!shouldAutoOpenHomepage()) {
1036
1054
  return;
1037
1055
  }
1038
1056
 
@@ -1141,6 +1159,8 @@ function parseArgs(args) {
1141
1159
  parsed.options.taskRequestId = arg.split('=')[1];
1142
1160
  } else if (arg === '--json') {
1143
1161
  parsed.options.json = true;
1162
+ } else if (arg === '--open') {
1163
+ parsed.options.open = true;
1144
1164
  } else if (arg === '--no-open') {
1145
1165
  parsed.options.noOpen = true;
1146
1166
  } else if (arg === '--help' || arg === '-h') {
@@ -1184,6 +1204,9 @@ async function main() {
1184
1204
  await runEditorCommand(positionals, options);
1185
1205
  break;
1186
1206
  }
1207
+ if (options.open) {
1208
+ process.env.AXHUB_GENIE_OPEN = 'true';
1209
+ }
1187
1210
  if (options.noOpen) {
1188
1211
  process.env.AXHUB_GENIE_NO_OPEN = 'true';
1189
1212
  }
@@ -1242,4 +1265,5 @@ export {
1242
1265
  normalizeApiBaseUrl,
1243
1266
  parseArgs,
1244
1267
  runEditorCommand,
1268
+ shouldAutoOpenHomepage,
1245
1269
  };
@@ -224,6 +224,26 @@ const userDb = {
224
224
  return toUserPublic(user);
225
225
  },
226
226
 
227
+ ensureDefaultUser: () => {
228
+ const existingUser = userDb.getFirstUser();
229
+ if (existingUser) {
230
+ return existingUser;
231
+ }
232
+
233
+ const preferredNames = ['genie', 'axhub-genie', 'local-user'];
234
+ for (const username of preferredNames) {
235
+ try {
236
+ return userDb.createUser(username, '');
237
+ } catch (error) {
238
+ if (error?.code !== 'USERNAME_EXISTS') {
239
+ throw error;
240
+ }
241
+ }
242
+ }
243
+
244
+ return userDb.createUser(`local-user-${Date.now()}`, '');
245
+ },
246
+
227
247
  };
228
248
 
229
249
  const apiKeysDb = {