negotium 0.1.8 → 0.1.9

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 (103) hide show
  1. package/README.md +24 -0
  2. package/dist/canonical-mcp-bridge.js +14 -0
  3. package/dist/canonical-mcp-bridge.js.map +9 -0
  4. package/dist/{chunk-rafc55bs.js → chunk-10ct8814.js} +21 -16
  5. package/dist/{chunk-rafc55bs.js.map → chunk-10ct8814.js.map} +2 -2
  6. package/dist/{chunk-j2behpy7.js → chunk-18fzftjf.js} +9 -9
  7. package/dist/chunk-1msje2zf.js +23 -0
  8. package/dist/chunk-1msje2zf.js.map +10 -0
  9. package/dist/{chunk-5ahkew9c.js → chunk-2dgkah1z.js} +6 -106
  10. package/dist/{chunk-5ahkew9c.js.map → chunk-2dgkah1z.js.map} +5 -8
  11. package/dist/{chunk-hkdqhm34.js → chunk-3t4dtm26.js} +1 -1
  12. package/dist/{chunk-w13jjf4a.js → chunk-3vn2vnj1.js} +21 -16
  13. package/dist/{chunk-w13jjf4a.js.map → chunk-3vn2vnj1.js.map} +2 -2
  14. package/dist/{chunk-fgrme9tr.js → chunk-6hknphtc.js} +119 -2463
  15. package/dist/chunk-6hknphtc.js.map +29 -0
  16. package/dist/{chunk-naa09ags.js → chunk-6tfzpcvk.js} +28 -22
  17. package/dist/{chunk-naa09ags.js.map → chunk-6tfzpcvk.js.map} +3 -3
  18. package/dist/{chunk-n17yxpa8.js → chunk-8g0c4as0.js} +3 -3
  19. package/dist/{chunk-e4407g8x.js → chunk-9spx3h9n.js} +23 -18
  20. package/dist/{chunk-e4407g8x.js.map → chunk-9spx3h9n.js.map} +2 -2
  21. package/dist/{chunk-ns3ke88n.js → chunk-e9b2xpff.js} +21 -16
  22. package/dist/{chunk-ns3ke88n.js.map → chunk-e9b2xpff.js.map} +2 -2
  23. package/dist/{chunk-e5pbggsh.js → chunk-eexqsee7.js} +21 -16
  24. package/dist/{chunk-e5pbggsh.js.map → chunk-eexqsee7.js.map} +2 -2
  25. package/dist/{chunk-t9zcg8f1.js → chunk-efyxk97v.js} +3 -2
  26. package/dist/chunk-efyxk97v.js.map +13 -0
  27. package/dist/{chunk-6kctn20e.js → chunk-epqxwkvh.js} +29 -24
  28. package/dist/{chunk-6kctn20e.js.map → chunk-epqxwkvh.js.map} +2 -2
  29. package/dist/{chunk-gxma4c70.js → chunk-f1pzh3xh.js} +22 -17
  30. package/dist/{chunk-gxma4c70.js.map → chunk-f1pzh3xh.js.map} +2 -2
  31. package/dist/{chunk-7xqj7aex.js → chunk-f5xgprg1.js} +2 -20
  32. package/dist/{chunk-7xqj7aex.js.map → chunk-f5xgprg1.js.map} +3 -4
  33. package/dist/{chunk-xfq68rch.js → chunk-f97qybwk.js} +3 -2
  34. package/dist/{chunk-xfq68rch.js.map → chunk-f97qybwk.js.map} +2 -2
  35. package/dist/{chunk-a92a7nrk.js → chunk-fvc7ncxd.js} +1 -1
  36. package/dist/{chunk-sm6fh5c5.js → chunk-g7pvfj5e.js} +20 -15
  37. package/dist/{chunk-sm6fh5c5.js.map → chunk-g7pvfj5e.js.map} +2 -2
  38. package/dist/{chunk-ghs2j1fr.js → chunk-h8vmb9gf.js} +18 -15
  39. package/dist/{chunk-ghs2j1fr.js.map → chunk-h8vmb9gf.js.map} +2 -2
  40. package/dist/{chunk-9p0ww3tk.js → chunk-hgw7n8cm.js} +5 -3
  41. package/dist/{chunk-9p0ww3tk.js.map → chunk-hgw7n8cm.js.map} +2 -2
  42. package/dist/{chunk-gmy11efb.js → chunk-hsq7j9jk.js} +3 -2
  43. package/dist/{chunk-gmy11efb.js.map → chunk-hsq7j9jk.js.map} +2 -2
  44. package/dist/chunk-j0kjscb7.js +53 -0
  45. package/dist/chunk-j0kjscb7.js.map +10 -0
  46. package/dist/chunk-k9z47mab.js.map +1 -1
  47. package/dist/{chunk-0ay6cjdy.js → chunk-kbm35t7w.js} +10 -10
  48. package/dist/{chunk-0ay6cjdy.js.map → chunk-kbm35t7w.js.map} +1 -1
  49. package/dist/{chunk-cds1qxsf.js → chunk-m4veth0c.js} +24 -19
  50. package/dist/{chunk-cds1qxsf.js.map → chunk-m4veth0c.js.map} +2 -2
  51. package/dist/chunk-mhty3nna.js +150 -0
  52. package/dist/chunk-mhty3nna.js.map +11 -0
  53. package/dist/{chunk-jkqq5ef6.js → chunk-mmgh670x.js} +22 -17
  54. package/dist/{chunk-jkqq5ef6.js.map → chunk-mmgh670x.js.map} +2 -2
  55. package/dist/chunk-n0kk5xbq.js +2358 -0
  56. package/dist/chunk-n0kk5xbq.js.map +26 -0
  57. package/dist/{chunk-rbrxjvbj.js → chunk-nmv41qx9.js} +42 -25
  58. package/dist/chunk-nmv41qx9.js.map +23 -0
  59. package/dist/chunk-nqdp52aj.js +113 -0
  60. package/dist/chunk-nqdp52aj.js.map +12 -0
  61. package/dist/{chunk-hpa0cpzh.js → chunk-ns2m25dz.js} +24 -19
  62. package/dist/{chunk-hpa0cpzh.js.map → chunk-ns2m25dz.js.map} +2 -2
  63. package/dist/chunk-pkdmypdd.js +147 -0
  64. package/dist/chunk-pkdmypdd.js.map +11 -0
  65. package/dist/{chunk-p3cr2ejg.js → chunk-rmyfmrrr.js} +39 -31
  66. package/dist/{chunk-p3cr2ejg.js.map → chunk-rmyfmrrr.js.map} +3 -3
  67. package/dist/{chunk-exd0v74a.js → chunk-sn51wnf1.js} +83 -75
  68. package/dist/{chunk-exd0v74a.js.map → chunk-sn51wnf1.js.map} +3 -3
  69. package/dist/{chunk-fka9eqe1.js → chunk-sqhr1a7e.js} +24 -18
  70. package/dist/chunk-sqhr1a7e.js.map +11 -0
  71. package/dist/{chunk-q5bcpf23.js → chunk-tmj5r2zv.js} +63 -55
  72. package/dist/{chunk-q5bcpf23.js.map → chunk-tmj5r2zv.js.map} +3 -3
  73. package/dist/{chunk-jzkw2f01.js → chunk-vefj3880.js} +23 -18
  74. package/dist/{chunk-jzkw2f01.js.map → chunk-vefj3880.js.map} +2 -2
  75. package/dist/{chunk-g82jygez.js → chunk-wry79q55.js} +6 -6
  76. package/dist/{chunk-jc0at0tc.js → chunk-z2xy5n2q.js} +3 -2
  77. package/dist/{chunk-jc0at0tc.js.map → chunk-z2xy5n2q.js.map} +2 -2
  78. package/dist/hosted-agent.js +53 -0
  79. package/dist/hosted-agent.js.map +10 -0
  80. package/dist/main.js +12 -12
  81. package/dist/main.js.map +1 -1
  82. package/dist/runtime/src/agents/hosted-agent.ts +1 -0
  83. package/dist/runtime/src/application/submit-user-message.ts +3 -0
  84. package/dist/runtime/src/mcp/runtime-spec.ts +3 -0
  85. package/dist/runtime/src/platform/mcp-config.ts +13 -0
  86. package/dist/runtime/src/prompts/builders.ts +20 -9
  87. package/dist/runtime/src/query/active-rooms.ts +2 -0
  88. package/dist/runtime/src/runtime/turn-runner.ts +13 -1
  89. package/dist/runtime/src/storage/runtime-turn-requests.ts +1 -0
  90. package/dist/runtime/src/types.ts +2 -0
  91. package/dist/runtime/src/version.ts +1 -1
  92. package/package.json +13 -1
  93. package/dist/chunk-6cpn7ht2.js +0 -287
  94. package/dist/chunk-6cpn7ht2.js.map +0 -13
  95. package/dist/chunk-fgrme9tr.js.map +0 -47
  96. package/dist/chunk-fka9eqe1.js.map +0 -11
  97. package/dist/chunk-rbrxjvbj.js.map +0 -23
  98. package/dist/chunk-t9zcg8f1.js.map +0 -13
  99. /package/dist/{chunk-j2behpy7.js.map → chunk-18fzftjf.js.map} +0 -0
  100. /package/dist/{chunk-hkdqhm34.js.map → chunk-3t4dtm26.js.map} +0 -0
  101. /package/dist/{chunk-n17yxpa8.js.map → chunk-8g0c4as0.js.map} +0 -0
  102. /package/dist/{chunk-a92a7nrk.js.map → chunk-fvc7ncxd.js.map} +0 -0
  103. /package/dist/{chunk-g82jygez.js.map → chunk-wry79q55.js.map} +0 -0
