ryco-cli 0.1.7 → 0.1.8

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 (150) hide show
  1. package/dist/{AzureDevOpsSourceControlProvider-CF5LuCHp.mjs → AzureDevOpsSourceControlProvider-B5vb4DOU.mjs} +2 -2
  2. package/dist/{AzureDevOpsSourceControlProvider-5exivY-1.cjs → AzureDevOpsSourceControlProvider-CYZmJqSM.cjs} +2 -2
  3. package/dist/{BitbucketSourceControlProvider-CKH09tfT.mjs → BitbucketSourceControlProvider-CcAb4IgH.mjs} +2 -2
  4. package/dist/{BitbucketSourceControlProvider-1GWENqcl.cjs → BitbucketSourceControlProvider-D_7i4YQz.cjs} +2 -2
  5. package/dist/{ClaudeDriver-WwWFTu61.mjs → ClaudeDriver-CoPBpdrp.mjs} +22 -5
  6. package/dist/{ClaudeDriver-BXLdjrht.cjs → ClaudeDriver-ScqmbPKW.cjs} +22 -5
  7. package/dist/{CodexDriver-BboMT9uk.cjs → CodexDriver-CtCCc3CC.cjs} +34 -7
  8. package/dist/{CodexDriver-93-TmCrO.mjs → CodexDriver-DH7vqku4.mjs} +34 -7
  9. package/dist/{CodexTextGeneration-BU9Myn87.mjs → CodexTextGeneration-CJV1jPda.mjs} +2 -2
  10. package/dist/{CodexTextGeneration-0pRbJji3.cjs → CodexTextGeneration-Db2hn8Qz.cjs} +2 -2
  11. package/dist/{CopilotDriver-BASi8pJ0.mjs → CopilotDriver-CFCF68Te.mjs} +6 -5
  12. package/dist/{CopilotDriver-DCsv-17W.cjs → CopilotDriver-DLN2KEoc.cjs} +6 -5
  13. package/dist/{CursorDriver-BTSiM3A8.cjs → CursorDriver-BlvQbOEZ.cjs} +42 -3
  14. package/dist/{CursorDriver-D5LvIqUk.mjs → CursorDriver-Dej81rwD.mjs} +42 -3
  15. package/dist/{ForgejoSourceControlProvider-e-4hvvZ_.mjs → ForgejoSourceControlProvider-3cFD7SqY.mjs} +2 -2
  16. package/dist/{ForgejoSourceControlProvider-BTXRDCGB.cjs → ForgejoSourceControlProvider-DYFUGvBk.cjs} +2 -2
  17. package/dist/{GitHubSourceControlProvider-DWmwkA_y.cjs → GitHubSourceControlProvider-B1Tp0TbY.cjs} +27 -4
  18. package/dist/{GitHubSourceControlProvider-26IofDAO.mjs → GitHubSourceControlProvider-Kf4rrBTF.mjs} +27 -4
  19. package/dist/{GitLabSourceControlProvider-D-YHnxRe.cjs → GitLabSourceControlProvider-D3vvKrB4.cjs} +2 -2
  20. package/dist/{GitLabSourceControlProvider-DePct78W.mjs → GitLabSourceControlProvider-Ygppeftk.mjs} +2 -2
  21. package/dist/{NodeSqliteClient-B5aDHbNc.cjs → NodeSqliteClient-D1O-MR8w.cjs} +4 -1
  22. package/dist/{NodeSqliteClient-A1TEgwj_.mjs → NodeSqliteClient-DdTjpAko.mjs} +4 -1
  23. package/dist/{OpenCodeDriver-BhvLOmvn.mjs → OpenCodeDriver-BGa9Tkot.mjs} +3 -3
  24. package/dist/{OpenCodeDriver-CVeZ4n9-.cjs → OpenCodeDriver-mbR9mF54.cjs} +3 -3
  25. package/dist/{SourceControlProviderDiscoveryCatalog-DeFR5xH3.cjs → SourceControlProviderDiscoveryCatalog-CTb100Uk.cjs} +1 -1
  26. package/dist/{SourceControlProviderDiscoveryCatalog-mJV_Xitr.mjs → SourceControlProviderDiscoveryCatalog-Zk11tJoL.mjs} +1 -1
  27. package/dist/bin.cjs +259 -243
  28. package/dist/bin.mjs +259 -243
  29. package/dist/client/assets/{AnimatedHeight-BSU0lzYs.js → AnimatedHeight-CPQ2q38I.js} +1 -1
  30. package/dist/client/assets/AppearanceSettings-B0FYiIxL.js +1 -0
  31. package/dist/client/assets/{BranchToolbar.logic-CZIFSvhd.js → BranchToolbar.logic-C1yjFjxJ.js} +1 -1
  32. package/dist/client/assets/ChatRightPanel-CJDSKMU2.js +188 -0
  33. package/dist/client/assets/ChatThreadRouteView-BaKwKGbC.js +1 -0
  34. package/dist/client/assets/CommandPaletteDialog-BHG_MdZk.js +1 -0
  35. package/dist/client/assets/{CompositeRoot-B_KEfCUE.js → CompositeRoot-Bs0hfelE.js} +1 -1
  36. package/dist/client/assets/ConnectionsSettings-DvZNgO60.js +1 -0
  37. package/dist/client/assets/{DiagnosticsSettings-DtzPCb6N.js → DiagnosticsSettings-0v_hh1Qh.js} +1 -1
  38. package/dist/client/assets/{DialogHandle-DuHnmWoE.js → DialogHandle-CwEAVRF_.js} +1 -1
  39. package/dist/client/assets/{DialogRoot-BV25qAcA.js → DialogRoot-CYuaaDI3.js} +1 -1
  40. package/dist/client/assets/{DialogTitle-DQsi-RTa.js → DialogTitle-Cak6zT3u.js} +1 -1
  41. package/dist/client/assets/{DialogTrigger-D0fA01C6.js → DialogTrigger-BD0KYYT-.js} +1 -1
  42. package/dist/client/assets/{DialogViewport-CMV_BePU.js → DialogViewport-9sGf4JUp.js} +1 -1
  43. package/dist/client/assets/{DraftChatThreadRouteView-BoiKnrii.js → DraftChatThreadRouteView-nvKLHlii.js} +1 -1
  44. package/dist/client/assets/{JetBrainsIcons-BcPxJlMf.js → JetBrainsIcons-CflvH7gO.js} +1 -1
  45. package/dist/client/assets/KeybindingsSettings-DhLKhgYn.js +7 -0
  46. package/dist/client/assets/McpServersSettings-COs_dng1.js +6 -0
  47. package/dist/client/assets/{NoActiveThreadState-C2q_O1kP.js → NoActiveThreadState-cxMCW-cQ.js} +1 -1
  48. package/dist/client/assets/OpinionatedPluginsSettings-ag_OgOGj.js +1 -0
  49. package/dist/client/assets/{ProjectFavicon-D2imiJ8M.js → ProjectFavicon-D97Hy4xo.js} +1 -1
  50. package/dist/client/assets/{ProviderUpdateLaunchNotification.logic-CJgA--nK.js → ProviderUpdateLaunchNotification.logic-RMYvRSEk.js} +1 -1
  51. package/dist/client/assets/ProvidersSettingsPanel-DcdVMRVC.js +1 -0
  52. package/dist/client/assets/{RedactedSensitiveText-B2GFTyfq.js → RedactedSensitiveText-CQY4pFAq.js} +1 -1
  53. package/dist/client/assets/RootAppShell-BRjETnaT.js +12 -0
  54. package/dist/client/assets/SettingsDialog-DRi5jsmq.js +2 -0
  55. package/dist/client/assets/SourceControlSettings-CdUulS4O.js +1 -0
  56. package/dist/client/assets/StatisticsPanel-NLU3ecLt.js +64 -0
  57. package/dist/client/assets/{ThreadStatusIndicators-Cw_jLVQf.js → ThreadStatusIndicators-CebYbeXP.js} +1 -1
  58. package/dist/client/assets/{ThreadTerminalDrawer-D1WnSemH.js → ThreadTerminalDrawer-DlI0gGer.js} +2 -2
  59. package/dist/client/assets/{ThreadWorkspacePanel-L4qCPTOA.js → ThreadWorkspacePanel-CEIVrCZ0.js} +6 -6
  60. package/dist/client/assets/{alert-dialog-CNmKa0BK.js → alert-dialog-wh07u3JU.js} +1 -1
  61. package/dist/client/assets/{chart-column-BWSKYZ_a.js → chart-column-Cg34FxwD.js} +1 -1
  62. package/dist/client/assets/{chatThreadActions-TtDsiwDC.js → chatThreadActions-UitETN_n.js} +1 -1
  63. package/dist/client/assets/{chevron-up-zopJ_99l.js → chevron-up-C3DS3evc.js} +1 -1
  64. package/dist/client/assets/{clamp-Ds6WJu8j.js → clamp-DPbdAzEu.js} +1 -1
  65. package/dist/client/assets/{clipboard-copy-BoJGpdmJ.js → clipboard-copy-ClVNnHW5.js} +1 -1
  66. package/dist/client/assets/clock-Cr66Pt4W.js +1 -0
  67. package/dist/client/assets/{commandPaletteStore-KebG835b.js → commandPaletteStore-DzUBFRor.js} +1 -1
  68. package/dist/client/assets/composerDraftStore-BfLPHwHL.js +21 -0
  69. package/dist/client/assets/{desktopUpdateAtoms-BQ0GGEfM.js → desktopUpdateAtoms-BiqPT2_z.js} +1 -1
  70. package/dist/client/assets/{download-CUiRE0N9.js → download-DJ1juHK4.js} +1 -1
  71. package/dist/client/assets/{draft-input-CwpGDtoT.js → draft-input-B1txZFC7.js} +1 -1
  72. package/dist/client/assets/editorPreferences-Bbmh6Bm1.js +1 -0
  73. package/dist/client/assets/{empty-CBuXePtg.js → empty-CUEYr1p8.js} +1 -1
  74. package/dist/client/assets/{group-BpZvxjG5.js → group-BouZ2n9F.js} +1 -1
  75. package/dist/client/assets/{index-BKzXTNJ_.js → index-DiHgOLH_.js} +2 -2
  76. package/dist/client/assets/{input-CgDawd6k.js → input-Do_m9U-4.js} +1 -1
  77. package/dist/client/assets/kbd-DJilTfYF.js +1 -0
  78. package/dist/client/assets/{keybindings-CUTRYI_A.js → keybindings-CRkz0yvp.js} +1 -1
  79. package/dist/client/assets/{keyboard-DFFiI7JY.js → keyboard-D3WgbAUQ.js} +1 -1
  80. package/dist/client/assets/{keyedQuery-DiOCbGH0.js → keyedQuery-PQcOnB2O.js} +0 -0
  81. package/dist/client/assets/{main-BgFGju3e.js → main-C-491vdD.js} +3 -3
  82. package/dist/client/assets/main-fW5L_SdM.css +2 -0
  83. package/dist/client/assets/{palette-BXCL909c.js → palette-BRoYo327.js} +1 -1
  84. package/dist/client/assets/{play-DI2LZohg.js → play-BZbHk_vw.js} +1 -1
  85. package/dist/client/assets/plus-D0S72hZS.js +1 -0
  86. package/dist/client/assets/projectAtoms-KYCIIuVn.js +1 -0
  87. package/dist/client/assets/providerDriverMeta-BX4CLldz.js +1 -0
  88. package/dist/client/assets/providerIconUtils-DTRc3qno.js +47 -0
  89. package/dist/client/assets/{radio-group-_PPYg3YY.js → radio-group-De3hRQoY.js} +1 -1
  90. package/dist/client/assets/{refresh-cw-BsQTNBXl.js → refresh-cw-D_1NT-T2.js} +1 -1
  91. package/dist/client/assets/{resolveAriaLabelledBy-CRHo_s16.js → resolveAriaLabelledBy-RblUm3b1.js} +1 -1
  92. package/dist/client/assets/rightPanelRouteSearch-DLllyqRr.js +1 -0
  93. package/dist/client/assets/{scale-DDEJ-tvn.js → scale-s57Ro96s.js} +1 -1
  94. package/dist/client/assets/{scroll-area-HgsI-ErG.js → scroll-area-B0_k8-iT.js} +1 -1
  95. package/dist/client/assets/{separator-ClnL4mUB.js → separator-AyXRgdnJ.js} +1 -1
  96. package/dist/client/assets/{server-Bbs3L-6_.js → server-Z-m1OqE5.js} +1 -1
  97. package/dist/client/assets/{session-logic-CKQkgIwo.js → session-logic-B87Htlw4.js} +2 -2
  98. package/dist/client/assets/settingsDialogStore-CxUfUnd9.js +1 -0
  99. package/dist/client/assets/{settingsLayout-G5xVm-ZT.js → settingsLayout-BtKS3Z8f.js} +1 -1
  100. package/dist/client/assets/{sidebar-_u7SGgmC.js → sidebar-B0WxOej2.js} +1 -1
  101. package/dist/client/assets/{sidebarStatusText-BTYnwflG.js → sidebarStatusText-C_EsHj20.js} +1 -1
  102. package/dist/client/assets/{skeleton-CmUvhZGP.js → skeleton-COt2Az5i.js} +1 -1
  103. package/dist/client/assets/{storeSelectors-DhJRpdiw.js → storeSelectors-BuB4Kzj6.js} +1 -1
  104. package/dist/client/assets/{threadSelectionStore-ygmA4DNA.js → threadSelectionStore-BS6X6HHt.js} +1 -1
  105. package/dist/client/assets/toast-CaV8TQi_.js +1 -0
  106. package/dist/client/assets/{toggle-DGS7tKuj.js → toggle-DE4ApNIU.js} +1 -1
  107. package/dist/client/assets/{toggle-group-Dtv1ZUFW.js → toggle-group-BuzAkAEk.js} +1 -1
  108. package/dist/client/assets/{tokenModePresentation-Dor1DnBx.js → tokenModePresentation-BCL2aeat.js} +1 -1
  109. package/dist/client/assets/{trash-2-C2G3VGoV.js → trash-2-ZZ1feCT6.js} +1 -1
  110. package/dist/client/assets/{triangle-alert-Bpz3xGu5.js → triangle-alert-CL3zqnKL.js} +1 -1
  111. package/dist/client/assets/{undo-2-C3rtxuqZ.js → undo-2-Cu9H3R3q.js} +1 -1
  112. package/dist/client/assets/{useHandleNewThread-ypSbzG0P.js → useHandleNewThread-Gke-ZFBr.js} +1 -1
  113. package/dist/client/assets/useLabelableId-DfuxWqrk.js +1 -0
  114. package/dist/client/assets/{useNavigate-_4hWGSey.js → useNavigate-DQEHh6ky.js} +1 -1
  115. package/dist/client/assets/{vscode-icons-DdSTtxYd.js → vscode-icons-DGDiHkqG.js} +1 -1
  116. package/dist/client/assets/{wrench-C4jdis40.js → wrench-C_OATMLq.js} +1 -1
  117. package/dist/client/assets/x-BG9zZGeD.js +1 -0
  118. package/dist/client/index.html +1 -1
  119. package/dist/{collectUint8StreamText-uNXVRHOf.cjs → collectUint8StreamText-B-GW3u_2.cjs} +83 -10
  120. package/dist/{collectUint8StreamText-Lv4GGI79.mjs → collectUint8StreamText-COE2_gie.mjs} +83 -10
  121. package/dist/{makeManagedServerProvider-CkPEptun.mjs → makeManagedServerProvider-D1_iEWGi.mjs} +1 -1
  122. package/dist/{makeManagedServerProvider-3SD-Q5xh.cjs → makeManagedServerProvider-DTsQ87HL.cjs} +1 -1
  123. package/package.json +4 -2
  124. package/dist/client/assets/AppearanceSettings-D7q0ujGK.js +0 -1
  125. package/dist/client/assets/ChatRightPanel-CWHOIuiQ.js +0 -188
  126. package/dist/client/assets/ChatThreadRouteView-bA7xWXzc.js +0 -1
  127. package/dist/client/assets/CommandPaletteDialog-DNYaVOZO.js +0 -1
  128. package/dist/client/assets/ConnectionsSettings-CLZPbx_K.js +0 -1
  129. package/dist/client/assets/KeybindingsSettings-LuI98pdF.js +0 -7
  130. package/dist/client/assets/McpServersSettings-BFMuWYVV.js +0 -6
  131. package/dist/client/assets/OpinionatedPluginsSettings-Bqwct37O.js +0 -1
  132. package/dist/client/assets/ProvidersSettingsPanel-B97vbeu6.js +0 -1
  133. package/dist/client/assets/RootAppShell-C1xTR98P.js +0 -12
  134. package/dist/client/assets/SettingsDialog-Q0Q8O5oH.js +0 -2
  135. package/dist/client/assets/SourceControlSettings-KAvoPTNi.js +0 -1
  136. package/dist/client/assets/StatisticsPanel-BzsQ444K.js +0 -64
  137. package/dist/client/assets/clock-CzUHThzk.js +0 -1
  138. package/dist/client/assets/composerDraftStore-DpPEQ6BN.js +0 -21
  139. package/dist/client/assets/editorPreferences-jN7DKbyt.js +0 -1
  140. package/dist/client/assets/kbd-QYSL97CK.js +0 -1
  141. package/dist/client/assets/main-D0UFdwts.css +0 -2
  142. package/dist/client/assets/plus-DzgIfHUF.js +0 -1
  143. package/dist/client/assets/projectAtoms-DXXpuERK.js +0 -1
  144. package/dist/client/assets/providerDriverMeta-CRNNp0q3.js +0 -1
  145. package/dist/client/assets/providerIconUtils-D-DFhem2.js +0 -47
  146. package/dist/client/assets/rightPanelRouteSearch-CfmZ7osj.js +0 -1
  147. package/dist/client/assets/settingsDialogStore-SG-W1q0A.js +0 -1
  148. package/dist/client/assets/toast-DmA_ziPT.js +0 -1
  149. package/dist/client/assets/useLabelableId-Bc7KEnHU.js +0 -1
  150. package/dist/client/assets/x-CG2WU63t.js +0 -1
