ryco-cli 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +50 -2
  2. package/dist/{AzureDevOpsSourceControlProvider-CdgNqZ5j.cjs → AzureDevOpsSourceControlProvider-5exivY-1.cjs} +2 -2
  3. package/dist/{AzureDevOpsSourceControlProvider-OsyDSESj.mjs → AzureDevOpsSourceControlProvider-CF5LuCHp.mjs} +3 -3
  4. package/dist/{BitbucketSourceControlProvider-DBTH98i4.cjs → BitbucketSourceControlProvider-1GWENqcl.cjs} +2 -2
  5. package/dist/{BitbucketSourceControlProvider-SQ3gKdFs.mjs → BitbucketSourceControlProvider-CKH09tfT.mjs} +3 -3
  6. package/dist/{BunPTY-B_vjRZN4.mjs → BunPTY-BWhtEA50.mjs} +1 -1
  7. package/dist/{ClaudeDriver-D9yC2F0b.cjs → ClaudeDriver-BXLdjrht.cjs} +187 -8
  8. package/dist/{ClaudeDriver-2dTtrsFD.mjs → ClaudeDriver-WwWFTu61.mjs} +188 -9
  9. package/dist/{CodexDriver-CIDYevQX.mjs → CodexDriver-93-TmCrO.mjs} +16 -8
  10. package/dist/{CodexDriver-BC2B-qpT.cjs → CodexDriver-BboMT9uk.cjs} +15 -7
  11. package/dist/{CodexTextGeneration-DNeO-8GE.cjs → CodexTextGeneration-0pRbJji3.cjs} +3 -3
  12. package/dist/{CodexTextGeneration-CjknB1Xl.mjs → CodexTextGeneration-BU9Myn87.mjs} +4 -4
  13. package/dist/{CopilotDriver-NPhlLrk2.mjs → CopilotDriver-BASi8pJ0.mjs} +15 -8
  14. package/dist/{CopilotDriver-BGChrP5c.cjs → CopilotDriver-DCsv-17W.cjs} +14 -7
  15. package/dist/{CursorDriver-CYxn4_c1.cjs → CursorDriver-BTSiM3A8.cjs} +163 -16
  16. package/dist/{CursorDriver-BcAVbT8D.mjs → CursorDriver-D5LvIqUk.mjs} +164 -17
  17. package/dist/{ForgejoSourceControlProvider-D3wP2Cav.cjs → ForgejoSourceControlProvider-BTXRDCGB.cjs} +2 -2
  18. package/dist/{ForgejoSourceControlProvider-BjCE3730.mjs → ForgejoSourceControlProvider-e-4hvvZ_.mjs} +3 -3
  19. package/dist/{GitHubSourceControlProvider-DByZ_cnw.mjs → GitHubSourceControlProvider-26IofDAO.mjs} +3 -3
  20. package/dist/{GitHubSourceControlProvider-DU_7IvMa.cjs → GitHubSourceControlProvider-DWmwkA_y.cjs} +2 -2
  21. package/dist/{GitLabSourceControlProvider-BVJ5IqTS.cjs → GitLabSourceControlProvider-D-YHnxRe.cjs} +2 -2
  22. package/dist/{GitLabSourceControlProvider-BdMCIjXb.mjs → GitLabSourceControlProvider-DePct78W.mjs} +3 -3
  23. package/dist/{Metrics-BCOc3Ml2.mjs → Metrics-6Xj17Se3.mjs} +94 -2
  24. package/dist/{Metrics-DNOriWhP.cjs → Metrics-CIW1QH7M.cjs} +128 -0
  25. package/dist/{NodePTY-_u3kQLvd.mjs → NodePTY-C_cR3Ayy.mjs} +1 -1
  26. package/dist/{OpenCodeDriver-fwqXoVyH.mjs → OpenCodeDriver-BhvLOmvn.mjs} +336 -43
  27. package/dist/{OpenCodeDriver-DyR83FcY.cjs → OpenCodeDriver-CVeZ4n9-.cjs} +335 -42
  28. package/dist/{SourceControlProviderDiscoveryCatalog-DqQVhwYM.cjs → SourceControlProviderDiscoveryCatalog-DeFR5xH3.cjs} +98 -161
  29. package/dist/{SourceControlProviderDiscoveryCatalog-CQiMyDCC.mjs → SourceControlProviderDiscoveryCatalog-mJV_Xitr.mjs} +100 -145
  30. package/dist/bin.cjs +30639 -28744
  31. package/dist/bin.mjs +30602 -28709
  32. package/dist/client/assets/{AnimatedHeight-CYuVQOpY.js → AnimatedHeight-BSU0lzYs.js} +1 -1
  33. package/dist/client/assets/AppearanceSettings-D7q0ujGK.js +1 -0
  34. package/dist/client/assets/BranchToolbar.logic-CZIFSvhd.js +1 -0
  35. package/dist/client/assets/ChatRightPanel-CWHOIuiQ.js +188 -0
  36. package/dist/client/assets/ChatThreadRouteView-bA7xWXzc.js +1 -0
  37. package/dist/client/assets/CommandPaletteDialog-DNYaVOZO.js +1 -0
  38. package/dist/client/assets/CompositeRoot-B_KEfCUE.js +1 -0
  39. package/dist/client/assets/ConnectionsSettings-CLZPbx_K.js +1 -0
  40. package/dist/client/assets/DiagnosticsSettings-DtzPCb6N.js +1 -0
  41. package/dist/client/assets/DialogHandle-DuHnmWoE.js +1 -0
  42. package/dist/client/assets/{DialogRoot-DaMwpoP_.js → DialogRoot-BV25qAcA.js} +1 -1
  43. package/dist/client/assets/DialogTitle-DQsi-RTa.js +1 -0
  44. package/dist/client/assets/DialogTrigger-D0fA01C6.js +1 -0
  45. package/dist/client/assets/DialogViewport-CMV_BePU.js +1 -0
  46. package/dist/client/assets/DraftChatThreadRouteView-BoiKnrii.js +1 -0
  47. package/dist/client/assets/JetBrainsIcons-BcPxJlMf.js +1 -0
  48. package/dist/client/assets/KeybindingsSettings-LuI98pdF.js +7 -0
  49. package/dist/client/assets/McpServersSettings-BFMuWYVV.js +6 -0
  50. package/dist/client/assets/NoActiveThreadState-C2q_O1kP.js +1 -0
  51. package/dist/client/assets/OpinionatedPluginsSettings-Bqwct37O.js +1 -0
  52. package/dist/client/assets/ProjectFavicon-D2imiJ8M.js +1 -0
  53. package/dist/client/assets/{ProviderUpdateLaunchNotification.logic-BFzNCo3I.js → ProviderUpdateLaunchNotification.logic-CJgA--nK.js} +1 -1
  54. package/dist/client/assets/ProvidersSettingsPanel-B97vbeu6.js +1 -0
  55. package/dist/client/assets/{RedactedSensitiveText-UnZZJnFF.js → RedactedSensitiveText-B2GFTyfq.js} +1 -1
  56. package/dist/client/assets/RootAppShell-C1xTR98P.js +12 -0
  57. package/dist/client/assets/SettingsDialog-Q0Q8O5oH.js +2 -0
  58. package/dist/client/assets/SourceControlSettings-KAvoPTNi.js +1 -0
  59. package/dist/client/assets/StatisticsPanel-BzsQ444K.js +64 -0
  60. package/dist/client/assets/ThreadStatusIndicators-Cw_jLVQf.js +1 -0
  61. package/dist/client/assets/{ThreadTerminalDrawer-BXoXAbsR.js → ThreadTerminalDrawer-D1WnSemH.js} +17 -17
  62. package/dist/client/assets/ThreadWorkspacePanel-L4qCPTOA.js +166 -0
  63. package/dist/client/assets/{alert-dialog-BJQbh5gX.js → alert-dialog-CNmKa0BK.js} +1 -1
  64. package/dist/client/assets/chart-column-BWSKYZ_a.js +1 -0
  65. package/dist/client/assets/{chatThreadActions--n7v5mnB.js → chatThreadActions-TtDsiwDC.js} +1 -1
  66. package/dist/client/assets/chevron-up-zopJ_99l.js +1 -0
  67. package/dist/client/assets/{clamp-NYtK3f5s.js → clamp-Ds6WJu8j.js} +1 -1
  68. package/dist/client/assets/clipboard-copy-BoJGpdmJ.js +1 -0
  69. package/dist/client/assets/clock-CzUHThzk.js +1 -0
  70. package/dist/client/assets/commandPaletteStore-KebG835b.js +1 -0
  71. package/dist/client/assets/composerDraftStore-DpPEQ6BN.js +21 -0
  72. package/dist/client/assets/desktopUpdateAtoms-BQ0GGEfM.js +2 -0
  73. package/dist/client/assets/{download-Bi4-cFbc.js → download-CUiRE0N9.js} +1 -1
  74. package/dist/client/assets/{draft-input-BGSRgOW7.js → draft-input-CwpGDtoT.js} +1 -1
  75. package/dist/client/assets/editorPreferences-jN7DKbyt.js +1 -0
  76. package/dist/client/assets/empty-CBuXePtg.js +1 -0
  77. package/dist/client/assets/{group-Dwm-OV-r.js → group-BpZvxjG5.js} +1 -1
  78. package/dist/client/assets/{index-BI5yFj9n.js → index-BKzXTNJ_.js} +2 -2
  79. package/dist/client/assets/{input-BfUa3JUD.js → input-CgDawd6k.js} +1 -1
  80. package/dist/client/assets/kbd-QYSL97CK.js +1 -0
  81. package/dist/client/assets/{keybindings--G1bkIjA.js → keybindings-CUTRYI_A.js} +1 -1
  82. package/dist/client/assets/{keyboard-B87VTfPa.js → keyboard-DFFiI7JY.js} +1 -1
  83. package/dist/client/assets/keyedQuery-DiOCbGH0.js +0 -0
  84. package/dist/client/assets/main-BgFGju3e.js +9 -0
  85. package/dist/client/assets/main-D0UFdwts.css +2 -0
  86. package/dist/client/assets/palette-BXCL909c.js +1 -0
  87. package/dist/client/assets/play-DI2LZohg.js +1 -0
  88. package/dist/client/assets/plus-DzgIfHUF.js +1 -0
  89. package/dist/client/assets/projectAtoms-DXXpuERK.js +1 -0
  90. package/dist/client/assets/providerDriverMeta-CRNNp0q3.js +1 -0
  91. package/dist/client/assets/providerIconUtils-D-DFhem2.js +47 -0
  92. package/dist/client/assets/radio-group-_PPYg3YY.js +1 -0
  93. package/dist/client/assets/{refresh-cw-CRxaXR0E.js → refresh-cw-BsQTNBXl.js} +1 -1
  94. package/dist/client/assets/{resolveAriaLabelledBy-D4fWpj84.js → resolveAriaLabelledBy-CRHo_s16.js} +1 -1
  95. package/dist/client/assets/rightPanelRouteSearch-CfmZ7osj.js +1 -0
  96. package/dist/client/assets/scale-DDEJ-tvn.js +1 -0
  97. package/dist/client/assets/scroll-area-HgsI-ErG.js +1 -0
  98. package/dist/client/assets/separator-ClnL4mUB.js +1 -0
  99. package/dist/client/assets/{server-tdx7WxLI.js → server-Bbs3L-6_.js} +1 -1
  100. package/dist/client/assets/session-logic-CKQkgIwo.js +4 -0
  101. package/dist/client/assets/settingsDialogStore-SG-W1q0A.js +1 -0
  102. package/dist/client/assets/settingsLayout-G5xVm-ZT.js +1 -0
  103. package/dist/client/assets/shallow-Dmd-gez1.js +1 -0
  104. package/dist/client/assets/sidebar-_u7SGgmC.js +1 -0
  105. package/dist/client/assets/sidebarStatusText-BTYnwflG.js +1 -0
  106. package/dist/client/assets/skeleton-CmUvhZGP.js +1 -0
  107. package/dist/client/assets/storeSelectors-DhJRpdiw.js +1 -0
  108. package/dist/client/assets/threadSelectionStore-ygmA4DNA.js +1 -0
  109. package/dist/client/assets/toast-DmA_ziPT.js +1 -0
  110. package/dist/client/assets/toggle-DGS7tKuj.js +1 -0
  111. package/dist/client/assets/{toggle-group-DdKXHoT3.js → toggle-group-Dtv1ZUFW.js} +1 -1
  112. package/dist/client/assets/tokenModePresentation-Dor1DnBx.js +1 -0
  113. package/dist/client/assets/{trash-2-CZQem-sz.js → trash-2-C2G3VGoV.js} +1 -1
  114. package/dist/client/assets/triangle-alert-Bpz3xGu5.js +1 -0
  115. package/dist/client/assets/undo-2-C3rtxuqZ.js +1 -0
  116. package/dist/client/assets/useHandleNewThread-ypSbzG0P.js +1 -0
  117. package/dist/client/assets/useLabelableId-Bc7KEnHU.js +1 -0
  118. package/dist/client/assets/useNavigate-_4hWGSey.js +1 -0
  119. package/dist/client/assets/useTheme-HcKmBfpF.js +1 -0
  120. package/dist/client/assets/{vscode-icons-E8NUFd62.js → vscode-icons-DdSTtxYd.js} +1 -1
  121. package/dist/client/assets/{wrench-DEteICtk.js → wrench-C4jdis40.js} +1 -1
  122. package/dist/client/assets/x-CG2WU63t.js +1 -0
  123. package/dist/client/index.html +1 -1
  124. package/dist/{collectUint8StreamText-DuFJyaQh.mjs → collectUint8StreamText-Lv4GGI79.mjs} +488 -16
  125. package/dist/{collectUint8StreamText-DbCOJom3.cjs → collectUint8StreamText-uNXVRHOf.cjs} +510 -14
  126. package/dist/{makeManagedServerProvider-C3cQUDkZ.cjs → makeManagedServerProvider-3SD-Q5xh.cjs} +1 -1
  127. package/dist/{makeManagedServerProvider-wFGZ2-vd.mjs → makeManagedServerProvider-CkPEptun.mjs} +2 -2
  128. package/package.json +1 -1
  129. package/dist/client/assets/AppearanceSettings-BBbC8CV5.js +0 -1
  130. package/dist/client/assets/BranchToolbar.logic-Di2EkKiO.js +0 -1
  131. package/dist/client/assets/ChatRightPanel-BJ_cVP66.js +0 -188
  132. package/dist/client/assets/ChatThreadRouteView-DmxD3m2U.js +0 -1
  133. package/dist/client/assets/CommandPaletteDialog-CAzz6bsT.js +0 -1
  134. package/dist/client/assets/CompositeRoot-BvXCwn2c.js +0 -1
  135. package/dist/client/assets/ConnectionsSettings-Cmxm0y2u.js +0 -1
  136. package/dist/client/assets/DialogHandle-CXNAm3QY.js +0 -1
  137. package/dist/client/assets/DialogTitle-KXmfgzP3.js +0 -1
  138. package/dist/client/assets/DialogTrigger-NHyQnW3X.js +0 -1
  139. package/dist/client/assets/DialogViewport-CL0WR9a5.js +0 -1
  140. package/dist/client/assets/DraftChatThreadRouteView-C_hqauF6.js +0 -1
  141. package/dist/client/assets/JetBrainsIcons-BcR8pCma.js +0 -1
  142. package/dist/client/assets/KeybindingsSettings-m2AteGOl.js +0 -7
  143. package/dist/client/assets/McpServersSettings-DndIDxgA.js +0 -6
  144. package/dist/client/assets/NoActiveThreadState-Bt-Wkv-C.js +0 -1
  145. package/dist/client/assets/OpinionatedPluginsSettings-oDtdE6qx.js +0 -1
  146. package/dist/client/assets/ProjectFavicon-j9IX_7-B.js +0 -1
  147. package/dist/client/assets/ProvidersSettingsPanel-CvlIBNVJ.js +0 -1
  148. package/dist/client/assets/QueryClientProvider-BZxRKpeb.js +0 -1
  149. package/dist/client/assets/RootAppShell-CyHZ_F5P.js +0 -12
  150. package/dist/client/assets/SettingsDialog-BYJ8AhQp.js +0 -2
  151. package/dist/client/assets/SourceControlSettings-7xU6VH6N.js +0 -1
  152. package/dist/client/assets/ThreadStatusIndicators-M9FWDEex.js +0 -1
  153. package/dist/client/assets/ThreadWorkspacePanel-D1J63TVD.js +0 -166
  154. package/dist/client/assets/codexUsageLimits-BJQiZCqn.js +0 -1
  155. package/dist/client/assets/commandPaletteStore-oFMPKPmp.js +0 -1
  156. package/dist/client/assets/composerDraftStore-xu3n5gdX.js +0 -21
  157. package/dist/client/assets/desktopUpdateReactQuery-YSCkifKp.js +0 -2
  158. package/dist/client/assets/empty-BTxheW4B.js +0 -1
  159. package/dist/client/assets/environmentApi-BFHi_M02.js +0 -1
  160. package/dist/client/assets/folder-open-DJmHEPv9.js +0 -1
  161. package/dist/client/assets/kbd-Dd57M8OY.js +0 -1
  162. package/dist/client/assets/main-BQf5U-fz.js +0 -9
  163. package/dist/client/assets/main-DrwkwNo9.css +0 -2
  164. package/dist/client/assets/mutation-DJZgOJRu.js +0 -1
  165. package/dist/client/assets/plus-B10j9MbZ.js +0 -1
  166. package/dist/client/assets/providerDriverMeta-B6xuq7ij.js +0 -1
  167. package/dist/client/assets/providerIconUtils-Ch6hejVW.js +0 -47
  168. package/dist/client/assets/rightPanelRouteSearch-CTMFCS6R.js +0 -1
  169. package/dist/client/assets/scroll-area-BgFq7GRd.js +0 -1
  170. package/dist/client/assets/separator-CB3Ctlvi.js +0 -1
  171. package/dist/client/assets/session-logic-CaiGe4hy.js +0 -4
  172. package/dist/client/assets/settingsDialogStore-9vo22xKp.js +0 -1
  173. package/dist/client/assets/settingsLayout-B5o13iGO.js +0 -1
  174. package/dist/client/assets/sidebar-Bbdql7Af.js +0 -1
  175. package/dist/client/assets/skeleton-C8OZcsPq.js +0 -1
  176. package/dist/client/assets/storeSelectors-DBRyhCGm.js +0 -1
  177. package/dist/client/assets/threadRoutes-CfldSp4X.js +0 -1
  178. package/dist/client/assets/threadSelectionStore-BggKwzmQ.js +0 -1
  179. package/dist/client/assets/toast-DE-WwLMa.js +0 -1
  180. package/dist/client/assets/toggle-BFMa0a0Y.js +0 -1
  181. package/dist/client/assets/useHandleNewThread-DOPZAFqE.js +0 -1
  182. package/dist/client/assets/useLabelableId-BzWaBebJ.js +0 -1
  183. package/dist/client/assets/useNavigate-B1qgM5mt.js +0 -1
  184. package/dist/client/assets/useTheme-C7Ji7x06.js +0 -1
  185. package/dist/client/assets/x-b9324xm-.js +0 -1
  186. package/dist/{NodeSqliteClient-BXy61fAd.mjs → NodeSqliteClient-A1TEgwj_.mjs} +1 -1
  187. package/dist/{NodeSqliteClient-homCO8-6.cjs → NodeSqliteClient-B5aDHbNc.cjs} +2 -2
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const require_chunk = require("./chunk-jM1PLTSZ.cjs");
4
- const require_collectUint8StreamText = require("./collectUint8StreamText-DbCOJom3.cjs");
5
- const require_Metrics = require("./Metrics-DNOriWhP.cjs");
4
+ const require_collectUint8StreamText = require("./collectUint8StreamText-uNXVRHOf.cjs");
5
+ const require_Metrics = require("./Metrics-CIW1QH7M.cjs");
6
6
  const require_bin = require("./bin.cjs");
