@bd7pil/ocrc 0.9.0

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 (292) hide show
  1. package/LICENSE +34 -0
  2. package/README.md +330 -0
  3. package/dist/cli/host-backends.js +216 -0
  4. package/dist/cli/host-backends.js.map +1 -0
  5. package/dist/cli/host.js +185 -0
  6. package/dist/cli/host.js.map +1 -0
  7. package/dist/cli/index.js +67 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/cli/init.js +68 -0
  10. package/dist/cli/init.js.map +1 -0
  11. package/dist/cli/install.js +220 -0
  12. package/dist/cli/install.js.map +1 -0
  13. package/dist/cli/pair.js +11 -0
  14. package/dist/cli/pair.js.map +1 -0
  15. package/dist/cli/uninstall.js +75 -0
  16. package/dist/cli/uninstall.js.map +1 -0
  17. package/dist/connectivity/auth/cf-access.js +20 -0
  18. package/dist/connectivity/auth/cf-access.js.map +1 -0
  19. package/dist/connectivity/auth/index.js +2 -0
  20. package/dist/connectivity/auth/index.js.map +1 -0
  21. package/dist/connectivity/auth/select.js +19 -0
  22. package/dist/connectivity/auth/select.js.map +1 -0
  23. package/dist/connectivity/auth/token.js +157 -0
  24. package/dist/connectivity/auth/token.js.map +1 -0
  25. package/dist/connectivity/exposure/cloudflared.js +77 -0
  26. package/dist/connectivity/exposure/cloudflared.js.map +1 -0
  27. package/dist/connectivity/exposure/index.js +2 -0
  28. package/dist/connectivity/exposure/index.js.map +1 -0
  29. package/dist/connectivity/exposure/providers.js +49 -0
  30. package/dist/connectivity/exposure/providers.js.map +1 -0
  31. package/dist/connectivity/pairing.js +29 -0
  32. package/dist/connectivity/pairing.js.map +1 -0
  33. package/dist/core/agent/acp-backend.js +539 -0
  34. package/dist/core/agent/acp-backend.js.map +1 -0
  35. package/dist/core/agent/acp-connect.js +92 -0
  36. package/dist/core/agent/acp-connect.js.map +1 -0
  37. package/dist/core/agent/acp-normalizer.js +81 -0
  38. package/dist/core/agent/acp-normalizer.js.map +1 -0
  39. package/dist/core/agent/acp-replay.js +89 -0
  40. package/dist/core/agent/acp-replay.js.map +1 -0
  41. package/dist/core/agent/acp-store.js +129 -0
  42. package/dist/core/agent/acp-store.js.map +1 -0
  43. package/dist/core/agent/backend.js +2 -0
  44. package/dist/core/agent/backend.js.map +1 -0
  45. package/dist/core/agent/diff-util.js +70 -0
  46. package/dist/core/agent/diff-util.js.map +1 -0
  47. package/dist/core/agent/event.js +12 -0
  48. package/dist/core/agent/event.js.map +1 -0
  49. package/dist/core/agent/opencode-backend.js +598 -0
  50. package/dist/core/agent/opencode-backend.js.map +1 -0
  51. package/dist/core/agent/opencode-normalizer.js +69 -0
  52. package/dist/core/agent/opencode-normalizer.js.map +1 -0
  53. package/dist/core/agent/registry.js +55 -0
  54. package/dist/core/agent/registry.js.map +1 -0
  55. package/dist/core/agent/v2-backend.js +176 -0
  56. package/dist/core/agent/v2-backend.js.map +1 -0
  57. package/dist/core/card-bus.js +74 -0
  58. package/dist/core/card-bus.js.map +1 -0
  59. package/dist/core/channels.js +95 -0
  60. package/dist/core/channels.js.map +1 -0
  61. package/dist/core/history.js +91 -0
  62. package/dist/core/history.js.map +1 -0
  63. package/dist/core/list-files.js +50 -0
  64. package/dist/core/list-files.js.map +1 -0
  65. package/dist/core/opencode-events.js +29 -0
  66. package/dist/core/opencode-events.js.map +1 -0
  67. package/dist/core/primary-election.js +91 -0
  68. package/dist/core/primary-election.js.map +1 -0
  69. package/dist/core/push.js +152 -0
  70. package/dist/core/push.js.map +1 -0
  71. package/dist/core/relay.js +400 -0
  72. package/dist/core/relay.js.map +1 -0
  73. package/dist/core/scheduler.js +150 -0
  74. package/dist/core/scheduler.js.map +1 -0
  75. package/dist/core/state.js +222 -0
  76. package/dist/core/state.js.map +1 -0
  77. package/dist/core/stream-accumulator.js +76 -0
  78. package/dist/core/stream-accumulator.js.map +1 -0
  79. package/dist/core/structured-card.js +2 -0
  80. package/dist/core/structured-card.js.map +1 -0
  81. package/dist/core/types.js +2 -0
  82. package/dist/core/types.js.map +1 -0
  83. package/dist/index.js +3 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/opencode/global-events.js +57 -0
  86. package/dist/opencode/global-events.js.map +1 -0
  87. package/dist/opencode/list-sessions.js +122 -0
  88. package/dist/opencode/list-sessions.js.map +1 -0
  89. package/dist/opencode/submit.js +39 -0
  90. package/dist/opencode/submit.js.map +1 -0
  91. package/dist/opencode/workspaces.js +51 -0
  92. package/dist/opencode/workspaces.js.map +1 -0
  93. package/dist/plugin/config.js +128 -0
  94. package/dist/plugin/config.js.map +1 -0
  95. package/dist/plugin/control-plane.js +133 -0
  96. package/dist/plugin/control-plane.js.map +1 -0
  97. package/dist/plugin/entry.js +409 -0
  98. package/dist/plugin/entry.js.map +1 -0
  99. package/dist/plugin/v2/event-map.js +193 -0
  100. package/dist/plugin/v2/event-map.js.map +1 -0
  101. package/dist/plugin/v2/types.js +15 -0
  102. package/dist/plugin/v2/types.js.map +1 -0
  103. package/dist/transport/interface.js +2 -0
  104. package/dist/transport/interface.js.map +1 -0
  105. package/dist/transport/telegram/esc.js +9 -0
  106. package/dist/transport/telegram/esc.js.map +1 -0
  107. package/dist/transport/telegram/handlers/info-commands.js +101 -0
  108. package/dist/transport/telegram/handlers/info-commands.js.map +1 -0
  109. package/dist/transport/telegram/handlers.js +1348 -0
  110. package/dist/transport/telegram/handlers.js.map +1 -0
  111. package/dist/transport/telegram/i18n/en.js +538 -0
  112. package/dist/transport/telegram/i18n/en.js.map +1 -0
  113. package/dist/transport/telegram/i18n/index.js +83 -0
  114. package/dist/transport/telegram/i18n/index.js.map +1 -0
  115. package/dist/transport/telegram/i18n/zh.js +538 -0
  116. package/dist/transport/telegram/i18n/zh.js.map +1 -0
  117. package/dist/transport/telegram/index.js +792 -0
  118. package/dist/transport/telegram/index.js.map +1 -0
  119. package/dist/transport/telegram/main-keyboard.js +36 -0
  120. package/dist/transport/telegram/main-keyboard.js.map +1 -0
  121. package/dist/transport/telegram/managers/abort-suppression-manager.js +33 -0
  122. package/dist/transport/telegram/managers/abort-suppression-manager.js.map +1 -0
  123. package/dist/transport/telegram/managers/external-input-suppression-manager.js +51 -0
  124. package/dist/transport/telegram/managers/external-input-suppression-manager.js.map +1 -0
  125. package/dist/transport/telegram/managers/interaction-manager.js +254 -0
  126. package/dist/transport/telegram/managers/interaction-manager.js.map +1 -0
  127. package/dist/transport/telegram/managers/permission-manager.js +242 -0
  128. package/dist/transport/telegram/managers/permission-manager.js.map +1 -0
  129. package/dist/transport/telegram/managers/question-manager.js +191 -0
  130. package/dist/transport/telegram/managers/question-manager.js.map +1 -0
  131. package/dist/transport/telegram/managers/rename-manager.js +56 -0
  132. package/dist/transport/telegram/managers/rename-manager.js.map +1 -0
  133. package/dist/transport/telegram/menus.js +77 -0
  134. package/dist/transport/telegram/menus.js.map +1 -0
  135. package/dist/transport/telegram/permission-flow.js +156 -0
  136. package/dist/transport/telegram/permission-flow.js.map +1 -0
  137. package/dist/transport/telegram/question-flow.js +224 -0
  138. package/dist/transport/telegram/question-flow.js.map +1 -0
  139. package/dist/transport/telegram/render/block-parser.js +365 -0
  140. package/dist/transport/telegram/render/block-parser.js.map +1 -0
  141. package/dist/transport/telegram/render/block-plain-text.js +87 -0
  142. package/dist/transport/telegram/render/block-plain-text.js.map +1 -0
  143. package/dist/transport/telegram/render/block-splitter.js +152 -0
  144. package/dist/transport/telegram/render/block-splitter.js.map +1 -0
  145. package/dist/transport/telegram/render/chunker.js +71 -0
  146. package/dist/transport/telegram/render/chunker.js.map +1 -0
  147. package/dist/transport/telegram/render/limits.js +13 -0
  148. package/dist/transport/telegram/render/limits.js.map +1 -0
  149. package/dist/transport/telegram/render/markdown-normalizer.js +102 -0
  150. package/dist/transport/telegram/render/markdown-normalizer.js.map +1 -0
  151. package/dist/transport/telegram/render/markdown-to-telegram-v2.js +116 -0
  152. package/dist/transport/telegram/render/markdown-to-telegram-v2.js.map +1 -0
  153. package/dist/transport/telegram/render/part-signature.js +14 -0
  154. package/dist/transport/telegram/render/part-signature.js.map +1 -0
  155. package/dist/transport/telegram/render/pipeline.js +23 -0
  156. package/dist/transport/telegram/render/pipeline.js.map +1 -0
  157. package/dist/transport/telegram/render/rich-blocks.js +311 -0
  158. package/dist/transport/telegram/render/rich-blocks.js.map +1 -0
  159. package/dist/transport/telegram/render/text-splitter.js +64 -0
  160. package/dist/transport/telegram/render/text-splitter.js.map +1 -0
  161. package/dist/transport/telegram/render/types.js +2 -0
  162. package/dist/transport/telegram/render/types.js.map +1 -0
  163. package/dist/transport/telegram/renderer.js +305 -0
  164. package/dist/transport/telegram/renderer.js.map +1 -0
  165. package/dist/transport/telegram/streaming/duration-formatter.js +68 -0
  166. package/dist/transport/telegram/streaming/duration-formatter.js.map +1 -0
  167. package/dist/transport/telegram/streaming/finalize-assistant-response.js +37 -0
  168. package/dist/transport/telegram/streaming/finalize-assistant-response.js.map +1 -0
  169. package/dist/transport/telegram/streaming/response-streamer.js +400 -0
  170. package/dist/transport/telegram/streaming/response-streamer.js.map +1 -0
  171. package/dist/transport/telegram/streaming/running-tool-tracker.js +150 -0
  172. package/dist/transport/telegram/streaming/running-tool-tracker.js.map +1 -0
  173. package/dist/transport/telegram/streaming/stream-throttle.js +57 -0
  174. package/dist/transport/telegram/streaming/stream-throttle.js.map +1 -0
  175. package/dist/transport/telegram/streaming/tool-call-streamer.js +390 -0
  176. package/dist/transport/telegram/streaming/tool-call-streamer.js.map +1 -0
  177. package/dist/transport/telegram/streaming-render.js +182 -0
  178. package/dist/transport/telegram/streaming-render.js.map +1 -0
  179. package/dist/transport/telegram/types/interaction.js +2 -0
  180. package/dist/transport/telegram/types/interaction.js.map +1 -0
  181. package/dist/transport/telegram/types/model.js +25 -0
  182. package/dist/transport/telegram/types/model.js.map +1 -0
  183. package/dist/transport/telegram/types/permission.js +2 -0
  184. package/dist/transport/telegram/types/permission.js.map +1 -0
  185. package/dist/transport/telegram/types/question.js +2 -0
  186. package/dist/transport/telegram/types/question.js.map +1 -0
  187. package/dist/transport/telegram/types/rename.js +2 -0
  188. package/dist/transport/telegram/types/rename.js.map +1 -0
  189. package/dist/transport/telegram/types/scheduled-task.js +23 -0
  190. package/dist/transport/telegram/types/scheduled-task.js.map +1 -0
  191. package/dist/transport/telegram/types/session.js +2 -0
  192. package/dist/transport/telegram/types/session.js.map +1 -0
  193. package/dist/transport/telegram/ui.js +28 -0
  194. package/dist/transport/telegram/ui.js.map +1 -0
  195. package/dist/transport/web/index.js +148 -0
  196. package/dist/transport/web/index.js.map +1 -0
  197. package/dist/transport/web/middleware/cf-access.js +104 -0
  198. package/dist/transport/web/middleware/cf-access.js.map +1 -0
  199. package/dist/transport/web/opencode-config.js +15 -0
  200. package/dist/transport/web/opencode-config.js.map +1 -0
  201. package/dist/transport/web/routes/abort.js +12 -0
  202. package/dist/transport/web/routes/abort.js.map +1 -0
  203. package/dist/transport/web/routes/approval.js +16 -0
  204. package/dist/transport/web/routes/approval.js.map +1 -0
  205. package/dist/transport/web/routes/catalog.js +11 -0
  206. package/dist/transport/web/routes/catalog.js.map +1 -0
  207. package/dist/transport/web/routes/channels.js +53 -0
  208. package/dist/transport/web/routes/channels.js.map +1 -0
  209. package/dist/transport/web/routes/commands.js +15 -0
  210. package/dist/transport/web/routes/commands.js.map +1 -0
  211. package/dist/transport/web/routes/context.js +17 -0
  212. package/dist/transport/web/routes/context.js.map +1 -0
  213. package/dist/transport/web/routes/controls.js +34 -0
  214. package/dist/transport/web/routes/controls.js.map +1 -0
  215. package/dist/transport/web/routes/create-session.js +21 -0
  216. package/dist/transport/web/routes/create-session.js.map +1 -0
  217. package/dist/transport/web/routes/diff.js +7 -0
  218. package/dist/transport/web/routes/diff.js.map +1 -0
  219. package/dist/transport/web/routes/files.js +22 -0
  220. package/dist/transport/web/routes/files.js.map +1 -0
  221. package/dist/transport/web/routes/logs.js +9 -0
  222. package/dist/transport/web/routes/logs.js.map +1 -0
  223. package/dist/transport/web/routes/m8.js +69 -0
  224. package/dist/transport/web/routes/m8.js.map +1 -0
  225. package/dist/transport/web/routes/mcp.js +7 -0
  226. package/dist/transport/web/routes/mcp.js.map +1 -0
  227. package/dist/transport/web/routes/message.js +32 -0
  228. package/dist/transport/web/routes/message.js.map +1 -0
  229. package/dist/transport/web/routes/overrides.js +20 -0
  230. package/dist/transport/web/routes/overrides.js.map +1 -0
  231. package/dist/transport/web/routes/question.js +32 -0
  232. package/dist/transport/web/routes/question.js.map +1 -0
  233. package/dist/transport/web/routes/rename.js +12 -0
  234. package/dist/transport/web/routes/rename.js.map +1 -0
  235. package/dist/transport/web/routes/schedules.js +28 -0
  236. package/dist/transport/web/routes/schedules.js.map +1 -0
  237. package/dist/transport/web/routes/session.js +20 -0
  238. package/dist/transport/web/routes/session.js.map +1 -0
  239. package/dist/transport/web/routes/sessions.js +25 -0
  240. package/dist/transport/web/routes/sessions.js.map +1 -0
  241. package/dist/transport/web/routes/subagents.js +11 -0
  242. package/dist/transport/web/routes/subagents.js.map +1 -0
  243. package/dist/transport/web/routes/suggestions.js +7 -0
  244. package/dist/transport/web/routes/suggestions.js.map +1 -0
  245. package/dist/transport/web/routes/todo.js +7 -0
  246. package/dist/transport/web/routes/todo.js.map +1 -0
  247. package/dist/transport/web/routes/version.js +5 -0
  248. package/dist/transport/web/routes/version.js.map +1 -0
  249. package/dist/transport/web/routes/workspaces.js +7 -0
  250. package/dist/transport/web/routes/workspaces.js.map +1 -0
  251. package/dist/transport/web/server.js +111 -0
  252. package/dist/transport/web/server.js.map +1 -0
  253. package/dist/transport/web/session-summary.js +46 -0
  254. package/dist/transport/web/session-summary.js.map +1 -0
  255. package/dist/transport/web/ws-hub.js +83 -0
  256. package/dist/transport/web/ws-hub.js.map +1 -0
  257. package/dist/utils/logger.js +105 -0
  258. package/dist/utils/logger.js.map +1 -0
  259. package/dist/utils/markdown.js +129 -0
  260. package/dist/utils/markdown.js.map +1 -0
  261. package/dist/utils/paths.js +18 -0
  262. package/dist/utils/paths.js.map +1 -0
  263. package/dist/utils/version.js +44 -0
  264. package/dist/utils/version.js.map +1 -0
  265. package/package.json +91 -0
  266. package/web/dist/_app/env.js +1 -0
  267. package/web/dist/_app/immutable/assets/0.DxN3RsuG.css +1 -0
  268. package/web/dist/_app/immutable/assets/2.BNuGfmZP.css +1 -0
  269. package/web/dist/_app/immutable/assets/3.CTDprntu.css +1 -0
  270. package/web/dist/_app/immutable/chunks/BUpwHpMJ.js +1 -0
  271. package/web/dist/_app/immutable/chunks/BjY4dxcB.js +2 -0
  272. package/web/dist/_app/immutable/chunks/C2FuqD3s.js +1 -0
  273. package/web/dist/_app/immutable/chunks/CUHGq08X.js +2 -0
  274. package/web/dist/_app/immutable/chunks/CWj6FrbW.js +1 -0
  275. package/web/dist/_app/immutable/chunks/ClvoqtGj.js +1 -0
  276. package/web/dist/_app/immutable/chunks/DIEDQ_hk.js +1 -0
  277. package/web/dist/_app/immutable/entry/app.BoRpcVMj.js +2 -0
  278. package/web/dist/_app/immutable/entry/start.Cj-PQNTq.js +1 -0
  279. package/web/dist/_app/immutable/nodes/0.y9YEms5p.js +3 -0
  280. package/web/dist/_app/immutable/nodes/1.CPhhiRM2.js +1 -0
  281. package/web/dist/_app/immutable/nodes/2.B_c84Mc9.js +1 -0
  282. package/web/dist/_app/immutable/nodes/3.ClTd0J3D.js +64 -0
  283. package/web/dist/_app/version.json +1 -0
  284. package/web/dist/apple-touch-icon.png +0 -0
  285. package/web/dist/favicon.png +0 -0
  286. package/web/dist/favicon.svg +17 -0
  287. package/web/dist/icon-192.png +0 -0
  288. package/web/dist/icon-512-maskable.png +0 -0
  289. package/web/dist/icon-512.png +0 -0
  290. package/web/dist/index.html +73 -0
  291. package/web/dist/manifest.webmanifest +28 -0
  292. package/web/dist/service-worker.js +1 -0