package/dist/bin.cjs CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
4
  const require_chunk = require("./chunk-jM1PLTSZ.cjs");
5
- const require_collectUint8StreamText = require("./collectUint8StreamText-uNXVRHOf.cjs");
5
+ const require_collectUint8StreamText = require("./collectUint8StreamText-B-GW3u_2.cjs");
6
6
  const require_Metrics = require("./Metrics-CIW1QH7M.cjs");
7
- const require_SourceControlProviderDiscoveryCatalog = require("./SourceControlProviderDiscoveryCatalog-DeFR5xH3.cjs");
7
+ const require_SourceControlProviderDiscoveryCatalog = require("./SourceControlProviderDiscoveryCatalog-CTb100Uk.cjs");
8
8
  const require_sourceControl = require("./sourceControl-x2t62T8h.cjs");
9
9
  let _effect_platform_node_NodeRuntime = require("@effect/platform-node/NodeRuntime");
10
10
  _effect_platform_node_NodeRuntime = require_chunk.__toESM(_effect_platform_node_NodeRuntime, 1);
@@ -4624,7 +4624,7 @@ effect_Layer.effectDiscard(runMigrations());
4624
4624
  //#region src/persistence/Layers/Sqlite.ts
4625
4625
  const defaultSqliteClientLoaders = {
4626
4626
  bun: () => import("@effect/sql-sqlite-bun/SqliteClient"),
4627
- node: () => Promise.resolve().then(() => require("./NodeSqliteClient-B5aDHbNc.cjs"))
4627
+ node: () => Promise.resolve().then(() => require("./NodeSqliteClient-D1O-MR8w.cjs"))
4628
4628
  };