7
- const require_makeManagedServerProvider = require("./makeManagedServerProvider-C3cQUDkZ.cjs");
7
+ const require_makeManagedServerProvider = require("./makeManagedServerProvider-3SD-Q5xh.cjs");
8
8
  const require_sourceControlContextFormatter = require("./sourceControlContextFormatter-BDZqn-4T.cjs");
9
9
  const require_ProviderDriver = require("./ProviderDriver--rNeAi3B.cjs");
10
10
  let effect = require("effect");
11
11
  let effect_unstable_http = require("effect/unstable/http");
12
+ require("effect/unstable/process");
12
13
  let effect_Semaphore = require("effect/Semaphore");
13
14
  effect_Semaphore = require_chunk.__toESM(effect_Semaphore, 1);
14
- require("effect/unstable/process");
15
15
  //#region src/textGeneration/OpenCodeTextGeneration.ts
16
16
  const OPENCODE_TEXT_GENERATION_IDLE_TTL = "30 seconds";
17
17
  function getOpenCodePromptErrorMessage(error) {
@@ -281,6 +281,68 @@ const PROVIDER$1 = require_collectUint8StreamText.ProviderDriverKind.make("openc
281
281
  function nowIso() {
282
282
  return (/* @__PURE__ */ new Date()).toISOString();
283
283
  }
284
+ function nonEmptyString(value) {
285
+ const trimmed = value?.trim();
286
+ return trimmed && trimmed.length > 0 ? trimmed : void 0;
287
+ }
288
+ function scopedOpenCodeId(sessionId, id) {
289
+ return `${sessionId}:${id}`;
290
+ }
291
+ function openCodeSubagentId(kind, id) {
292
+ return require_collectUint8StreamText.RuntimeSubagentId.make(`opencode:${kind}:${id}`);
293
+ }
294
+ function subagentKey(subagentId) {
295
+ return String(subagentId);
296
+ }
297
+ function statusFromOpenCodeSubagentState(status) {
298
+ return status;
299
+ }
300
+ function subagentCompletionStatus(status) {
301
+ return status;
302
+ }
303
+ function metadataWithEntries(entries) {
304
+ const metadata = Object.fromEntries(entries.filter(([, value]) => value !== void 0 && value !== null && value !== ""));
305
+ return Object.keys(metadata).length > 0 ? metadata : void 0;
306
+ }
307
+ function makeSubtaskSubagentRef(part) {
308
+ const description = nonEmptyString(part.description) ?? nonEmptyString(part.prompt);
309
+ const label = nonEmptyString(part.agent) ?? nonEmptyString(part.command) ?? (description ? "OpenCode subtask" : void 0);
310
+ return {
311
+ subagentId: openCodeSubagentId("subtask", part.id),
312
+ origin: "native",
313
+ capability: "summary",
314
+ ...label ? { label } : {},
315
+ ...description ? { description } : {},
316
+ parentProviderItemId: require_collectUint8StreamText.ProviderItemId.make(part.id),
317
+ metadata: metadataWithEntries([
318
+ ["source", "opencode.subtask"],
319
+ ["prompt", nonEmptyString(part.prompt)],
320
+ ["agent", nonEmptyString(part.agent)],
321
+ ["command", nonEmptyString(part.command)],
322
+ ["model", part.model]
323
+ ])
324
+ };
325
+ }
326
+ function mergeOpenCodeChildSessionRef(existing, session, parentSessionId) {
327
+ const label = nonEmptyString(session.title) ?? existing?.label ?? "OpenCode subagent";
328
+ return {
329
+ subagentId: existing?.subagentId ?? openCodeSubagentId("session", session.id),
330
+ origin: "native",
331
+ capability: "transcript",
332
+ label,
333
+ ...existing?.description ? { description: existing.description } : {},
334
+ providerSessionId: session.id,
335
+ providerThreadId: session.id,
336
+ ...existing?.parentProviderItemId && { parentProviderItemId: existing.parentProviderItemId },
337
+ metadata: {
338
+ ...existing?.metadata,
339
+ source: "opencode.session",
340
+ parentSessionId,
341
+ slug: session.slug,
342
+ directory: session.directory
343
+ }
344
+ };
345
+ }
284
346
  /**
285
347
  * Map a tagged OpenCodeRuntimeError produced by {@link runOpenCodeSdk} into
286
348
  * the adapter-boundary `ProviderAdapterRequestError`. SDK-method-level call
@@ -424,7 +486,7 @@ function isoFromEpochMs(value) {
424
486
  return new Date(value).toISOString();
425
487
  }
426
488
  function messageRoleForPart(context, part) {
427
- const known = context.messageRoleById.get(part.messageID);
489
+ const known = context.messageRoleById.get(scopedOpenCodeId(part.sessionID, part.messageID));
428
490
  if (known) return known;
429
491
  return part.type === "tool" ? "assistant" : void 0;
430
492
  }
@@ -476,6 +538,12 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
476
538
  const nativeEventLogger = options?.nativeEventLogger ?? (options?.nativeEventLogPath !== void 0 ? yield* require_bin.makeEventNdjsonLogger(options.nativeEventLogPath, { stream: "native" }) : void 0);
477
539
  const managedNativeEventLogger = options?.nativeEventLogger === void 0 ? nativeEventLogger : void 0;
478
540
  const runtimeEvents = yield* effect.Queue.unbounded();
541
+ const runtimeEventQueueMetrics = yield* require_bin.makeServerQueueMetrics({
542
+ queue: "provider.adapter.runtimeEvents",
543
+ component: "OpenCodeAdapter",
544
+ provider: PROVIDER$1,
545
+ providerInstanceId: boundInstanceId
546
+ });
479
547
  const sessions = /* @__PURE__ */ new Map();
480
548
  yield* effect.Effect.addFinalizer(() => effect.Effect.gen(function* () {
481
549
  const contexts = [...sessions.values()];
@@ -485,10 +553,126 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
485
553
  discard: true
486
554
  });
487
555
  if (managedNativeEventLogger !== void 0) yield* managedNativeEventLogger.close();
488
- }).pipe(effect.Effect.ensuring(effect.Queue.shutdown(runtimeEvents))));
489
- const emit = (event) => effect.Queue.offer(runtimeEvents, event).pipe(effect.Effect.asVoid);
556
+ }).pipe(effect.Effect.ensuring(runtimeEventQueueMetrics.reset), effect.Effect.ensuring(effect.Queue.shutdown(runtimeEvents))));
557
+ const emit = (event) => effect.Queue.offer(runtimeEvents, event).pipe(effect.Effect.andThen(runtimeEventQueueMetrics.recordEnqueued()), effect.Effect.asVoid);
490
558
  const writeNativeEvent = (threadId, event) => nativeEventLogger ? nativeEventLogger.write(event, threadId) : effect.Effect.void;