@@ -0,0 +1,598 @@
1
+ import { buildDiffEntry } from './diff-util.js';
2
+ import { submitPrompt, markEphemeralSession } from '../../opencode/submit.js';
3
+ import { listAllSessions } from '../../opencode/list-sessions.js';
4
+ import { listWorkspaces as listWorkspacesImpl } from '../../opencode/workspaces.js';
5
+ import { cardsFromMessages } from '../history.js';
6
+ import { createLogger } from '../../utils/logger.js';
7
+ const log = createLogger('opencode-backend');
8
+ // Sidebar hygiene (epoch ms). Matches the previous fetchSessionSummaries rules.
9
+ const STALE_MS = 14 * 24 * 60 * 60 * 1000;
10
+ const EMPTY_GRACE_MS = 60 * 60 * 1000;
11
+ // Context-window overrides for models whose opencode/models.dev catalog entry is
12
+ // stale. Keyed by modelID; takes precedence over the catalog's limit.context.
13
+ const MODEL_CONTEXT_OVERRIDES = {
14
+ 'MiniMax-M3': 1_000_000, // catalog says 512k; real window is 1M
15
+ };
16
+ function isEmptySession(s) {
17
+ const created = s.time?.created ?? 0;
18
+ const updated = s.time?.updated ?? created;
19
+ return !s.title && updated === created;
20
+ }
21
+ export function createOpencodeBackend(deps) {
22
+ const { client, baseUrl } = deps;
23
+ const capabilities = {
24
+ liveMirror: true, // opencode mirrors the user's live local session
25
+ tuiSelect: !!baseUrl,
26
+ workspaces: true,
27
+ freeformWorkspace: false, // opencode enumerates projects; the UI uses a picker
28
+ diff: true,
29
+ todos: true,
30
+ catalog: true,
31
+ mcp: true,
32
+ commands: true,
33
+ sessionControls: false, // opencode keeps its own agent/model override chip
34
+ imageInput: true, // prompt carries image attachments as inline file parts
35
+ suggestions: process.env.OCRC_SUGGESTIONS !== 'off', // Tier2 follow-up generation
36
+ skills: true, // GET /skill verified on 1.18.32
37
+ files: true, // GET /file + /file/content
38
+ worktrees: true, // GET/POST/DELETE /experimental/worktree (beta upstream)
39
+ questions: true, // GET /question + reply/reject (question tool, 1.18+)
40
+ };
41
+ async function prompt(sessionId, input) {
42
+ await submitPrompt(client, {
43
+ text: input.text,
44
+ sessionId,
45
+ agent: input.agent,
46
+ model: input.model,
47
+ images: input.images,
48
+ signal: input.signal,
49
+ });
50
+ }
51
+ /**
52
+ * Tier2 suggested follow-ups: run a throwaway session asking for three
53
+ * concise follow-ups, poll until the reply lands, parse the JSON array, then
54
+ * delete the throwaway session — the source conversation is never touched.
55
+ * Best-effort: any failure resolves to [].
56
+ */
57
+ async function suggestFollowUps(sessionId, exchange) {
58
+ if (process.env.OCRC_SUGGESTIONS === 'off')
59
+ return [];
60
+ let tmpId;
61
+ try {
62
+ const created = (await client.session.create({ body: { title: 'ocrc-suggestions' } })).data;
63
+ tmpId = created?.id;
64
+ if (!tmpId)
65
+ return [];
66
+ markEphemeralSession(tmpId);
67
+ const instruction = [
68
+ 'Below is an exchange between the user and their coding assistant.',
69
+ '',
70
+ `User: ${exchange.user}`,
71
+ '',
72
+ `Assistant: ${exchange.assistant}`,
73
+ '',
74
+ 'Suggest 3 short follow-up instructions the user might send next.',
75
+ 'Rules: same language as the exchange; each at most 8 words; no numbering, no quotes, no explanations.',
76
+ 'Reply with ONLY a JSON array of 3 strings.',
77
+ ].join('\n');
78
+ await submitPrompt(client, { sessionId: tmpId, text: instruction });
79
+ // promptAsync resolves on accept — poll for the assistant reply to land.
80
+ // The messages list wraps each message as {info:{role,...}, parts:[...]}
81
+ // on some SDK paths and flat on others — read both shapes defensively.
82
+ let reply = '';
83
+ for (let i = 0; i < 20; i++) {
84
+ await new Promise((r) => setTimeout(r, 500));
85
+ const res = (await client.session.messages({ path: { id: tmpId } })).data;
86
+ const last = (res ?? []).at(-1);
87
+ const role = last?.info?.role ?? last?.role;
88
+ if (last && role === 'assistant') {
89
+ const parts = (last.parts ?? last.info?.parts ?? []);
90
+ reply = parts.filter((p) => p.type === 'text').map((p) => p.text ?? '').join('');
91
+ if (reply.trim())
92
+ break;
93
+ }
94
+ }
95
+ const start = reply.indexOf('[');
96
+ const end = reply.lastIndexOf(']');
97
+ let items = [];
98
+ if (start !== -1 && end > start) {
99
+ try {
100
+ const arr = JSON.parse(reply.slice(start, end + 1));
101
+ if (Array.isArray(arr))
102
+ items = arr.filter((x) => typeof x === 'string');
103
+ }
104
+ catch { /* fall through to line parse */ }
105
+ }
106
+ if (items.length === 0) {
107
+ items = reply.split('\n').map((l) => l.trim().replace(/^[-\d.*\s]+/, '').replace(/^["']|["']$/g, '')).filter(Boolean);
108
+ }
109
+ log.info(`suggestFollowUps: ${items.length} suggestions parsed`);
110
+ return items.slice(0, 3);
111
+ }
112
+ catch {
113
+ return [];
114
+ }
115
+ finally {
116
+ if (tmpId) {
117
+ try {
118
+ await client.session.delete({ path: { id: tmpId } });
119
+ }
120
+ catch { /* best effort */ }
121
+ }
122
+ }
123
+ }
124
+ async function abort(id) {
125
+ try {
126
+ await client.session.abort({ path: { id } });
127
+ }
128
+ catch {
129
+ /* best-effort */
130
+ }
131
+ }
132
+ async function hasSession(id) {
133
+ // Only an explicit 404 (or error-free empty result) means "session gone".
134
+ // Transport errors reject out of the await; other HTTP errors are rethrown —
135
+ // the relay must NOT treat "can't tell" as "gone" and misroute the message.
136
+ const res = await client.session.get({ path: { id } });
137
+ if (res.data)
138
+ return true;
139
+ const status = res.response?.status;
140
+ const err = res.error;
141
+ if (status === 404 || (!status && !err))
142
+ return false;
143
+ const detail = err instanceof Error ? err.message : typeof err === 'string' ? err : JSON.stringify(err);
144
+ throw new Error(`session.get failed${status ? ` (HTTP ${status})` : ''}: ${detail ?? 'unknown'}`);
145
+ }
146
+ async function listSessions() {
147
+ const sessions = (await listAllSessions(client));
148
+ return sessions.map((s) => ({
149
+ id: s.id, parentID: s.parentID, createdAt: s.time?.created, updatedAt: s.time?.updated,
150
+ }));
151
+ }
152
+ async function listSessionSummaries() {
153
+ const all = await listAllSessions(client);
154
+ const now = Date.now();
155
+ const roots = all.filter((s) => !s.parentID); // subagent children never shown
156
+ const visible = [];
157
+ for (const s of roots) {
158
+ const created = s.time?.created ?? 0;
159
+ const updated = s.time?.updated ?? created;
160
+ if (isEmptySession(s)) {
161
+ if (now - created > EMPTY_GRACE_MS)
162
+ continue; // hide stale empties (non-destructive)
163
+ visible.push(s);
164
+ continue;
165
+ }
166
+ if (now - updated > STALE_MS)
167
+ continue; // hide long-idle (non-destructive)
168
+ visible.push(s);
169
+ }
170
+ visible.sort((a, b) => (b.time?.created ?? 0) - (a.time?.created ?? 0));
171
+ // cost is OCRC state, not an opencode field — left undefined here; the caller
172
+ // merges it from SessionState.getSessionCost().
173
+ return visible.map((s) => ({
174
+ id: s.id,
175
+ title: s.title ?? '',
176
+ agent: typeof s.agent === 'string' ? s.agent : s.agent?.name,
177
+ model: typeof s.model === 'string' ? s.model : s.model?.id,
178
+ cost: undefined,
179
+ lastActiveAt: s.time?.updated ?? s.time?.created ?? 0,
180
+ unread: false,
181
+ directory: typeof s.directory === 'string' ? s.directory : undefined,
182
+ additions: s.summary?.additions,
183
+ deletions: s.summary?.deletions,
184
+ }));
185
+ }
186
+ async function createSession(opts) {
187
+ // `as any`: the SDK's create() type omits the `directory` query param, but
188
+ // opencode accepts it (creates the session in that directory).
189
+ const res = await client.session.create({
190
+ query: { directory: opts.directory },
191
+ body: opts.title ? { title: opts.title } : {},
192
+ });
193
+ const id = res.data?.id;
194
+ if (!id)
195
+ throw new Error('create failed');
196
+ return { id };
197
+ }
198
+ async function deleteSession(id) {
199
+ await client.session.delete({ path: { id } });
200
+ }
201
+ async function renameSession(id, title) {
202
+ await client.session.update({ path: { id }, body: { title } });
203
+ }
204
+ async function getSessionMeta(id) {
205
+ const meta = {};
206
+ try {
207
+ const s = ((await client.session.get({ path: { id } })).data ?? {});
208
+ if (typeof s.cost === 'number')
209
+ meta.cost = s.cost;
210
+ const tin = typeof s.tokens?.input === 'number' ? s.tokens.input : undefined;
211
+ const tout = typeof s.tokens?.output === 'number' ? s.tokens.output : undefined;
212
+ if (tin !== undefined && tout !== undefined)
213
+ meta.tokens = { input: tin, output: tout };
214
+ if (s.agent?.name)
215
+ meta.agent = s.agent.name;
216
+ if (typeof s.model === 'string')
217
+ meta.model = s.model.split('/').pop() ?? s.model;
218
+ }
219
+ catch { /* optional */ }
220
+ return meta;
221
+ }
222
+ async function getContext(id) {
223
+ const s = ((await client.session.get({ path: { id } })).data ?? {});
224
+ // A session can switch models mid-way, and the live context window belongs to
225
+ // whichever model produced the LATEST turn — so resolve BOTH the model and the
226
+ // current usage from the last assistant message (keeping used + max same-model).
227
+ let providerId;
228
+ let modelId;
229
+ let used;
230
+ try {
231
+ const msgs = ((await client.session.messages({ path: { id } })).data ?? []);
232
+ for (let i = msgs.length - 1; i >= 0; i--) {
233
+ const info = (msgs[i]?.info ?? msgs[i]);
234
+ if (info?.role !== 'assistant')
235
+ continue;
236
+ const t = info?.tokens;
237
+ if (t && used == null) {
238
+ used = (t.input ?? 0) + (t.output ?? 0) + (t.reasoning ?? 0) + (t.cache?.read ?? 0) + (t.cache?.write ?? 0);
239
+ }
240
+ if (info?.modelID) {
241
+ modelId = info.modelID;
242
+ providerId = info.providerID;
243
+ break;
244
+ }
245
+ }
246
+ }
247
+ catch { /* best-effort */ }
248
+ // Fall back to the session's configured model (opencode stores { id, providerID }).
249
+ const modelObj = s.model && typeof s.model === 'object' ? s.model : undefined;
250
+ if (!modelId)
251
+ modelId = modelObj?.id ?? (typeof s.model === 'string' ? s.model : undefined);
252
+ if (!providerId)
253
+ providerId = modelObj?.providerID;
254
+ if (used == null && s.tokens)
255
+ used = (s.tokens.input ?? 0) + (s.tokens.output ?? 0);
256
+ // max = the active model's context window. Prefer the providers catalog (models.dev),
257
+ // but override models whose catalog entry is known-stale (verified real limits).
258
+ let max = modelId ? MODEL_CONTEXT_OVERRIDES[modelId] : undefined;
259
+ if (max == null) {
260
+ try {
261
+ const providers = ((await client.config.providers()).data?.providers ?? []);
262
+ const m = providers.find((p) => p.id === providerId)?.models?.[modelId ?? ''] ??
263
+ providers.map((p) => p?.models?.[modelId ?? '']).find(Boolean);
264
+ const lim = m?.limit?.context;
265
+ if (typeof lim === 'number' && lim > 0)
266
+ max = lim;
267
+ }
268
+ catch { /* best-effort */ }
269
+ }
270
+ // Only surface used/max when known — never leak undefined keys (consumers
271
+ // read tokens.used / tokens.max and treat absence as "unknown").
272
+ const tokens = { ...(s.tokens ?? {}) };
273
+ if (typeof used === 'number')
274
+ tokens.used = used;
275
+ if (typeof max === 'number')
276
+ tokens.max = max;
277
+ return {
278
+ agent: s.agent?.name,
279
+ model: modelId,
280
+ tokens,
281
+ cost: typeof s.cost === 'number' ? s.cost : undefined, // caller falls back to state
282
+ directory: typeof s.directory === 'string' ? s.directory : undefined,
283
+ };
284
+ }
285
+ async function getHistory(id, limit, offset) {
286
+ const res = await client.session.messages({ path: { id } });
287
+ const messages = (res.data ?? []);
288
+ return cardsFromMessages(id, messages, limit, offset);
289
+ }
290
+ async function getMessageBlocks(sessionId, messageId) {
291
+ const blocks = [];
292
+ try {
293
+ const m = ((await client.session.message({ path: { id: sessionId, messageID: messageId } })).data ?? {});
294
+ for (const part of m.parts ?? []) {
295
+ if (part.type === 'text' && typeof part.text === 'string')
296
+ blocks.push({ type: 'text', text: part.text });
297
+ if (part.type === 'tool' && typeof part.tool === 'string') {
298
+ const st = part.state?.status ?? 'running';
299
+ blocks.push({
300
+ type: 'tool', tool: part.tool,
301
+ args: String(part.state?.input?.cmd ?? part.state?.input ?? '').slice(0, 60),
302
+ status: st === 'error' ? 'error' : st === 'done' || st === 'completed' ? 'done' : 'running',
303
+ });
304
+ }
305
+ }
306
+ }
307
+ catch (err) {
308
+ log.info('getMessageBlocks fallback fetch failed', err.message);
309
+ }
310
+ return blocks;
311
+ }
312
+ async function getDiff(id) {
313
+ const res = await client.session.diff({ path: { id } });
314
+ // opencode returns per-file diffs as { file/path, before, after }.
315
+ const raw = (res.data ?? []);
316
+ return raw.map((d) => buildDiffEntry(d.file ?? d.path ?? '', d.before ?? '', d.after ?? ''));
317
+ }
318
+ async function getTodos(id) {
319
+ const res = await client.session.todo({ path: { id } });
320
+ return (res.data ?? []);
321
+ }
322
+ async function getSessionsStatus() {
323
+ return (await client.session.status()).data;
324
+ }
325
+ async function ping() {
326
+ try {
327
+ await client.session.status();
328
+ return true;
329
+ }
330
+ catch {
331
+ return false;
332
+ }
333
+ }
334
+ async function getAgents(directory) {
335
+ let agents = {};
336
+ try {
337
+ agents = ((await client.config.get(directory ? { query: { directory } } : {})).data?.agent ?? {});
338
+ }
339
+ catch { /* empty */ }
340
+ return Object.entries(agents)
341
+ .filter(([, v]) => typeof v?.model === 'string')
342
+ .map(([name, v]) => ({ name, model: v.model, description: v?.description ?? '' }));
343
+ }
344
+ async function getModels(directory) {
345
+ let providers = [];
346
+ try {
347
+ providers = ((await client.config.providers(directory ? { query: { directory } } : {})).data?.providers ?? []);
348
+ }
349
+ catch { /* empty */ }
350
+ // opencode's config-level filters (what the native picker honors): an
351
+ // enabled_providers whitelist, a disabled_providers blacklist, and a
352
+ // per-provider provider.<id>.models whitelist. The connected set above is
353
+ // already auth-scoped; this layer is the user's explicit curation.
354
+ try {
355
+ const cfg = ((await client.config.get(directory ? { query: { directory } } : {})).data) ?? {};
356
+ const enabled = cfg.enabled_providers;
357
+ const disabled = cfg.disabled_providers;
358
+ const cfgModels = (cfg.provider ?? {});
359
+ if (enabled?.length)
360
+ providers = providers.filter((p) => enabled.includes(p.id));
361
+ if (disabled?.length)
362
+ providers = providers.filter((p) => !disabled.includes(p.id));
363
+ providers = providers.map((p) => {
364
+ const whitelist = cfgModels[p.id]?.models;
365
+ const allowed = whitelist ? Object.keys(whitelist) : [];
366
+ if (!allowed.length)
367
+ return p;
368
+ const keep = new Set(allowed);
369
+ return { ...p, models: Object.fromEntries(Object.entries(p.models ?? {}).filter(([id]) => keep.has(id))) };
370
+ });
371
+ }
372
+ catch { /* config unavailable — fall back to the unfiltered connected set */ }
373
+ return providers.map((p) => ({
374
+ id: p.id, name: p.name,
375
+ models: Object.entries(p.models ?? {}).map(([id, m]) => ({ id, name: m?.name ?? id })),
376
+ }));
377
+ }
378
+ async function getSubagents(sessionId) {
379
+ const all = (await listAllSessions(client));
380
+ const children = all.filter((s) => s.parentID === sessionId).slice(0, 8);
381
+ const out = [];
382
+ for (const c of children) {
383
+ let done = 0;
384
+ let total = 0;
385
+ try {
386
+ const todos = await getTodos(c.id);
387
+ total = todos.length;
388
+ done = todos.filter((t) => t?.status === 'completed').length;
389
+ }
390
+ catch { /* child without todos */ }
391
+ out.push({ id: c.id, title: c.title ?? '', updatedAt: c.time?.updated, done, total });
392
+ }
393
+ return out;
394
+ }
395
+ async function getMcp(directory) {
396
+ let mcp = {};
397
+ try {
398
+ mcp = ((await client.config.get(directory ? { query: { directory } } : {})).data?.mcp ?? {});
399
+ }
400
+ catch { /* empty */ }
401
+ return Object.entries(mcp).map(([name, v]) => ({
402
+ name, type: v?.type, status: v?.enabled === false ? 'disabled' : 'configured',
403
+ }));
404
+ }
405
+ function listWorkspaces() {
406
+ return listWorkspacesImpl(client);
407
+ }
408
+ // ── M8: skills / files / worktree sandboxes ────────────────────────────────
409
+ // /skill and /experimental/worktree have no typed SDK members in 1.17.13 —
410
+ // raw fetch against the server (same posture as selectTuiSession).
411
+ async function getSkills(directory) {
412
+ try {
413
+ const q = new URLSearchParams();
414
+ if (directory)
415
+ q.set('directory', directory);
416
+ const res = await fetch(`${baseUrl}/skill?${q.toString()}`);
417
+ if (!res.ok)
418
+ return [];
419
+ const raw = (await res.json());
420
+ return (raw ?? []).map((s) => ({ name: String(s?.name ?? ''), description: s?.description }));
421
+ }
422
+ catch {
423
+ return [];
424
+ }
425
+ }
426
+ async function listFiles(directory, path) {
427
+ try {
428
+ const q = new URLSearchParams({ path });
429
+ if (directory)
430
+ q.set('directory', directory);
431
+ const res = await fetch(`${baseUrl}/file?${q.toString()}`);
432
+ if (!res.ok)
433
+ return [];
434
+ const raw = (await res.json());
435
+ return (raw ?? []).map((f) => ({
436
+ name: String(f?.name ?? ''),
437
+ path: String(f?.path ?? ''),
438
+ type: f?.type === 'directory' ? 'directory' : 'file',
439
+ }));
440
+ }
441
+ catch {
442
+ return [];
443
+ }
444
+ }
445
+ async function readFile(directory, path) {
446
+ const q = new URLSearchParams({ path });
447
+ if (directory)
448
+ q.set('directory', directory);
449
+ const res = await fetch(`${baseUrl}/file/content?${q.toString()}`);
450
+ if (!res.ok)
451
+ throw new Error(`file/content ${res.status}`);
452
+ const body = (await res.json());
453
+ return { type: body?.type ?? 'text', content: body?.content ?? '' };
454
+ }
455
+ async function listWorktreeSandboxes(directory) {
456
+ try {
457
+ const q = new URLSearchParams();
458
+ if (directory)
459
+ q.set('directory', directory);
460
+ const res = await fetch(`${baseUrl}/experimental/worktree?${q.toString()}`);
461
+ if (!res.ok)
462
+ return [];
463
+ const raw = (await res.json());
464
+ return (Array.isArray(raw) ? raw : []).map((w) => typeof w === 'string' ? { name: w } : { name: String(w?.name ?? ''), directory: w?.directory });
465
+ }
466
+ catch {
467
+ return [];
468
+ }
469
+ }
470
+ async function createWorktreeSandboxes(directory, name) {
471
+ const q = new URLSearchParams();
472
+ if (directory)
473
+ q.set('directory', directory);
474
+ const res = await fetch(`${baseUrl}/experimental/worktree?${q.toString()}`, {
475
+ method: 'POST',
476
+ headers: { 'Content-Type': 'application/json' },
477
+ body: JSON.stringify({ name }),
478
+ });
479
+ if (!res.ok)
480
+ return null;
481
+ const body = (await res.json().catch(() => null));
482
+ return body ? { name: body.name ?? name, directory: body.directory } : { name, directory: undefined };
483
+ }
484
+ async function removeWorktreeSandboxes(directory, name) {
485
+ const q = new URLSearchParams();
486
+ if (directory)
487
+ q.set('directory', directory);
488
+ const res = await fetch(`${baseUrl}/experimental/worktree?${q.toString()}`, { method: 'DELETE' });
489
+ return res.ok;
490
+ }
491
+ // ── M10: interactive questions (question tool) ─────────────────────────────
492
+ // /question has no typed SDK members in 1.17.13 — raw fetch. The endpoints
493
+ // are directory-scoped, and the reply/reject paths don't carry the session,
494
+ // so resolve the directory from the session first (verified posture).
495
+ async function sessionDirectory(sessionId) {
496
+ try {
497
+ const res = await fetch(`${baseUrl}/session/${encodeURIComponent(sessionId)}`);
498
+ if (!res.ok)
499
+ return undefined;
500
+ const body = (await res.json());
501
+ return typeof body?.directory === 'string' ? body.directory : undefined;
502
+ }
503
+ catch {
504
+ return undefined;
505
+ }
506
+ }
507
+ async function listQuestions(directory) {
508
+ try {
509
+ const q = new URLSearchParams();
510
+ if (directory)
511
+ q.set('directory', directory);
512
+ const res = await fetch(`${baseUrl}/question?${q.toString()}`);
513
+ if (!res.ok)
514
+ return [];
515
+ const raw = (await res.json());
516
+ return (raw ?? []).map((r) => ({
517
+ id: String(r?.id ?? ''),
518
+ sessionId: String(r?.sessionID ?? r?.sessionId ?? ''),
519
+ questions: Array.isArray(r?.questions) ? r.questions : [],
520
+ tool: r?.tool ? { messageID: r.tool.messageID, callID: r.tool.callID } : undefined,
521
+ }));
522
+ }
523
+ catch {
524
+ return [];
525
+ }
526
+ }
527
+ async function answerQuestion(sessionId, requestId, answers) {
528
+ const directory = await sessionDirectory(sessionId);
529
+ if (directory === undefined)
530
+ return { ok: false };
531
+ const q = new URLSearchParams({ directory });
532
+ const res = await fetch(`${baseUrl}/question/${encodeURIComponent(requestId)}/reply?${q.toString()}`, {
533
+ method: 'POST',
534
+ headers: { 'Content-Type': 'application/json' },
535
+ body: JSON.stringify({ answers }),
536
+ });
537
+ if (res.status === 404)
538
+ return { ok: false, stale: true }; // resolved elsewhere
539
+ return { ok: res.ok };
540
+ }
541
+ async function rejectQuestion(sessionId, requestId) {
542
+ const directory = await sessionDirectory(sessionId);
543
+ if (directory === undefined)
544
+ return { ok: false };
545
+ const q = new URLSearchParams({ directory });
546
+ const res = await fetch(`${baseUrl}/question/${encodeURIComponent(requestId)}/reject?${q.toString()}`, { method: 'POST' });
547
+ if (res.status === 404)
548
+ return { ok: false, stale: true };
549
+ return { ok: res.ok };
550
+ }
551
+ async function listCommands() {
552
+ const data = ((await client.command.list()).data ?? []);
553
+ return data.map((d) => ({ name: d.name, description: d.description ?? '' }));
554
+ }
555
+ async function runCommand(id, command, args) {
556
+ await client.session.command({ path: { id }, body: { command, arguments: args ?? '' } });
557
+ }
558
+ async function resolvePermission(id, requestId, decision) {
559
+ await client.postSessionIdPermissionsPermissionId({
560
+ path: { id, permissionID: requestId },
561
+ body: { response: decision },
562
+ });
563
+ }
564
+ /** Navigate the TUI via POST /tui/select-session (SDK v1 has no typed method). */
565
+ async function selectTuiSession(id, signal) {
566
+ if (!baseUrl)
567
+ return;
568
+ try {
569
+ const normalized = baseUrl.replace(/\/+$/, '');
570
+ const timeoutSignal = AbortSignal.timeout(2000);
571
+ const combined = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
572
+ const res = await fetch(`${normalized}/tui/select-session`, {
573
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
574
+ body: JSON.stringify({ sessionID: id }), signal: combined,
575
+ });
576
+ if (!res.ok)
577
+ log.debug(`tui/select-session HTTP ${res.status}`);
578
+ }
579
+ catch (err) {
580
+ log.debug(`tui/select-session skipped: ${err.message}`);
581
+ }
582
+ }
583
+ return {
584
+ id: 'opencode',
585
+ capabilities,
586
+ prompt, abort,
587
+ hasSession, listSessions, listSessionSummaries, createSession, deleteSession, renameSession,
588
+ getSessionMeta, getContext, getHistory, getMessageBlocks, getDiff, getTodos, getSessionsStatus, ping,
589
+ getAgents, getModels, getMcp, getSubagents, getSkills, listFiles, readFile,
590
+ listWorktreeSandboxes, createWorktreeSandboxes, removeWorktreeSandboxes,
591
+ listQuestions, answerQuestion, rejectQuestion,
592
+ listWorkspaces, listCommands, runCommand,
593
+ resolvePermission,
594
+ selectTuiSession,
595
+ suggestFollowUps,
596
+ };
597
+ }
598
+ //# sourceMappingURL=opencode-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-backend.js","sourceRoot":"","sources":["../../../src/core/agent/opencode-backend.ts"],"names":[],"mappings":"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"}