package/README.md CHANGED
@@ -22,3 +22,27 @@ negotium start otium # separate shell
22
22
  Authenticate Claude with `claude`, Codex with `codex login`, or Maestro with
23
23
  `DEEPSEEK_API_KEY`. See the [main repository](https://github.com/maestrojeong/negotium) for
24
24
  configuration, security guidance, and architecture.
25
+
26
+ ## Hosted execution API
27
+
28
+ Embedding control planes can configure and invoke Negotium's provider execution layer without
29
+ importing package internals:
30
+
31
+ ```ts
32
+ import {
33
+ configureAgentExecutionHost,
34
+ runHostedAgent,
35
+ type AgentExecutionHost,
36
+ type AgentQueryOptions,
37
+ type UnifiedEvent,
38
+ } from "negotium/hosted-agent";
39
+
40
+ import {
41
+ canonicalMcpBridgeEnv,
42
+ registerCanonicalMcpBridgeEnvProvider,
43
+ revokeCanonicalMcpBridgeTurn,
44
+ } from "negotium/canonical-mcp-bridge";
45
+ ```
46
+
47
+ These subpaths are the stable public boundary. Paths under `negotium/dist/` are package internals
48
+ and may change between releases.
@@ -0,0 +1,14 @@
1
+ // @bun
2
+ import {
3
+ canonicalMcpBridgeEnv,
4
+ registerCanonicalMcpBridgeEnvProvider,
5
+ revokeCanonicalMcpBridgeTurn
6
+ } from "./chunk-j0kjscb7.js";
7
+ import"./chunk-hwy3n31w.js";
8
+ export {
9
+ revokeCanonicalMcpBridgeTurn,
10
+ registerCanonicalMcpBridgeEnvProvider,
11
+ canonicalMcpBridgeEnv
12
+ };
13
+
14
+ //# debugId=C5FA8F0580D154DB64756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "C5FA8F0580D154DB64756E2164756E21",
8
+ "names": []
9
+ }
@@ -1,29 +1,34 @@
1
1
  // @bun
2
- import"./chunk-exd0v74a.js";
3
- import"./chunk-sm6fh5c5.js";
4
- import"./chunk-jc0at0tc.js";
2
+ import"./chunk-sn51wnf1.js";
3
+ import"./chunk-x1arr7ze.js";
4
+ import"./chunk-g7pvfj5e.js";
5
+ import"./chunk-z2xy5n2q.js";
5
6
  import"./chunk-sgsz2fpq.js";
6
7
  import"./chunk-1k7t7bnx.js";
7
- import"./chunk-rbrxjvbj.js";
8
- import"./chunk-ghs2j1fr.js";
9
- import"./chunk-fgrme9tr.js";
10
- import"./chunk-0ay6cjdy.js";
8
+ import"./chunk-nmv41qx9.js";
9
+ import"./chunk-h8vmb9gf.js";
10
+ import"./chunk-6hknphtc.js";
11
+ import"./chunk-kbm35t7w.js";
11
12
  import {
12
13
  getTopic,
13
14
  isTopicShared,
14
15
  isTopicVisible,
15
16
  upsertTopic
16
- } from "./chunk-xfq68rch.js";
17
- import"./chunk-9p0ww3tk.js";
17
+ } from "./chunk-f97qybwk.js";
18
+ import"./chunk-hgw7n8cm.js";
19
+ import"./chunk-nqdp52aj.js";
20
+ import"./chunk-mhty3nna.js";
18
21
  import"./chunk-vp2db42d.js";