491
559
  const writeNativeEventBestEffort = (threadId, event) => writeNativeEvent(threadId, event).pipe(effect.Effect.catchCause(() => effect.Effect.void));
560
+ const emitOpenCodeSubagentStarted = effect.Effect.fn("emitOpenCodeSubagentStarted")(function* (context, subagent, raw) {
561
+ const key = subagentKey(subagent.subagentId);
562
+ if (context.startedSubagentIds.has(key)) return;
563
+ context.startedSubagentIds.add(key);
564
+ yield* emit({
565
+ ...yield* buildEventBase({
566
+ threadId: context.session.threadId,
567
+ turnId: context.activeTurnId,
568
+ raw
569
+ }),
570
+ type: "subagent.started",
571
+ payload: { subagent }
572
+ });
573
+ });
574
+ const emitOpenCodeSubagentUpdated = effect.Effect.fn("emitOpenCodeSubagentUpdated")(function* (context, input) {
575
+ yield* emitOpenCodeSubagentStarted(context, input.subagent, input.raw);
576
+ yield* emit({
577
+ ...yield* buildEventBase({
578
+ threadId: context.session.threadId,
579
+ turnId: context.activeTurnId,
580
+ raw: input.raw
581
+ }),
582
+ type: "subagent.updated",
583
+ payload: {
584
+ subagent: input.subagent,
585
+ ...input.status ? { status: input.status } : {},
586
+ ...input.summary ? { summary: input.summary } : {},
587
+ ...input.detail ? { detail: input.detail } : {}
588
+ }
589
+ });
590
+ });
591
+ const emitOpenCodeSubagentCompleted = effect.Effect.fn("emitOpenCodeSubagentCompleted")(function* (context, input) {
592
+ const key = subagentKey(input.subagent.subagentId);
593
+ if (context.completedSubagentIds.has(key)) return;
594
+ yield* emitOpenCodeSubagentStarted(context, input.subagent, input.raw);
595
+ context.completedSubagentIds.add(key);
596
+ yield* emit({
597
+ ...yield* buildEventBase({
598
+ threadId: context.session.threadId,
599
+ turnId: context.activeTurnId,
600
+ raw: input.raw
601
+ }),
602
+ type: "subagent.completed",
603
+ payload: {
604
+ subagent: input.subagent,
605
+ status: input.status,
606
+ ...input.summary ? { summary: input.summary } : {}
607
+ }
608
+ });
609
+ });
610
+ const bindOpenCodeSubtaskPart = effect.Effect.fn("bindOpenCodeSubtaskPart")(function* (context, part, raw) {
611
+ const partKey = scopedOpenCodeId(part.sessionID, part.id);
612
+ const existing = context.subagentBySubtaskPartId.get(partKey);
613
+ const subagent = existing ?? makeSubtaskSubagentRef(part);
614
+ context.subagentBySubtaskPartId.set(partKey, subagent);
615
+ if (!existing && !context.unboundSubtaskPartIds.includes(partKey)) context.unboundSubtaskPartIds.push(partKey);
616
+ yield* emitOpenCodeSubagentUpdated(context, {
617
+ subagent,
618
+ status: statusFromOpenCodeSubagentState("starting"),
619
+ summary: nonEmptyString(part.description) ?? nonEmptyString(part.prompt),
620
+ detail: nonEmptyString(part.prompt),
621
+ raw
622
+ });
623
+ return subagent;
624
+ });
625
+ const takeUnboundOpenCodeSubtask = (context) => {
626
+ const partKey = context.unboundSubtaskPartIds.shift();
627
+ if (!partKey) return;
628
+ return context.subagentBySubtaskPartId.get(partKey);
629
+ };
630
+ const registerOpenCodeChildSession = effect.Effect.fn("registerOpenCodeChildSession")(function* (context, session, raw) {
631
+ if (session.parentID !== context.openCodeSessionId) return;
632
+ const subagent = mergeOpenCodeChildSessionRef(context.subagentBySessionId.get(session.id) ?? takeUnboundOpenCodeSubtask(context), session, context.openCodeSessionId);
633
+ const known = context.childSessionIds.has(session.id);
634
+ context.childSessionIds.add(session.id);
635
+ context.subagentBySessionId.set(session.id, subagent);
636
+ if (known) {
637
+ yield* emitOpenCodeSubagentUpdated(context, {
638
+ subagent,
639
+ status: statusFromOpenCodeSubagentState("running"),
640
+ raw
641
+ });
642
+ return subagent;
643
+ }
644
+ const wasStartedFromSubtask = context.startedSubagentIds.has(subagentKey(subagent.subagentId));
645
+ yield* emitOpenCodeSubagentStarted(context, subagent, raw);
646
+ if (wasStartedFromSubtask) yield* emitOpenCodeSubagentUpdated(context, {
647
+ subagent,
648
+ status: statusFromOpenCodeSubagentState("running"),
649
+ raw
650
+ });
651
+ return subagent;
652
+ });
653
+ const hydrateOpenCodeChildSessions = effect.Effect.fn("hydrateOpenCodeChildSessions")(function* (context) {
654
+ const children = yield* require_bin.runOpenCodeSdk("session.children", () => context.client.session.children({ sessionID: context.openCodeSessionId })).pipe(effect.Effect.map((response) => {
655
+ const value = response;
656
+ if (Array.isArray(value)) return value;
657
+ const data = value.data;
658
+ return Array.isArray(data) ? data : [];
659
+ }), effect.Effect.catchCause((cause) => effect.Effect.gen(function* () {
660
+ const error = effect.Cause.squash(cause);
661
+ yield* emit({
662
+ ...yield* buildEventBase({ threadId: context.session.threadId }),
663
+ type: "runtime.warning",
664
+ payload: {
665
+ message: "OpenCode child session hydration failed.",
666
+ detail: require_bin.OpenCodeRuntimeError.is(error) ? error.detail : require_bin.openCodeRuntimeErrorDetail(error)
667
+ }
668
+ });
669
+ return [];
670
+ })));
671
+ for (const child of children) yield* registerOpenCodeChildSession(context, child, {
672
+ method: "session.children",
673
+ child
674
+ });
675
+ });
492
676
  const emitUnexpectedExit = effect.Effect.fn("emitUnexpectedExit")(function* (context, message) {
493
677
  if (yield* effect.Ref.getAndSet(context.stopped, true)) return;
494
678
  const turnId = context.activeTurnId;
@@ -523,29 +707,52 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
523
707
  const emitAssistantTextDelta = effect.Effect.fn("emitAssistantTextDelta")(function* (context, part, turnId, raw) {
524
708
  const text = textFromPart(part);
525
709
  if (text === void 0) return;
526
- const { latestText, deltaToEmit } = mergeOpenCodeAssistantText(context.emittedTextByPartId.get(part.id), text);
527
- context.emittedTextByPartId.set(part.id, latestText);
528
- if (latestText !== text) context.partById.set(part.id, part.type === "text" || part.type === "reasoning" ? {
710
+ const partKey = scopedOpenCodeId(part.sessionID, part.id);
711
+ const { latestText, deltaToEmit } = mergeOpenCodeAssistantText(context.emittedTextByPartId.get(partKey), text);
712
+ context.emittedTextByPartId.set(partKey, latestText);
713
+ if (latestText !== text) context.partById.set(partKey, part.type === "text" || part.type === "reasoning" ? {
529
714
  ...part,
530
715
  text: latestText
531
716
  } : part);
532
- if (deltaToEmit.length > 0) yield* emit({
533
- ...yield* buildEventBase({
534
- threadId: context.session.threadId,
535
- turnId,
536
- itemId: part.id,
537
- createdAt: part.type === "text" || part.type === "reasoning" ? isoFromEpochMs(part.time?.start) : void 0,
538
- raw
539
- }),
540
- type: "content.delta",
541
- payload: {
542
- streamKind: resolveTextStreamKind(part),
543
- delta: deltaToEmit
544
- }
545
- });
546
- if (part.type === "text" && part.time?.end !== void 0 && !context.completedAssistantPartIds.has(part.id)) {
547
- context.completedAssistantPartIds.add(part.id);
548
- yield* emit({
717
+ if (deltaToEmit.length > 0) {
718
+ const subagent = context.subagentBySessionId.get(part.sessionID);
719
+ if (subagent) yield* emit({
720
+ ...yield* buildEventBase({
721
+ threadId: context.session.threadId,
722
+ turnId,
723
+ itemId: part.id,
724
+ createdAt: part.type === "text" || part.type === "reasoning" ? isoFromEpochMs(part.time?.start) : void 0,
725
+ raw
726
+ }),
727
+ type: "subagent.message.delta",
728
+ payload: {
729
+ subagentId: subagent.subagentId,
730
+ delta: deltaToEmit,
731
+ streamKind: resolveTextStreamKind(part),
732
+ role: "assistant",
733
+ providerSessionId: part.sessionID,
734
+ providerThreadId: part.sessionID,
735
+ providerMessageId: part.messageID
736
+ }
737
+ });
738
+ else yield* emit({
739
+ ...yield* buildEventBase({
740
+ threadId: context.session.threadId,
741
+ turnId,
742
+ itemId: part.id,
743
+ createdAt: part.type === "text" || part.type === "reasoning" ? isoFromEpochMs(part.time?.start) : void 0,
744
+ raw
745
+ }),
746
+ type: "content.delta",
747
+ payload: {
748
+ streamKind: resolveTextStreamKind(part),
749
+ delta: deltaToEmit
750
+ }
751
+ });
752
+ }
753
+ if (part.type === "text" && part.time?.end !== void 0 && !context.completedAssistantPartIds.has(partKey)) {
754
+ context.completedAssistantPartIds.add(partKey);
755
+ if (!context.subagentBySessionId.get(part.sessionID)) yield* emit({
549
756
  ...yield* buildEventBase({
550
757
  threadId: context.session.threadId,
551
758
  turnId,
@@ -564,45 +771,73 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
564
771
  }
565
772
  });
566
773
  const handleSubscribedEvent = effect.Effect.fn("handleSubscribedEvent")(function* (context, event) {
567
- if (("properties" in event ? event.properties.sessionID : void 0) !== context.openCodeSessionId) return;
774
+ const payloadSessionId = "properties" in event ? event.properties.sessionID : void 0;
775
+ const eventSessionId = typeof payloadSessionId === "string" ? payloadSessionId : void 0;
776
+ const isRootSessionEvent = eventSessionId === context.openCodeSessionId;
777
+ const isKnownChildSessionEvent = eventSessionId !== void 0 && context.childSessionIds.has(eventSessionId);
778
+ const isChildSessionCreatedEvent = event.type === "session.created" && event.properties.info.parentID === context.openCodeSessionId;
779
+ if (!isRootSessionEvent && !isKnownChildSessionEvent && !isChildSessionCreatedEvent) return;
568
780
  const turnId = context.activeTurnId;
569
781
  yield* writeNativeEventBestEffort(context.session.threadId, {
570
782
  observedAt: nowIso(),
571
783
  event: {
572
784
  provider: PROVIDER$1,
573
785
  threadId: context.session.threadId,
574
- providerThreadId: context.openCodeSessionId,
786
+ providerThreadId: eventSessionId ?? context.openCodeSessionId,
575
787
  type: event.type,
576
788
  ...turnId ? { turnId } : {},
577
789
  payload: event
578
790
  }
579
791
  });
580
792
  switch (event.type) {
793
+ case "session.created":
794
+ yield* registerOpenCodeChildSession(context, event.properties.info, event);
795
+ break;
581
796
  case "message.updated":
582
- context.messageRoleById.set(event.properties.info.id, event.properties.info.role);
797
+ context.messageRoleById.set(scopedOpenCodeId(event.properties.sessionID, event.properties.info.id), event.properties.info.role);
583
798
  if (event.properties.info.role === "assistant") for (const part of context.partById.values()) {
584
- if (part.messageID !== event.properties.info.id) continue;
799
+ if (part.sessionID !== event.properties.sessionID || part.messageID !== event.properties.info.id) continue;
585
800
  yield* emitAssistantTextDelta(context, part, turnId, event);
586
801
  }
587
802
  break;
588
803
  case "message.removed":
589
- context.messageRoleById.delete(event.properties.messageID);
804
+ context.messageRoleById.delete(scopedOpenCodeId(event.properties.sessionID, event.properties.messageID));
590
805
  break;
591
806
  case "message.part.delta": {
592
- const existingPart = context.partById.get(event.properties.partID);
807
+ const partKey = scopedOpenCodeId(event.properties.sessionID, event.properties.partID);
808
+ const existingPart = context.partById.get(partKey);
593
809
  if (!existingPart) break;
594
810
  if (messageRoleForPart(context, existingPart) !== "assistant") break;
595
811
  const streamKind = resolveTextStreamKind(existingPart);
596
812
  const delta = event.properties.delta;
597
813
  if (delta.length === 0) break;
598
- const { nextText, deltaToEmit } = appendOpenCodeAssistantTextDelta(context.emittedTextByPartId.get(event.properties.partID) ?? textFromPart(existingPart) ?? "", delta);
814
+ const { nextText, deltaToEmit } = appendOpenCodeAssistantTextDelta(context.emittedTextByPartId.get(partKey) ?? textFromPart(existingPart) ?? "", delta);
599
815
  if (deltaToEmit.length === 0) break;
600
- context.emittedTextByPartId.set(event.properties.partID, nextText);
601
- if (existingPart.type === "text" || existingPart.type === "reasoning") context.partById.set(event.properties.partID, {
816
+ context.emittedTextByPartId.set(partKey, nextText);
817
+ if (existingPart.type === "text" || existingPart.type === "reasoning") context.partById.set(partKey, {
602
818
  ...existingPart,
603
819
  text: nextText
604
820
  });
605
- yield* emit({
821
+ const subagent = context.subagentBySessionId.get(event.properties.sessionID);
822
+ if (subagent) yield* emit({
823
+ ...yield* buildEventBase({
824
+ threadId: context.session.threadId,
825
+ turnId,
826
+ itemId: event.properties.partID,
827
+ raw: event
828
+ }),
829
+ type: "subagent.message.delta",
830
+ payload: {
831
+ subagentId: subagent.subagentId,
832
+ delta: deltaToEmit,
833
+ streamKind,
834
+ role: "assistant",
835
+ providerSessionId: event.properties.sessionID,
836
+ providerThreadId: event.properties.sessionID,
837
+ providerMessageId: event.properties.messageID
838
+ }
839
+ });
840
+ else yield* emit({
606
841
  ...yield* buildEventBase({
607
842
  threadId: context.session.threadId,
608
843
  turnId,
@@ -619,12 +854,24 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
619
854
  }
620
855
  case "message.part.updated": {
621
856
  const part = event.properties.part;
622
- context.partById.set(part.id, part);
857
+ context.partById.set(scopedOpenCodeId(part.sessionID, part.id), part);
623
858
  if (messageRoleForPart(context, part) === "assistant") yield* emitAssistantTextDelta(context, part, turnId, event);
859
+ if (part.type === "subtask" && part.sessionID === context.openCodeSessionId) yield* bindOpenCodeSubtaskPart(context, part, event);
624
860
  if (part.type === "tool") {
625
861
  const itemType = toToolLifecycleItemType(part.tool);
626
862
  const title = part.state.status === "running" ? part.state.title ?? part.tool : part.tool;
627
863
  const detail = detailFromToolPart(part);
864
+ const childSubagent = context.subagentBySessionId.get(part.sessionID);
865
+ if (childSubagent) {
866
+ yield* emitOpenCodeSubagentUpdated(context, {
867
+ subagent: childSubagent,
868
+ status: statusFromOpenCodeSubagentState("running"),
869
+ summary: title,
870
+ detail,
871
+ raw: event
872
+ });
873
+ break;
874
+ }
628
875
  const payload = {
629
876
  itemType,
630
877
  ...part.state.status === "error" ? { status: "failed" } : part.state.status === "completed" ? { status: "completed" } : { status: "inProgress" },
@@ -726,7 +973,25 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
726
973
  payload: { answers: {} }
727
974
  });
728
975
  break;
729
- case "session.status":
976
+ case "session.status": {
977
+ const childSubagent = context.subagentBySessionId.get(event.properties.sessionID);
978
+ if (childSubagent) {
979
+ if (event.properties.status.type === "idle") {
980
+ yield* emitOpenCodeSubagentCompleted(context, {
981
+ subagent: childSubagent,
982
+ status: subagentCompletionStatus("completed"),
983
+ raw: event
984
+ });
985
+ break;
986
+ }
987
+ yield* emitOpenCodeSubagentUpdated(context, {
988
+ subagent: childSubagent,
989
+ status: statusFromOpenCodeSubagentState("running"),
990
+ ...event.properties.status.type === "retry" ? { detail: event.properties.status.message } : {},
991
+ raw: event
992
+ });
993
+ break;
994
+ }
730
995
  if (event.properties.status.type === "busy") updateProviderSession(context, {
731
996
  status: "running",
732
997
  activeTurnId: turnId
@@ -760,8 +1025,28 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
760
1025
  });
761
1026
  }
762
1027
  break;
1028
+ }
1029
+ case "session.idle": {
1030
+ const childSubagent = context.subagentBySessionId.get(event.properties.sessionID);
1031
+ if (childSubagent) yield* emitOpenCodeSubagentCompleted(context, {
1032
+ subagent: childSubagent,
1033
+ status: subagentCompletionStatus("completed"),
1034
+ raw: event
1035
+ });
1036
+ break;
1037
+ }
763
1038
  case "session.error": {
764
1039
  const message = sessionErrorMessage(event.properties.error);
1040
+ const childSubagent = event.properties.sessionID !== void 0 ? context.subagentBySessionId.get(event.properties.sessionID) : void 0;
1041
+ if (childSubagent) {
1042
+ yield* emitOpenCodeSubagentCompleted(context, {
1043
+ subagent: childSubagent,
1044
+ status: subagentCompletionStatus("failed"),
1045
+ summary: message,
1046
+ raw: event
1047
+ });
1048
+ break;
1049
+ }
765
1050
  const activeTurnId = context.activeTurnId;
766
1051
  context.activeTurnId = void 0;
767
1052
  updateProviderSession(context, {
@@ -889,6 +1174,12 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
889
1174
  emittedTextByPartId: /* @__PURE__ */ new Map(),
890
1175
  messageRoleById: /* @__PURE__ */ new Map(),
891
1176
  completedAssistantPartIds: /* @__PURE__ */ new Set(),
1177
+ childSessionIds: /* @__PURE__ */ new Set(),
1178
+ subagentBySessionId: /* @__PURE__ */ new Map(),
1179
+ subagentBySubtaskPartId: /* @__PURE__ */ new Map(),
1180
+ unboundSubtaskPartIds: [],
1181
+ startedSubagentIds: /* @__PURE__ */ new Set(),
1182
+ completedSubagentIds: /* @__PURE__ */ new Set(),
892
1183
  turns: [],
893
1184
  activeTurnId: void 0,
894
1185
  activeAgent: void 0,
@@ -897,7 +1188,6 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
897
1188
  sessionScope: started.sessionScope
898
1189
  };
899
1190
  sessions.set(input.threadId, context);
900
- yield* startEventPump(context);
901
1191
  yield* emit({
902
1192
  ...yield* buildEventBase({ threadId: input.threadId }),
903
1193
  type: "session.started",
@@ -908,6 +1198,8 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
908
1198
  type: "thread.started",
909
1199
  payload: { providerThreadId: started.openCodeSession.id }
910
1200
  });
1201
+ yield* startEventPump(context);
1202
+ yield* hydrateOpenCodeChildSessions(context).pipe(effect.Effect.forkIn(context.sessionScope));
911
1203
  return session;
912
1204
  });
913
1205
  const sendTurn = effect.Effect.fn("sendTurn")(function* (input) {
@@ -1097,7 +1389,7 @@ function makeOpenCodeAdapter(openCodeSettings, options) {
1097
1389
  rollbackThread,
1098
1390
  stopAll,
1099
1391
  get streamEvents() {
1100
- return effect.Stream.fromQueue(runtimeEvents);
1392
+ return effect.Stream.fromQueue(runtimeEvents).pipe(effect.Stream.tap(() => runtimeEventQueueMetrics.recordDequeued()));
1101
1393
  }
1102
1394
  };
1103
1395
  });
@@ -1430,6 +1722,7 @@ const OpenCodeDriver = {
1430
1722
  const openCodeRuntime = yield* require_bin.OpenCodeRuntime;
1431
1723
  const serverConfig = yield* require_Metrics.ServerConfig;
1432
1724
  const httpClient = yield* effect_unstable_http.HttpClient.HttpClient;
1725
+ const serverSettings = yield* require_bin.ServerSettingsService;
1433
1726
  const eventLoggers = yield* require_bin.ProviderEventLoggers;
1434
1727
  const processEnv = require_bin.mergeProviderInstanceEnvironment(environment);
1435
1728
  const continuationIdentity = require_ProviderDriver.defaultProviderContinuationIdentity({
@@ -1471,7 +1764,7 @@ const OpenCodeDriver = {
1471
1764
  haveSettingsChanged: () => false,
1472
1765
  initialSnapshot: (settings) => stampIdentity(makePendingOpenCodeProvider(settings)),
1473
1766
  checkProvider,
1474
- enrichSnapshot: ({ snapshot, publishSnapshot }) => require_bin.enrichProviderSnapshotWithVersionAdvisory(snapshot, maintenanceCapabilities).pipe(effect.Effect.provideService(effect_unstable_http.HttpClient.HttpClient, httpClient), effect.Effect.flatMap((enrichedSnapshot) => publishSnapshot(enrichedSnapshot))),
1767
+ enrichSnapshot: ({ snapshot, publishSnapshot }) => require_bin.enrichProviderSnapshotWithVersionAdvisory(snapshot, maintenanceCapabilities).pipe(effect.Effect.provideService(effect_unstable_http.HttpClient.HttpClient, httpClient), effect.Effect.provideService(require_bin.ServerSettingsService, serverSettings), effect.Effect.flatMap((enrichedSnapshot) => publishSnapshot(enrichedSnapshot))),
1475
1768
  refreshInterval: null
1476
1769
  }).pipe(effect.Effect.mapError((cause) => new require_bin.ProviderDriverError({
1477
1770
  driver: DRIVER_KIND,