4629
4629
  const makeRuntimeSqliteLayer = effect.Effect.fn("makeRuntimeSqliteLayer")(function* (config) {
4630
4630
  const loader = defaultSqliteClientLoaders[process.versions.bun !== void 0 ? "bun" : "node"];
@@ -9715,6 +9715,7 @@ function workflowRunsEndpoint(input) {
9715
9715
  const params = new URLSearchParams();
9716
9716
  params.set("per_page", String(workflowRunLimit(input.limit)));
9717
9717
  if (input.headSha?.trim()) params.set("head_sha", input.headSha.trim());
9718
+ else if (input.branch?.trim()) params.set("branch", input.branch.trim());
9718
9719
  return `repos/{owner}/{repo}/actions/runs?${params.toString()}`;
9719
9720
  }
9720
9721
  function isWorkflowRerunStateError(error) {
@@ -10980,26 +10981,26 @@ const make$11 = effect.Effect.fn("makeSourceControlProviderRegistry")(function*
10980
10981
  const azureDevOpsCli = yield* AzureDevOpsCli;
10981
10982
  const fileSystem = yield* effect.FileSystem.FileSystem;
10982
10983
  const github = yield* makeLazyProvider("github", effect.Effect.tryPromise({
10983
- try: () => Promise.resolve().then(() => require("./GitHubSourceControlProvider-DWmwkA_y.cjs")),
10984
+ try: () => Promise.resolve().then(() => require("./GitHubSourceControlProvider-B1Tp0TbY.cjs")),
10984
10985
  catch: (cause) => providerLoadError("github", cause)
10985
10986
  }).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(GitHubCli, githubCli), effect.Effect.provideService(effect.FileSystem.FileSystem, fileSystem)));
10986
10987
  const gitlab = yield* makeLazyProvider("gitlab", effect.Effect.tryPromise({
10987
- try: () => Promise.resolve().then(() => require("./GitLabSourceControlProvider-D-YHnxRe.cjs")),
10988
+ try: () => Promise.resolve().then(() => require("./GitLabSourceControlProvider-D3vvKrB4.cjs")),
10988
10989
  catch: (cause) => providerLoadError("gitlab", cause)
10989
10990
  }).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(GitLabCli, gitlabCli)));
10990
10991
  const bitbucket = yield* makeLazyProvider("bitbucket", effect.Effect.tryPromise({
10991
- try: () => Promise.resolve().then(() => require("./BitbucketSourceControlProvider-1GWENqcl.cjs")),
10992
+ try: () => Promise.resolve().then(() => require("./BitbucketSourceControlProvider-D_7i4YQz.cjs")),
10992
10993
  catch: (cause) => providerLoadError("bitbucket", cause)
10993
10994
  }).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(BitbucketApi, bitbucketApi)), {
10994
10995
  searchRepositories: true,
10995
10996
  cloneAuthentication: true
10996
10997
  });
10997
10998
  const forgejo = yield* makeLazyProvider("forgejo", effect.Effect.tryPromise({
10998
- try: () => Promise.resolve().then(() => require("./ForgejoSourceControlProvider-BTXRDCGB.cjs")),
10999
+ try: () => Promise.resolve().then(() => require("./ForgejoSourceControlProvider-DYFUGvBk.cjs")),
10999
11000
  catch: (cause) => providerLoadError("forgejo", cause)
11000
11001
  }).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(ForgejoApi, forgejoApi)));
11001
11002
  const azureDevOps = yield* makeLazyProvider("azure-devops", effect.Effect.tryPromise({
11002
- try: () => Promise.resolve().then(() => require("./AzureDevOpsSourceControlProvider-5exivY-1.cjs")),
11003
+ try: () => Promise.resolve().then(() => require("./AzureDevOpsSourceControlProvider-CYZmJqSM.cjs")),
11003
11004
  catch: (cause) => providerLoadError("azure-devops", cause)
11004
11005
  }).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(AzureDevOpsCli, azureDevOpsCli)));
11005
11006
  const bitbucketDiscovery = require_SourceControlProviderDiscoveryCatalog.makeBitbucketDiscovery(bitbucketApi);
@@ -11192,6 +11193,11 @@ const DEFAULT_KEYBINDINGS = [
11192
11193
  key: "mod+o",
11193
11194
  command: "editor.openFavorite"
11194
11195
  },