19
- import"./chunk-gmy11efb.js";
20
- import"./chunk-t9zcg8f1.js";
22
+ import"./chunk-hsq7j9jk.js";
23
+ import"./chunk-n0kk5xbq.js";
24
+ import"./chunk-2dgkah1z.js";
25
+ import"./chunk-pkdmypdd.js";
26
+ import"./chunk-j0kjscb7.js";
27
+ import"./chunk-efyxk97v.js";
21
28
  import {
22
29
  db
23
- } from "./chunk-7xqj7aex.js";
24
- import"./chunk-x1arr7ze.js";
25
- import"./chunk-5ahkew9c.js";
26
- import"./chunk-6cpn7ht2.js";
30
+ } from "./chunk-1msje2zf.js";
31
+ import"./chunk-f5xgprg1.js";
27
32
  import"./chunk-k9z47mab.js";
28
33
  import"./chunk-hwy3n31w.js";
29
34
 
@@ -421,4 +426,4 @@ export {
421
426
 
422
427
  export { getPeerSession, createPeerSession, cleanupPeerStateForLocalTopic, failInterruptedPeerTurnRequestsOnStartup, claimPeerTurnRequest, getPeerTurnRequest, markPeerTurnRequestRunning, markPeerTurnRequestFailed, upsertPeerTerminalOutbox, listPeerTerminalOutbox, acknowledgePeerTerminal, peerInboxPayloadHash, claimPeerInboxRequest, releasePeerInboxRequest, createRemoteAsk, getRemoteAsk, deleteRemoteAsk, pruneRemoteAsks, upsertPeerReplyOutbox, listPeerReplyOutbox, deletePeerReplyOutbox, bindOtiumTopic, shareOtiumTopic, setOtiumTopicPrivate, unbindOtiumTopic, listOtiumTopicBindings };
423
428
 
424
- //# debugId=7BB40CC4B5FCD63F64756E2164756E21
429
+ //# debugId=455249C7C78605CD64756E2164756E21
@@ -5,7 +5,7 @@
5
5
  "/**\n * Adapter-owned durable peer state —\n * equivalents of otium's `peer_sessions`, `peer_turn_requests` and\n * `peer_inbox_requests` tables, kept in negotium's shared SQLite (one machine\n * = one runtime process = one WAL database). Table names are prefixed so the\n * adapter never collides with core schema.\n *\n * Invariant these tables carry: at-least-once inbound requests, exactly-once\n * execution. requestId claims must survive worker restarts; interrupted\n * claimed/running turns are failed wholesale on startup.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { db } from \"@negotium/core\";\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_sessions (\n host_node_id TEXT NOT NULL,\n host_topic_id TEXT NOT NULL,\n local_topic_id TEXT NOT NULL,\n binding_mode TEXT NOT NULL DEFAULT 'mirror',\n created_at TEXT NOT NULL,\n PRIMARY KEY (host_node_id, host_topic_id)\n )\n`);\n\nconst peerSessionColumns = new Set(\n db\n .query<{ name: string }, []>(\"PRAGMA table_info(otium_peer_sessions)\")\n .all()\n .map((row) => row.name),\n);\nif (!peerSessionColumns.has(\"binding_mode\")) {\n db.exec(\"ALTER TABLE otium_peer_sessions ADD COLUMN binding_mode TEXT NOT NULL DEFAULT 'mirror'\");\n}\n\n// Migrate mirrors created before core had an explicit visibility boundary.\n// `isSubagent` remains execution metadata; it is no longer used as a picker\n// hiding convention.\ndb.run(\n `UPDATE api_topics\n SET visibility = 'hidden', access_mode = 'shared'\n WHERE id IN (\n SELECT local_topic_id FROM otium_peer_sessions WHERE binding_mode = 'mirror'\n )`,\n);\ndb.run(\n `UPDATE api_topics\n SET access_mode = 'shared'\n WHERE id IN (SELECT local_topic_id FROM otium_peer_sessions)`,\n);\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_turn_requests (\n host_node_id TEXT NOT NULL,\n request_id TEXT NOT NULL,\n host_topic_id TEXT NOT NULL,\n status TEXT NOT NULL CHECK (status IN\n ('claimed', 'running', 'finished', 'failed')),\n error TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (host_node_id, request_id)\n )\n`);\n\n// A terminal is not completion until the canonical hub acknowledges it. Keep\n// the exact envelope so a worker restart can replay it; the hub's event\n// journal makes that replay idempotent when the original ACK was lost.\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_terminal_outbox (\n host_node_id TEXT NOT NULL,\n request_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n event_json TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (host_node_id, request_id)\n )\n`);\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_inbox_requests (\n from_cell_id TEXT NOT NULL,\n request_id TEXT NOT NULL,\n kind TEXT NOT NULL CHECK (kind IN ('tell', 'ask')),\n topic_id TEXT NOT NULL,\n payload_hash TEXT NOT NULL,\n created_at TEXT NOT NULL,\n PRIMARY KEY (from_cell_id, request_id, kind)\n )\n`);\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_remote_asks (\n request_id TEXT PRIMARY KEY,\n expected_cell_id TEXT NOT NULL,\n user_id TEXT NOT NULL,\n caller_topic_id TEXT NOT NULL,\n from_key TEXT NOT NULL,\n to_key TEXT NOT NULL,\n source_query_id TEXT,\n created_at INTEGER NOT NULL\n )\n`);\ndb.exec(`\n CREATE INDEX IF NOT EXISTS idx_otium_remote_asks_created\n ON otium_remote_asks(created_at)\n`);\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_reply_outbox (\n node_cell_id TEXT NOT NULL,\n request_id TEXT NOT NULL,\n node_name TEXT NOT NULL,\n topic_id TEXT NOT NULL,\n user_id TEXT NOT NULL,\n source_title TEXT NOT NULL,\n reply_text TEXT NOT NULL,\n kind TEXT NOT NULL CHECK (kind IN ('reply', 'error')),\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (node_cell_id, request_id)\n )\n`);\n\n// ── peer sessions: Otium room → hidden mirror OR user-selected shared topic ──\n\nexport type PeerTopicBindingMode = \"mirror\" | \"shared\";\n\nexport interface PeerSessionRow {\n host_node_id: string;\n host_topic_id: string;\n local_topic_id: string;\n binding_mode: PeerTopicBindingMode;\n created_at: string;\n}\n\nexport function getPeerSession(hostNodeId: string, hostTopicId: string): PeerSessionRow | null {\n return (\n db\n .query<PeerSessionRow, [string, string]>(\n \"SELECT * FROM otium_peer_sessions WHERE host_node_id = ? AND host_topic_id = ?\",\n )\n .get(hostNodeId, hostTopicId) ?? null\n );\n}\n\nexport function createPeerSession(\n hostNodeId: string,\n hostTopicId: string,\n localTopicId: string,\n): PeerSessionRow {\n const row: PeerSessionRow = {\n host_node_id: hostNodeId,\n host_topic_id: hostTopicId,\n local_topic_id: localTopicId,\n binding_mode: \"mirror\",\n created_at: new Date().toISOString(),\n };\n db.run(\n \"INSERT INTO otium_peer_sessions (host_node_id, host_topic_id, local_topic_id, binding_mode, created_at) VALUES (?, ?, ?, ?, ?)\",\n [row.host_node_id, row.host_topic_id, row.local_topic_id, row.binding_mode, row.created_at],\n );\n return row;\n}\n\nexport function bindPeerSession(\n hostNodeId: string,\n hostTopicId: string,\n localTopicId: string,\n mode: PeerTopicBindingMode = \"shared\",\n): PeerSessionRow {\n const row: PeerSessionRow = {\n host_node_id: hostNodeId,\n host_topic_id: hostTopicId,\n local_topic_id: localTopicId,\n binding_mode: mode,\n created_at: new Date().toISOString(),\n };\n db.run(\n `INSERT INTO otium_peer_sessions\n (host_node_id, host_topic_id, local_topic_id, binding_mode, created_at)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(host_node_id, host_topic_id) DO UPDATE SET\n local_topic_id = excluded.local_topic_id,\n binding_mode = excluded.binding_mode,\n created_at = excluded.created_at`,\n [hostNodeId, hostTopicId, localTopicId, mode, row.created_at],\n );\n return row;\n}\n\nexport function unbindPeerSession(hostNodeId: string, hostTopicId: string): boolean {\n return (\n db.run(\"DELETE FROM otium_peer_sessions WHERE host_node_id = ? AND host_topic_id = ?\", [\n hostNodeId,\n hostTopicId,\n ]).changes === 1\n );\n}\n\n/** Remove every Otium room binding for a topic being made private. */\nexport function unbindSharedPeerSessionsForLocalTopic(localTopicId: string): number {\n return db.run(\n \"DELETE FROM otium_peer_sessions WHERE local_topic_id = ? AND binding_mode = 'shared'\",\n [localTopicId],\n ).changes;\n}\n\nexport function listPeerSessions(): PeerSessionRow[] {\n return db.query<PeerSessionRow, []>(\"SELECT * FROM otium_peer_sessions\").all();\n}\n\nexport interface PeerTopicCleanupResult {\n sessions: number;\n turns: number;\n terminalOutbox: number;\n inboxRequests: number;\n remoteAsks: number;\n}\n\n/**\n * Remove adapter-owned state whose local execution topic was hard-deleted.\n * Turn rows are linked indirectly through the host room binding, so they must\n * be removed before the session rows that provide that relationship.\n */\nexport function cleanupPeerStateForLocalTopic(localTopicId: string): PeerTopicCleanupResult {\n return db.transaction(() => {\n const terminalOutbox = db.run(\n `DELETE FROM otium_peer_terminal_outbox\n WHERE EXISTS (\n SELECT 1 FROM otium_peer_turn_requests turn_request\n JOIN otium_peer_sessions session\n ON session.host_node_id = turn_request.host_node_id\n AND session.host_topic_id = turn_request.host_topic_id\n WHERE session.local_topic_id = ?\n AND turn_request.host_node_id = otium_peer_terminal_outbox.host_node_id\n AND turn_request.request_id = otium_peer_terminal_outbox.request_id\n )`,\n [localTopicId],\n ).changes;\n const turns = db.run(\n `DELETE FROM otium_peer_turn_requests\n WHERE EXISTS (\n SELECT 1 FROM otium_peer_sessions session\n WHERE session.local_topic_id = ?\n AND session.host_node_id = otium_peer_turn_requests.host_node_id\n AND session.host_topic_id = otium_peer_turn_requests.host_topic_id\n )`,\n [localTopicId],\n ).changes;\n const inboxRequests = db.run(\"DELETE FROM otium_peer_inbox_requests WHERE topic_id = ?\", [\n localTopicId,\n ]).changes;\n const remoteAsks = db.run(\"DELETE FROM otium_remote_asks WHERE caller_topic_id = ?\", [\n localTopicId,\n ]).changes;\n const sessions = db.run(\"DELETE FROM otium_peer_sessions WHERE local_topic_id = ?\", [\n localTopicId,\n ]).changes;\n return { sessions, turns, terminalOutbox, inboxRequests, remoteAsks };\n })();\n}\n\n// ── peer turn requests: durable exactly-once claim per (hostCellId, requestId) ──\n\ntype PeerTurnRequestStatus = \"claimed\" | \"running\" | \"finished\" | \"failed\";\n\nexport interface PeerTurnRequestRow {\n host_node_id: string;\n request_id: string;\n host_topic_id: string;\n status: PeerTurnRequestStatus;\n error: string | null;\n created_at: string;\n updated_at: string;\n}\n\n/** Recover requests whose in-memory forwarder disappeared with the process. */\nexport function failInterruptedPeerTurnRequestsOnStartup(): number {\n return db.run(\n `UPDATE otium_peer_turn_requests\n SET status = 'failed', error = 'worker restarted during turn', updated_at = ?\n WHERE status IN ('claimed', 'running')\n AND NOT EXISTS (\n SELECT 1 FROM otium_peer_terminal_outbox terminal\n WHERE terminal.host_node_id = otium_peer_turn_requests.host_node_id\n AND terminal.request_id = otium_peer_turn_requests.request_id\n )`,\n [new Date().toISOString()],\n ).changes;\n}\n\nexport type ClaimPeerTurnRequestResult =\n | { claimed: true; row: PeerTurnRequestRow }\n | { claimed: false; row: PeerTurnRequestRow };\n\nexport function claimPeerTurnRequest(\n hostNodeId: string,\n requestId: string,\n hostTopicId: string,\n): ClaimPeerTurnRequestResult {\n const now = new Date().toISOString();\n const inserted = db.run(\n `INSERT OR IGNORE INTO otium_peer_turn_requests\n (host_node_id, request_id, host_topic_id, status, created_at, updated_at)\n VALUES (?, ?, ?, 'claimed', ?, ?)`,\n [hostNodeId, requestId, hostTopicId, now, now],\n );\n const row = getPeerTurnRequest(hostNodeId, requestId);\n if (!row) throw new Error(\"otium peer turn request claim disappeared\");\n return { claimed: inserted.changes === 1, row };\n}\n\nexport function getPeerTurnRequest(\n hostNodeId: string,\n requestId: string,\n): PeerTurnRequestRow | null {\n return (\n db\n .query<PeerTurnRequestRow, [string, string]>(\n \"SELECT * FROM otium_peer_turn_requests WHERE host_node_id = ? AND request_id = ?\",\n )\n .get(hostNodeId, requestId) ?? null\n );\n}\n\nfunction setPeerTurnRequestStatus(\n hostNodeId: string,\n requestId: string,\n status: PeerTurnRequestStatus,\n error: string | null = null,\n): void {\n db.run(\n `UPDATE otium_peer_turn_requests\n SET status = ?, error = ?, updated_at = ?\n WHERE host_node_id = ? AND request_id = ?`,\n [status, error, new Date().toISOString(), hostNodeId, requestId],\n );\n}\n\nexport function markPeerTurnRequestRunning(hostNodeId: string, requestId: string): void {\n setPeerTurnRequestStatus(hostNodeId, requestId, \"running\");\n}\n\nexport function markPeerTurnRequestFinished(hostNodeId: string, requestId: string): void {\n setPeerTurnRequestStatus(hostNodeId, requestId, \"finished\");\n}\n\nexport function markPeerTurnRequestFailed(\n hostNodeId: string,\n requestId: string,\n error: string,\n): void {\n setPeerTurnRequestStatus(hostNodeId, requestId, \"failed\", error);\n}\n\nexport interface PeerTerminalOutboxRow {\n host_node_id: string;\n request_id: string;\n seq: number;\n event_json: string;\n created_at: number;\n updated_at: number;\n}\n\nexport function upsertPeerTerminalOutbox(args: {\n hostNodeId: string;\n requestId: string;\n seq: number;\n event: Record<string, unknown>;\n}): void {\n const now = Date.now();\n db.run(\n `INSERT INTO otium_peer_terminal_outbox\n (host_node_id, request_id, seq, event_json, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(host_node_id, request_id) DO UPDATE SET\n seq = excluded.seq, event_json = excluded.event_json, updated_at = excluded.updated_at`,\n [args.hostNodeId, args.requestId, args.seq, JSON.stringify(args.event), now, now],\n );\n}\n\nexport function listPeerTerminalOutbox(limit = 100): PeerTerminalOutboxRow[] {\n return db\n .query<PeerTerminalOutboxRow, [number]>(\n \"SELECT * FROM otium_peer_terminal_outbox ORDER BY created_at LIMIT ?\",\n )\n .all(limit);\n}\n\n/** Atomically acknowledge the terminal locally only after the hub ACK. */\nexport function acknowledgePeerTerminal(hostNodeId: string, requestId: string): boolean {\n return db.transaction(() => {\n const removed = db.run(\n \"DELETE FROM otium_peer_terminal_outbox WHERE host_node_id = ? AND request_id = ?\",\n [hostNodeId, requestId],\n ).changes;\n if (removed !== 1) return false;\n markPeerTurnRequestFinished(hostNodeId, requestId);\n return true;\n })();\n}\n\n// ── peer inbox requests: durable idempotent claim for inbound tell/ask ──\n\nexport type PeerInboxKind = \"tell\" | \"ask\";\n\nexport type PeerInboxClaimOutcome = \"claimed\" | \"replay\" | \"conflict\";\n\nexport function peerInboxPayloadHash(value: unknown): string {\n return createHash(\"sha256\").update(JSON.stringify(value)).digest(\"hex\");\n}\n\n/**\n * Claim an inbound tell/ask by (fromCellId, requestId, kind). Replays of the\n * exact payload ack idempotently; the same requestId with a different payload\n * is a conflict (409 upstream).\n */\nexport function claimPeerInboxRequest(args: {\n fromCellId: string;\n requestId: string;\n kind: PeerInboxKind;\n topicId: string;\n payloadHash: string;\n}): { outcome: PeerInboxClaimOutcome } {\n const inserted = db.run(\n `INSERT OR IGNORE INTO otium_peer_inbox_requests\n (from_cell_id, request_id, kind, topic_id, payload_hash, created_at)\n VALUES (?, ?, ?, ?, ?, ?)`,\n [\n args.fromCellId,\n args.requestId,\n args.kind,\n args.topicId,\n args.payloadHash,\n new Date().toISOString(),\n ],\n );\n if (inserted.changes === 1) return { outcome: \"claimed\" };\n const existing = db\n .query<{ payload_hash: string }, [string, string, string]>(\n \"SELECT payload_hash FROM otium_peer_inbox_requests WHERE from_cell_id = ? AND request_id = ? AND kind = ?\",\n )\n .get(args.fromCellId, args.requestId, args.kind);\n if (!existing) return { outcome: \"conflict\" };\n return { outcome: existing.payload_hash === args.payloadHash ? \"replay\" : \"conflict\" };\n}\n\n/** Undo a claim whose side effect (inbox append) failed, so the sender's\n * retry can re-claim instead of being swallowed as a replay. */\nexport function releasePeerInboxRequest(\n fromCellId: string,\n requestId: string,\n kind: PeerInboxKind,\n): void {\n db.run(\n \"DELETE FROM otium_peer_inbox_requests WHERE from_cell_id = ? AND request_id = ? AND kind = ?\",\n [fromCellId, requestId, kind],\n );\n}\n\n// ── outbound remote asks: durable reply routing across worker restarts ──\n\nexport interface RemoteAskRow {\n request_id: string;\n expected_cell_id: string;\n user_id: string;\n caller_topic_id: string;\n from_key: string;\n to_key: string;\n source_query_id: string | null;\n created_at: number;\n}\n\nexport function createRemoteAsk(args: {\n requestId: string;\n expectedCellId: string;\n userId: string;\n callerTopicId: string;\n from: string;\n to: string;\n sourceQueryId?: string;\n createdAt?: number;\n}): boolean {\n const result = db.run(\n `INSERT OR IGNORE INTO otium_remote_asks\n (request_id, expected_cell_id, user_id, caller_topic_id, from_key, to_key,\n source_query_id, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n args.requestId,\n args.expectedCellId,\n args.userId,\n args.callerTopicId,\n args.from,\n args.to,\n args.sourceQueryId ?? null,\n args.createdAt ?? Date.now(),\n ],\n );\n return result.changes === 1;\n}\n\nexport function getRemoteAsk(requestId: string): RemoteAskRow | null {\n return (\n db\n .query<RemoteAskRow, [string]>(\"SELECT * FROM otium_remote_asks WHERE request_id = ?\")\n .get(requestId) ?? null\n );\n}\n\nexport function deleteRemoteAsk(requestId: string): boolean {\n return db.run(\"DELETE FROM otium_remote_asks WHERE request_id = ?\", [requestId]).changes === 1;\n}\n\nexport function pruneRemoteAsks(olderThan: number): number {\n return db.run(\"DELETE FROM otium_remote_asks WHERE created_at < ?\", [olderThan]).changes;\n}\n\n// ── outbound peer replies: durable until the source node acknowledges ──\n\nexport interface PeerReplyOutboxRow {\n node_cell_id: string;\n request_id: string;\n node_name: string;\n topic_id: string;\n user_id: string;\n source_title: string;\n reply_text: string;\n kind: \"reply\" | \"error\";\n created_at: number;\n updated_at: number;\n}\n\nexport function upsertPeerReplyOutbox(args: {\n nodeCellId: string;\n requestId: string;\n nodeName: string;\n topicId: string;\n userId: string;\n sourceTitle: string;\n replyText: string;\n kind: \"reply\" | \"error\";\n}): void {\n const now = Date.now();\n db.run(\n `INSERT INTO otium_peer_reply_outbox\n (node_cell_id, request_id, node_name, topic_id, user_id, source_title,\n reply_text, kind, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(node_cell_id, request_id) DO UPDATE SET\n node_name = excluded.node_name,\n topic_id = excluded.topic_id,\n user_id = excluded.user_id,\n source_title = excluded.source_title,\n reply_text = excluded.reply_text,\n kind = excluded.kind,\n updated_at = excluded.updated_at`,\n [\n args.nodeCellId,\n args.requestId,\n args.nodeName,\n args.topicId,\n args.userId,\n args.sourceTitle,\n args.replyText,\n args.kind,\n now,\n now,\n ],\n );\n}\n\nexport function listPeerReplyOutbox(limit = 100): PeerReplyOutboxRow[] {\n return db\n .query<PeerReplyOutboxRow, [number]>(\n \"SELECT * FROM otium_peer_reply_outbox ORDER BY created_at LIMIT ?\",\n )\n .all(limit);\n}\n\nexport function deletePeerReplyOutbox(nodeCellId: string, requestId: string): boolean {\n return (\n db.run(\"DELETE FROM otium_peer_reply_outbox WHERE node_cell_id = ? AND request_id = ?\", [\n nodeCellId,\n requestId,\n ]).changes === 1\n );\n}\n",
6
6
  "import { getTopic, isTopicShared, isTopicVisible, upsertTopic } from \"@negotium/core\";\nimport {\n bindPeerSession,\n getPeerSession,\n listPeerSessions,\n unbindPeerSession,\n unbindSharedPeerSessionsForLocalTopic,\n} from \"@/store\";\n\nexport type OtiumTopicBindingResult =\n | { ok: true; localTopicId: string; replaced: boolean }\n | { ok: false; error: string; status: number };\n\nexport interface OtiumTopicBinding {\n hostNodeId: string;\n hostTopicId: string;\n localTopicId: string;\n /** Internal Otium transport; this is deliberately not a topic access mode. */\n transport: \"internal-mirror\" | \"shared-binding\";\n topicAccessMode?: \"private\" | \"shared\";\n localTopicTitle?: string;\n localTopicExists: boolean;\n createdAt: string;\n}\n\nexport type OtiumTopicPrivateResult =\n | { ok: true; localTopicId: string; removedBindings: number }\n | { ok: false; error: string; status: number };\n\nfunction ownsTopic(localTopicId: string, userId: string) {\n const topic = getTopic(localTopicId);\n if (!topic) return { ok: false as const, error: \"local topic not found\", status: 404 };\n if (!isTopicVisible(topic)) {\n return { ok: false as const, error: \"internal topics have no user access mode\", status: 409 };\n }\n if (!topic.participants.some((participant) => participant.userId === userId)) {\n return { ok: false as const, error: \"local topic is not visible to this user\", status: 403 };\n }\n if (\n !topic.participants.some(\n (participant) => participant.userId === userId && participant.role === \"owner\",\n )\n ) {\n return {\n ok: false as const,\n error: \"only a topic owner can change its access mode\",\n status: 403,\n };\n }\n return { ok: true as const, topic };\n}\n\n/** Bind an Otium room to an existing visible Negotium topic without cloning it. */\nexport function bindOtiumTopic(options: {\n hostNodeId: string;\n hostTopicId: string;\n localTopicId: string;\n userId: string;\n}): OtiumTopicBindingResult {\n const topic = getTopic(options.localTopicId);\n if (!topic) return { ok: false, error: \"local topic not found\", status: 404 };\n if (!isTopicVisible(topic)) {\n return { ok: false, error: \"hidden local topics cannot be shared\", status: 409 };\n }\n if (!topic.participants.some((participant) => participant.userId === options.userId)) {\n return { ok: false, error: \"local topic is not visible to this user\", status: 403 };\n }\n if (!isTopicShared(topic)) {\n return { ok: false, error: \"private topics must be shared explicitly first\", status: 409 };\n }\n const previous = getPeerSession(options.hostNodeId, options.hostTopicId);\n bindPeerSession(options.hostNodeId, options.hostTopicId, options.localTopicId, \"shared\");\n return {\n ok: true,\n localTopicId: options.localTopicId,\n replaced: Boolean(previous && previous.local_topic_id !== options.localTopicId),\n };\n}\n\n/** Explicitly publish a private local topic and bind one Otium room to it. */\nexport function shareOtiumTopic(options: {\n hostNodeId: string;\n hostTopicId: string;\n localTopicId: string;\n userId: string;\n}): OtiumTopicBindingResult {\n const owned = ownsTopic(options.localTopicId, options.userId);\n if (!owned.ok) return owned;\n if (!isTopicShared(owned.topic)) {\n upsertTopic({ ...owned.topic, accessMode: \"shared\" });\n }\n return bindOtiumTopic(options);\n}\n\n/** Make a user topic local-only and remove all of its Otium room bindings. */\nexport function setOtiumTopicPrivate(options: {\n localTopicId: string;\n userId: string;\n}): OtiumTopicPrivateResult {\n const owned = ownsTopic(options.localTopicId, options.userId);\n if (!owned.ok) return owned;\n const removedBindings = unbindSharedPeerSessionsForLocalTopic(options.localTopicId);\n if (isTopicShared(owned.topic)) {\n upsertTopic({ ...owned.topic, accessMode: \"private\" });\n }\n return { ok: true, localTopicId: options.localTopicId, removedBindings };\n}\n\n/** Remove only the Otium binding. The local Negotium topic is never deleted. */\nexport function unbindOtiumTopic(hostNodeId: string, hostTopicId: string): boolean {\n return unbindPeerSession(hostNodeId, hostTopicId);\n}\n\n/** Inspect internal execution mirrors and user-topic shared bindings. */\nexport function listOtiumTopicBindings(): OtiumTopicBinding[] {\n return listPeerSessions().map((row) => {\n const topic = getTopic(row.local_topic_id);\n return {\n hostNodeId: row.host_node_id,\n hostTopicId: row.host_topic_id,\n localTopicId: row.local_topic_id,\n transport: row.binding_mode === \"shared\" ? \"shared-binding\" : \"internal-mirror\",\n ...(topic ? { topicAccessMode: topic.accessMode ?? \"private\" } : {}),\n ...(topic ? { localTopicTitle: topic.title } : {}),\n localTopicExists: Boolean(topic),\n createdAt: row.created_at,\n };\n });\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "7BB40CC4B5FCD63F64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "455249C7C78605CD64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -62,8 +62,8 @@ async function resolveHostNodeId(explicit) {
62
62
  if (explicit?.trim())
63
63
  return explicit.trim();
64
64
  const [{ configureOtiumCentral, listPeerNodes }, { loadJoin }] = await Promise.all([
65
- import("./chunk-ns3ke88n.js"),
66
- import("./chunk-e5pbggsh.js")
65
+ import("./chunk-e9b2xpff.js"),
66
+ import("./chunk-eexqsee7.js")
67
67
  ]);
68
68
  const join = loadJoin();
69
69
  if (!join)
@@ -83,7 +83,7 @@ async function runOtiumCli(args = process.argv.slice(2)) {
83
83
  const [command, ...commandArgs] = args;
84
84
  switch (command) {
85
85
  case "join": {
86
- const { joinCommand } = await import("./chunk-hpa0cpzh.js");
86
+ const { joinCommand } = await import("./chunk-ns2m25dz.js");
87
87
  await joinCommand(commandArgs);
88
88
  break;
89
89
  }
@@ -94,10 +94,10 @@ async function runOtiumCli(args = process.argv.slice(2)) {
94
94
  registerNodeRequestHandler,
95
95
  unregisterNodeRequestHandler,
96
96
  waitForRequiredRuntimeProcessLease
97
- } = await import("./chunk-exd0v74a.js");
97
+ } = await import("./chunk-sn51wnf1.js");
98
98
  const [{ startDefaultNode }, otium] = await Promise.all([
99
- import("./chunk-p3cr2ejg.js"),
100
- import("./chunk-q5bcpf23.js")
99
+ import("./chunk-rmyfmrrr.js"),
100
+ import("./chunk-tmj5r2zv.js")
101
101
  ]);
102
102
  const port = parseOtiumServePort(commandArgs, NEGOTIUM_PORT);
103
103
  const relayUrl = parseOtiumServeRelayUrl(commandArgs);
@@ -142,7 +142,7 @@ async function runOtiumCli(args = process.argv.slice(2)) {
142
142
  break;
143
143
  }
144
144
  case "bindings": {
145
- const { listOtiumTopicBindings } = await import("./chunk-rafc55bs.js");
145
+ const { listOtiumTopicBindings } = await import("./chunk-10ct8814.js");
146
146
  const bindings = listOtiumTopicBindings();
147
147
  if (bindings.length === 0) {
148
148
  console.log("no Otium topic bindings");
@@ -162,7 +162,7 @@ async function runOtiumCli(args = process.argv.slice(2)) {
162
162
  throw new Error("usage: negotium otium share <host-topic-id> <local-topic-id> --user <user-id> [--host-node <cell-id>]");
163
163
  }
164
164
  const hostNodeId = await resolveHostNodeId(parsed.options.get("host-node"));
165
- const { shareOtiumTopic } = await import("./chunk-rafc55bs.js");
165
+ const { shareOtiumTopic } = await import("./chunk-10ct8814.js");
166
166
  const result = shareOtiumTopic({ hostNodeId, hostTopicId, localTopicId, userId });
167
167
  if (!result.ok)
168
168
  throw new Error(result.error);
@@ -176,7 +176,7 @@ async function runOtiumCli(args = process.argv.slice(2)) {
176
176
  if (!localTopicId || !userId) {
177
177
  throw new Error("usage: negotium otium private <local-topic-id> --user <user-id>");
178
178
  }
179
- const { setOtiumTopicPrivate } = await import("./chunk-rafc55bs.js");
179
+ const { setOtiumTopicPrivate } = await import("./chunk-10ct8814.js");
180
180
  const result = setOtiumTopicPrivate({ localTopicId, userId });
181
181
  if (!result.ok)
182
182
  throw new Error(result.error);
@@ -0,0 +1,23 @@
1
+ import {
2
+ Database
3
+ } from "./chunk-f5xgprg1.js";
4
+ import {
5
+ SESSIONS_DB
6
+ } from "./chunk-k9z47mab.js";
7
+
8
+ // ../../packages/core/src/storage/forum-db.ts
9
+ import { mkdirSync } from "fs";
10
+ import { dirname } from "path";
11
+ mkdirSync(dirname(SESSIONS_DB), { recursive: true });
12
+ var db = new Database(SESSIONS_DB, { create: true });
13
+ db.exec("PRAGMA journal_mode = WAL");
14
+ db.exec("PRAGMA foreign_keys = ON");
15
+ db.exec("PRAGMA busy_timeout = 5000");
16
+ db.exec("PRAGMA wal_autocheckpoint = 1000");
17
+ try {
18
+ db.exec("PRAGMA wal_checkpoint(TRUNCATE)");
19
+ } catch {}
20
+
21
+ export { db };
22
+
23
+ //# debugId=589B08445A0B54C564756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/core/src/storage/forum-db.ts"],
4
+ "sourcesContent": [
5
+ "import { mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { SESSIONS_DB } from \"#platform/config\";\nimport { Database } from \"#storage/sqlite\";\n\nmkdirSync(dirname(SESSIONS_DB), { recursive: true });\n\nexport const db = new Database(SESSIONS_DB, { create: true });\ndb.exec(\"PRAGMA journal_mode = WAL\");\ndb.exec(\"PRAGMA foreign_keys = ON\");\ndb.exec(\"PRAGMA busy_timeout = 5000\");\n// Auto-checkpoint every ~1000 WAL pages (~4 MB at 4KB page size) to keep the\n// WAL file from growing unbounded during long-running pm2 sessions. The\n// default is 1000 but we set it explicitly so the policy is auditable.\ndb.exec(\"PRAGMA wal_autocheckpoint = 1000\");\n// Also run a TRUNCATE checkpoint on startup to reclaim any WAL space\n// accumulated while the bot was stopped (checkpointer doesn't run when\n// no connections are open).\ntry {\n db.exec(\"PRAGMA wal_checkpoint(TRUNCATE)\");\n} catch {\n // Non-fatal; a concurrent writer may hold the WAL briefly.\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;;;AAAA;AACA;AAIA,UAAU,QAAQ,WAAW,GAAG,EAAE,WAAW,KAAK,CAAC;AAE5C,IAAM,KAAK,IAAI,SAAS,aAAa,EAAE,QAAQ,KAAK,CAAC;AAC5D,GAAG,KAAK,2BAA2B;AACnC,GAAG,KAAK,0BAA0B;AAClC,GAAG,KAAK,4BAA4B;AAIpC,GAAG,KAAK,kCAAkC;AAI1C,IAAI;AAAA,EACF,GAAG,KAAK,iCAAiC;AAAA,EACzC,MAAM;",
8
+ "debugId": "589B08445A0B54C564756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,12 +1,9 @@
1
- // @bun
2
1
  import {
3
2
  parseJsonlText,
4
- readConversation,
5
3
  writeJsonlFile
6
- } from "./chunk-6cpn7ht2.js";
4
+ } from "./chunk-pkdmypdd.js";
7
5
  import {
8
6
  CLAUDE_EFFORT_VALUES,
9
- CODEX_EFFORT_VALUES,
10
7
  DM_WORKSPACE_DIR,
11
8
  MODEL_FABLE,
12
9
  MODEL_OPUS,
@@ -20,6 +17,9 @@ import {
20
17
  __toESM
21
18
  } from "./chunk-hwy3n31w.js";
22
19
 
20
+ // ../../packages/core/src/platform/maestro-bootstrap-env.ts
21
+ process.env.MAESTRO_SDK_SILENT_BOOTSTRAP ??= "1";
22
+
23
23
  // ../../packages/core/src/agents/claude-registry.ts
24
24
  import { existsSync as existsSync2, mkdirSync as mkdirSync2, readdirSync, renameSync, unlinkSync } from "fs";
25
25
  import { homedir as homedir2 } from "os";
@@ -333,11 +333,6 @@ var claudeRegistry = {
333
333
  }
334
334
  };
335
335
 
336
- // ../../packages/core/src/agents/codex-registry.ts
337
- import { unlinkSync as unlinkSync3 } from "fs";
338
- import { homedir as homedir4 } from "os";
339
- import { join as join5 } from "path";
340
-
341
336
  // ../../packages/core/src/agents/rollout/codex.ts
342
337
  import { randomBytes } from "crypto";
343
338
  import { existsSync as existsSync3, readFileSync as readFileSync2, statSync, unlinkSync as unlinkSync2 } from "fs";
@@ -706,101 +701,6 @@ function formatDateBucket(d) {
706
701
  return `${yyyy}/${mm}/${dd}`;
707
702
  }
708
703
 
709
- // ../../packages/core/src/agents/codex-registry.ts
710
- var VALID_EFFORTS2 = new Set(CODEX_EFFORT_VALUES);
711
- var codexRegistry = {
712
- kind: "codex",
713
- defaultModel: "gpt-5.6-luna",
714
- expandModelAlias(s) {
715
- return s;
716
- },
717
- validateModel(s) {
718
- return typeof s === "string" && s.length > 0;
719
- },
720
- validEfforts: CODEX_EFFORT_VALUES,
721
- validateEffort(s) {
722
- return VALID_EFFORTS2.has(s);
723
- },
724
- footerLabel(model, effort) {
725
- return `${model} \xB7 ${effort ?? "(off)"}`;
726
- },
727
- writeRollout(opts) {
728
- const { threadId, rolloutPath } = writeCodexRollout({
729
- cwd: opts.cwd,
730
- entries: opts.entries,
731
- model: opts.model ?? codexRegistry.defaultModel,
732
- ...opts.effort ? { effort: opts.effort } : {},
733
- ...opts.reuseSessionId ? { threadId: opts.reuseSessionId } : {}
734
- });
735
- return { sessionId: threadId, rolloutPath };
736
- },
737
- async forkSession({ cwd, userId, topicName, model, effort }) {
738
- const entries = readConversation(userId, topicName);
739
- const { threadId, rolloutPath } = writeCodexRollout({
740
- cwd,
741
- entries,
742
- model: model ?? codexRegistry.defaultModel,
743
- ...effort ? { effort } : {}
744
- });
745
- return { forkId: threadId, rolloutPath };
746
- },
747
- async cleanupRollouts({ sessionIds }) {
748
- if (sessionIds.length === 0)
749
- return;
750
- const sessionsDir = join5(process.env.CODEX_HOME || join5(homedir4(), ".codex"), "sessions");
751
- const failures = [];
752
- for (const tid of sessionIds) {
753
- try {
754
- const glob = new Bun.Glob(`**/rollout-*-${tid}.jsonl`);
755
- for await (const rel of glob.scan({ cwd: sessionsDir, onlyFiles: true })) {
756
- const path = join5(sessionsDir, rel);
757
- try {
758
- unlinkSync3(path);
759
- } catch (e) {
760
- if (e?.code !== "ENOENT") {
761
- logger.warn({ err: e, path }, "codex cleanupRollouts: unlink failed");
762
- failures.push(e);
763
- }
764
- }
765
- }
766
- } catch (e) {
767
- logger.warn({ err: e, threadId: tid }, "codex cleanupRollouts: scan failed");
768
- failures.push(e);
769
- }
770
- }
771
- if (failures.length > 0) {
772
- throw new AggregateError(failures, "codex cleanupRollouts failed");
773
- }
774
- }
775
- };
776
-
777
- // ../../packages/core/src/platform/maestro-bootstrap-env.ts
778
- process.env.MAESTRO_SDK_SILENT_BOOTSTRAP ??= "1";
779
-
780
- // ../../packages/core/src/agents/maestro-registry.ts
781
- import {
782
- setConversationReader,
783
- maestroRegistry as upstreamMaestroRegistry
784
- } from "maestro-agent-sdk";
785
- setConversationReader(readConversation);
786
- var maestroRegistry = {
787
- ...upstreamMaestroRegistry,
788
- defaultModel: "deepseek-pro"
789
- };
790
-
791
- // ../../packages/core/src/agents/registry.ts
792
- var REGISTRIES = {
793
- claude: claudeRegistry,
794
- codex: codexRegistry,
795
- maestro: maestroRegistry
796
- };
797
- function getRegistry(agent) {
798
- return REGISTRIES[agent];
799
- }
800
- export {
801
- getRegistry
802
- };
803
-
804
- export { encodeClaudeCwd, claudeRegistry, readLatestCodexContextUsage, migrateCodexRolloutNativeMultiAgentMetadata, getRegistry };
704
+ export { encodeClaudeCwd, claudeRegistry, readLatestCodexContextUsage, migrateCodexRolloutNativeMultiAgentMetadata, writeCodexRollout };
805
705
 
806
- //# debugId=F87A6606FF48CBE964756E2164756E21
706
+ //# debugId=1D492EB711EDE86B64756E2164756E21