11196
+ {
11197
+ key: "mod+f",
11198
+ command: "thread.find",
11199
+ when: "!terminalFocus"
11200
+ },
11195
11201
  {
11196
11202
  key: "mod+shift+[",
11197
11203
  command: "thread.previous"
@@ -12013,14 +12019,7 @@ const ClientRequest__PluginsMigration = effect_Schema.Struct({
12013
12019
  marketplaceName: effect_Schema.String,
12014
12020
  pluginNames: effect_Schema.Array(effect_Schema.String)
12015
12021
  });
12016
- const ClientRequest__ReasoningEffort = effect_Schema.Literals([
12017
- "none",
12018
- "minimal",
12019
- "low",
12020
- "medium",
12021
- "high",
12022
- "xhigh"
12023
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
12022
+ const ClientRequest__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
12024
12023
  const ClientRequest__ReasoningItemContent = effect_Schema.Union([effect_Schema.Struct({
12025
12024
  text: effect_Schema.String,
12026
12025
  type: effect_Schema.Literal("reasoning_text").annotate({ title: "ReasoningTextReasoningItemContentType" })
@@ -12596,14 +12595,7 @@ const ServerNotification__RateLimitWindow = effect_Schema.Struct({
12596
12595
  windowDurationMins: effect_Schema.optionalKey(effect_Schema.Union([effect_Schema.Number.annotate({ format: "int64" }).check(effect_Schema.isInt()), effect_Schema.Null]))
12597
12596
  });
12598
12597
  const ServerNotification__RealtimeConversationVersion = effect_Schema.Literals(["v1", "v2"]);
12599
- const ServerNotification__ReasoningEffort = effect_Schema.Literals([
12600
- "none",
12601
- "minimal",
12602
- "low",
12603
- "medium",
12604
- "high",
12605
- "xhigh"
12606
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
12598
+ const ServerNotification__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
12607
12599
  const ServerNotification__ReasoningSummaryPartAddedNotification = effect_Schema.Struct({
12608
12600
  itemId: effect_Schema.String,
12609
12601
  summaryIndex: effect_Schema.Number.annotate({ format: "int64" }).check(effect_Schema.isInt()),
@@ -12982,14 +12974,7 @@ const V2ConfigReadResponse__AskForApproval = effect_Schema.Union([effect_Schema.
12982
12974
  skill_approval: effect_Schema.optionalKey(effect_Schema.Boolean.annotate({ default: false }))
12983
12975
  }) }).annotate({ title: "GranularAskForApproval" })], { mode: "oneOf" });
12984
12976
  const V2ConfigReadResponse__ForcedLoginMethod = effect_Schema.Literals(["chatgpt", "api"]);
12985
- const V2ConfigReadResponse__ReasoningEffort = effect_Schema.Literals([
12986
- "none",
12987
- "minimal",
12988
- "low",
12989
- "medium",
12990
- "high",
12991
- "xhigh"
12992
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
12977
+ const V2ConfigReadResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
12993
12978
  const V2ConfigReadResponse__ReasoningSummary = effect_Schema.Union([effect_Schema.Literals([
12994
12979
  "auto",
12995
12980
  "concise",
@@ -13307,14 +13292,7 @@ const V2ItemCompletedNotification__PatchChangeKind = effect_Schema.Union([
13307
13292
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
13308
13293
  }).annotate({ title: "UpdatePatchChangeKind" })
13309
13294
  ], { mode: "oneOf" });
13310
- const V2ItemCompletedNotification__ReasoningEffort = effect_Schema.Literals([
13311
- "none",
13312
- "minimal",
13313
- "low",
13314
- "medium",
13315
- "high",
13316
- "xhigh"
13317
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
13295
+ const V2ItemCompletedNotification__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
13318
13296
  const V2ItemCompletedNotification__TextElement = effect_Schema.Struct({
13319
13297
  byteRange: effect_Schema.Struct({
13320
13298
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -13502,14 +13480,7 @@ const V2ItemStartedNotification__PatchChangeKind = effect_Schema.Union([
13502
13480
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
13503
13481
  }).annotate({ title: "UpdatePatchChangeKind" })
13504
13482
  ], { mode: "oneOf" });
13505
- const V2ItemStartedNotification__ReasoningEffort = effect_Schema.Literals([
13506
- "none",
13507
- "minimal",
13508
- "low",
13509
- "medium",
13510
- "high",
13511
- "xhigh"
13512
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
13483
+ const V2ItemStartedNotification__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
13513
13484
  const V2ItemStartedNotification__TextElement = effect_Schema.Struct({
13514
13485
  byteRange: effect_Schema.Struct({
13515
13486
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -13597,14 +13568,7 @@ const V2ModelListResponse__ModelUpgradeInfo = effect_Schema.Struct({
13597
13568
  modelLink: effect_Schema.optionalKey(effect_Schema.Union([effect_Schema.String, effect_Schema.Null])),
13598
13569
  upgradeCopy: effect_Schema.optionalKey(effect_Schema.Union([effect_Schema.String, effect_Schema.Null]))
13599
13570
  });
13600
- const V2ModelListResponse__ReasoningEffort = effect_Schema.Literals([
13601
- "none",
13602
- "minimal",
13603
- "low",
13604
- "medium",
13605
- "high",
13606
- "xhigh"
13607
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
13571
+ const V2ModelListResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
13608
13572
  const V2ModelReroutedNotification__ModelRerouteReason = effect_Schema.Literal("highRiskCyberActivity");
13609
13573
  const V2PluginInstallParams__AbsolutePathBuf = effect_Schema.String.annotate({ description: "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute." });
13610
13574
  const V2PluginInstallResponse__AppSummary = effect_Schema.Struct({
@@ -13787,14 +13751,7 @@ const V2ReviewStartResponse__PatchChangeKind = effect_Schema.Union([
13787
13751
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
13788
13752
  }).annotate({ title: "UpdatePatchChangeKind" })
13789
13753
  ], { mode: "oneOf" });
13790
- const V2ReviewStartResponse__ReasoningEffort = effect_Schema.Literals([
13791
- "none",
13792
- "minimal",
13793
- "low",
13794
- "medium",
13795
- "high",
13796
- "xhigh"
13797
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
13754
+ const V2ReviewStartResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
13798
13755
  const V2ReviewStartResponse__TextElement = effect_Schema.Struct({
13799
13756
  byteRange: effect_Schema.Struct({
13800
13757
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -13958,14 +13915,7 @@ const V2ThreadForkResponse__PatchChangeKind = effect_Schema.Union([
13958
13915
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
13959
13916
  }).annotate({ title: "UpdatePatchChangeKind" })
13960
13917
  ], { mode: "oneOf" });
13961
- const V2ThreadForkResponse__ReasoningEffort = effect_Schema.Literals([
13962
- "none",
13963
- "minimal",
13964
- "low",
13965
- "medium",
13966
- "high",
13967
- "xhigh"
13968
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
13918
+ const V2ThreadForkResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
13969
13919
  const V2ThreadForkResponse__ServiceTier = effect_Schema.Literals([
13970
13920
  "fast",
13971
13921
  "flex",
@@ -14088,14 +14038,7 @@ const V2ThreadListResponse__PatchChangeKind = effect_Schema.Union([
14088
14038
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
14089
14039
  }).annotate({ title: "UpdatePatchChangeKind" })
14090
14040
  ], { mode: "oneOf" });
14091
- const V2ThreadListResponse__ReasoningEffort = effect_Schema.Literals([
14092
- "none",
14093
- "minimal",
14094
- "low",
14095
- "medium",
14096
- "high",
14097
- "xhigh"
14098
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
14041
+ const V2ThreadListResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
14099
14042
  const V2ThreadListResponse__TextElement = effect_Schema.Struct({
14100
14043
  byteRange: effect_Schema.Struct({
14101
14044
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -14204,14 +14147,7 @@ const V2ThreadMetadataUpdateResponse__PatchChangeKind = effect_Schema.Union([
14204
14147
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
14205
14148
  }).annotate({ title: "UpdatePatchChangeKind" })
14206
14149
  ], { mode: "oneOf" });
14207
- const V2ThreadMetadataUpdateResponse__ReasoningEffort = effect_Schema.Literals([
14208
- "none",
14209
- "minimal",
14210
- "low",
14211
- "medium",
14212
- "high",
14213
- "xhigh"
14214
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
14150
+ const V2ThreadMetadataUpdateResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
14215
14151
  const V2ThreadMetadataUpdateResponse__TextElement = effect_Schema.Struct({
14216
14152
  byteRange: effect_Schema.Struct({
14217
14153
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -14315,14 +14251,7 @@ const V2ThreadReadResponse__PatchChangeKind = effect_Schema.Union([
14315
14251
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
14316
14252
  }).annotate({ title: "UpdatePatchChangeKind" })
14317
14253
  ], { mode: "oneOf" });
14318
- const V2ThreadReadResponse__ReasoningEffort = effect_Schema.Literals([
14319
- "none",
14320
- "minimal",
14321
- "low",
14322
- "medium",
14323
- "high",
14324
- "xhigh"
14325
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
14254
+ const V2ThreadReadResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
14326
14255
  const V2ThreadReadResponse__TextElement = effect_Schema.Struct({
14327
14256
  byteRange: effect_Schema.Struct({
14328
14257
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -14528,14 +14457,7 @@ const V2ThreadResumeResponse__PatchChangeKind = effect_Schema.Union([
14528
14457
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
14529
14458
  }).annotate({ title: "UpdatePatchChangeKind" })
14530
14459
  ], { mode: "oneOf" });
14531
- const V2ThreadResumeResponse__ReasoningEffort = effect_Schema.Literals([
14532
- "none",
14533
- "minimal",
14534
- "low",
14535
- "medium",
14536
- "high",
14537
- "xhigh"
14538
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
14460
+ const V2ThreadResumeResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
14539
14461
  const V2ThreadResumeResponse__ServiceTier = effect_Schema.Literals([
14540
14462
  "fast",
14541
14463
  "flex",
@@ -14644,14 +14566,7 @@ const V2ThreadRollbackResponse__PatchChangeKind = effect_Schema.Union([
14644
14566
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
14645
14567
  }).annotate({ title: "UpdatePatchChangeKind" })
14646
14568
  ], { mode: "oneOf" });
14647
- const V2ThreadRollbackResponse__ReasoningEffort = effect_Schema.Literals([
14648
- "none",
14649
- "minimal",
14650
- "low",
14651
- "medium",
14652
- "high",
14653
- "xhigh"
14654
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
14569
+ const V2ThreadRollbackResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
14655
14570
  const V2ThreadRollbackResponse__TextElement = effect_Schema.Struct({
14656
14571
  byteRange: effect_Schema.Struct({
14657
14572
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -14755,14 +14670,7 @@ const V2ThreadStartedNotification__PatchChangeKind = effect_Schema.Union([
14755
14670
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
14756
14671
  }).annotate({ title: "UpdatePatchChangeKind" })
14757
14672
  ], { mode: "oneOf" });
14758
- const V2ThreadStartedNotification__ReasoningEffort = effect_Schema.Literals([
14759
- "none",
14760
- "minimal",
14761
- "low",
14762
- "medium",
14763
- "high",
14764
- "xhigh"
14765
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
14673
+ const V2ThreadStartedNotification__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
14766
14674
  const V2ThreadStartedNotification__TextElement = effect_Schema.Struct({
14767
14675
  byteRange: effect_Schema.Struct({
14768
14676
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -14907,14 +14815,7 @@ const V2ThreadStartResponse__PatchChangeKind = effect_Schema.Union([
14907
14815
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
14908
14816
  }).annotate({ title: "UpdatePatchChangeKind" })
14909
14817
  ], { mode: "oneOf" });
14910
- const V2ThreadStartResponse__ReasoningEffort = effect_Schema.Literals([
14911
- "none",
14912
- "minimal",
14913
- "low",
14914
- "medium",
14915
- "high",
14916
- "xhigh"
14917
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
14818
+ const V2ThreadStartResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
14918
14819
  const V2ThreadStartResponse__ServiceTier = effect_Schema.Literals([
14919
14820
  "fast",
14920
14821
  "flex",
@@ -15026,14 +14927,7 @@ const V2ThreadTurnsListResponse__PatchChangeKind = effect_Schema.Union([
15026
14927
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
15027
14928
  }).annotate({ title: "UpdatePatchChangeKind" })
15028
14929
  ], { mode: "oneOf" });
15029
- const V2ThreadTurnsListResponse__ReasoningEffort = effect_Schema.Literals([
15030
- "none",
15031
- "minimal",
15032
- "low",
15033
- "medium",
15034
- "high",
15035
- "xhigh"
15036
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
14930
+ const V2ThreadTurnsListResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
15037
14931
  const V2ThreadTurnsListResponse__TextElement = effect_Schema.Struct({
15038
14932
  byteRange: effect_Schema.Struct({
15039
14933
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -15135,14 +15029,7 @@ const V2ThreadUnarchiveResponse__PatchChangeKind = effect_Schema.Union([
15135
15029
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
15136
15030
  }).annotate({ title: "UpdatePatchChangeKind" })
15137
15031
  ], { mode: "oneOf" });
15138
- const V2ThreadUnarchiveResponse__ReasoningEffort = effect_Schema.Literals([
15139
- "none",
15140
- "minimal",
15141
- "low",
15142
- "medium",
15143
- "high",
15144
- "xhigh"
15145
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
15032
+ const V2ThreadUnarchiveResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
15146
15033
  const V2ThreadUnarchiveResponse__TextElement = effect_Schema.Struct({
15147
15034
  byteRange: effect_Schema.Struct({
15148
15035
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -15245,14 +15132,7 @@ const V2TurnCompletedNotification__PatchChangeKind = effect_Schema.Union([
15245
15132
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
15246
15133
  }).annotate({ title: "UpdatePatchChangeKind" })
15247
15134
  ], { mode: "oneOf" });
15248
- const V2TurnCompletedNotification__ReasoningEffort = effect_Schema.Literals([
15249
- "none",
15250
- "minimal",
15251
- "low",
15252
- "medium",
15253
- "high",
15254
- "xhigh"
15255
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
15135
+ const V2TurnCompletedNotification__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
15256
15136
  const V2TurnCompletedNotification__TextElement = effect_Schema.Struct({
15257
15137
  byteRange: effect_Schema.Struct({
15258
15138
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -15353,14 +15233,7 @@ const V2TurnStartedNotification__PatchChangeKind = effect_Schema.Union([
15353
15233
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
15354
15234
  }).annotate({ title: "UpdatePatchChangeKind" })
15355
15235
  ], { mode: "oneOf" });
15356
- const V2TurnStartedNotification__ReasoningEffort = effect_Schema.Literals([
15357
- "none",
15358
- "minimal",
15359
- "low",
15360
- "medium",
15361
- "high",
15362
- "xhigh"
15363
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
15236
+ const V2TurnStartedNotification__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
15364
15237
  const V2TurnStartedNotification__TextElement = effect_Schema.Struct({
15365
15238
  byteRange: effect_Schema.Struct({
15366
15239
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -15411,14 +15284,7 @@ const V2TurnStartParams__Personality = effect_Schema.Literals([
15411
15284
  "friendly",
15412
15285
  "pragmatic"
15413
15286
  ]);
15414
- const V2TurnStartParams__ReasoningEffort = effect_Schema.Literals([
15415
- "none",
15416
- "minimal",
15417
- "low",
15418
- "medium",
15419
- "high",
15420
- "xhigh"
15421
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
15287
+ const V2TurnStartParams__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
15422
15288
  const V2TurnStartParams__ReasoningSummary = effect_Schema.Union([effect_Schema.Literals([
15423
15289
  "auto",
15424
15290
  "concise",
@@ -15501,14 +15367,7 @@ const V2TurnStartResponse__PatchChangeKind = effect_Schema.Union([
15501
15367
  type: effect_Schema.Literal("update").annotate({ title: "UpdatePatchChangeKindType" })
15502
15368
  }).annotate({ title: "UpdatePatchChangeKind" })
15503
15369
  ], { mode: "oneOf" });
15504
- const V2TurnStartResponse__ReasoningEffort = effect_Schema.Literals([
15505
- "none",
15506
- "minimal",
15507
- "low",
15508
- "medium",
15509
- "high",
15510
- "xhigh"
15511
- ]).annotate({ description: "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning" });
15370
+ const V2TurnStartResponse__ReasoningEffort = effect_Schema.String.check(effect_Schema.isNonEmpty()).annotate({ description: "A non-empty reasoning effort value advertised by the model." });
15512
15371
  const V2TurnStartResponse__TextElement = effect_Schema.Struct({
15513
15372
  byteRange: effect_Schema.Struct({
15514
15373
  end: effect_Schema.Number.annotate({ format: "uint" }).check(effect_Schema.isInt()).check(effect_Schema.isGreaterThanOrEqualTo(0)),
@@ -26827,7 +26686,7 @@ const BUILT_IN_DRIVERS = [
26827
26686
  configSchema: require_collectUint8StreamText.CodexSettings,
26828
26687
  defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.CodexSettings)({}),
26829
26688
  create: (input) => effect.Effect.tryPromise({
26830
- try: () => Promise.resolve().then(() => require("./CodexDriver-BboMT9uk.cjs")),
26689
+ try: () => Promise.resolve().then(() => require("./CodexDriver-CtCCc3CC.cjs")),
26831
26690
  catch: (cause) => driverImportError(codexDriverKind, input, cause)
26832
26691
  }).pipe(effect.Effect.flatMap(({ CodexDriver }) => CodexDriver.create(input)))
26833
26692
  },
@@ -26840,7 +26699,7 @@ const BUILT_IN_DRIVERS = [
26840
26699
  configSchema: require_collectUint8StreamText.ClaudeSettings,
26841
26700
  defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.ClaudeSettings)({}),
26842
26701
  create: (input) => effect.Effect.tryPromise({
26843
- try: () => Promise.resolve().then(() => require("./ClaudeDriver-BXLdjrht.cjs")),
26702
+ try: () => Promise.resolve().then(() => require("./ClaudeDriver-ScqmbPKW.cjs")),
26844
26703
  catch: (cause) => driverImportError(claudeDriverKind, input, cause)
26845
26704
  }).pipe(effect.Effect.flatMap(({ ClaudeDriver }) => ClaudeDriver.create(input)))
26846
26705
  },
@@ -26853,7 +26712,7 @@ const BUILT_IN_DRIVERS = [
26853
26712
  configSchema: require_collectUint8StreamText.CopilotSettings,
26854
26713
  defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.CopilotSettings)({}),
26855
26714
  create: (input) => effect.Effect.tryPromise({
26856
- try: () => Promise.resolve().then(() => require("./CopilotDriver-DCsv-17W.cjs")),
26715
+ try: () => Promise.resolve().then(() => require("./CopilotDriver-DLN2KEoc.cjs")),
26857
26716
  catch: (cause) => driverImportError(copilotDriverKind, input, cause)
26858
26717
  }).pipe(effect.Effect.flatMap(({ CopilotDriver }) => CopilotDriver.create(input)))
26859
26718
  },
@@ -26866,7 +26725,7 @@ const BUILT_IN_DRIVERS = [
26866
26725
  configSchema: require_collectUint8StreamText.CursorSettings,
26867
26726
  defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.CursorSettings)({}),
26868
26727
  create: (input) => effect.Effect.tryPromise({
26869
- try: () => Promise.resolve().then(() => require("./CursorDriver-BTSiM3A8.cjs")),
26728
+ try: () => Promise.resolve().then(() => require("./CursorDriver-BlvQbOEZ.cjs")),
26870
26729
  catch: (cause) => driverImportError(cursorDriverKind, input, cause)
26871
26730
  }).pipe(effect.Effect.flatMap(({ CursorDriver }) => CursorDriver.create(input)))
26872
26731
  },
@@ -26879,7 +26738,7 @@ const BUILT_IN_DRIVERS = [
26879
26738
  configSchema: require_collectUint8StreamText.OpenCodeSettings,
26880
26739
  defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.OpenCodeSettings)({}),
26881
26740
  create: (input) => effect.Effect.tryPromise({
26882
- try: () => Promise.resolve().then(() => require("./OpenCodeDriver-CVeZ4n9-.cjs")),
26741
+ try: () => Promise.resolve().then(() => require("./OpenCodeDriver-mbR9mF54.cjs")),
26883
26742
  catch: (cause) => driverImportError(openCodeDriverKind, input, cause)
26884
26743
  }).pipe(effect.Effect.flatMap(({ OpenCodeDriver }) => OpenCodeDriver.create(input)))
26885
26744
  }
@@ -26979,6 +26838,7 @@ function buildServerProvider(input) {
26979
26838
  displayName: input.presentation.displayName,
26980
26839
  ...input.presentation.badgeLabel ? { badgeLabel: input.presentation.badgeLabel } : {},
26981
26840
  ...typeof input.presentation.showInteractionModeToggle === "boolean" ? { showInteractionModeToggle: input.presentation.showInteractionModeToggle } : {},
26841
+ ...typeof input.presentation.supportsAskMode === "boolean" ? { supportsAskMode: input.presentation.supportsAskMode } : {},
26982
26842
  enabled: input.enabled,
26983
26843
  installed: input.probe.installed,
26984
26844
  version: input.probe.version,
@@ -27592,13 +27452,14 @@ const scopedSafeTeardown = (label) => (effect$15) => effect.Effect.gen(function*
27592
27452
  });
27593
27453
  //#endregion
27594
27454
  //#region package.json
27595
- var version = "0.1.7";
27455
+ var version = "0.1.8";
27596
27456
  //#endregion
27597
27457
  //#region src/provider/Layers/CodexProvider.ts
27598
27458
  const PROVIDER_PROBE_TIMEOUT_MS = 8e3;
27599
27459
  const CODEX_PRESENTATION = {
27600
27460
  displayName: "Codex",
27601
- showInteractionModeToggle: true
27461
+ showInteractionModeToggle: true,
27462
+ supportsAskMode: true
27602
27463
  };
27603
27464
  const REASONING_EFFORT_LABELS = {
27604
27465
  none: "None",
@@ -27606,8 +27467,15 @@ const REASONING_EFFORT_LABELS = {
27606
27467
  low: "Low",
27607
27468
  medium: "Medium",
27608
27469
  high: "High",
27609
- xhigh: "Extra High"
27470
+ xhigh: "Extra High",
27471
+ max: "Max",
27472
+ ultra: "Ultra"
27610
27473
  };
27474
+ function formatReasoningEffortLabel(reasoningEffort) {
27475
+ const known = REASONING_EFFORT_LABELS[reasoningEffort];
27476
+ if (known) return known;
27477
+ return reasoningEffort.replace(/[_-]+/g, " ").replace(/\b\w/g, (char) => char.toUpperCase());
27478
+ }
27611
27479
  function codexAccountAuthLabel(account) {
27612
27480
  if (!account) return void 0;
27613
27481
  if (account.type === "apiKey") return "OpenAI API Key";
@@ -27636,11 +27504,11 @@ function codexAccountEmail(account) {
27636
27504
  function mapCodexModelCapabilities(model) {
27637
27505
  const reasoningOptions = model.supportedReasoningEfforts.map(({ reasoningEffort }) => reasoningEffort === model.defaultReasoningEffort ? {
27638
27506
  id: reasoningEffort,
27639
- label: REASONING_EFFORT_LABELS[reasoningEffort],
27507
+ label: formatReasoningEffortLabel(reasoningEffort),
27640
27508
  isDefault: true
27641
27509
  } : {
27642
27510
  id: reasoningEffort,
27643
- label: REASONING_EFFORT_LABELS[reasoningEffort]
27511
+ label: formatReasoningEffortLabel(reasoningEffort)
27644
27512
  });
27645
27513
  const defaultReasoning = reasoningOptions.find((option) => option.isDefault)?.id;
27646
27514
  const supportsFastMode = (model.additionalSpeedTiers ?? []).includes("fast");
@@ -28638,11 +28506,12 @@ var ProjectionSnapshotQuery = class extends effect.Context.Service()("ryco/orche
28638
28506
  * on demand. No dedicated statistics tables exist; everything is derived from
28639
28507
  * data already persisted by the projection pipeline.
28640
28508
  *
28641
- * Token figures use a per-turn delta attribution: for each `(thread, turn)` we
28642
- * read the final `context-window.updated` activity and sum its `last*` deltas,
28643
- * bucketed by day/project/model. When deltas are absent (older data / providers
28644
- * that only report cumulative totals) we fall back to attributing a thread's
28645
- * cumulative total to its primary model and last-activity day.
28509
+ * Token figures prefer per-turn attribution: for each `(thread, turn)` with
28510
+ * exact `last*` breakdowns we read the final `context-window.updated` activity
28511
+ * and bucket its provider-reported turn total by day/project/provider/model.
28512
+ * Threads without exact deltas (older data / providers that only report
28513
+ * cumulative context usage) fall back to attributing the latest cumulative
28514
+ * total to the thread's primary model and last-activity day.
28646
28515
  *
28647
28516
  * @module StatisticsQuery
28648
28517
  */
@@ -28657,6 +28526,7 @@ const ThreadRow = effect.Schema.Struct({
28657
28526
  threadId: effect.Schema.String,
28658
28527
  projectId: require_collectUint8StreamText.ProjectId,
28659
28528
  model: effect.Schema.NullOr(effect.Schema.String),
28529
+ providerInstanceId: effect.Schema.NullOr(effect.Schema.String),
28660
28530
  createdAt: effect.Schema.String,
28661
28531
  providerName: effect.Schema.NullOr(effect.Schema.String)
28662
28532
  });
@@ -28695,6 +28565,33 @@ function num(value) {
28695
28565
  function dayOf(iso) {
28696
28566
  return iso.length >= 10 ? iso.slice(0, 10) : null;
28697
28567
  }
28568
+ function bestPerTurnTotalTokenCount(payload) {
28569
+ const reportedTotal = num(payload?.lastUsedTokens);
28570
+ if (reportedTotal > 0) return reportedTotal;
28571
+ return num(payload?.lastInputTokens) + num(payload?.lastOutputTokens);
28572
+ }
28573
+ function bestCumulativeTotalTokenCount(payload) {
28574
+ const reportedTotal = num(payload?.usedTokens);
28575
+ if (reportedTotal > 0) return reportedTotal;
28576
+ return num(payload?.inputTokens) + num(payload?.outputTokens);
28577
+ }
28578
+ function hasExactPerTurnBreakdown(payload) {
28579
+ return num(payload?.lastInputTokens) + num(payload?.lastOutputTokens) + num(payload?.lastCachedInputTokens) + num(payload?.lastReasoningOutputTokens) > 0;
28580
+ }
28581
+ function addPerTurnUsage(bucket, payload) {
28582
+ bucket.inputTokens += num(payload?.lastInputTokens);
28583
+ bucket.outputTokens += num(payload?.lastOutputTokens);
28584
+ bucket.cachedInputTokens += num(payload?.lastCachedInputTokens);
28585
+ bucket.reasoningTokens += num(payload?.lastReasoningOutputTokens);
28586
+ bucket.totalTokens += bestPerTurnTotalTokenCount(payload);
28587
+ }
28588
+ function addCumulativeUsage(bucket, payload) {
28589
+ bucket.inputTokens += num(payload?.inputTokens);
28590
+ bucket.outputTokens += num(payload?.outputTokens);
28591
+ bucket.cachedInputTokens += num(payload?.cachedInputTokens);
28592
+ bucket.reasoningTokens += num(payload?.reasoningOutputTokens);
28593
+ bucket.totalTokens += bestCumulativeTotalTokenCount(payload);
28594
+ }
28698
28595
  const makeStatisticsQuery = effect.Effect.gen(function* () {
28699
28596
  const sql = yield* effect_unstable_sql_SqlClient.SqlClient;
28700
28597
  const listThreadRows = effect_unstable_sql_SqlSchema.findAll({
@@ -28705,9 +28602,14 @@ const makeStatisticsQuery = effect.Effect.gen(function* () {
28705
28602
  t.thread_id AS "threadId",
28706
28603
  t.project_id AS "projectId",
28707
28604
  json_extract(t.model_selection_json, '$.model') AS "model",
28605
+ COALESCE(
28606
+ json_extract(t.model_selection_json, '$.instanceId'),
28607
+ json_extract(t.model_selection_json, '$.provider')
28608
+ ) AS "providerInstanceId",
28708
28609
  t.created_at AS "createdAt",
28709
28610
  COALESCE(
28710
28611
  s.provider_name,
28612
+ json_extract(t.model_selection_json, '$.instanceId'),
28711
28613
  json_extract(t.model_selection_json, '$.provider')
28712
28614
  ) AS "providerName"
28713
28615
  FROM projection_threads t
@@ -28787,9 +28689,9 @@ const makeStatisticsQuery = effect.Effect.gen(function* () {
28787
28689
  listWorktreeRows(void 0).pipe(effect.Effect.mapError(toPersistenceSqlOrDecodeError$7("StatisticsQuery.getStatistics:listWorktrees:query", "StatisticsQuery.getStatistics:listWorktrees:decodeRows")))
28788
28690
  ], { concurrency: "unbounded" });
28789
28691
  const threadMeta = /* @__PURE__ */ new Map();
28790
- const modelProvider = /* @__PURE__ */ new Map();
28692
+ const modelRefs = /* @__PURE__ */ new Map();
28791
28693
  for (const row of threadRows) {
28792
- const provider = row.providerName?.trim() || void 0;
28694
+ const provider = row.providerName?.trim() || row.providerInstanceId?.trim() || void 0;
28793
28695
  const model = (row.model ?? "").trim() || "unknown";
28794
28696
  threadMeta.set(row.threadId, {
28795
28697
  projectId: row.projectId,
@@ -28797,22 +28699,27 @@ const makeStatisticsQuery = effect.Effect.gen(function* () {
28797
28699
  provider,
28798
28700
  createdAt: row.createdAt
28799
28701
  });
28800
- if (!modelProvider.has(model) || modelProvider.get(model) === void 0 && provider) modelProvider.set(model, provider);
28702
+ const modelKey = `${provider ?? ""}\u0000${model}`;
28703
+ modelRefs.set(modelKey, provider ? {
28704
+ model,
28705
+ provider
28706
+ } : { model });
28801
28707
  }
28802
28708
  const buckets = /* @__PURE__ */ new Map();
28803
- const getBucket = (date, projectId, model) => {
28804
- const key = `${date}${projectId}${model}`;
28709
+ const getBucket = (date, projectId, model, provider) => {
28710
+ const key = `${date}\u0000${projectId}\u0000${provider ?? ""}\u0000${model}`;
28805
28711
  let bucket = buckets.get(key);
28806
28712
  if (!bucket) {
28807
28713
  bucket = {
28808
28714
  date,
28809
28715
  projectId,
28810
28716
  model,
28811
- provider: modelProvider.get(model),
28717
+ provider,
28812
28718
  inputTokens: 0,
28813
28719
  outputTokens: 0,
28814
28720
  cachedInputTokens: 0,
28815
28721
  reasoningTokens: 0,
28722
+ totalTokens: 0,
28816
28723
  turns: 0,
28817
28724
  activeMs: 0,
28818
28725
  toolUses: 0,
@@ -28832,50 +28739,50 @@ const makeStatisticsQuery = effect.Effect.gen(function* () {
28832
28739
  if (iso && (earliest === void 0 || iso < earliest)) earliest = iso;
28833
28740
  };
28834
28741
  const lastPerTurn = /* @__PURE__ */ new Map();
28835
- const lastPerThread = /* @__PURE__ */ new Map();
28836
28742
  const isLater = (a, b) => {
28837
28743
  if (a.createdAt !== b.createdAt) return a.createdAt > b.createdAt;
28838
28744
  return (a.sequence ?? -1) >= (b.sequence ?? -1);
28839
28745
  };
28840
28746
  for (const row of tokenRows) {
28841
28747
  considerIso(row.createdAt);
28842
- lastPerTurn.set(`${row.threadId}${row.turnId ?? ""}`, row);
28843
- const prevThread = lastPerThread.get(row.threadId);
28844
- if (!prevThread || isLater(row, prevThread)) lastPerThread.set(row.threadId, row);
28748
+ const turnKey = `${row.threadId}\u0000${row.turnId ?? ""}`;
28749
+ const prevTurn = lastPerTurn.get(turnKey);
28750
+ if (!prevTurn || isLater(row, prevTurn)) lastPerTurn.set(turnKey, row);
28845
28751
  }
28846
- let perTurnDeltaSum = 0;
28847
- for (const row of lastPerTurn.values()) {
28848
- const payload = safeParse(row.payloadJson);
28849
- perTurnDeltaSum += num(payload?.lastInputTokens) + num(payload?.lastOutputTokens) + num(payload?.lastCachedInputTokens) + num(payload?.lastReasoningOutputTokens);
28752
+ const firstExactPerThread = /* @__PURE__ */ new Map();
28753
+ for (const row of lastPerTurn.values()) if (hasExactPerTurnBreakdown(safeParse(row.payloadJson))) {
28754
+ const prev = firstExactPerThread.get(row.threadId);
28755
+ if (!prev || isLater(prev, row)) firstExactPerThread.set(row.threadId, row);
28850
28756
  }
28851
- let cumulativeSum = 0;
28852
- for (const row of lastPerThread.values()) {
28757
+ const cumulativeFallbackByThread = /* @__PURE__ */ new Map();
28758
+ for (const row of lastPerTurn.values()) {
28759
+ if (hasExactPerTurnBreakdown(safeParse(row.payloadJson))) continue;
28760
+ const firstExact = firstExactPerThread.get(row.threadId);
28761
+ if (firstExact && !isLater(firstExact, row)) continue;
28762
+ const prev = cumulativeFallbackByThread.get(row.threadId);
28763
+ if (!prev || isLater(row, prev)) cumulativeFallbackByThread.set(row.threadId, row);
28764
+ }
28765
+ let usedExactPerTurn = false;
28766
+ let usedCumulativeFallback = false;
28767
+ for (const row of lastPerTurn.values()) {
28853
28768
  const payload = safeParse(row.payloadJson);
28854
- cumulativeSum += num(payload?.inputTokens) + num(payload?.outputTokens);
28855
- }
28856
- const attribution = perTurnDeltaSum === 0 && cumulativeSum > 0 ? "thread-cumulative" : "per-turn-delta";
28857
- if (attribution === "per-turn-delta") for (const row of lastPerTurn.values()) {
28769
+ if (!hasExactPerTurnBreakdown(payload)) continue;
28858
28770
  const meta = threadMeta.get(row.threadId);
28859
28771
  const date = dayOf(row.createdAt);
28860
28772
  if (!meta || !date) continue;
28861
- const payload = safeParse(row.payloadJson);
28862
- const bucket = getBucket(date, meta.projectId, meta.model);
28863
- bucket.inputTokens += num(payload?.lastInputTokens);
28864
- bucket.outputTokens += num(payload?.lastOutputTokens);
28865
- bucket.cachedInputTokens += num(payload?.lastCachedInputTokens);
28866
- bucket.reasoningTokens += num(payload?.lastReasoningOutputTokens);
28773
+ addPerTurnUsage(getBucket(date, meta.projectId, meta.model, meta.provider), payload);
28774
+ usedExactPerTurn = true;
28867
28775
  }
28868
- else for (const row of lastPerThread.values()) {
28776
+ for (const row of cumulativeFallbackByThread.values()) {
28869
28777
  const meta = threadMeta.get(row.threadId);
28870
28778
  const date = dayOf(row.createdAt);
28871
28779
  if (!meta || !date) continue;
28872
28780
  const payload = safeParse(row.payloadJson);
28873
- const bucket = getBucket(date, meta.projectId, meta.model);
28874
- bucket.inputTokens += num(payload?.inputTokens);
28875
- bucket.outputTokens += num(payload?.outputTokens);
28876
- bucket.cachedInputTokens += num(payload?.cachedInputTokens);
28877
- bucket.reasoningTokens += num(payload?.reasoningOutputTokens);
28781
+ if (bestCumulativeTotalTokenCount(payload) <= 0) continue;
28782
+ addCumulativeUsage(getBucket(date, meta.projectId, meta.model, meta.provider), payload);
28783
+ usedCumulativeFallback = true;
28878
28784
  }
28785
+ const attribution = usedExactPerTurn && usedCumulativeFallback ? "mixed" : usedCumulativeFallback ? "thread-cumulative" : "per-turn-delta";
28879
28786
  for (const row of turnRows) {
28880
28787
  const meta = threadMeta.get(row.threadId);
28881
28788
  if (!meta) continue;
@@ -28884,7 +28791,7 @@ const makeStatisticsQuery = effect.Effect.gen(function* () {
28884
28791
  const anchor = row.completedAt ?? row.startedAt;
28885
28792
  const date = anchor ? dayOf(anchor) : null;
28886
28793
  if (!date) continue;
28887
- const bucket = getBucket(date, meta.projectId, meta.model);
28794
+ const bucket = getBucket(date, meta.projectId, meta.model, meta.provider);
28888
28795
  if (row.completedAt) {
28889
28796
  bucket.turns += 1;
28890
28797
  if (row.startedAt) {
@@ -28904,14 +28811,14 @@ const makeStatisticsQuery = effect.Effect.gen(function* () {
28904
28811
  for (const row of toolRows) {
28905
28812
  const meta = threadMeta.get(row.threadId);
28906
28813
  if (!meta) continue;
28907
- const bucket = getBucket(row.date, meta.projectId, meta.model);
28814
+ const bucket = getBucket(row.date, meta.projectId, meta.model, meta.provider);
28908
28815
  bucket.toolUses += num(row.count);
28909
28816
  }
28910
28817
  for (const meta of threadMeta.values()) {
28911
28818
  considerIso(meta.createdAt);
28912
28819
  const date = dayOf(meta.createdAt);
28913
28820
  if (!date) continue;
28914
- getBucket(date, meta.projectId, meta.model).threadsCreated += 1;
28821
+ getBucket(date, meta.projectId, meta.model, meta.provider).threadsCreated += 1;
28915
28822
  }
28916
28823
  let wtCreated = 0;
28917
28824
  let wtArchived = 0;
@@ -28958,8 +28865,9 @@ const makeStatisticsQuery = effect.Effect.gen(function* () {
28958
28865
  totals.deletions += bucket.deletions;
28959
28866
  totals.commits += bucket.commits;
28960
28867
  totals.pushes += bucket.pushes;
28868
+ totals.totalTokens += bucket.totalTokens;
28961
28869
  }
28962
- totals.totalTokens = totals.inputTokens + totals.outputTokens;
28870
+ dailyBuckets.sort((a, b) => a.date === b.date ? a.projectId === b.projectId ? (a.provider ?? "").localeCompare(b.provider ?? "") || a.model.localeCompare(b.model) : a.projectId.localeCompare(b.projectId) : a.date.localeCompare(b.date));
28963
28871
  const projectTitle = /* @__PURE__ */ new Map();
28964
28872
  for (const row of projectRows) projectTitle.set(row.projectId, row.title);
28965
28873
  const projectIdsInData = /* @__PURE__ */ new Set();
@@ -28970,10 +28878,8 @@ const makeStatisticsQuery = effect.Effect.gen(function* () {
28970
28878
  id,
28971
28879
  title: projectTitle.get(id)?.trim() || id
28972
28880
  }));
28973
- const models = [...modelProvider].map(([model, provider]) => provider ? {
28974
- model,
28975
- provider
28976
- } : { model });
28881
+ projects.sort((a, b) => a.title.localeCompare(b.title) || a.id.localeCompare(b.id));
28882
+ const models = [...modelRefs.values()].toSorted((a, b) => (a.provider ?? "").localeCompare(b.provider ?? "") || a.model.localeCompare(b.model));
28977
28883
  return {
28978
28884
  generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
28979
28885
  ...earliest ? { earliestActivityAt: earliest } : {},
@@ -33402,6 +33308,13 @@ const makeWorktreeOperations = (deps) => {
33402
33308
  onNone: () => failGitWorkflow(operation, `Worktree ${worktreeId} not found.`),
33403
33309
  onSome: effect.Effect.succeed
33404
33310
  })));
33311
+ const isProjectRootPath = (candidate, projectRoot) => {
33312
+ const normalize = (value) => {
33313
+ const resolved = node_path.default.resolve(value).replace(/[\\/]+$/g, "");
33314
+ return process.platform === "win32" || process.platform === "darwin" ? resolved.toLowerCase() : resolved;
33315
+ };
33316
+ return normalize(candidate) === normalize(projectRoot);
33317
+ };
33405
33318
  const dispatchWorktreeCommand = (command, operation) => dispatchNormalizedCommand(command).pipe(effect.Effect.mapError((cause) => toGitManagerError(operation, "Failed to dispatch orchestration command.", cause)), effect.Effect.asVoid);
33406
33319
  const launchSetupScriptForWorktreeInBackground = (input) => effect.Effect.gen(function* () {
33407
33320
  const requestedAt = (/* @__PURE__ */ new Date()).toISOString();
@@ -33625,20 +33538,27 @@ const makeWorktreeOperations = (deps) => {
33625
33538
  break;
33626
33539
  }
33627
33540
  }
33628
- const worktreePath = preparedWorktreePath ?? (yield* gitWorkflow.createWorktree({
33629
- cwd: project.workspaceRoot,
33630
- refName,
33631
- ...newRefName !== void 0 ? { newRefName } : {},
33632
- path: resolveWorktreeCheckoutPath({
33541
+ let worktreePath;
33542
+ if (preparedWorktreePath !== null) {
33543
+ if (isProjectRootPath(preparedWorktreePath, project.workspaceRoot)) return yield* failGitWorkflow(operation, "Cannot create a worktree at the project root.");
33544
+ worktreePath = preparedWorktreePath;
33545
+ } else {
33546
+ const targetPath = resolveWorktreeCheckoutPath({
33633
33547
  location: input.worktreeLocation,
33634
33548
  appWorktreesRoot: config.worktreesDir,
33635
33549
  projectId: input.projectId,
33636
33550
  workspaceRoot: project.workspaceRoot,
33637
33551
  projectMetadataDir: project.projectMetadataDir,
33638
33552
  branchName: branch
33639
- })
33640
- })).worktree.path;
33641
- if (preparedWorktreePath === null) {
33553
+ });
33554
+ if (isProjectRootPath(targetPath, project.workspaceRoot)) return yield* failGitWorkflow(operation, "Cannot create a worktree at the project root.");
33555
+ worktreePath = (yield* gitWorkflow.createWorktree({
33556
+ cwd: project.workspaceRoot,
33557
+ refName,
33558
+ ...newRefName !== void 0 ? { newRefName } : {},
33559
+ path: targetPath
33560
+ })).worktree.path;
33561
+ if (isProjectRootPath(worktreePath, project.workspaceRoot)) return yield* failGitWorkflow(operation, "Refusing to register a worktree that resolved to the project root.");
33642
33562
  ownedWorktreePath = worktreePath;
33643
33563
  if (newRefName !== void 0) ownedBranchName = newRefName;
33644
33564
  }
@@ -33779,6 +33699,7 @@ const makeWorktreeOperations = (deps) => {
33779
33699
  const worktree = yield* loadWorktreeForGitWorkflow(operation, input.worktreeId);
33780
33700
  if (worktree.origin === "main") return yield* failGitWorkflow(operation, "Cannot delete the main worktree.");
33781
33701
  const project = yield* loadProjectForGitWorkflow(operation, worktree.projectId);
33702
+ if (worktree.worktreePath !== null && isProjectRootPath(worktree.worktreePath, project.workspaceRoot)) return yield* failGitWorkflow(operation, "Cannot delete a worktree that points at the project root.");
33782
33703
  if (input.force) {
33783
33704
  if (worktree.worktreePath !== null) {
33784
33705
  if ((0, node_fs.existsSync)(worktree.worktreePath)) return yield* failGitWorkflow(operation, "Cannot force delete: the worktree path still exists on disk. Use a regular delete instead.");
@@ -34552,6 +34473,16 @@ const makeOrchestrationHandlers = (ctx) => {
34552
34473
  message: "Failed to load full thread diff",
34553
34474
  cause
34554
34475
  }))), { "rpc.aggregate": "orchestration" }),
34476
+ [require_collectUint8StreamText.ORCHESTRATION_WS_METHODS.searchThreadMessages]: (input) => observeRpcEffect(require_collectUint8StreamText.ORCHESTRATION_WS_METHODS.searchThreadMessages, projectionSnapshotQuery.searchThreadMessages({
34477
+ ...input,
34478
+ limit: (0, effect_Number.clamp)(input.limit, {
34479
+ maximum: 50,
34480
+ minimum: 1
34481
+ })
34482
+ }).pipe(effect.Effect.mapError((cause) => new require_collectUint8StreamText.OrchestrationGetSnapshotError({
34483
+ message: "Failed to search thread messages",
34484
+ cause
34485
+ }))), { "rpc.aggregate": "orchestration" }),
34555
34486
  [require_collectUint8StreamText.ORCHESTRATION_WS_METHODS.replayEvents]: (input) => observeRpcEffect(require_collectUint8StreamText.ORCHESTRATION_WS_METHODS.replayEvents, effect.Stream.runCollect(orchestrationEngine.readEvents((0, effect_Number.clamp)(input.fromSequenceExclusive, {
34556
34487
  maximum: Number.MAX_SAFE_INTEGER,
34557
34488
  minimum: 0
@@ -34611,7 +34542,22 @@ const makeOrchestrationHandlers = (ctx) => {
34611
34542
  threadId: input.threadId,
34612
34543
  position: input.position,
34613
34544
  changedAt: (/* @__PURE__ */ new Date()).toISOString()
34614
- }, "threads.setManualPosition").pipe(effect.Effect.as({}))), { "rpc.aggregate": "orchestration" })
34545
+ }, "threads.setManualPosition").pipe(effect.Effect.as({}))), { "rpc.aggregate": "orchestration" }),
34546
+ [require_collectUint8StreamText.WS_METHODS.searchThreadMessages]: (input) => observeRpcEffect(require_collectUint8StreamText.WS_METHODS.searchThreadMessages, ownerEffect(require_collectUint8StreamText.WS_METHODS.searchThreadMessages, effect.Effect.gen(function* () {
34547
+ const query = input.query.trim();
34548
+ if (query.length === 0) return { results: [] };
34549
+ return { results: yield* projectionSnapshotQuery.searchThreadMessages({
34550
+ query,
34551
+ ...input.projectId ? { projectId: input.projectId } : {},
34552
+ limit: (0, effect_Number.clamp)(input.limit ?? 20, {
34553
+ maximum: 50,
34554
+ minimum: 1
34555
+ })
34556
+ }) };
34557
+ }).pipe(effect.Effect.mapError(() => new require_collectUint8StreamText.AuthRpcError({
34558
+ message: "Failed to search thread messages.",
34559
+ status: 403
34560
+ })))), { "rpc.aggregate": "orchestration" })
34615
34561
  });
34616
34562
  };
34617
34563
  //#endregion
@@ -34893,7 +34839,7 @@ const makeSourceControlHandlers = (ctx) => {
34893
34839
  })), { "rpc.aggregate": "source-control" }),
34894
34840
  [require_collectUint8StreamText.WS_METHODS.sourceControlListIssueLabels]: ({ cwd }) => observeRpcEffect(require_collectUint8StreamText.WS_METHODS.sourceControlListIssueLabels, ownerEffect(require_collectUint8StreamText.WS_METHODS.sourceControlListIssueLabels, sourceControlRegistry.resolve({ cwd }).pipe(effect.Effect.flatMap((provider) => provider.listLabels({ cwd })))), { "rpc.aggregate": "source-control" }),
34895
34841
  [require_collectUint8StreamText.WS_METHODS.sourceControlListIssueAssignees]: ({ cwd }) => observeRpcEffect(require_collectUint8StreamText.WS_METHODS.sourceControlListIssueAssignees, ownerEffect(require_collectUint8StreamText.WS_METHODS.sourceControlListIssueAssignees, sourceControlRegistry.resolve({ cwd }).pipe(effect.Effect.flatMap((provider) => provider.listAssignees({ cwd })))), { "rpc.aggregate": "source-control" }),
34896
- [require_collectUint8StreamText.WS_METHODS.sourceControlListWorkflowRuns]: ({ cwd, pullRequestNumber, commitSha, limit }) => observeRpcEffect(require_collectUint8StreamText.WS_METHODS.sourceControlListWorkflowRuns, ownerEffect(require_collectUint8StreamText.WS_METHODS.sourceControlListWorkflowRuns, callSourceControlWorkflowMethod({
34842
+ [require_collectUint8StreamText.WS_METHODS.sourceControlListWorkflowRuns]: ({ cwd, pullRequestNumber, commitSha, branch, limit }) => observeRpcEffect(require_collectUint8StreamText.WS_METHODS.sourceControlListWorkflowRuns, ownerEffect(require_collectUint8StreamText.WS_METHODS.sourceControlListWorkflowRuns, callSourceControlWorkflowMethod({
34897
34843
  cwd,
34898
34844
  operation: "listWorkflowRuns",
34899
34845
  invoke: (provider) => {
@@ -34902,6 +34848,7 @@ const makeSourceControlHandlers = (ctx) => {
34902
34848
  cwd,
34903
34849
  ...pullRequestNumber !== void 0 ? { pullRequestNumber } : {},
34904
34850
  ...commitSha !== void 0 ? { commitSha } : {},
34851
+ ...branch !== void 0 ? { branch } : {},
34905
34852
  ...limit !== void 0 ? { limit } : {}
34906
34853
  });
34907
34854
  }
@@ -35668,7 +35615,7 @@ const TelemetryEnvConfig = effect.Config.all({
35668
35615
  maxBufferedEvents: effect.Config.number("RYCO_TELEMETRY_MAX_BUFFERED_EVENTS").pipe(effect.Config.withDefault(1e3))
35669
35616
  });
35670
35617
  const makeAnalyticsService = effect.Effect.gen(function* () {
35671
- const telemetryConfig = yield* TelemetryEnvConfig.asEffect();
35618
+ const telemetryConfig = yield* TelemetryEnvConfig;
35672
35619
  const httpClient = yield* effect_unstable_http.HttpClient.HttpClient;
35673
35620
  const serverConfig = yield* require_Metrics.ServerConfig;
35674
35621
  const identifier = yield* getTelemetryIdentifier;
@@ -50605,8 +50552,20 @@ const WorkspaceRootLookupInput = effect.Schema.Struct({ workspaceRoot: effect.Sc
50605
50552
  const ProjectIdLookupInput = effect.Schema.Struct({ projectId: require_collectUint8StreamText.ProjectId });
50606
50553
  const ThreadIdLookupInput = effect.Schema.Struct({ threadId: require_collectUint8StreamText.ThreadId });
50607
50554
  const WorktreeIdLookupInput = effect.Schema.Struct({ worktreeId: require_collectUint8StreamText.WorktreeId });
50555
+ const ThreadMessageSearchQueryInput = effect.Schema.Struct({
50556
+ likePattern: effect.Schema.String,
50557
+ projectId: effect.Schema.NullOr(require_collectUint8StreamText.ProjectId),
50558
+ limit: require_collectUint8StreamText.NonNegativeInt
50559
+ });
50608
50560
  const ProjectionProjectLookupRowSchema = ProjectionProjectDbRowSchema;
50609
50561
  const ProjectionThreadIdLookupRowSchema = effect.Schema.Struct({ threadId: require_collectUint8StreamText.ThreadId });
50562
+ const ProjectionThreadMessageSearchRowSchema = effect.Schema.Struct({
50563
+ threadId: require_collectUint8StreamText.ThreadId,
50564
+ messageId: require_collectUint8StreamText.MessageId,
50565
+ text: effect.Schema.String,
50566
+ createdAt: require_collectUint8StreamText.IsoDateTime,
50567
+ updatedAt: require_collectUint8StreamText.IsoDateTime
50568
+ });
50610
50569
  const ProjectionThreadCheckpointContextThreadRowSchema = effect.Schema.Struct({
50611
50570
  threadId: require_collectUint8StreamText.ThreadId,
50612
50571
  projectId: require_collectUint8StreamText.ProjectId,
@@ -50638,6 +50597,20 @@ function computeSnapshotSequence(stateRows) {
50638
50597
  }
50639
50598
  return Number.isFinite(minSequence) ? minSequence : 0;
50640
50599
  }
50600
+ function escapeSqlLikePattern(value) {
50601
+ return value.replace(/[\\%_]/g, (match) => `\\${match}`);
50602
+ }
50603
+ function buildMessageSearchSnippet(input) {
50604
+ const maxLength = input.maxLength ?? 180;
50605
+ const normalizedQuery = input.query.trim().toLowerCase();
50606
+ const normalizedText = input.text.toLowerCase();
50607
+ const matchIndex = normalizedQuery.length > 0 ? normalizedText.indexOf(normalizedQuery) : -1;
50608
+ const contextLength = Math.floor(maxLength / 2);
50609
+ const start = matchIndex <= contextLength ? 0 : Math.max(0, matchIndex - Math.floor(contextLength / 2));
50610
+ const end = Math.min(input.text.length, start + maxLength);
50611
+ const snippet = input.text.slice(start, end).replace(/\s+/g, " ").trim();
50612
+ return `${start > 0 ? "..." : ""}${snippet}${end < input.text.length ? "..." : ""}`;
50613
+ }
50641
50614
  function mapLatestTurn(row) {
50642
50615
  return {
50643
50616
  turnId: row.turnId,
@@ -51107,6 +51080,30 @@ const makeProjectionSnapshotQuery = effect.Effect.gen(function* () {
51107
51080
  FROM projection_thread_messages
51108
51081
  WHERE thread_id = ${threadId}
51109
51082
  ORDER BY created_at ASC, message_id ASC
51083
+ `
51084
+ });
51085
+ const searchThreadMessageRows = effect_unstable_sql_SqlSchema.findAll({
51086
+ Request: ThreadMessageSearchQueryInput,
51087
+ Result: ProjectionThreadMessageSearchRowSchema,
51088
+ execute: ({ likePattern, projectId, limit }) => sql`
51089
+ SELECT
51090
+ messages.thread_id AS "threadId",
51091
+ messages.message_id AS "messageId",
51092
+ messages.text,
51093
+ messages.created_at AS "createdAt",
51094
+ messages.updated_at AS "updatedAt"
51095
+ FROM projection_thread_messages AS messages
51096
+ INNER JOIN projection_threads AS threads
51097
+ ON threads.thread_id = messages.thread_id
51098
+ INNER JOIN projection_projects AS projects
51099
+ ON projects.project_id = threads.project_id
51100
+ WHERE threads.deleted_at IS NULL
51101
+ AND projects.deleted_at IS NULL
51102
+ AND messages.role IN ('user', 'assistant')
51103
+ AND (${projectId} IS NULL OR threads.project_id = ${projectId})
51104
+ AND lower(messages.text) LIKE ${likePattern} ESCAPE '\\'
51105
+ ORDER BY messages.created_at DESC, messages.message_id DESC
51106
+ LIMIT ${limit}
51110
51107
  `
51111
51108
  });
51112
51109
  const listThreadProposedPlanRowsByThread = effect_unstable_sql_SqlSchema.findAll({
@@ -51695,6 +51692,24 @@ const makeProjectionSnapshotQuery = effect.Effect.gen(function* () {
51695
51692
  };
51696
51693
  return effect.Option.some(yield* decodeThread(thread).pipe(effect.Effect.mapError(toPersistenceDecodeError("ProjectionSnapshotQuery.getThreadDetailById:decodeThread"))));
51697
51694
  });
51695
+ const searchThreadMessages = (input) => {
51696
+ const query = input.query.trim();
51697
+ if (query.length === 0) return effect.Effect.succeed([]);
51698
+ const limit = Math.min(Math.max(1, input.limit), 50);
51699
+ return searchThreadMessageRows({
51700
+ likePattern: `%${escapeSqlLikePattern(query.toLowerCase())}%`,
51701
+ projectId: input.projectId ?? null,
51702
+ limit
51703
+ }).pipe(effect.Effect.mapError(toPersistenceSqlOrDecodeError("ProjectionSnapshotQuery.searchThreadMessages:query", "ProjectionSnapshotQuery.searchThreadMessages:decodeRows")), effect.Effect.map((rows) => rows.map((row) => ({
51704
+ threadId: row.threadId,
51705
+ messageId: row.messageId,
51706
+ snippet: buildMessageSearchSnippet({
51707
+ text: row.text,
51708
+ query
51709
+ }),
51710
+ timestamp: row.createdAt
51711
+ }))));
51712
+ };
51698
51713
  return {
51699
51714
  getCommandReadModel,
51700
51715
  getSnapshot,
@@ -51707,7 +51722,8 @@ const makeProjectionSnapshotQuery = effect.Effect.gen(function* () {
51707
51722
  getThreadCheckpointContext,
51708
51723
  getThreadShellById,
51709
51724
  getWorktreeShellById,
51710
- getThreadDetailById
51725
+ getThreadDetailById,
51726
+ searchThreadMessages
51711
51727
  };
51712
51728
  });
51713
51729
  const OrchestrationProjectionSnapshotQueryLive = effect.Layer.effect(ProjectionSnapshotQuery, makeProjectionSnapshotQuery);