zl-code 0.0.36 → 0.0.38

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 (82) hide show
  1. package/dist/bin.mjs +426 -217
  2. package/dist/client/assets/{DiffPanel-5LyLOFND.js → DiffPanel-CbA0lyMN.js} +1 -1
  3. package/dist/client/assets/{FilePreviewPanel-sJEFZtPA.js → FilePreviewPanel-WxaLm2x8.js} +1 -1
  4. package/dist/client/assets/{PreviewPanel-DtFvdFzm.js → PreviewPanel-DrGv_2bj.js} +1 -1
  5. package/dist/client/assets/{angular-html-D1KZBnnN.js → angular-html--kuq-o35.js} +1 -1
  6. package/dist/client/assets/{angular-ts-DIPnxMgp.js → angular-ts-DUbIyxZV.js} +1 -1
  7. package/dist/client/assets/{apl-D7WuE84x.js → apl-DzbLF_cn.js} +1 -1
  8. package/dist/client/assets/{astro-B6kKguic.js → astro-DrzAM2k-.js} +1 -1
  9. package/dist/client/assets/{blade-BEpkeL_G.js → blade-D9DGF9jY.js} +1 -1
  10. package/dist/client/assets/{c-CH0EmX9V.js → c-DtElhf81.js} +1 -1
  11. package/dist/client/assets/{cobol-CHMuxv_r.js → cobol-BAnKTjoO.js} +1 -1
  12. package/dist/client/assets/{coffee-DDIp0oKC.js → coffee-CyOIDae4.js} +1 -1
  13. package/dist/client/assets/{cpp-UOJgRFuy.js → cpp-CR00Ib9Y.js} +1 -1
  14. package/dist/client/assets/{crystal-BUEhok04.js → crystal-CoF_vNjZ.js} +1 -1
  15. package/dist/client/assets/{css-B3_uOICV.js → css-DazqE3qB.js} +1 -1
  16. package/dist/client/assets/{edge--k_WlrcU.js → edge-Bt-EnWL-.js} +1 -1
  17. package/dist/client/assets/{elixir-BxbH5Tj6.js → elixir-DIKOe5-1.js} +1 -1
  18. package/dist/client/assets/{elm-BRFrpQvy.js → elm-CkRKcEJM.js} +1 -1
  19. package/dist/client/assets/{erb-AgxNm2gl.js → erb-D514IKEE.js} +1 -1
  20. package/dist/client/assets/{fileCommentAnnotations-CoUjMkx7.js → fileCommentAnnotations-C-6SKlA7.js} +1 -1
  21. package/dist/client/assets/{git-rebase-BN8L7thV.js → git-rebase-Cs9kM3B7.js} +1 -1
  22. package/dist/client/assets/{glimmer-js-BQqnIYtP.js → glimmer-js-Bl_zZ8X9.js} +1 -1
  23. package/dist/client/assets/{glimmer-ts-Dk520J05.js → glimmer-ts-_5GggQ4P.js} +1 -1
  24. package/dist/client/assets/{glsl-CXBvGEvV.js → glsl-DdP2PQ1H.js} +1 -1
  25. package/dist/client/assets/{graphql-DPTfyPU-.js → graphql-DdF4ifvq.js} +1 -1
  26. package/dist/client/assets/{hack-D2kvgcM6.js → hack-DwSmrwDZ.js} +1 -1
  27. package/dist/client/assets/{haml-D3Q8UbZb.js → haml-ZtgHlG5D.js} +1 -1
  28. package/dist/client/assets/{handlebars-FgxJXviC.js → handlebars-0Lpe5rZk.js} +1 -1
  29. package/dist/client/assets/{html-DFEF_FEi.js → html-CP8XOrbN.js} +1 -1
  30. package/dist/client/assets/{html-derivative-Bt1wp6ie.js → html-derivative-aLlGhBf4.js} +1 -1
  31. package/dist/client/assets/{http-ekKPViga.js → http-B3BQ69pa.js} +1 -1
  32. package/dist/client/assets/{hurl-BsUGZ_mM.js → hurl-DjaUEaUU.js} +1 -1
  33. package/dist/client/assets/{index-DUxSKJ9a.js → index-BB28ehNp.js} +175 -175
  34. package/dist/client/assets/{java-D75ZTRg6.js → java-PXetgjRd.js} +1 -1
  35. package/dist/client/assets/{javascript-BuxSmzzN.js → javascript-Bhkbc55q.js} +1 -1
  36. package/dist/client/assets/{jinja-CAlCLQ1X.js → jinja-DFp2is1d.js} +1 -1
  37. package/dist/client/assets/{jison-BoIMj6B8.js → jison-MAddt6xG.js} +1 -1
  38. package/dist/client/assets/{json-Drckalib.js → json-DASsYb7V.js} +1 -1
  39. package/dist/client/assets/{jsx-BVF760C2.js → jsx-CQTouUQ0.js} +1 -1
  40. package/dist/client/assets/{julia-3VG3a9E4.js → julia-DEggXQFO.js} +1 -1
  41. package/dist/client/assets/{just-CX2Ny1jW.js → just-CyIgH7GK.js} +1 -1
  42. package/dist/client/assets/{latex-BNT_2sh5.js → latex-DdY5K55G.js} +1 -1
  43. package/dist/client/assets/{liquid-CxtqUzyY.js → liquid-DQpFOQB4.js} +1 -1
  44. package/dist/client/assets/{lua-DGNqbIcQ.js → lua-Dbjg_gkj.js} +1 -1
  45. package/dist/client/assets/{marko-HNBW4Mse.js → marko-rEmiqy9K.js} +1 -1
  46. package/dist/client/assets/{mdc-B6akcKLW.js → mdc-igAX2Vzn.js} +1 -1
  47. package/dist/client/assets/{nginx-CuP3aFdJ.js → nginx-BH5fQobH.js} +1 -1
  48. package/dist/client/assets/{nim-C6BMxXAP.js → nim-BkclW6ZU.js} +1 -1
  49. package/dist/client/assets/{perl-CtiHANeY.js → perl-7xcEzAlE.js} +1 -1
  50. package/dist/client/assets/{php-B4KCsEWH.js → php-FUdj54DG.js} +1 -1
  51. package/dist/client/assets/{pug-BwgIZ7xE.js → pug-Cp8yxAtr.js} +1 -1
  52. package/dist/client/assets/{qml-DF5FEBGh.js → qml-CBX5kxc1.js} +1 -1
  53. package/dist/client/assets/{r-HmRal5qZ.js → r-CVOwi-4K.js} +1 -1
  54. package/dist/client/assets/{razor-0LTlmqZT.js → razor-BQRDvGH-.js} +1 -1
  55. package/dist/client/assets/{regexp-FeNrnMU6.js → regexp-DJbgY_K9.js} +1 -1
  56. package/dist/client/assets/{rst-CG4jcKP2.js → rst-DLmFc6sH.js} +1 -1
  57. package/dist/client/assets/{ruby-Ctdvczn7.js → ruby-CP0U86cQ.js} +1 -1
  58. package/dist/client/assets/{sas-CA6_z8ry.js → sas-Cc8RY9VN.js} +1 -1
  59. package/dist/client/assets/{scss-C6-ZJc1r.js → scss-CO4b1KRX.js} +1 -1
  60. package/dist/client/assets/{shellscript-DxWs5MoN.js → shellscript-DyTmpLeX.js} +1 -1
  61. package/dist/client/assets/{shellsession-CtYHskv1.js → shellsession-gpwvxB43.js} +1 -1
  62. package/dist/client/assets/{soy-BvZWelr_.js → soy-CkEJJ1Q0.js} +1 -1
  63. package/dist/client/assets/{sql-BEnXuxkV.js → sql-DJWiIAQs.js} +1 -1
  64. package/dist/client/assets/{stata-D_JBgbHA.js → stata-CKPpU4ZN.js} +1 -1
  65. package/dist/client/assets/{surrealql-CQ5s0XlW.js → surrealql-en8VJu5c.js} +1 -1
  66. package/dist/client/assets/{svelte-DuY5Of5i.js → svelte-Bjl-dlZG.js} +1 -1
  67. package/dist/client/assets/{templ-D2ckgcVx.js → templ-CDc8mKLN.js} +1 -1
  68. package/dist/client/assets/{tex-CfsUxQ2d.js → tex-CtoFuVjE.js} +1 -1
  69. package/dist/client/assets/textarea-B6w5I_Sb.js +44 -0
  70. package/dist/client/assets/{ts-tags-euxxwUKs.js → ts-tags-IQlQNdl1.js} +1 -1
  71. package/dist/client/assets/{tsx-Tsh6OPxm.js → tsx-DDnPQ-xF.js} +1 -1
  72. package/dist/client/assets/{twig-1U-_3Mg0.js → twig-DFaAuo8e.js} +1 -1
  73. package/dist/client/assets/{typescript-OnxEKtXO.js → typescript-BI4vm52r.js} +1 -1
  74. package/dist/client/assets/{vue-N5PdcfLG.js → vue-7mPt8Le1.js} +1 -1
  75. package/dist/client/assets/{vue-html-BVnuZOLu.js → vue-html-CH2-iiEN.js} +1 -1
  76. package/dist/client/assets/{vue-vine-Bzk5QIOP.js → vue-vine-CseOsLcn.js} +1 -1
  77. package/dist/client/assets/{xml-hT3FPsLc.js → xml-CCkyUORJ.js} +1 -1
  78. package/dist/client/assets/{xsl-Eyu-GzyE.js → xsl-D3bmv3KI.js} +1 -1
  79. package/dist/client/assets/{yaml-C0_JxXni.js → yaml-CkMjxmpc.js} +1 -1
  80. package/dist/client/index.html +3 -3
  81. package/package.json +1 -1
  82. package/dist/client/assets/textarea-C0Fui5jj.js +0 -44
package/dist/bin.mjs CHANGED
@@ -134,7 +134,7 @@ const closeServer = (server) => {
134
134
  * NetService - Service tag for startup networking helpers.
135
135
  */
136
136
  var NetService = class extends Context.Service()("@zl-tools/shared/Net/NetService") {};
137
- const make$81 = () => {
137
+ const make$82 = () => {
138
138
  /**
139
139
  * Returns true when a TCP server can bind to {host, port}.
140
140
  * `EADDRNOTAVAIL` is treated as available so IPv6-absent hosts don't fail
@@ -243,10 +243,10 @@ const make$81 = () => {
243
243
  })
244
244
  };
245
245
  };
246
- const layer$77 = Layer.sync(NetService, make$81);
246
+ const layer$78 = Layer.sync(NetService, make$82);
247
247
  //#endregion
248
248
  //#region package.json
249
- var version = "0.0.36";
249
+ var version = "0.0.38";
250
250
  //#endregion
251
251
  //#region ../../packages/contracts/src/baseSchemas.ts
252
252
  const TrimmedString = Schema$1.String.pipe(Schema$1.decodeTo(Schema$1.String, SchemaTransformation.transformOrFail({
@@ -639,6 +639,10 @@ const ExecutionEnvironmentCapabilities = Schema$1.Struct({
639
639
  request (`assist.promptEnhancement.*`). Absent means the composer does
640
640
  not offer prompt improvement. */
641
641
  promptEnhancement: Schema$1.optionalKey(Schema$1.Boolean),
642
+ /** Server queues thread-title regeneration through the configured text
643
+ generation model (`assist.threadTitleRegeneration.*`). Absent means the
644
+ sidebar keeps manual rename as its only title action. */
645
+ threadTitleRegeneration: Schema$1.optionalKey(Schema$1.Boolean),
642
646
  /** Server publishes its opt-out npm release advisory (`serverVersion.*`).
643
647
  Absent means the WebUI must not subscribe or show an update notice. */
644
648
  serverVersionAdvisory: Schema$1.optionalKey(Schema$1.Boolean),
@@ -6618,6 +6622,7 @@ const PromptEnhancementSettings = Schema$1.Struct({
6618
6622
  model: DEFAULT_GIT_TEXT_GENERATION_MODEL
6619
6623
  })))
6620
6624
  });
6625
+ const TitleRegenerationCharactersLimit = Schema$1.Int.check(Schema$1.isGreaterThanOrEqualTo(10));
6621
6626
  /**
6622
6627
  * Agent sessions spawn builds and typechecks that can saturate every core. The
6623
6628
  * server shares those cores, and a descheduled event loop is indistinguishable
@@ -6642,6 +6647,8 @@ const ServerSettings = Schema$1.Struct({
6642
6647
  instanceId: ProviderInstanceId.make("codex"),
6643
6648
  model: DEFAULT_GIT_TEXT_GENERATION_MODEL
6644
6649
  }))),
6650
+ titleRegenerationPromptGuidelines: TrimmedString.pipe(Schema$1.withDecodingDefault(Effect.succeed(""))),
6651
+ titleRegenerationCharactersLimit: TitleRegenerationCharactersLimit.pipe(Schema$1.withDecodingDefault(Effect.succeed(40))),
6645
6652
  starterSuggestions: StarterSuggestionsSettings.pipe(Schema$1.withDecodingDefault(Effect.succeed({}))),
6646
6653
  promptEnhancement: PromptEnhancementSettings.pipe(Schema$1.withDecodingDefault(Effect.succeed({}))),
6647
6654
  providers: Schema$1.Struct({
@@ -6731,6 +6738,8 @@ const ServerSettingsPatch = Schema$1.Struct({
6731
6738
  newWorktreesStartFromOrigin: Schema$1.optionalKey(Schema$1.Boolean),
6732
6739
  addProjectBaseDirectory: Schema$1.optionalKey(TrimmedString),
6733
6740
  textGenerationModelSelection: Schema$1.optionalKey(ModelSelectionPatch),
6741
+ titleRegenerationPromptGuidelines: Schema$1.optionalKey(TrimmedString),
6742
+ titleRegenerationCharactersLimit: Schema$1.optionalKey(TitleRegenerationCharactersLimit),
6734
6743
  starterSuggestions: Schema$1.optionalKey(Schema$1.Struct({
6735
6744
  enabled: Schema$1.optionalKey(Schema$1.Boolean),
6736
6745
  modelSelection: Schema$1.optionalKey(ModelSelectionPatch)
@@ -8666,6 +8675,29 @@ var PromptEnhancementError = class extends Schema$1.TaggedErrorClass()("PromptEn
8666
8675
  }
8667
8676
  };
8668
8677
  //#endregion
8678
+ //#region ../../packages/contracts/src/threadTitleRegeneration.ts
8679
+ const ThreadTitleRegenerationQueueStatus = Schema$1.Literals(["queued", "processing"]);
8680
+ const ThreadTitleRegenerationQueueEntry = Schema$1.Struct({
8681
+ threadId: ThreadId,
8682
+ status: ThreadTitleRegenerationQueueStatus
8683
+ });
8684
+ const ThreadTitleRegenerationQueueSnapshot = Schema$1.Struct({ entries: Schema$1.Array(ThreadTitleRegenerationQueueEntry) });
8685
+ const ThreadTitleRegenerationEnqueueInput = Schema$1.Struct({ threadId: ThreadId });
8686
+ const ThreadTitleRegenerationEnqueueResult = Schema$1.Struct({
8687
+ status: Schema$1.Literals(["queued", "already-queued"]),
8688
+ queueStatus: ThreadTitleRegenerationQueueStatus,
8689
+ position: Schema$1.Int.check(Schema$1.isGreaterThanOrEqualTo(1))
8690
+ });
8691
+ var ThreadTitleRegenerationError = class extends Schema$1.TaggedErrorClass()("ThreadTitleRegenerationError", {
8692
+ threadId: ThreadId,
8693
+ reason: Schema$1.String,
8694
+ cause: Schema$1.optional(Schema$1.Defect())
8695
+ }) {
8696
+ get message() {
8697
+ return this.reason;
8698
+ }
8699
+ };
8700
+ //#endregion
8669
8701
  //#region ../../packages/contracts/src/review.ts
8670
8702
  const ReviewDiffPreviewInput = Schema$1.Struct({
8671
8703
  cwd: TrimmedNonEmptyString,
@@ -8701,6 +8733,8 @@ const WS_METHODS = {
8701
8733
  starterSuggestionsGet: "assist.starterSuggestions.get",
8702
8734
  promptEnhancementGenerate: "assist.promptEnhancement.generate",
8703
8735
  promptEnhancementCancel: "assist.promptEnhancement.cancel",
8736
+ threadTitleRegenerationGetQueue: "assist.threadTitleRegeneration.getQueue",
8737
+ threadTitleRegenerationEnqueue: "assist.threadTitleRegeneration.enqueue",
8704
8738
  projectsList: "projects.list",
8705
8739
  projectsAdd: "projects.add",
8706
8740
  projectsRemove: "projects.remove",
@@ -8828,6 +8862,16 @@ const WsStarterSuggestionsGetRpc = Rpc.make(WS_METHODS.starterSuggestionsGet, {
8828
8862
  success: StarterSuggestionsGetResult,
8829
8863
  error: Schema$1.Union([StarterSuggestionsError, EnvironmentAuthorizationError])
8830
8864
  });
8865
+ const WsThreadTitleRegenerationGetQueueRpc = Rpc.make(WS_METHODS.threadTitleRegenerationGetQueue, {
8866
+ payload: Schema$1.Struct({}),
8867
+ success: ThreadTitleRegenerationQueueSnapshot,
8868
+ error: EnvironmentAuthorizationError
8869
+ });
8870
+ const WsThreadTitleRegenerationEnqueueRpc = Rpc.make(WS_METHODS.threadTitleRegenerationEnqueue, {
8871
+ payload: ThreadTitleRegenerationEnqueueInput,
8872
+ success: ThreadTitleRegenerationEnqueueResult,
8873
+ error: Schema$1.Union([ThreadTitleRegenerationError, EnvironmentAuthorizationError])
8874
+ });
8831
8875
  const WsPromptEnhancementGenerateRpc = Rpc.make(WS_METHODS.promptEnhancementGenerate, {
8832
8876
  payload: PromptEnhancementGenerateInput,
8833
8877
  success: PromptEnhancementGenerateResult,
@@ -9313,7 +9357,7 @@ const WsSubscribeProviderUsageRpc = Rpc.make(WS_METHODS.subscribeProviderUsage,
9313
9357
  error: Schema$1.Union([ProviderUsageError, EnvironmentAuthorizationError]),
9314
9358
  stream: true
9315
9359
  });
9316
- const WsRpcGroup = RpcGroup.make(WsAnalyticsGetTurnRpc, WsAnalyticsGetThreadRpc, WsAnalyticsGetThreadDigestRpc, WsAnalyticsGetThreadTurnBadgesRpc, WsAnalyticsGetOverviewRpc, WsAnalyticsGetActivityRpc, WsStarterSuggestionsGetRpc, WsPromptEnhancementGenerateRpc, WsPromptEnhancementCancelRpc, WsServerProbeRpc, WsServerGetConfigRpc, WsServerResetProductAnalyticsIdentityRpc, WsServerRefreshProvidersRpc, WsServerUpdateProviderRpc, WsServerUpsertKeybindingRpc, WsServerRemoveKeybindingRpc, WsServerGetSettingsRpc, WsServerUpdateSettingsRpc, WsUserStateSetThreadPinnedRpc, WsUserStateMarkThreadReadRpc, WsUserStateMarkThreadUnreadRpc, WsServerDiscoverSourceControlRpc, WsServerGetTraceDiagnosticsRpc, WsServerGetProcessDiagnosticsRpc, WsServerGetProcessResourceHistoryRpc, WsServerSignalProcessRpc, WsProviderUsageGetRpc, WsProviderUsageGetConfigurationRpc, WsProviderUsageUpdateInstanceRpc, WsProviderUsageUpsertSourceRpc, WsProviderUsageDeleteSourceRpc, WsProviderUsageTestSourceRpc, WsProviderUsageRefreshRpc, WsCloudGetRelayClientStatusRpc, WsCloudInstallRelayClientRpc, WsSourceControlLookupRepositoryRpc, WsSourceControlCloneRepositoryRpc, WsSourceControlPublishRepositoryRpc, WsProjectsListEntriesRpc, WsProjectsReadFileRpc, WsProjectsSearchEntriesRpc, WsProjectsWriteFileRpc, WsShellOpenInEditorRpc, WsFilesystemBrowseRpc, WsAssetsCreateUrlRpc, WsAssetsCreateRemoteImageUrlRpc, WsSubscribeVcsStatusRpc, WsVcsPullRpc, WsVcsRefreshStatusRpc, WsGitRunStackedActionRpc, WsGitResolvePullRequestRpc, WsGitPreparePullRequestThreadRpc, WsVcsListRefsRpc, WsVcsCreateWorktreeRpc, WsVcsRemoveWorktreeRpc, WsVcsCreateRefRpc, WsVcsSwitchRefRpc, WsVcsInitRpc, WsReviewGetDiffPreviewRpc, WsTerminalOpenRpc, WsTerminalAttachRpc, WsTerminalWriteRpc, WsTerminalResizeRpc, WsTerminalClearRpc, WsTerminalRestartRpc, WsTerminalCloseRpc, WsSubscribeTerminalEventsRpc, WsSubscribeTerminalMetadataRpc, WsPreviewOpenRpc, WsPreviewNavigateRpc, WsPreviewResizeRpc, WsPreviewPresentRpc, WsPreviewRefreshRpc, WsPreviewHistoryRpc, WsPreviewHumanInputRpc, WsPreviewCloseRpc, WsPreviewListRpc, WsPreviewReportStatusRpc, WsPreviewAutomationConnectRpc, WsPreviewAutomationRespondRpc, WsPreviewAutomationFocusHostRpc, WsSubscribePreviewEventsRpc, WsSubscribePreviewFramesRpc, WsSubscribeDiscoveredLocalServersRpc, WsSubscribeServerConfigRpc, WsSubscribeServerLifecycleRpc, WsSubscribeServerVersionAdvisoryRpc, WsServerRefreshVersionAdvisoryRpc, WsSubscribeSupervisedServerUpdateRpc, WsServerStartSupervisedUpdateRpc, WsSubscribeAuthAccessRpc, WsSubscribeProviderUsageRpc, WsOrchestrationDispatchCommandRpc, WsOrchestrationGetTurnDiffRpc, WsOrchestrationGetFullThreadDiffRpc, WsOrchestrationSearchThreadMessagesRpc, WsOrchestrationReplayEventsRpc, WsOrchestrationGetArchivedShellSnapshotRpc, WsOrchestrationSubscribeShellRpc, WsOrchestrationSubscribeThreadRpc);
9360
+ const WsRpcGroup = RpcGroup.make(WsAnalyticsGetTurnRpc, WsAnalyticsGetThreadRpc, WsAnalyticsGetThreadDigestRpc, WsAnalyticsGetThreadTurnBadgesRpc, WsAnalyticsGetOverviewRpc, WsAnalyticsGetActivityRpc, WsStarterSuggestionsGetRpc, WsPromptEnhancementGenerateRpc, WsPromptEnhancementCancelRpc, WsThreadTitleRegenerationGetQueueRpc, WsThreadTitleRegenerationEnqueueRpc, WsServerProbeRpc, WsServerGetConfigRpc, WsServerResetProductAnalyticsIdentityRpc, WsServerRefreshProvidersRpc, WsServerUpdateProviderRpc, WsServerUpsertKeybindingRpc, WsServerRemoveKeybindingRpc, WsServerGetSettingsRpc, WsServerUpdateSettingsRpc, WsUserStateSetThreadPinnedRpc, WsUserStateMarkThreadReadRpc, WsUserStateMarkThreadUnreadRpc, WsServerDiscoverSourceControlRpc, WsServerGetTraceDiagnosticsRpc, WsServerGetProcessDiagnosticsRpc, WsServerGetProcessResourceHistoryRpc, WsServerSignalProcessRpc, WsProviderUsageGetRpc, WsProviderUsageGetConfigurationRpc, WsProviderUsageUpdateInstanceRpc, WsProviderUsageUpsertSourceRpc, WsProviderUsageDeleteSourceRpc, WsProviderUsageTestSourceRpc, WsProviderUsageRefreshRpc, WsCloudGetRelayClientStatusRpc, WsCloudInstallRelayClientRpc, WsSourceControlLookupRepositoryRpc, WsSourceControlCloneRepositoryRpc, WsSourceControlPublishRepositoryRpc, WsProjectsListEntriesRpc, WsProjectsReadFileRpc, WsProjectsSearchEntriesRpc, WsProjectsWriteFileRpc, WsShellOpenInEditorRpc, WsFilesystemBrowseRpc, WsAssetsCreateUrlRpc, WsAssetsCreateRemoteImageUrlRpc, WsSubscribeVcsStatusRpc, WsVcsPullRpc, WsVcsRefreshStatusRpc, WsGitRunStackedActionRpc, WsGitResolvePullRequestRpc, WsGitPreparePullRequestThreadRpc, WsVcsListRefsRpc, WsVcsCreateWorktreeRpc, WsVcsRemoveWorktreeRpc, WsVcsCreateRefRpc, WsVcsSwitchRefRpc, WsVcsInitRpc, WsReviewGetDiffPreviewRpc, WsTerminalOpenRpc, WsTerminalAttachRpc, WsTerminalWriteRpc, WsTerminalResizeRpc, WsTerminalClearRpc, WsTerminalRestartRpc, WsTerminalCloseRpc, WsSubscribeTerminalEventsRpc, WsSubscribeTerminalMetadataRpc, WsPreviewOpenRpc, WsPreviewNavigateRpc, WsPreviewResizeRpc, WsPreviewPresentRpc, WsPreviewRefreshRpc, WsPreviewHistoryRpc, WsPreviewHumanInputRpc, WsPreviewCloseRpc, WsPreviewListRpc, WsPreviewReportStatusRpc, WsPreviewAutomationConnectRpc, WsPreviewAutomationRespondRpc, WsPreviewAutomationFocusHostRpc, WsSubscribePreviewEventsRpc, WsSubscribePreviewFramesRpc, WsSubscribeDiscoveredLocalServersRpc, WsSubscribeServerConfigRpc, WsSubscribeServerLifecycleRpc, WsSubscribeServerVersionAdvisoryRpc, WsServerRefreshVersionAdvisoryRpc, WsSubscribeSupervisedServerUpdateRpc, WsServerStartSupervisedUpdateRpc, WsSubscribeAuthAccessRpc, WsSubscribeProviderUsageRpc, WsOrchestrationDispatchCommandRpc, WsOrchestrationGetTurnDiffRpc, WsOrchestrationGetFullThreadDiffRpc, WsOrchestrationSearchThreadMessagesRpc, WsOrchestrationReplayEventsRpc, WsOrchestrationGetArchivedShellSnapshotRpc, WsOrchestrationSubscribeShellRpc, WsOrchestrationSubscribeThreadRpc);
9317
9361
  //#endregion
9318
9362
  //#region ../../packages/shared/src/oauthScope.ts
9319
9363
  const OAUTH_SCOPE_TOKEN = /^[\u0021\u0023-\u005b\u005d-\u007e]+$/u;
@@ -9380,8 +9424,8 @@ var ServerConfig = class extends Context.Service()("@zl-tools/server/config/Serv
9380
9424
  /** @deprecated Import and use `layerTest` from this module. */
9381
9425
  static layerTest = (cwd, baseDirOrPrefix) => layerTest$2(cwd, baseDirOrPrefix);
9382
9426
  };
9383
- const make$80 = (config) => ServerConfig.of(config);
9384
- const layer$76 = (config) => Layer.succeed(ServerConfig, make$80(config));
9427
+ const make$81 = (config) => ServerConfig.of(config);
9428
+ const layer$77 = (config) => Layer.succeed(ServerConfig, make$81(config));
9385
9429
  const deriveServerPaths = Effect.fn(function* (baseDir, devUrl) {
9386
9430
  const { join } = yield* Path.Path;
9387
9431
  const stateDir = join(baseDir, devUrl !== void 0 ? "dev" : "userdata");
@@ -10519,7 +10563,7 @@ const issueHeadlessServeAccessInfo = Effect.fn("issueHeadlessServeAccessInfo")(f
10519
10563
  //#endregion
10520
10564
  //#region src/auth/EnvironmentAuthPolicy.ts
10521
10565
  var EnvironmentAuthPolicy = class extends Context.Service()("@zl-tools/server/auth/EnvironmentAuthPolicy") {};
10522
- const make$79 = Effect.gen(function* () {
10566
+ const make$80 = Effect.gen(function* () {
10523
10567
  const config = yield* ServerConfig;
10524
10568
  const publicUrl = yield* Config.url("ZL_CODE_PUBLIC_URL").pipe(Config.option);
10525
10569
  const isRemoteReachable = Option.isSome(publicUrl) || isWildcardHost(config.host) || !isLoopbackHost(config.host);
@@ -10539,7 +10583,7 @@ const make$79 = Effect.gen(function* () {
10539
10583
  };
10540
10584
  return EnvironmentAuthPolicy.of({ getDescriptor: () => Effect.succeed(descriptor).pipe(Effect.withSpan("EnvironmentAuthPolicy.getDescriptor")) });
10541
10585
  });
10542
- const layer$75 = Layer.effect(EnvironmentAuthPolicy, make$79);
10586
+ const layer$76 = Layer.effect(EnvironmentAuthPolicy, make$80);
10543
10587
  //#endregion
10544
10588
  //#region src/persistence/Errors.ts
10545
10589
  function summarizeSchemaIssue(issue) {
@@ -10669,7 +10713,7 @@ function toPersistenceSqlOrDecodeError$6(sqlOperation, decodeOperation, correlat
10669
10713
  cause
10670
10714
  });
10671
10715
  }
10672
- const make$78 = Effect.gen(function* () {
10716
+ const make$79 = Effect.gen(function* () {
10673
10717
  const sql = yield* SqlClient.SqlClient;
10674
10718
  const createPairingLinkRow = SqlSchema.void({
10675
10719
  Request: CreateAuthPairingLinkInput,
@@ -10804,7 +10848,7 @@ const make$78 = Effect.gen(function* () {
10804
10848
  getByCredential
10805
10849
  };
10806
10850
  });
10807
- const layer$74 = Layer.effect(AuthPairingLinkRepository, make$78);
10851
+ const layer$75 = Layer.effect(AuthPairingLinkRepository, make$79);
10808
10852
  //#endregion
10809
10853
  //#region src/auth/PairingGrantStore.ts
10810
10854
  var UnknownBootstrapCredentialError = class extends Schema$1.TaggedErrorClass()("UnknownBootstrapCredentialError", {}) {
@@ -10898,7 +10942,7 @@ const DESKTOP_BOOTSTRAP_TTL_HOURS = Duration.hours(24);
10898
10942
  const PAIRING_TOKEN_ALPHABET = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
10899
10943
  const PAIRING_TOKEN_LENGTH = 12;
10900
10944
  const PAIRING_TOKEN_REJECTION_LIMIT = Math.floor(256 / 32) * 32;
10901
- const make$77 = Effect.gen(function* () {
10945
+ const make$78 = Effect.gen(function* () {
10902
10946
  const crypto = yield* Crypto.Crypto;
10903
10947
  const config = yield* ServerConfig;
10904
10948
  const pairingLinks = yield* AuthPairingLinkRepository;
@@ -11095,7 +11139,7 @@ const make$77 = Effect.gen(function* () {
11095
11139
  consume
11096
11140
  });
11097
11141
  });
11098
- const layer$73 = Layer.effect(PairingGrantStore, make$77).pipe(Layer.provideMerge(layer$74));
11142
+ const layer$74 = Layer.effect(PairingGrantStore, make$78).pipe(Layer.provideMerge(layer$75));
11099
11143
  //#endregion
11100
11144
  //#region src/auth/ServerSecretStore.ts
11101
11145
  const secretStoreErrorContext = {
@@ -11162,7 +11206,7 @@ const isSecretStoreError = Schema$1.is(SecretStoreError);
11162
11206
  const isPlatformError = (value) => Predicate.isTagged(value, "PlatformError");
11163
11207
  const isSecretAlreadyExistsError = (error) => "cause" in error && isPlatformError(error.cause) && error.cause.reason._tag === "AlreadyExists";
11164
11208
  var ServerSecretStore = class extends Context.Service()("@zl-tools/server/auth/ServerSecretStore") {};
11165
- const make$76 = Effect.gen(function* () {
11209
+ const make$77 = Effect.gen(function* () {
11166
11210
  const crypto = yield* Crypto.Crypto;
11167
11211
  const fileSystem = yield* FileSystem.FileSystem;
11168
11212
  const path = yield* Path.Path;
@@ -11232,7 +11276,7 @@ const make$76 = Effect.gen(function* () {
11232
11276
  remove
11233
11277
  });
11234
11278
  });
11235
- const layer$72 = Layer.effect(ServerSecretStore, make$76);
11279
+ const layer$73 = Layer.effect(ServerSecretStore, make$77);
11236
11280
  //#endregion
11237
11281
  //#region src/persistence/AuthSessions.ts
11238
11282
  const AuthSessionClientMetadataRecord = Schema$1.Struct({
@@ -11344,7 +11388,7 @@ function toPersistenceSqlOrDecodeError$5(sqlOperation, decodeOperation, correlat
11344
11388
  cause
11345
11389
  });
11346
11390
  }
11347
- const make$75 = Effect.gen(function* () {
11391
+ const make$76 = Effect.gen(function* () {
11348
11392
  const sql = yield* SqlClient.SqlClient;
11349
11393
  const createSessionRow = SqlSchema.void({
11350
11394
  Request: CreateAuthSessionInput,
@@ -11478,7 +11522,7 @@ const make$75 = Effect.gen(function* () {
11478
11522
  setLastConnectedAt
11479
11523
  };
11480
11524
  });
11481
- const layer$71 = Layer.effect(AuthSessionRepository, make$75);
11525
+ const layer$72 = Layer.effect(AuthSessionRepository, make$76);
11482
11526
  //#endregion
11483
11527
  //#region src/auth/SessionStore.ts
11484
11528
  var MalformedSessionTokenError = class extends Schema$1.TaggedErrorClass()("MalformedSessionTokenError", {}) {
@@ -11712,7 +11756,7 @@ function toAuthClientSession(input) {
11712
11756
  current: false
11713
11757
  };
11714
11758
  }
11715
- const make$74 = Effect.gen(function* () {
11759
+ const make$75 = Effect.gen(function* () {
11716
11760
  const crypto = yield* Crypto.Crypto;
11717
11761
  const serverConfig = yield* ServerConfig;
11718
11762
  const secretStore = yield* ServerSecretStore;
@@ -12008,7 +12052,7 @@ const make$74 = Effect.gen(function* () {
12008
12052
  markDisconnected
12009
12053
  });
12010
12054
  });
12011
- const layer$70 = Layer.effect(SessionStore, make$74).pipe(Layer.provideMerge(layer$71));
12055
+ const layer$71 = Layer.effect(SessionStore, make$75).pipe(Layer.provideMerge(layer$72));
12012
12056
  //#endregion
12013
12057
  //#region ../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/cryptoNode.js
12014
12058
  /**
@@ -17612,7 +17656,7 @@ function parseDpopToken(request) {
17612
17656
  const token = header.slice(5).trim();
17613
17657
  return token.length > 0 ? token : null;
17614
17658
  }
17615
- const make$73 = Effect.gen(function* () {
17659
+ const make$74 = Effect.gen(function* () {
17616
17660
  const policy = yield* EnvironmentAuthPolicy;
17617
17661
  const bootstrapCredentials = yield* PairingGrantStore;
17618
17662
  const sessions = yield* SessionStore;
@@ -17818,9 +17862,9 @@ const make$73 = Effect.gen(function* () {
17818
17862
  issueStartupPairingUrl
17819
17863
  });
17820
17864
  });
17821
- const layer$69 = Layer.effect(EnvironmentAuth, make$73).pipe(Layer.provideMerge(layer$73), Layer.provideMerge(layer$70), Layer.provideMerge(layer$75));
17822
- const storageLayer = Layer.mergeAll(layer$72, layerConfig);
17823
- const runtimeLayer = layer$69.pipe(Layer.provideMerge(storageLayer));
17865
+ const layer$70 = Layer.effect(EnvironmentAuth, make$74).pipe(Layer.provideMerge(layer$74), Layer.provideMerge(layer$71), Layer.provideMerge(layer$76));
17866
+ const storageLayer = Layer.mergeAll(layer$73, layerConfig);
17867
+ const runtimeLayer = layer$70.pipe(Layer.provideMerge(storageLayer));
17824
17868
  //#endregion
17825
17869
  //#region src/cliAuthFormat.ts
17826
17870
  const newline = "\n";
@@ -18999,7 +19043,7 @@ const runWithEnvironmentAuth = (flags, run, options) => Effect.gen(function* ()
18999
19043
  const minimumLogLevel = options?.quietLogs ? "Error" : config.logLevel;
19000
19044
  return yield* Effect.gen(function* () {
19001
19045
  return yield* run(yield* EnvironmentAuth);
19002
- }).pipe(Effect.provide(Layer.mergeAll(runtimeLayer).pipe(Layer.provide(layer$76(config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)))));
19046
+ }).pipe(Effect.provide(Layer.mergeAll(runtimeLayer).pipe(Layer.provide(layer$77(config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)))));
19003
19047
  });
19004
19048
  const ttlFlag$1 = Flag.string("ttl").pipe(Flag.withSchema(DurationFromString), Flag.withDescription("TTL, for example `5m`, `1h`, `30d`, or `15 minutes`."), Flag.optional);
19005
19049
  const jsonFlag$1 = Flag.boolean("json").pipe(Flag.withDescription("Emit JSON instead of human-readable output."), Flag.withDefault(false));
@@ -19509,7 +19553,7 @@ const makePairServerConfig = Effect.fn("pair.makePairServerConfig")(function* (i
19509
19553
  const { baseDir, variant, state } = input.target;
19510
19554
  const devUrl = state.devUrl !== void 0 ? new URL(state.devUrl) : void 0;
19511
19555
  const derivedPaths = yield* deriveServerPaths(baseDir, variant === "dev" ? DEV_VARIANT_PLACEHOLDER_URL : void 0);
19512
- return make$80({
19556
+ return make$81({
19513
19557
  logLevel: input.logLevel,
19514
19558
  traceMinLevel: "Info",
19515
19559
  traceTimingEnabled: false,
@@ -19591,7 +19635,7 @@ const mintPairingLink = Effect.fn("pair.mintPairingLink")(function* (input) {
19591
19635
  label: Option.getOrElse(input.label, () => "zl-code pair"),
19592
19636
  ...Option.isSome(input.ttl) ? { ttl: input.ttl.value } : {}
19593
19637
  });
19594
- }).pipe(Effect.provide(runtimeLayer.pipe(Layer.provide(layer$76(input.config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, input.config.logLevel)))));
19638
+ }).pipe(Effect.provide(runtimeLayer.pipe(Layer.provide(layer$77(input.config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, input.config.logLevel)))));
19595
19639
  });
19596
19640
  const ttlFlag = Flag.string("ttl").pipe(Flag.withSchema(DurationFromString), Flag.withDescription("Token TTL, for example `5m`, `1h`, or `15 minutes`. Defaults to 5 minutes."), Flag.optional);
19597
19641
  const labelFlag = Flag.string("label").pipe(Flag.withDescription("Optional label shown in the server's connections list."), Flag.optional);
@@ -21627,7 +21671,7 @@ function stringToBytes$3(value) {
21627
21671
  function bytesToString$4(value) {
21628
21672
  return new TextDecoder().decode(value);
21629
21673
  }
21630
- const make$72 = Effect.gen(function* () {
21674
+ const make$73 = Effect.gen(function* () {
21631
21675
  const crypto = yield* Crypto.Crypto;
21632
21676
  const httpClient = (yield* HttpClient$1.HttpClient).pipe(HttpClient$1.filterStatusOk);
21633
21677
  const secrets = yield* ServerSecretStore;
@@ -21738,7 +21782,7 @@ const make$72 = Effect.gen(function* () {
21738
21782
  clear: revokeAndClear
21739
21783
  });
21740
21784
  });
21741
- const layer$68 = Layer.effect(CloudCliTokenManager, make$72);
21785
+ const layer$69 = Layer.effect(CloudCliTokenManager, make$73);
21742
21786
  //#endregion
21743
21787
  //#region src/cloud/relayTracing.ts
21744
21788
  const relayClientTracingConfig = resolveRelayClientTracingConfig();
@@ -22014,12 +22058,12 @@ const runProcessCore = Effect.fn("processRunner.runProcessCore")(function* (spaw
22014
22058
  stderrTruncated: stderr.truncated
22015
22059
  };
22016
22060
  });
22017
- const make$71 = Effect.fn("ProcessRunner.make")(function* () {
22061
+ const make$72 = Effect.fn("ProcessRunner.make")(function* () {
22018
22062
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
22019
22063
  const run = (input) => finalizeRunProcess(runProcessCore(spawner, input), input);
22020
22064
  return ProcessRunner.of({ run });
22021
22065
  });
22022
- const layer$67 = Layer.effect(ProcessRunner, make$71());
22066
+ const layer$68 = Layer.effect(ProcessRunner, make$72());
22023
22067
  //#endregion
22024
22068
  //#region src/environment/ServerEnvironmentLabel.ts
22025
22069
  const ServerEnvironmentLabelCommandProbe = Schema$1.Literals(["macos-computer-name", "linux-pretty-hostname"]);
@@ -22253,7 +22297,7 @@ function selectSupervisedUpdateState(current, next) {
22253
22297
  if (nextUpdatedAt === currentUpdatedAt && current.operationId !== null && next.operationId === null) return current;
22254
22298
  return next;
22255
22299
  }
22256
- const make$70 = Effect.gen(function* () {
22300
+ const make$71 = Effect.gen(function* () {
22257
22301
  const initial = yield* Effect.tryPromise({
22258
22302
  try: () => requestSupervisor("status"),
22259
22303
  catch: () => void 0
@@ -22274,7 +22318,7 @@ const make$70 = Effect.gen(function* () {
22274
22318
  start
22275
22319
  });
22276
22320
  });
22277
- const layer$66 = Layer.effect(SupervisedUpdateClient, make$70);
22321
+ const layer$67 = Layer.effect(SupervisedUpdateClient, make$71);
22278
22322
  //#endregion
22279
22323
  //#region src/environment/ServerEnvironment.ts
22280
22324
  var ServerEnvironmentIdPersistenceError = class extends Schema$1.TaggedErrorClass()("ServerEnvironmentIdPersistenceError", {
@@ -22306,7 +22350,7 @@ function platformArch(architecture) {
22306
22350
  default: return "other";
22307
22351
  }
22308
22352
  }
22309
- const make$69 = Effect.gen(function* () {
22353
+ const make$70 = Effect.gen(function* () {
22310
22354
  const fileSystem = yield* FileSystem.FileSystem;
22311
22355
  const path = yield* Path.Path;
22312
22356
  const serverConfig = yield* ServerConfig;
@@ -22362,6 +22406,7 @@ const make$69 = Effect.gen(function* () {
22362
22406
  userStateProfiles: true,
22363
22407
  starterSuggestions: true,
22364
22408
  promptEnhancement: true,
22409
+ threadTitleRegeneration: true,
22365
22410
  remoteImageProxy: true,
22366
22411
  serverVersionAdvisory: true,
22367
22412
  serverVersionManualRefresh: true
@@ -22384,7 +22429,7 @@ const make$69 = Effect.gen(function* () {
22384
22429
  * state. It intentionally has no fallback Layer.succeed value: callers must
22385
22430
  * provide the external platform services and a ServerConfig.
22386
22431
  */
22387
- const layer$65 = Layer.effect(ServerEnvironment, make$69).pipe(Layer.provide(layer$67));
22432
+ const layer$66 = Layer.effect(ServerEnvironment, make$70).pipe(Layer.provide(layer$68));
22388
22433
  //#endregion
22389
22434
  //#region src/cli/cloud.ts
22390
22435
  const jsonFlag = Flag.boolean("json").pipe(Flag.withDescription("Emit JSON instead of human-readable output."), Flag.withDefault(false));
@@ -22501,7 +22546,7 @@ const disconnectCloud = Effect.fn("cloud.cli.disconnect")(function* (options) {
22501
22546
  const runCloudCommand = (flags, run, options) => Effect.gen(function* () {
22502
22547
  const config = yield* resolveCliAuthConfig(flags, yield* GlobalFlag.LogLevel);
22503
22548
  const minimumLogLevel = options?.quietLogs ? "Error" : config.logLevel;
22504
- const runtimeLayer$1 = Layer.mergeAll(layer$72, layer$68.pipe(Layer.provide(layer$72)), layerCloudflared({ baseDir: config.baseDir }), runtimeLayer, layer$65, headlessRelayClientTracingLayer).pipe(Layer.provideMerge(FetchHttpClient.layer), Layer.provideMerge(layer$76(config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)));
22549
+ const runtimeLayer$1 = Layer.mergeAll(layer$73, layer$69.pipe(Layer.provide(layer$73)), layerCloudflared({ baseDir: config.baseDir }), runtimeLayer, layer$66, headlessRelayClientTracingLayer).pipe(Layer.provideMerge(FetchHttpClient.layer), Layer.provideMerge(layer$77(config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)));
22505
22550
  return yield* run.pipe(Effect.provide(runtimeLayer$1));
22506
22551
  });
22507
22552
  const cloudLoginCommand = Command.make("login", { ...projectLocationFlags }).pipe(Command.withDescription("Authorize the ZL Cloud CLI without enabling remote access."), Command.withHandler((flags) => runCloudCommand(flags, Effect.gen(function* () {
@@ -27591,7 +27636,7 @@ const resolveRepositoryIdentityFromCacheKey = Effect.fn("RepositoryIdentityResol
27591
27636
  rootPath: cacheKey
27592
27637
  }) : null;
27593
27638
  });
27594
- const make$68 = Effect.fn("RepositoryIdentityResolver.make")(function* (options = {}) {
27639
+ const make$69 = Effect.fn("RepositoryIdentityResolver.make")(function* (options = {}) {
27595
27640
  const processRunner = yield* ProcessRunner;
27596
27641
  const repositoryIdentityCache = yield* Cache.makeWith((cacheKey) => resolveRepositoryIdentityFromCacheKey(cacheKey).pipe(Effect.provideService(ProcessRunner, processRunner)), {
27597
27642
  capacity: options.cacheCapacity ?? DEFAULT_REPOSITORY_IDENTITY_CACHE_CAPACITY,
@@ -27606,7 +27651,7 @@ const make$68 = Effect.fn("RepositoryIdentityResolver.make")(function* (options
27606
27651
  });
27607
27652
  return RepositoryIdentityResolver.of({ resolve });
27608
27653
  });
27609
- const layer$64 = Layer.effect(RepositoryIdentityResolver, make$68()).pipe(Layer.provide(layer$67));
27654
+ const layer$65 = Layer.effect(RepositoryIdentityResolver, make$69()).pipe(Layer.provide(layer$68));
27610
27655
  //#endregion
27611
27656
  //#region src/orchestration/Layers/ProjectionSnapshotQuery.ts
27612
27657
  const decodeReadModel = Schema$1.decodeUnknownEffect(OrchestrationReadModel);
@@ -29223,7 +29268,7 @@ const OrchestrationLayerLive = Layer.mergeAll(OrchestrationInfrastructureLayerLi
29223
29268
  * @module ConfigFileWatcher
29224
29269
  */
29225
29270
  var ConfigFileWatcher = class extends Context.Service()("@zl-tools/server/configFileWatcher") {};
29226
- const make$67 = Effect.fn("ConfigFileWatcher.make")(function* (watchDirectory) {
29271
+ const make$68 = Effect.fn("ConfigFileWatcher.make")(function* (watchDirectory) {
29227
29272
  const { configDir } = yield* ServerConfig;
29228
29273
  const changes = yield* PubSub.unbounded();
29229
29274
  const context = yield* Effect.context();
@@ -29248,8 +29293,8 @@ const make$67 = Effect.fn("ConfigFileWatcher.make")(function* (watchDirectory) {
29248
29293
  return ConfigFileWatcher.of({ changesFor: (fileName) => Stream.fromPubSub(changes).pipe(Stream.filter((changedPath) => changedPath === fileName), Stream.map(() => void 0)) });
29249
29294
  });
29250
29295
  const watchConfigDirectory = (path, options, listener) => NodeFS.watch(path, options, listener);
29251
- const layerWith = (watchDirectory) => Layer.effect(ConfigFileWatcher, make$67(watchDirectory));
29252
- const layer$63 = layerWith(watchConfigDirectory);
29296
+ const layerWith = (watchDirectory) => Layer.effect(ConfigFileWatcher, make$68(watchDirectory));
29297
+ const layer$64 = layerWith(watchConfigDirectory);
29253
29298
  //#endregion
29254
29299
  //#region ../../packages/shared/src/keybindings.ts
29255
29300
  const DEFAULT_KEYBINDINGS = [
@@ -29723,7 +29768,7 @@ function mergeWithDefaultKeybindings(custom) {
29723
29768
  * Keybindings - Service tag for keybinding configuration operations.
29724
29769
  */
29725
29770
  var Keybindings = class extends Context.Service()("@zl-tools/server/keybindings") {};
29726
- const make$66 = Effect.gen(function* () {
29771
+ const make$67 = Effect.gen(function* () {
29727
29772
  const { keybindingsConfigPath } = yield* ServerConfig;
29728
29773
  const configFileWatcher = yield* ConfigFileWatcher;
29729
29774
  const fs = yield* FileSystem.FileSystem;
@@ -29976,7 +30021,7 @@ const make$66 = Effect.gen(function* () {
29976
30021
  }))
29977
30022
  };
29978
30023
  });
29979
- const layer$62 = Layer.effect(Keybindings, make$66);
30024
+ const layer$63 = Layer.effect(Keybindings, make$67);
29980
30025
  //#endregion
29981
30026
  //#region src/observability/EventLoopLag.ts
29982
30027
  /**
@@ -30356,7 +30401,7 @@ const launchEditorProcess = Effect.fn("externalLauncher.launchEditorProcess")(fu
30356
30401
  cause
30357
30402
  }));
30358
30403
  });
30359
- const make$65 = Effect.gen(function* () {
30404
+ const make$66 = Effect.gen(function* () {
30360
30405
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
30361
30406
  const fileSystem = yield* FileSystem.FileSystem;
30362
30407
  const path = yield* Path.Path;
@@ -30367,7 +30412,7 @@ const make$65 = Effect.gen(function* () {
30367
30412
  launchEditor: (input) => provideCommandResolutionServices(Effect.flatMap(resolveEditorLaunch(input), (launch) => launchEditorProcess(launch).pipe(Effect.provideService(ChildProcessSpawner$1.ChildProcessSpawner, spawner))))
30368
30413
  });
30369
30414
  });
30370
- const layer$61 = Layer.effect(ExternalLauncher, make$65);
30415
+ const layer$62 = Layer.effect(ExternalLauncher, make$66);
30371
30416
  //#endregion
30372
30417
  //#region src/orchestration/Services/OrchestrationReactor.ts
30373
30418
  /**
@@ -30385,7 +30430,7 @@ var OrchestrationReactor = class extends Context.Service()("@zl-tools/server/orc
30385
30430
  //#endregion
30386
30431
  //#region src/serverLifecycleEvents.ts
30387
30432
  var ServerLifecycleEvents = class extends Context.Service()("@zl-tools/server/serverLifecycleEvents") {};
30388
- const make$64 = Effect.gen(function* () {
30433
+ const make$65 = Effect.gen(function* () {
30389
30434
  const pubsub = yield* PubSub.unbounded();
30390
30435
  const state = yield* Ref.make({
30391
30436
  sequence: 0,
@@ -30409,7 +30454,7 @@ const make$64 = Effect.gen(function* () {
30409
30454
  }
30410
30455
  };
30411
30456
  });
30412
- const layer$60 = Layer.effect(ServerLifecycleEvents, make$64);
30457
+ const layer$61 = Layer.effect(ServerLifecycleEvents, make$65);
30413
30458
  //#endregion
30414
30459
  //#region ../../packages/shared/src/preview.ts
30415
30460
  /**
@@ -30667,7 +30712,7 @@ const operationError = (operation, cause, threadId, tabId) => new PreviewBrowser
30667
30712
  ...tabId === void 0 ? {} : { tabId },
30668
30713
  cause
30669
30714
  });
30670
- const make$63 = Effect.gen(function* BrowserRuntimeMake() {
30715
+ const make$64 = Effect.gen(function* BrowserRuntimeMake() {
30671
30716
  const fileSystem = yield* FileSystem.FileSystem;
30672
30717
  const path = yield* Path.Path;
30673
30718
  const config = yield* ServerConfig;
@@ -31392,7 +31437,7 @@ const make$63 = Effect.gen(function* BrowserRuntimeMake() {
31392
31437
  events: Stream.fromPubSub(eventsPubSub)
31393
31438
  });
31394
31439
  }).pipe(Effect.withSpan("BrowserRuntime.make"));
31395
- const layer$59 = Layer.effect(BrowserRuntime, make$63);
31440
+ const layer$60 = Layer.effect(BrowserRuntime, make$64);
31396
31441
  //#endregion
31397
31442
  //#region src/preview/Manager.ts
31398
31443
  /**
@@ -31802,8 +31847,8 @@ const makeWithBrowser = Effect.fn("PreviewManager.make")(function* (browser) {
31802
31847
  subscribeEvents: PubSub.subscribe(eventsPubSub)
31803
31848
  });
31804
31849
  });
31805
- const make$62 = makeWithBrowser();
31806
- Layer.effect(PreviewManager, make$62);
31850
+ const make$63 = makeWithBrowser();
31851
+ Layer.effect(PreviewManager, make$63);
31807
31852
  const layerServerHosted$1 = Layer.effect(PreviewManager, Effect.gen(function* () {
31808
31853
  const browser = yield* BrowserRuntime;
31809
31854
  return yield* makeWithBrowser(browser);
@@ -32140,7 +32185,7 @@ const serversEqual = (left, right) => {
32140
32185
  }
32141
32186
  return true;
32142
32187
  };
32143
- const make$61 = Effect.gen(function* PortDiscoveryMake() {
32188
+ const make$62 = Effect.gen(function* PortDiscoveryMake() {
32144
32189
  const net = yield* NetService;
32145
32190
  const processRunner = yield* ProcessRunner;
32146
32191
  const hostPlatform = yield* HostProcessPlatform;
@@ -32291,7 +32336,7 @@ const make$61 = Effect.gen(function* PortDiscoveryMake() {
32291
32336
  unregisterTerminal
32292
32337
  });
32293
32338
  }).pipe(Effect.withSpan("PortDiscovery.make"));
32294
- const layer$57 = Layer.effect(PortDiscovery, make$61);
32339
+ const layer$58 = Layer.effect(PortDiscovery, make$62);
32295
32340
  //#endregion
32296
32341
  //#region src/terminal/Manager.ts
32297
32342
  /**
@@ -32969,7 +33014,7 @@ function normalizedRuntimeEnv(env) {
32969
33014
  if (entries.length === 0) return null;
32970
33015
  return Object.fromEntries(entries.toSorted(([left], [right]) => left.localeCompare(right)));
32971
33016
  }
32972
- const make$60 = Effect.fn("TerminalManager.make")(function* () {
33017
+ const make$61 = Effect.fn("TerminalManager.make")(function* () {
32973
33018
  const { terminalLogsDir } = yield* ServerConfig;
32974
33019
  const ptyAdapter = yield* PtyAdapter;
32975
33020
  const portDiscovery = yield* PortDiscovery;
@@ -33941,7 +33986,7 @@ const makeWithOptions$1 = Effect.fn("TerminalManager.makeWithOptions")(function*
33941
33986
  listSessionPids
33942
33987
  });
33943
33988
  });
33944
- const layer$56 = Layer.effect(TerminalManager, make$60()).pipe(Layer.provide(layer$67));
33989
+ const layer$57 = Layer.effect(TerminalManager, make$61()).pipe(Layer.provide(layer$68));
33945
33990
  //#endregion
33946
33991
  //#region src/serverRestartDrain.ts
33947
33992
  const RESTART_ADVISORY_WINDOW = Duration.minutes(2);
@@ -33957,7 +34002,7 @@ function isRecentRestart(state, nowMs) {
33957
34002
  if (!Number.isFinite(referenceMs)) return false;
33958
34003
  return nowMs - referenceMs <= Duration.toMillis(RESTART_ADVISORY_WINDOW);
33959
34004
  }
33960
- const make$59 = (options = {}) => Effect.gen(function* () {
34005
+ const make$60 = (options = {}) => Effect.gen(function* () {
33961
34006
  const config = yield* ServerConfig;
33962
34007
  const fileSystem = yield* FileSystem.FileSystem;
33963
34008
  const path = yield* Path.Path;
@@ -34083,7 +34128,7 @@ const make$59 = (options = {}) => Effect.gen(function* () {
34083
34128
  authorizeMutation
34084
34129
  });
34085
34130
  });
34086
- const layer$55 = Layer.effect(ServerRestartDrain, make$59());
34131
+ const layer$56 = Layer.effect(ServerRestartDrain, make$60());
34087
34132
  //#endregion
34088
34133
  //#region src/serverSettings.ts
34089
34134
  /**
@@ -34203,7 +34248,7 @@ function stripDefaultServerSettings(current, defaults) {
34203
34248
  }
34204
34249
  return Object.is(current, defaults) ? void 0 : current;
34205
34250
  }
34206
- const make$58 = Effect.gen(function* () {
34251
+ const make$59 = Effect.gen(function* () {
34207
34252
  const { settingsPath } = yield* ServerConfig;
34208
34253
  const configFileWatcher = yield* ConfigFileWatcher;
34209
34254
  const fs = yield* FileSystem.FileSystem;
@@ -34416,7 +34461,7 @@ const make$58 = Effect.gen(function* () {
34416
34461
  }
34417
34462
  };
34418
34463
  });
34419
- const layer$54 = Layer.effect(ServerSettingsService, make$58);
34464
+ const layer$55 = Layer.effect(ServerSettingsService, make$59);
34420
34465
  //#endregion
34421
34466
  //#region src/diagnostics/ProcessDiagnostics.ts
34422
34467
  const PROCESS_QUERY_TIMEOUT_MS = 1e3;
@@ -34711,7 +34756,7 @@ function assertDescendantPid(pid) {
34711
34756
  }));
34712
34757
  }));
34713
34758
  }
34714
- const make$57 = Effect.gen(function* () {
34759
+ const make$58 = Effect.gen(function* () {
34715
34760
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
34716
34761
  const read = Effect.gen(function* () {
34717
34762
  const readAt = yield* DateTime.now;
@@ -34755,7 +34800,7 @@ const make$57 = Effect.gen(function* () {
34755
34800
  signal
34756
34801
  });
34757
34802
  });
34758
- const layer$53 = Layer.effect(ProcessDiagnostics, make$57);
34803
+ const layer$54 = Layer.effect(ProcessDiagnostics, make$58);
34759
34804
  //#endregion
34760
34805
  //#region src/process/AgentProcessPriority.ts
34761
34806
  /**
@@ -35074,7 +35119,7 @@ var AnalyticsService = class AnalyticsService extends Context.Service()("@zl-too
35074
35119
  resetIdentity: Effect.succeed(true)
35075
35120
  }));
35076
35121
  };
35077
- const make$56 = Effect.gen(function* () {
35122
+ const make$57 = Effect.gen(function* () {
35078
35123
  const telemetryConfig = yield* TelemetryEnvConfig;
35079
35124
  const httpClient = yield* HttpClient$1.HttpClient;
35080
35125
  const serverConfig = yield* ServerConfig;
@@ -35181,7 +35226,7 @@ const make$56 = Effect.gen(function* () {
35181
35226
  resetIdentity
35182
35227
  });
35183
35228
  });
35184
- const layer$52 = Layer.effect(AnalyticsService, make$56);
35229
+ const layer$53 = Layer.effect(AnalyticsService, make$57);
35185
35230
  AnalyticsService.layerTest;
35186
35231
  //#endregion
35187
35232
  //#region src/provider/Services/ProviderSessionReaper.ts
@@ -35229,11 +35274,11 @@ const makeTextGenerationFromRegistry = (registry) => TextGeneration.of({
35229
35274
  generateStarterSuggestions: (input) => resolveInstance(registry, "generateStarterSuggestions", input.modelSelection.instanceId).pipe(Effect.flatMap((textGeneration) => textGeneration.generateStarterSuggestions(input))),
35230
35275
  generatePromptEnhancement: (input) => resolveInstance(registry, "generatePromptEnhancement", input.modelSelection.instanceId).pipe(Effect.flatMap((textGeneration) => textGeneration.generatePromptEnhancement(input)))
35231
35276
  });
35232
- const make$55 = Effect.gen(function* () {
35277
+ const make$56 = Effect.gen(function* () {
35233
35278
  const registry = yield* ProviderInstanceRegistry;
35234
35279
  return makeTextGenerationFromRegistry(registry);
35235
35280
  });
35236
- const layer$51 = Layer.effect(TextGeneration, make$55);
35281
+ const layer$52 = Layer.effect(TextGeneration, make$56);
35237
35282
  //#endregion
35238
35283
  //#region src/assist/StarterSuggestions.ts
35239
35284
  const RECENT_THREAD_LIMIT = 8;
@@ -35297,7 +35342,7 @@ const sanitizeGeneratedSuggestions = (suggestions) => {
35297
35342
  return unique;
35298
35343
  };
35299
35344
  var StarterSuggestions = class extends Context.Service()("@zl-tools/server/assist/StarterSuggestions") {};
35300
- const make$54 = Effect.gen(function* () {
35345
+ const make$55 = Effect.gen(function* () {
35301
35346
  const sql = yield* SqlClient.SqlClient;
35302
35347
  const projections = yield* ProjectionSnapshotQuery;
35303
35348
  const serverSettings = yield* ServerSettingsService;
@@ -35513,12 +35558,12 @@ const make$54 = Effect.gen(function* () {
35513
35558
  precompute
35514
35559
  });
35515
35560
  });
35516
- const layer$50 = Layer.effect(StarterSuggestions, make$54);
35561
+ const layer$51 = Layer.effect(StarterSuggestions, make$55);
35517
35562
  //#endregion
35518
35563
  //#region src/assist/StarterSuggestionPrecomputation.ts
35519
35564
  const isPrecomputeLifecycleEvent = (event) => event.type === "thread.resolved" || event.type === "thread.archived";
35520
35565
  var StarterSuggestionPrecomputation = class extends Context.Service()("@zl-tools/server/assist/StarterSuggestionPrecomputation") {};
35521
- const make$53 = Effect.gen(function* () {
35566
+ const make$54 = Effect.gen(function* () {
35522
35567
  const orchestrationEngine = yield* OrchestrationEngineService;
35523
35568
  const projections = yield* ProjectionSnapshotQuery;
35524
35569
  const starterSuggestions = yield* StarterSuggestions;
@@ -35558,7 +35603,7 @@ const make$53 = Effect.gen(function* () {
35558
35603
  drain: worker.drain
35559
35604
  });
35560
35605
  });
35561
- const layer$49 = Layer.effect(StarterSuggestionPrecomputation, make$53);
35606
+ const layer$50 = Layer.effect(StarterSuggestionPrecomputation, make$54);
35562
35607
  //#endregion
35563
35608
  //#region src/serverRuntimeStartup.ts
35564
35609
  var ServerRuntimeStartupError = class extends Schema$1.TaggedErrorClass()("ServerRuntimeStartupError", {
@@ -35699,7 +35744,7 @@ const maybeOpenBrowser = (target) => Effect.gen(function* () {
35699
35744
  yield* (yield* ExternalLauncher).launchBrowser(target).pipe(Effect.catch(() => Effect.logInfo("browser auto-open unavailable", { hint: `Open ${target} in your browser.` })));
35700
35745
  });
35701
35746
  const runStartupPhase = (phase, effect) => effect.pipe(Effect.annotateSpans({ "startup.phase": phase }), Effect.withSpan(`server.startup.${phase}`));
35702
- const make$52 = Effect.gen(function* () {
35747
+ const make$53 = Effect.gen(function* () {
35703
35748
  const serverConfig = yield* ServerConfig;
35704
35749
  const keybindings = yield* Keybindings;
35705
35750
  const orchestrationReactor = yield* OrchestrationReactor;
@@ -35840,7 +35885,7 @@ const make$52 = Effect.gen(function* () {
35840
35885
  enqueueCommand: commandGate.enqueueCommand
35841
35886
  };
35842
35887
  });
35843
- const layer$48 = Layer.effect(ServerRuntimeStartup, make$52);
35888
+ const layer$49 = Layer.effect(ServerRuntimeStartup, make$53);
35844
35889
  //#endregion
35845
35890
  //#region src/workspace/WorkspacePaths.ts
35846
35891
  /**
@@ -35911,7 +35956,7 @@ function expandHomePath$3(input, path) {
35911
35956
  if (input.startsWith("~/") || input.startsWith("~\\")) return path.join(NodeOS.homedir(), input.slice(2));
35912
35957
  return input;
35913
35958
  }
35914
- const make$51 = Effect.gen(function* () {
35959
+ const make$52 = Effect.gen(function* () {
35915
35960
  const fileSystem = yield* FileSystem.FileSystem;
35916
35961
  const path = yield* Path.Path;
35917
35962
  const statWorkspaceRoot = Effect.fn("WorkspacePaths.statWorkspaceRoot")(function* (workspaceRoot, normalizedWorkspaceRoot, phase) {
@@ -35968,7 +36013,7 @@ const make$51 = Effect.gen(function* () {
35968
36013
  resolveRelativePathWithinRoot
35969
36014
  });
35970
36015
  });
35971
- const layer$47 = Layer.effect(WorkspacePaths, make$51);
36016
+ const layer$48 = Layer.effect(WorkspacePaths, make$52);
35972
36017
  //#endregion
35973
36018
  //#region src/cli/project.ts
35974
36019
  const isEnvironmentHttpCommonError = Schema$1.is(EnvironmentHttpCommonError);
@@ -36074,7 +36119,7 @@ const projectCommandUuid = Crypto.Crypto.pipe(Effect.flatMap((crypto) => crypto.
36074
36119
  operation: "generateProjectCommandId",
36075
36120
  cause
36076
36121
  })));
36077
- const ProjectCliRuntimeLive = Layer.mergeAll(layer$47, OrchestrationLayerLive.pipe(Layer.provideMerge(layer$64), Layer.provideMerge(layerConfig)));
36122
+ const ProjectCliRuntimeLive = Layer.mergeAll(layer$48, OrchestrationLayerLive.pipe(Layer.provideMerge(layer$65), Layer.provideMerge(layerConfig)));
36078
36123
  const PROJECT_CLI_LIVE_SERVER_TIMEOUT = Duration.seconds(1);
36079
36124
  const withProjectCliSessionToken = (environmentAuth, run) => Effect.acquireUseRelease(environmentAuth.issueSession({
36080
36125
  scopes: AuthAdministrativeScopes,
@@ -36165,7 +36210,7 @@ const runProjectMutation = Effect.fn("runProjectMutation")(function* (flags, run
36165
36210
  });
36166
36211
  yield* Console.log(output);
36167
36212
  }));
36168
- const offlineRuntimeLayer = ProjectCliRuntimeLive.pipe(Layer.provide(layer$76(config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)));
36213
+ const offlineRuntimeLayer = ProjectCliRuntimeLive.pipe(Layer.provide(layer$77(config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)));
36169
36214
  return yield* Effect.gen(function* () {
36170
36215
  const snapshot = yield* getOfflineSnapshot();
36171
36216
  const orchestrationEngine = yield* OrchestrationEngineService;
@@ -36176,7 +36221,7 @@ const runProjectMutation = Effect.fn("runProjectMutation")(function* (flags, run
36176
36221
  });
36177
36222
  yield* Console.log(output);
36178
36223
  }).pipe(Effect.provide(offlineRuntimeLayer));
36179
- }).pipe(Effect.provide(Layer.mergeAll(runtimeLayer, layer$47).pipe(Layer.provideMerge(FetchHttpClient.layer), Layer.provide(layer$76(config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)))));
36224
+ }).pipe(Effect.provide(Layer.mergeAll(runtimeLayer, layer$48).pipe(Layer.provideMerge(FetchHttpClient.layer), Layer.provide(layer$77(config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)))));
36180
36225
  });
36181
36226
  const projectAddCommand = Command.make("add", {
36182
36227
  ...projectLocationFlags,
@@ -37059,7 +37104,7 @@ function extractIconHref(source) {
37059
37104
  return null;
37060
37105
  }
37061
37106
  const optionOnNotFound$1 = (effect) => effect.pipe(Effect.map(Option.some), Effect.catchTags({ PlatformError: (error) => error.reason._tag === "NotFound" ? Effect.succeed(Option.none()) : Effect.fail(error) }));
37062
- const make$50 = Effect.gen(function* () {
37107
+ const make$51 = Effect.gen(function* () {
37063
37108
  const fileSystem = yield* FileSystem.FileSystem;
37064
37109
  const path = yield* Path.Path;
37065
37110
  const workspacePaths = yield* WorkspacePaths;
@@ -37122,7 +37167,7 @@ const make$50 = Effect.gen(function* () {
37122
37167
  });
37123
37168
  return ProjectFaviconResolver.of({ resolvePath });
37124
37169
  });
37125
- const layer$46 = Layer.effect(ProjectFaviconResolver, make$50);
37170
+ const layer$47 = Layer.effect(ProjectFaviconResolver, make$51);
37126
37171
  //#endregion
37127
37172
  //#region src/assets/AssetAccess.ts
37128
37173
  const ASSET_ROUTE_PREFIX = "/api/assets";
@@ -37460,10 +37505,10 @@ const resolveAsset = Effect.fn("AssetAccess.resolveAsset")(function* (token, rel
37460
37505
  //#endregion
37461
37506
  //#region src/observability/BrowserTraceCollector.ts
37462
37507
  var BrowserTraceCollector = class extends Context.Service()("@zl-tools/server/observability/BrowserTraceCollector") {};
37463
- const make$49 = (sink) => BrowserTraceCollector.of({ record: (records) => Effect.sync(() => {
37508
+ const make$50 = (sink) => BrowserTraceCollector.of({ record: (records) => Effect.sync(() => {
37464
37509
  for (const record of records) sink.push(record);
37465
37510
  }) });
37466
- const layer$45 = (sink) => Layer.succeed(BrowserTraceCollector, make$49(sink));
37511
+ const layer$46 = (sink) => Layer.succeed(BrowserTraceCollector, make$50(sink));
37467
37512
  //#endregion
37468
37513
  //#region src/providerUsage/ProviderUsageMetrics.ts
37469
37514
  const METRIC_PREFIX = "ai_usage_";
@@ -37573,6 +37618,11 @@ function limitSection(value, maxChars) {
37573
37618
  if (value.length <= maxChars) return value;
37574
37619
  return `${value.slice(0, maxChars)}\n\n[truncated]`;
37575
37620
  }
37621
+ /** Keep the newest end of a bounded conversation context. */
37622
+ function limitSectionFromEnd(value, maxChars) {
37623
+ if (value.length <= maxChars) return value;
37624
+ return `[earlier context truncated]\n\n${value.slice(-maxChars)}`;
37625
+ }
37576
37626
  /** Normalise a raw commit subject to imperative-mood, ≤72 chars, no trailing period. */
37577
37627
  function sanitizeCommitSubject(raw) {
37578
37628
  const withoutTrailingPeriod = (raw.trim().split(/\r?\n/g)[0]?.trim() ?? "").replace(/[.]+$/g, "").trim();
@@ -37593,6 +37643,14 @@ function sanitizeThreadTitle(raw) {
37593
37643
  if (normalized.length <= 50) return normalized;
37594
37644
  return `${normalized.slice(0, 47).trimEnd()}...`;
37595
37645
  }
37646
+ /** Normalize a regenerated title and enforce its configured final character limit. */
37647
+ function sanitizeRegeneratedThreadTitle(raw, maxCharacters) {
37648
+ const normalized = raw.trim().split(/\r?\n/g)[0]?.trim().replace(/^['"`]+|['"`]+$/g, "").trim().replace(/\s+/g, " ");
37649
+ const title = normalized && normalized.length > 0 ? normalized : "New thread";
37650
+ const characters = Array.from(title);
37651
+ if (characters.length <= maxCharacters) return title;
37652
+ return `${characters.slice(0, Math.max(1, maxCharacters - 1)).join("").trimEnd()}…`;
37653
+ }
37596
37654
  /** CLI name to human-readable label, e.g. "codex" → "Codex CLI (`codex`)" */
37597
37655
  function cliLabel(cliName) {
37598
37656
  return `${cliName.charAt(0).toUpperCase() + cliName.slice(1)} CLI (\`${cliName}\`)`;
@@ -37741,6 +37799,20 @@ function buildBranchNamePrompt(input) {
37741
37799
  };
37742
37800
  }
37743
37801
  function buildThreadTitlePrompt(input) {
37802
+ if (input.regeneration) {
37803
+ const recentConversation = input.regeneration.recentMessages.slice(-12).map((message) => `${message.role === "user" ? "User" : "Assistant"}: ${limitSection(message.text, 1500)}`).join("\n\n");
37804
+ return {
37805
+ prompt: [
37806
+ `Your task is to generate a title for this zl-code thread id: ${input.regeneration.threadId}. Keep it short, maximum ${input.regeneration.maxCharacters} characters, and respond only with the title in the required output field.`,
37807
+ ...input.regeneration.guidelines.length > 0 ? [`Additional guidelines: ${limitSection(input.regeneration.guidelines, 4e3)}`] : [],
37808
+ "Return a JSON object with key: title.",
37809
+ "",
37810
+ "Thread context:",
37811
+ recentConversation.length > 0 ? limitSectionFromEnd(recentConversation, 8e3) : "(none)"
37812
+ ].join("\n"),
37813
+ outputSchema: Schema$1.Struct({ title: Schema$1.String })
37814
+ };
37815
+ }
37744
37816
  return {
37745
37817
  prompt: buildPromptFromMessage({
37746
37818
  instruction: "You write concise thread titles for coding conversations.",
@@ -39378,15 +39450,17 @@ const makeClaudeTextGeneration = Effect.fn("makeClaudeTextGeneration")(function*
39378
39450
  generateThreadTitle: Effect.fn("ClaudeTextGeneration.generateThreadTitle")(function* (input) {
39379
39451
  const { prompt, outputSchema } = buildThreadTitlePrompt({
39380
39452
  message: input.message,
39381
- attachments: input.attachments
39453
+ attachments: input.attachments,
39454
+ regeneration: input.regeneration
39382
39455
  });
39383
- return { title: sanitizeThreadTitle((yield* runClaudeJson({
39456
+ const generated = yield* runClaudeJson({
39384
39457
  operation: "generateThreadTitle",
39385
39458
  cwd: input.cwd,
39386
39459
  prompt,
39387
39460
  outputSchemaJson: outputSchema,
39388
39461
  modelSelection: input.modelSelection
39389
- })).title) };
39462
+ });
39463
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
39390
39464
  }),
39391
39465
  generateStarterSuggestions: Effect.fn("ClaudeTextGeneration.generateStarterSuggestions")(function* (input) {
39392
39466
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -42819,16 +42893,18 @@ const makeCodexTextGeneration = Effect.fn("makeCodexTextGeneration")(function* (
42819
42893
  const { imagePaths } = yield* materializeImageAttachments("generateThreadTitle", input.attachments);
42820
42894
  const { prompt, outputSchema } = buildThreadTitlePrompt({
42821
42895
  message: input.message,
42822
- attachments: input.attachments
42896
+ attachments: input.attachments,
42897
+ regeneration: input.regeneration
42823
42898
  });
42824
- return { title: sanitizeThreadTitle((yield* runCodexJson({
42899
+ const generated = yield* runCodexJson({
42825
42900
  operation: "generateThreadTitle",
42826
42901
  cwd: input.cwd,
42827
42902
  prompt,
42828
42903
  outputSchemaJson: outputSchema,
42829
42904
  imagePaths,
42830
42905
  modelSelection: input.modelSelection
42831
- })).title) };
42906
+ });
42907
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
42832
42908
  }),
42833
42909
  generateStarterSuggestions: Effect.fn("CodexTextGeneration.generateStarterSuggestions")(function* (input) {
42834
42910
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -59031,7 +59107,7 @@ const makeTerminationError$1 = (handle) => Effect.match(handle.exitCode, {
59031
59107
  //#endregion
59032
59108
  //#region ../../packages/effect-codex-app-server/src/client.ts
59033
59109
  var CodexAppServerClient = class extends Context.Service()("effect-codex-app-server/client/CodexAppServerClient") {};
59034
- const make$48 = Effect.fn("effect-codex-app-server/CodexAppServerClient.make")(function* (stdio, options = {}, terminationError) {
59110
+ const make$49 = Effect.fn("effect-codex-app-server/CodexAppServerClient.make")(function* (stdio, options = {}, terminationError) {
59035
59111
  const requestHandlers = /* @__PURE__ */ new Map();
59036
59112
  const notificationHandlers = /* @__PURE__ */ new Map();
59037
59113
  let unknownRequestHandler;
@@ -59098,7 +59174,7 @@ const make$48 = Effect.fn("effect-codex-app-server/CodexAppServerClient.make")(f
59098
59174
  const layerChildProcess$1 = (handle, options = {}) => Layer.effect(CodexAppServerClient, makeChildProcessClient(handle, options));
59099
59175
  const makeChildProcessClient = Effect.fn("effect-codex-app-server/CodexAppServerClient.makeChildProcessClient")(function* (handle, options) {
59100
59176
  yield* Stream.runDrain(handle.stderr).pipe(Effect.ignore, Effect.forkScoped);
59101
- return yield* make$48(makeChildStdio$1(handle), options, makeTerminationError$1(handle));
59177
+ return yield* make$49(makeChildStdio$1(handle), options, makeTerminationError$1(handle));
59102
59178
  });
59103
59179
  //#endregion
59104
59180
  //#region src/provider/Layers/CodexProvider.ts
@@ -65419,7 +65495,7 @@ const makeTerminationError = (handle) => Effect.match(handle.exitCode, {
65419
65495
  //#endregion
65420
65496
  //#region ../../packages/effect-acp/src/client.ts
65421
65497
  var AcpClient = class extends Context.Service()("effect-acp/client/AcpClient") {};
65422
- const make$47 = Effect.fn("effect-acp/AcpClient.make")(function* (stdio, options = {}, terminationError) {
65498
+ const make$48 = Effect.fn("effect-acp/AcpClient.make")(function* (stdio, options = {}, terminationError) {
65423
65499
  const coreHandlers = {};
65424
65500
  const notificationHandlers = {
65425
65501
  sessionUpdate: {
@@ -65577,7 +65653,7 @@ const make$47 = Effect.fn("effect-acp/AcpClient.make")(function* (stdio, options
65577
65653
  const layerChildProcess = (handle, options = {}) => {
65578
65654
  const stdio = makeChildStdio(handle);
65579
65655
  const terminationError = makeTerminationError(handle);
65580
- return Layer.effect(AcpClient, make$47(stdio, options, terminationError));
65656
+ return Layer.effect(AcpClient, make$48(stdio, options, terminationError));
65581
65657
  };
65582
65658
  //#endregion
65583
65659
  //#region ../../packages/shared/src/toolActivity.ts
@@ -66042,7 +66118,7 @@ function isNonInteractiveAuthMethodUnavailableError(error) {
66042
66118
  return isAcpRequestError$2(error) && error.errorMessage === "ACP agent does not advertise the required non-interactive authentication method.";
66043
66119
  }
66044
66120
  var AcpSessionRuntime = class extends Context.Service()("@zl-tools/server/provider/acp/AcpSessionRuntime") {};
66045
- const make$46 = (options) => Effect.gen(function* () {
66121
+ const make$47 = (options) => Effect.gen(function* () {
66046
66122
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
66047
66123
  const runtimeScope = yield* Scope.Scope;
66048
66124
  const eventQueue = yield* Queue.unbounded();
@@ -66355,7 +66431,7 @@ const make$46 = (options) => Effect.gen(function* () {
66355
66431
  notify: acp.raw.notify
66356
66432
  };
66357
66433
  });
66358
- const layer$44 = (options) => Layer.effect(AcpSessionRuntime, make$46(options));
66434
+ const layer$45 = (options) => Layer.effect(AcpSessionRuntime, make$47(options));
66359
66435
  function sessionConfigOptionsFromSetup(response) {
66360
66436
  return response?.configOptions ?? [];
66361
66437
  }
@@ -66723,7 +66799,7 @@ function buildCursorDiscoveredModelsFromAvailableModelsResponse(response) {
66723
66799
  }
66724
66800
  const makeCursorAcpProbeRuntime = (cursorSettings, environment) => Effect.gen(function* () {
66725
66801
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
66726
- const acpContext = yield* Layer.build(layer$44({
66802
+ const acpContext = yield* Layer.build(layer$45({
66727
66803
  spawn: {
66728
66804
  command: cursorSettings.binaryPath,
66729
66805
  args: [...cursorSettings.apiEndpoint ? ["-e", cursorSettings.apiEndpoint] : [], "acp"],
@@ -67172,7 +67248,7 @@ function buildCursorAcpSpawnInput(cursorSettings, cwd, environment) {
67172
67248
  };
67173
67249
  }
67174
67250
  const makeCursorAcpRuntime = (input) => Effect.gen(function* () {
67175
- const acpContext = yield* Layer.build(layer$44({
67251
+ const acpContext = yield* Layer.build(layer$45({
67176
67252
  ...input,
67177
67253
  spawn: buildCursorAcpSpawnInput(input.cursorSettings, input.cwd, input.environment),
67178
67254
  authMethodId: "cursor_login",
@@ -67324,15 +67400,17 @@ const makeCursorTextGeneration = Effect.fn("makeCursorTextGeneration")(function*
67324
67400
  generateThreadTitle: Effect.fn("CursorTextGeneration.generateThreadTitle")(function* (input) {
67325
67401
  const { prompt, outputSchema } = buildThreadTitlePrompt({
67326
67402
  message: input.message,
67327
- attachments: input.attachments
67403
+ attachments: input.attachments,
67404
+ regeneration: input.regeneration
67328
67405
  });
67329
- return { title: sanitizeThreadTitle((yield* runCursorJson({
67406
+ const generated = yield* runCursorJson({
67330
67407
  operation: "generateThreadTitle",
67331
67408
  cwd: input.cwd,
67332
67409
  prompt,
67333
67410
  outputSchemaJson: outputSchema,
67334
67411
  modelSelection: input.modelSelection
67335
- })).title) };
67412
+ });
67413
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
67336
67414
  }),
67337
67415
  generateStarterSuggestions: Effect.fn("CursorTextGeneration.generateStarterSuggestions")(function* (input) {
67338
67416
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -68614,7 +68692,7 @@ function resolveGrokAuthMethodId(environment) {
68614
68692
  return environment?.[GROK_API_KEY_ENV$1]?.trim() ? GROK_AUTH_METHOD_API_KEY$1 : GROK_AUTH_METHOD_CACHED_TOKEN$1;
68615
68693
  }
68616
68694
  const makeGrokAcpRuntime = (input) => Effect.gen(function* () {
68617
- const acpContext = yield* Layer.build(layer$44({
68695
+ const acpContext = yield* Layer.build(layer$45({
68618
68696
  ...input,
68619
68697
  spawn: buildGrokAcpSpawnInput(input.grokSettings, input.cwd, input.environment),
68620
68698
  authMethodId: resolveGrokAuthMethodId(input.environment),
@@ -68758,15 +68836,17 @@ const makeGrokTextGeneration = Effect.fn("makeGrokTextGeneration")(function* (gr
68758
68836
  generateThreadTitle: Effect.fn("GrokTextGeneration.generateThreadTitle")(function* (input) {
68759
68837
  const { prompt, outputSchema } = buildThreadTitlePrompt({
68760
68838
  message: input.message,
68761
- attachments: input.attachments
68839
+ attachments: input.attachments,
68840
+ regeneration: input.regeneration
68762
68841
  });
68763
- return { title: sanitizeThreadTitle((yield* runGrokJson({
68842
+ const generated = yield* runGrokJson({
68764
68843
  operation: "generateThreadTitle",
68765
68844
  cwd: input.cwd,
68766
68845
  prompt,
68767
68846
  outputSchemaJson: outputSchema,
68768
68847
  modelSelection: input.modelSelection
68769
- })).title) };
68848
+ });
68849
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
68770
68850
  }),
68771
68851
  generateStarterSuggestions: Effect.fn("GrokTextGeneration.generateStarterSuggestions")(function* (input) {
68772
68852
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -70448,7 +70528,7 @@ const makeOpenCodeRuntime = Effect.gen(function* () {
70448
70528
  };
70449
70529
  });
70450
70530
  var OpenCodeRuntime = class extends Context.Service()("@zl-tools/server/provider/opencodeRuntime") {};
70451
- const OpenCodeRuntimeLive = Layer.effect(OpenCodeRuntime, makeOpenCodeRuntime).pipe(Layer.provide(layer$77));
70531
+ const OpenCodeRuntimeLive = Layer.effect(OpenCodeRuntime, makeOpenCodeRuntime).pipe(Layer.provide(layer$78));
70452
70532
  //#endregion
70453
70533
  //#region src/textGeneration/OpenCodeTextGeneration.ts
70454
70534
  const OPENCODE_TEXT_GENERATION_IDLE_TTL = "30 seconds";
@@ -70775,16 +70855,18 @@ const makeOpenCodeTextGeneration = Effect.fn("makeOpenCodeTextGeneration")(funct
70775
70855
  generateThreadTitle: Effect.fn("OpenCodeTextGeneration.generateThreadTitle")(function* (input) {
70776
70856
  const { prompt, outputSchema } = buildThreadTitlePrompt({
70777
70857
  message: input.message,
70778
- attachments: input.attachments
70858
+ attachments: input.attachments,
70859
+ regeneration: input.regeneration
70779
70860
  });
70780
- return { title: sanitizeThreadTitle((yield* runOpenCodeJson({
70861
+ const generated = yield* runOpenCodeJson({
70781
70862
  operation: "generateThreadTitle",
70782
70863
  cwd: input.cwd,
70783
70864
  prompt,
70784
70865
  outputSchemaJson: outputSchema,
70785
70866
  modelSelection: input.modelSelection,
70786
70867
  attachments: input.attachments
70787
- })).title) };
70868
+ });
70869
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
70788
70870
  }),
70789
70871
  generateStarterSuggestions: Effect.fn("OpenCodeTextGeneration.generateStarterSuggestions")(function* (input) {
70790
70872
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -73356,7 +73438,7 @@ function sourceFromRow(row) {
73356
73438
  };
73357
73439
  }
73358
73440
  var ProviderUsageStore = class extends Context.Service()("@zl-tools/server/providerUsage/ProviderUsageStore") {};
73359
- const make$45 = Effect.gen(function* () {
73441
+ const make$46 = Effect.gen(function* () {
73360
73442
  const sql = yield* SqlClient.SqlClient;
73361
73443
  const listSnapshots = Effect.gen(function* () {
73362
73444
  const rows = yield* sql`
@@ -73492,7 +73574,7 @@ const make$45 = Effect.gen(function* () {
73492
73574
  deleteSource
73493
73575
  });
73494
73576
  });
73495
- const layer$43 = Layer.effect(ProviderUsageStore, make$45);
73577
+ const layer$44 = Layer.effect(ProviderUsageStore, make$46);
73496
73578
  //#endregion
73497
73579
  //#region src/providerUsage/scheduler.ts
73498
73580
  const MAX_EXPONENTIAL_BACKOFF_SECONDS = 1800;
@@ -73613,7 +73695,7 @@ function mergeCanonicalWindows(previous, incoming) {
73613
73695
  return Array.from(byKey.values());
73614
73696
  }
73615
73697
  var ProviderUsageService = class extends Context.Service()("@zl-tools/server/providerUsage/ProviderUsageService") {};
73616
- const make$44 = Effect.gen(function* () {
73698
+ const make$45 = Effect.gen(function* () {
73617
73699
  const store = yield* ProviderUsageStore;
73618
73700
  const serverSettings = yield* ServerSettingsService;
73619
73701
  const serverConfig = yield* ServerConfig;
@@ -74377,7 +74459,7 @@ const make$44 = Effect.gen(function* () {
74377
74459
  streamSnapshots: Stream.fromPubSub(changes)
74378
74460
  });
74379
74461
  });
74380
- const layer$42 = Layer.effect(ProviderUsageService, make$44);
74462
+ const layer$43 = Layer.effect(ProviderUsageService, make$45);
74381
74463
  //#endregion
74382
74464
  //#region src/cloud/traceRelayRequest.ts
74383
74465
  const traceRelayRequest = (effect) => effect.pipe(withRelayClientTracing);
@@ -74589,7 +74671,7 @@ const layerNode = Layer.effect(HttpResponseCompression, Effect.gen(function* ()
74589
74671
  }));
74590
74672
  const layerBun = Layer.succeed(HttpResponseCompression, { gzip: (body, options) => HttpServerResponse$1.raw(new Response(body).body.pipeThrough(new CompressionStream("gzip")), options) });
74591
74673
  /** Selects the runtime implementation the same way the HTTP server layer does. */
74592
- const layer$41 = Layer.unwrap(Effect.sync(() => typeof Bun !== "undefined" ? layerBun : layerNode));
74674
+ const layer$42 = Layer.unwrap(Effect.sync(() => typeof Bun !== "undefined" ? layerBun : layerNode));
74593
74675
  //#endregion
74594
74676
  //#region src/httpCors.ts
74595
74677
  const browserApiCorsAllowedMethods = [
@@ -76597,7 +76679,7 @@ const classifyNonZeroExit = (command, stderr) => {
76597
76679
  if (command === "gh" && (normalized.includes("could not resolve to a pullrequest") || normalized.includes("repository.pullrequest") || normalized.includes("no pull requests found for branch") || normalized.includes("pull request not found")) || command === "glab" && (normalized.includes("merge request not found") || normalized.includes("not found") || normalized.includes("404")) || command === "az" && normalized.includes("pull request") && (normalized.includes("not found") || normalized.includes("does not exist"))) return "not-found";
76598
76680
  return "command-failed";
76599
76681
  };
76600
- const make$43 = Effect.gen(function* () {
76682
+ const make$44 = Effect.gen(function* () {
76601
76683
  const processRunner = yield* ProcessRunner;
76602
76684
  const run = Effect.fn("VcsProcess.run")(function* (input) {
76603
76685
  const baseError = {
@@ -76654,7 +76736,7 @@ const make$43 = Effect.gen(function* () {
76654
76736
  });
76655
76737
  return VcsProcess.of({ run });
76656
76738
  });
76657
- const layer$40 = Layer.effect(VcsProcess, make$43).pipe(Layer.provide(layer$67));
76739
+ const layer$41 = Layer.effect(VcsProcess, make$44).pipe(Layer.provide(layer$68));
76658
76740
  //#endregion
76659
76741
  //#region src/vcs/VcsDriver.ts
76660
76742
  var VcsDriver = class extends Context.Service()("@zl-tools/server/vcs/VcsDriver") {};
@@ -77105,12 +77187,12 @@ const makeVcsDriver = Effect.gen(function* () {
77105
77187
  const driver = yield* makeVcsDriverShape();
77106
77188
  return VcsDriver.of(driver);
77107
77189
  });
77108
- const make$42 = Effect.gen(function* () {
77190
+ const make$43 = Effect.gen(function* () {
77109
77191
  const git = yield* makeGitVcsDriverCore();
77110
77192
  return GitVcsDriver.of(git);
77111
77193
  });
77112
77194
  Layer.effect(VcsDriver, makeVcsDriver);
77113
- const layer$39 = Layer.effect(GitVcsDriver, make$42);
77195
+ const layer$40 = Layer.effect(GitVcsDriver, make$43);
77114
77196
  //#endregion
77115
77197
  //#region src/vcs/VcsProjectConfig.ts
77116
77198
  const ProjectVcsConfigJson = fromLenientJson(Schema$1.Struct({
@@ -77142,7 +77224,7 @@ const logVcsProjectConfigError = (error) => Effect.logWarning(error).pipe(Effect
77142
77224
  configPath: error.configPath,
77143
77225
  errorTag: error._tag
77144
77226
  }));
77145
- const make$41 = Effect.gen(function* () {
77227
+ const make$42 = Effect.gen(function* () {
77146
77228
  const fileSystem = yield* FileSystem.FileSystem;
77147
77229
  const path = yield* Path.Path;
77148
77230
  const findConfigPath = Effect.fn("VcsProjectConfig.findConfigPath")(function* (cwd) {
@@ -77183,7 +77265,7 @@ const make$41 = Effect.gen(function* () {
77183
77265
  });
77184
77266
  return VcsProjectConfig.of({ resolveKind });
77185
77267
  });
77186
- const layer$38 = Layer.effect(VcsProjectConfig, make$41);
77268
+ const layer$39 = Layer.effect(VcsProjectConfig, make$42);
77187
77269
  //#endregion
77188
77270
  //#region src/vcs/VcsDriverRegistry.ts
77189
77271
  const DETECTION_CACHE_CAPACITY = 2048;
@@ -77203,7 +77285,7 @@ function parseDetectionCacheKey(key) {
77203
77285
  cwd: key.slice(separatorIndex + 1)
77204
77286
  };
77205
77287
  }
77206
- const make$40 = Effect.gen(function* () {
77288
+ const make$41 = Effect.gen(function* () {
77207
77289
  const projectConfig = yield* VcsProjectConfig;
77208
77290
  const git = yield* makeVcsDriver;
77209
77291
  const drivers = { git };
@@ -77260,7 +77342,7 @@ const make$40 = Effect.gen(function* () {
77260
77342
  resolve
77261
77343
  });
77262
77344
  });
77263
- const layer$37 = Layer.effect(VcsDriverRegistry, make$40).pipe(Layer.provide(layer$38));
77345
+ const layer$38 = Layer.effect(VcsDriverRegistry, make$41).pipe(Layer.provide(layer$39));
77264
77346
  //#endregion
77265
77347
  //#region src/checkpointing/CheckpointStore.ts
77266
77348
  /**
@@ -77280,7 +77362,7 @@ const layer$37 = Layer.effect(VcsDriverRegistry, make$40).pipe(Layer.provide(lay
77280
77362
  */
77281
77363
  /** Service tag for checkpoint persistence and restore operations. */
77282
77364
  var CheckpointStore = class extends Context.Service()("@zl-tools/server/checkpointing/CheckpointStore") {};
77283
- const make$39 = Effect.gen(function* () {
77365
+ const make$40 = Effect.gen(function* () {
77284
77366
  const vcsRegistry = yield* VcsDriverRegistry;
77285
77367
  const resolveCheckpoints = Effect.fn("CheckpointStore.resolveCheckpoints")(function* (operation, cwd) {
77286
77368
  const handle = yield* vcsRegistry.resolve({ cwd });
@@ -77319,7 +77401,7 @@ const make$39 = Effect.gen(function* () {
77319
77401
  deleteCheckpointRefs
77320
77402
  });
77321
77403
  });
77322
- const layer$36 = Layer.effect(CheckpointStore, make$39);
77404
+ const layer$37 = Layer.effect(CheckpointStore, make$40);
77323
77405
  //#endregion
77324
77406
  //#region src/checkpointing/CheckpointDiffQuery.ts
77325
77407
  /**
@@ -77341,7 +77423,7 @@ function buildTurnDiffResult(input, diff) {
77341
77423
  diff
77342
77424
  };
77343
77425
  }
77344
- const make$38 = Effect.gen(function* () {
77426
+ const make$39 = Effect.gen(function* () {
77345
77427
  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;
77346
77428
  const checkpointStore = yield* CheckpointStore;
77347
77429
  const getTurnDiff = Effect.fn("getTurnDiff")(function* (input) {
@@ -77477,7 +77559,7 @@ const make$38 = Effect.gen(function* () {
77477
77559
  getFullThreadDiff
77478
77560
  });
77479
77561
  });
77480
- const layer$35 = Layer.effect(CheckpointDiffQuery, make$38);
77562
+ const layer$36 = Layer.effect(CheckpointDiffQuery, make$39);
77481
77563
  //#endregion
77482
77564
  //#region src/orchestration/Normalizer.ts
77483
77565
  const canonicalizeClientCommandTimestamps = (command, receivedAt) => {
@@ -77793,7 +77875,7 @@ function makeUpdateState(input) {
77793
77875
  output: input.output ?? null
77794
77876
  };
77795
77877
  }
77796
- const make$37 = Effect.fn("ProviderMaintenanceRunner.make")(function* () {
77878
+ const make$38 = Effect.fn("ProviderMaintenanceRunner.make")(function* () {
77797
77879
  const providerRegistry = yield* ProviderRegistry;
77798
77880
  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
77799
77881
  const httpClient = yield* HttpClient.HttpClient;
@@ -77908,7 +77990,7 @@ const make$37 = Effect.fn("ProviderMaintenanceRunner.make")(function* () {
77908
77990
  });
77909
77991
  return ProviderMaintenanceRunner.of({ updateProvider });
77910
77992
  });
77911
- const layer$34 = Layer.effect(ProviderMaintenanceRunner, make$37());
77993
+ const layer$35 = Layer.effect(ProviderMaintenanceRunner, make$38());
77912
77994
  //#endregion
77913
77995
  //#region src/mcp/McpInvocationContext.ts
77914
77996
  var McpInvocationContext = class extends Context.Service()("@zl-tools/server/mcp/McpInvocationContext") {};
@@ -78094,7 +78176,7 @@ const SERVER_OPERATIONS = /* @__PURE__ */ new Set([
78094
78176
  "waitFor"
78095
78177
  ]);
78096
78178
  var ServerPreviewAutomation = class extends Context.Service()("@zl-tools/server/preview/ServerPreviewAutomation") {};
78097
- const make$36 = Effect.gen(function* ServerPreviewAutomationMake() {
78179
+ const make$37 = Effect.gen(function* ServerPreviewAutomationMake() {
78098
78180
  const manager = yield* PreviewManager;
78099
78181
  const browser = yield* BrowserRuntime;
78100
78182
  const invoke = Effect.fn("ServerPreviewAutomation.invoke")(function* (request) {
@@ -78244,7 +78326,7 @@ const make$36 = Effect.gen(function* ServerPreviewAutomationMake() {
78244
78326
  invoke
78245
78327
  });
78246
78328
  });
78247
- const layer$33 = Layer.effect(ServerPreviewAutomation, make$36);
78329
+ const layer$34 = Layer.effect(ServerPreviewAutomation, make$37);
78248
78330
  //#endregion
78249
78331
  //#region src/mcp/PreviewAutomationBroker.ts
78250
78332
  var PreviewAutomationBroker = class extends Context.Service()("@zl-tools/server/mcp/PreviewAutomationBroker") {};
@@ -78632,8 +78714,8 @@ const makeWithServerHosted = Effect.fn("PreviewAutomationBroker.make")(function*
78632
78714
  invoke
78633
78715
  });
78634
78716
  });
78635
- const make$35 = makeWithServerHosted();
78636
- const layer$32 = Layer.effect(PreviewAutomationBroker, make$35);
78717
+ const make$36 = makeWithServerHosted();
78718
+ const layer$33 = Layer.effect(PreviewAutomationBroker, make$36);
78637
78719
  const layerServerHosted = Layer.effect(PreviewAutomationBroker, Effect.gen(function* () {
78638
78720
  const serverHosted = yield* ServerPreviewAutomation;
78639
78721
  return yield* makeWithServerHosted(serverHosted);
@@ -78785,7 +78867,7 @@ const waitForScan = (cwd, finder, onFailure) => Effect.try({
78785
78867
  timeout: WORKSPACE_INDEX_SCAN_TIMEOUT
78786
78868
  })
78787
78869
  }), Effect.withSpan("WorkspaceSearchIndex.waitForScan"));
78788
- const make$34 = Effect.fn("WorkspaceSearchIndex.make")(function* (cwd) {
78870
+ const make$35 = Effect.fn("WorkspaceSearchIndex.make")(function* (cwd) {
78789
78871
  const finder = yield* Effect.acquireRelease(createFinder(cwd), (finder) => Effect.try({
78790
78872
  try: () => finder.destroy(),
78791
78873
  catch: (cause) => new WorkspaceSearchIndexDestroyFailed({
@@ -78859,9 +78941,9 @@ const make$34 = Effect.fn("WorkspaceSearchIndex.make")(function* (cwd) {
78859
78941
  * workspace root. WorkspaceSearchIndexMap owns memoization and idle cleanup;
78860
78942
  * using a default cwd here would mix resources from different workspaces.
78861
78943
  */
78862
- const layer$31 = (cwd) => Layer.effect(WorkspaceSearchIndex, make$34(cwd));
78944
+ const layer$32 = (cwd) => Layer.effect(WorkspaceSearchIndex, make$35(cwd));
78863
78945
  var WorkspaceSearchIndexMap = class extends LayerMap.Service()("@zl-tools/server/workspace/WorkspaceSearchIndexMap", {
78864
- lookup: layer$31,
78946
+ lookup: layer$32,
78865
78947
  idleTimeToLive: WORKSPACE_INDEX_IDLE_TTL
78866
78948
  }) {};
78867
78949
  //#endregion
@@ -78923,7 +79005,7 @@ const resolveBrowseTarget = Effect.fn("WorkspaceEntries.resolveBrowseTarget")(fu
78923
79005
  if (!input.cwd) return yield* new WorkspaceEntriesCurrentProjectRequiredError({ partialPath: input.partialPath });
78924
79006
  return path.resolve(expandHomePath$1(input.cwd, path), input.partialPath);
78925
79007
  });
78926
- const make$33 = Effect.gen(function* () {
79008
+ const make$34 = Effect.gen(function* () {
78927
79009
  const path = yield* Path.Path;
78928
79010
  const workspacePaths = yield* WorkspacePaths;
78929
79011
  const workspaceSearchIndexes = yield* WorkspaceSearchIndexMap;
@@ -78997,7 +79079,7 @@ const make$33 = Effect.gen(function* () {
78997
79079
  search
78998
79080
  });
78999
79081
  });
79000
- const layer$30 = Layer.effect(WorkspaceEntries, make$33).pipe(Layer.provide(WorkspaceSearchIndexMap.layer));
79082
+ const layer$31 = Layer.effect(WorkspaceEntries, make$34).pipe(Layer.provide(WorkspaceSearchIndexMap.layer));
79001
79083
  //#endregion
79002
79084
  //#region src/workspace/WorkspaceFileSystem.ts
79003
79085
  /**
@@ -79066,7 +79148,7 @@ Schema$1.Union([
79066
79148
  ]);
79067
79149
  /** Service tag for workspace file operations. */
79068
79150
  var WorkspaceFileSystem = class extends Context.Service()("@zl-tools/server/workspace/WorkspaceFileSystem") {};
79069
- const make$32 = Effect.gen(function* () {
79151
+ const make$33 = Effect.gen(function* () {
79070
79152
  const fileSystem = yield* FileSystem.FileSystem;
79071
79153
  const path = yield* Path.Path;
79072
79154
  const workspacePaths = yield* WorkspacePaths;
@@ -79198,7 +79280,7 @@ const make$32 = Effect.gen(function* () {
79198
79280
  writeFile
79199
79281
  });
79200
79282
  });
79201
- const layer$29 = Layer.effect(WorkspaceFileSystem, make$32);
79283
+ const layer$30 = Layer.effect(WorkspaceFileSystem, make$33);
79202
79284
  //#endregion
79203
79285
  //#region ../../packages/shared/src/projectScripts.ts
79204
79286
  function projectScriptRuntimeEnv(input) {
@@ -79243,7 +79325,7 @@ var ProjectSetupScriptProjectNotFoundError = class extends Schema$1.TaggedErrorC
79243
79325
  };
79244
79326
  Schema$1.Union([ProjectSetupScriptOperationError, ProjectSetupScriptProjectNotFoundError]);
79245
79327
  var ProjectSetupScriptRunner = class extends Context.Service()("@zl-tools/server/project/ProjectSetupScriptRunner") {};
79246
- const make$31 = Effect.gen(function* () {
79328
+ const make$32 = Effect.gen(function* () {
79247
79329
  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;
79248
79330
  const terminalManager = yield* TerminalManager;
79249
79331
  const runForThread = Effect.fn("ProjectSetupScriptRunner.runForThread")(function* (input) {
@@ -79301,7 +79383,7 @@ const make$31 = Effect.gen(function* () {
79301
79383
  });
79302
79384
  return ProjectSetupScriptRunner.of({ runForThread });
79303
79385
  });
79304
- const layer$28 = Layer.effect(ProjectSetupScriptRunner, make$31);
79386
+ const layer$29 = Layer.effect(ProjectSetupScriptRunner, make$32);
79305
79387
  //#endregion
79306
79388
  //#region src/sourceControl/SourceControlProvider.ts
79307
79389
  const MAX_ERROR_TRANSPORT_VALUE_LENGTH = 256;
@@ -79604,7 +79686,7 @@ function decodeAzureDevOpsJson(raw, schema, operation, cwd) {
79604
79686
  cause
79605
79687
  })));
79606
79688
  }
79607
- const make$30 = Effect.gen(function* () {
79689
+ const make$31 = Effect.gen(function* () {
79608
79690
  const process = yield* VcsProcess;
79609
79691
  const execute = (input) => process.run({
79610
79692
  operation: "AzureDevOpsCli.execute",
@@ -79746,7 +79828,7 @@ const make$30 = Effect.gen(function* () {
79746
79828
  }).pipe(Effect.asVoid)
79747
79829
  });
79748
79830
  });
79749
- const layer$27 = Layer.effect(AzureDevOpsCli, make$30);
79831
+ const layer$28 = Layer.effect(AzureDevOpsCli, make$31);
79750
79832
  //#endregion
79751
79833
  //#region src/sourceControl/SourceControlProviderDiscovery.ts
79752
79834
  function firstNonEmptyLine(text) {
@@ -79949,7 +80031,7 @@ function toChangeRequest$3(summary) {
79949
80031
  isCrossRepository: false
79950
80032
  };
79951
80033
  }
79952
- const make$29 = Effect.gen(function* () {
80034
+ const make$30 = Effect.gen(function* () {
79953
80035
  const azure = yield* AzureDevOpsCli;
79954
80036
  return SourceControlProvider.of({
79955
80037
  kind: "azure-devops",
@@ -80041,7 +80123,7 @@ const make$29 = Effect.gen(function* () {
80041
80123
  })))
80042
80124
  });
80043
80125
  });
80044
- Layer.effect(SourceControlProvider, make$29);
80126
+ Layer.effect(SourceControlProvider, make$30);
80045
80127
  //#endregion
80046
80128
  //#region src/sourceControl/bitbucketPullRequests.ts
80047
80129
  const BitbucketRepositoryRefSchema = Schema$1.Struct({
@@ -80355,7 +80437,7 @@ function responseError(operation, response) {
80355
80437
  responseBodyLength: body.length
80356
80438
  }))));
80357
80439
  }
80358
- const make$28 = Effect.gen(function* () {
80440
+ const make$29 = Effect.gen(function* () {
80359
80441
  const config = yield* BitbucketApiEnvConfig;
80360
80442
  const httpClient = yield* HttpClient.HttpClient;
80361
80443
  const fileSystem = yield* FileSystem.FileSystem;
@@ -80519,7 +80601,7 @@ const make$28 = Effect.gen(function* () {
80519
80601
  })))
80520
80602
  });
80521
80603
  });
80522
- const layer$25 = Layer.effect(BitbucketApi, make$28);
80604
+ const layer$26 = Layer.effect(BitbucketApi, make$29);
80523
80605
  //#endregion
80524
80606
  //#region src/sourceControl/BitbucketSourceControlProvider.ts
80525
80607
  function toChangeRequest$2(summary) {
@@ -80537,7 +80619,7 @@ function toChangeRequest$2(summary) {
80537
80619
  ...summary.headRepositoryOwnerLogin !== void 0 ? { headRepositoryOwnerLogin: summary.headRepositoryOwnerLogin } : {}
80538
80620
  };
80539
80621
  }
80540
- const make$27 = Effect.gen(function* () {
80622
+ const make$28 = Effect.gen(function* () {
80541
80623
  const bitbucket = yield* BitbucketApi;
80542
80624
  return SourceControlProvider.of({
80543
80625
  kind: "bitbucket",
@@ -80628,7 +80710,7 @@ const make$27 = Effect.gen(function* () {
80628
80710
  })))
80629
80711
  });
80630
80712
  });
80631
- Layer.effect(SourceControlProvider, make$27);
80713
+ Layer.effect(SourceControlProvider, make$28);
80632
80714
  const makeDiscovery = Effect.gen(function* () {
80633
80715
  return {
80634
80716
  type: "api",
@@ -80857,7 +80939,7 @@ function deriveRepositoryCloneUrlsFromCreateOutput(stdout, repository) {
80857
80939
  sshUrl: `git@${fallbackHost}:${repository}.git`
80858
80940
  };
80859
80941
  }
80860
- const make$26 = Effect.gen(function* () {
80942
+ const make$27 = Effect.gen(function* () {
80861
80943
  const process = yield* VcsProcess;
80862
80944
  const execute = (input) => process.run({
80863
80945
  operation: "GitHubCli.execute",
@@ -80973,7 +81055,7 @@ const make$26 = Effect.gen(function* () {
80973
81055
  }).pipe(Effect.asVoid)
80974
81056
  });
80975
81057
  });
80976
- const layer$23 = Layer.effect(GitHubCli, make$26);
81058
+ const layer$24 = Layer.effect(GitHubCli, make$27);
80977
81059
  //#endregion
80978
81060
  //#region src/sourceControl/gitHubAuthStatus.ts
80979
81061
  const GitHubAuthStatusAccountSchema = Schema$1.Struct({
@@ -81074,7 +81156,7 @@ const discovery$1 = {
81074
81156
  parseAuth: parseGitHubAuth,
81075
81157
  installHint: "Install the GitHub command-line tool (`gh`) via https://cli.github.com/ or your package manager (for example `brew install gh`)."
81076
81158
  };
81077
- const make$25 = Effect.gen(function* () {
81159
+ const make$26 = Effect.gen(function* () {
81078
81160
  const github = yield* GitHubCli;
81079
81161
  const listChangeRequests = (input) => {
81080
81162
  if (input.state === "open") return github.listOpenPullRequests({
@@ -81190,7 +81272,7 @@ const make$25 = Effect.gen(function* () {
81190
81272
  })))
81191
81273
  });
81192
81274
  });
81193
- Layer.effect(SourceControlProvider, make$25);
81275
+ Layer.effect(SourceControlProvider, make$26);
81194
81276
  //#endregion
81195
81277
  //#region src/sourceControl/gitLabMergeRequests.ts
81196
81278
  const GitLabProjectReferenceSchema = Schema$1.Struct({
@@ -81501,7 +81583,7 @@ function parseRepositoryPath(repository) {
81501
81583
  projectPath
81502
81584
  };
81503
81585
  }
81504
- const make$24 = Effect.gen(function* () {
81586
+ const make$25 = Effect.gen(function* () {
81505
81587
  const process = yield* VcsProcess;
81506
81588
  const run = (input, mapError) => process.run({
81507
81589
  operation: "GitLabCli.execute",
@@ -81650,7 +81732,7 @@ const make$24 = Effect.gen(function* () {
81650
81732
  }).pipe(Effect.asVoid)
81651
81733
  });
81652
81734
  });
81653
- const layer$21 = Layer.effect(GitLabCli, make$24);
81735
+ const layer$22 = Layer.effect(GitLabCli, make$25);
81654
81736
  //#endregion
81655
81737
  //#region src/sourceControl/gitLabAuthStatus.ts
81656
81738
  const HOST_LINE_PATTERN = /^(?:[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?|\[[a-f0-9:.]+\])(?::\d+)?$/iu;
@@ -81747,7 +81829,7 @@ const discovery = {
81747
81829
  refineUnknownRemote: refineUnknownGitLabRemote,
81748
81830
  installHint: "Install the GitLab command-line tool (`glab`) from https://gitlab.com/gitlab-org/cli or your package manager (for example `brew install glab`)."
81749
81831
  };
81750
- const make$23 = Effect.gen(function* () {
81832
+ const make$24 = Effect.gen(function* () {
81751
81833
  const gitlab = yield* GitLabCli;
81752
81834
  return SourceControlProvider.of({
81753
81835
  kind: "gitlab",
@@ -81835,7 +81917,7 @@ const make$23 = Effect.gen(function* () {
81835
81917
  })))
81836
81918
  });
81837
81919
  });
81838
- Layer.effect(SourceControlProvider, make$23);
81920
+ Layer.effect(SourceControlProvider, make$24);
81839
81921
  //#endregion
81840
81922
  //#region src/sourceControl/SourceControlProviderRegistry.ts
81841
81923
  const PROVIDER_DETECTION_CACHE_CAPACITY = 2048;
@@ -81986,12 +82068,12 @@ const makeWithProviders = Effect.fn("makeSourceControlProviderRegistryWithProvid
81986
82068
  })), { concurrency: "unbounded" })
81987
82069
  });
81988
82070
  });
81989
- const make$22 = Effect.gen(function* () {
81990
- const github = yield* make$25;
81991
- const gitlab = yield* make$23;
81992
- const bitbucket = yield* make$27;
82071
+ const make$23 = Effect.gen(function* () {
82072
+ const github = yield* make$26;
82073
+ const gitlab = yield* make$24;
82074
+ const bitbucket = yield* make$28;
81993
82075
  const bitbucketDiscovery = yield* makeDiscovery;
81994
- const azureDevOps = yield* make$29;
82076
+ const azureDevOps = yield* make$30;
81995
82077
  return yield* makeWithProviders([
81996
82078
  {
81997
82079
  kind: "github",
@@ -82015,7 +82097,7 @@ const make$22 = Effect.gen(function* () {
82015
82097
  }
82016
82098
  ]);
82017
82099
  });
82018
- const layer$19 = Layer.effect(SourceControlProviderRegistry, make$22);
82100
+ const layer$20 = Layer.effect(SourceControlProviderRegistry, make$23);
82019
82101
  //#endregion
82020
82102
  //#region src/git/GitManager.ts
82021
82103
  var GitManager = class extends Context.Service()("@zl-tools/server/git/GitManager") {};
@@ -82228,7 +82310,7 @@ function toPullRequestHeadRemoteInfo(pr) {
82228
82310
  ...pr.headRepositoryOwnerLogin !== void 0 ? { headRepositoryOwnerLogin: pr.headRepositoryOwnerLogin } : {}
82229
82311
  };
82230
82312
  }
82231
- const make$21 = Effect.gen(function* () {
82313
+ const make$22 = Effect.gen(function* () {
82232
82314
  const gitCore = yield* GitVcsDriver;
82233
82315
  const sourceControlProviders = yield* SourceControlProviderRegistry;
82234
82316
  const textGeneration = yield* TextGeneration;
@@ -83107,7 +83189,7 @@ const make$21 = Effect.gen(function* () {
83107
83189
  runStackedAction
83108
83190
  });
83109
83191
  });
83110
- const layer$18 = Layer.effect(GitManager, make$21);
83192
+ const layer$19 = Layer.effect(GitManager, make$22);
83111
83193
  //#endregion
83112
83194
  //#region src/git/GitWorkflowService.ts
83113
83195
  var GitWorkflowService = class extends Context.Service()("@zl-tools/server/git/GitWorkflowService") {};
@@ -83153,7 +83235,7 @@ function hasMissingPathCause(value, seen = /* @__PURE__ */ new Set()) {
83153
83235
  if (record.reason && typeof record.reason === "object" && record.reason._tag === "NotFound") return true;
83154
83236
  return hasMissingPathCause(record.cause, seen);
83155
83237
  }
83156
- const make$20 = Effect.gen(function* () {
83238
+ const make$21 = Effect.gen(function* () {
83157
83239
  const registry = yield* VcsDriverRegistry;
83158
83240
  const git = yield* GitVcsDriver;
83159
83241
  const gitManager = yield* GitManager;
@@ -83239,7 +83321,7 @@ const make$20 = Effect.gen(function* () {
83239
83321
  renameBranch: (input) => ensureGit("GitWorkflowService.renameBranch", input.cwd).pipe(Effect.andThen(git.renameBranch(input)))
83240
83322
  });
83241
83323
  });
83242
- const layer$17 = Layer.effect(GitWorkflowService, make$20);
83324
+ const layer$18 = Layer.effect(GitWorkflowService, make$21);
83243
83325
  //#endregion
83244
83326
  //#region src/vcs/VcsStatusBroadcaster.ts
83245
83327
  const DEFAULT_VCS_STATUS_REFRESH_INTERVAL = Duration.seconds(30);
@@ -83311,7 +83393,7 @@ function fingerprintStatusPart(status) {
83311
83393
  return JSON.stringify(status);
83312
83394
  }
83313
83395
  const normalizeCwd = (cwd) => Effect.service(FileSystem.FileSystem).pipe(Effect.flatMap((fs) => fs.realPath(cwd)), Effect.orElseSucceed(() => cwd));
83314
- const make$19 = Effect.gen(function* () {
83396
+ const make$20 = Effect.gen(function* () {
83315
83397
  const workflow = yield* GitWorkflowService;
83316
83398
  const fs = yield* FileSystem.FileSystem;
83317
83399
  const changesPubSub = yield* Effect.acquireRelease(PubSub.unbounded(), (pubsub) => PubSub.shutdown(pubsub));
@@ -83535,7 +83617,7 @@ const make$19 = Effect.gen(function* () {
83535
83617
  streamStatus
83536
83618
  });
83537
83619
  });
83538
- const layer$16 = Layer.effect(VcsStatusBroadcaster, make$19);
83620
+ const layer$17 = Layer.effect(VcsStatusBroadcaster, make$20);
83539
83621
  //#endregion
83540
83622
  //#region src/vcs/VcsProvisioningService.ts
83541
83623
  var VcsProvisioningService = class extends Context.Service()("@zl-tools/server/vcs/VcsProvisioningService") {};
@@ -83548,7 +83630,7 @@ function resolveRequestedKind(kind) {
83548
83630
  }));
83549
83631
  return Effect.succeed(kind);
83550
83632
  }
83551
- const make$18 = Effect.gen(function* () {
83633
+ const make$19 = Effect.gen(function* () {
83552
83634
  const registry = yield* VcsDriverRegistry;
83553
83635
  const initRepository = Effect.fn("VcsProvisioningService.initRepository")(function* (input) {
83554
83636
  const kind = yield* resolveRequestedKind(input.kind);
@@ -83556,11 +83638,11 @@ const make$18 = Effect.gen(function* () {
83556
83638
  });
83557
83639
  return VcsProvisioningService.of({ initRepository });
83558
83640
  });
83559
- const layer$15 = Layer.effect(VcsProvisioningService, make$18);
83641
+ const layer$16 = Layer.effect(VcsProvisioningService, make$19);
83560
83642
  //#endregion
83561
83643
  //#region src/review/ReviewService.ts
83562
83644
  var ReviewService = class extends Context.Service()("@zl-tools/server/review/ReviewService") {};
83563
- const make$17 = Effect.gen(function* () {
83645
+ const make$18 = Effect.gen(function* () {
83564
83646
  const config = yield* ServerConfig;
83565
83647
  const fileSystem = yield* FileSystem.FileSystem;
83566
83648
  const path = yield* Path.Path;
@@ -83616,7 +83698,7 @@ const make$17 = Effect.gen(function* () {
83616
83698
  });
83617
83699
  return ReviewService.of({ getDiffPreview });
83618
83700
  });
83619
- const layer$14 = Layer.effect(ReviewService, make$17);
83701
+ const layer$15 = Layer.effect(ReviewService, make$18);
83620
83702
  //#endregion
83621
83703
  //#region src/diagnostics/ProcessResourceMonitor.ts
83622
83704
  const SAMPLE_INTERVAL_MS = 5e3;
@@ -83767,7 +83849,7 @@ function aggregateProcessResourceHistory(input) {
83767
83849
  }) : Option.none()
83768
83850
  };
83769
83851
  }
83770
- const make$16 = Effect.gen(function* () {
83852
+ const make$17 = Effect.gen(function* () {
83771
83853
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
83772
83854
  const state = yield* Ref.make({
83773
83855
  samples: [],
@@ -83816,7 +83898,7 @@ const make$16 = Effect.gen(function* () {
83816
83898
  });
83817
83899
  return ProcessResourceMonitor.of({ readHistory });
83818
83900
  });
83819
- const layer$13 = Layer.effect(ProcessResourceMonitor, make$16);
83901
+ const layer$14 = Layer.effect(ProcessResourceMonitor, make$17);
83820
83902
  //#endregion
83821
83903
  //#region src/diagnostics/TraceDiagnostics.ts
83822
83904
  var TraceFileReadError = class extends Schema$1.TaggedErrorClass()("TraceFileReadError", {
@@ -84087,7 +84169,7 @@ function readTraceFile(fileSystem, path) {
84087
84169
  cause
84088
84170
  })) }));
84089
84171
  }
84090
- const make$15 = Effect.gen(function* () {
84172
+ const make$16 = Effect.gen(function* () {
84091
84173
  const fileSystem = yield* FileSystem.FileSystem;
84092
84174
  const read = Effect.fn("TraceDiagnostics.read")(function* (options) {
84093
84175
  const readAt = options.readAt ?? (yield* DateTime.now);
@@ -84131,7 +84213,7 @@ const make$15 = Effect.gen(function* () {
84131
84213
  });
84132
84214
  return TraceDiagnostics.of({ read });
84133
84215
  });
84134
- const layer$12 = Layer.effect(TraceDiagnostics, make$15);
84216
+ const layer$13 = Layer.effect(TraceDiagnostics, make$16);
84135
84217
  function readTraceDiagnostics(options) {
84136
84218
  return Effect.gen(function* () {
84137
84219
  return yield* (yield* TraceDiagnostics).read(options);
@@ -84523,7 +84605,7 @@ const turnSelect = `
84523
84605
  reported_cost_provenance AS "reportedCostProvenance", completeness,
84524
84606
  completeness_reasons_json AS "completenessReasonsJson"
84525
84607
  FROM usage_analytics_turns`;
84526
- const make$14 = Effect.gen(function* () {
84608
+ const make$15 = Effect.gen(function* () {
84527
84609
  const sql = yield* SqlClient.SqlClient;
84528
84610
  const environmentId = yield* (yield* ServerEnvironment).getEnvironmentId;
84529
84611
  const getThreadContext = (threadId) => sql`
@@ -85330,7 +85412,7 @@ const make$14 = Effect.gen(function* () {
85330
85412
  getActivity
85331
85413
  });
85332
85414
  });
85333
- const layer$11 = Layer.effect(UsageAnalytics, make$14);
85415
+ const layer$12 = Layer.effect(UsageAnalytics, make$15);
85334
85416
  //#endregion
85335
85417
  //#region src/userState/UserStateService.ts
85336
85418
  const isUserStateError = Schema$1.is(UserStateError);
@@ -85340,7 +85422,7 @@ const persistenceError = (message) => new UserStateError({
85340
85422
  message
85341
85423
  });
85342
85424
  var UserStateService = class extends Context.Service()("@zl-tools/server/userState/UserStateService") {};
85343
- const make$13 = Effect.gen(function* () {
85425
+ const make$14 = Effect.gen(function* () {
85344
85426
  const sql = yield* SqlClient.SqlClient;
85345
85427
  const changes = yield* PubSub.unbounded();
85346
85428
  const writeSemaphore = yield* Semaphore.make(1);
@@ -85477,15 +85559,15 @@ const make$13 = Effect.gen(function* () {
85477
85559
  streamChanges: Stream.fromPubSub(changes)
85478
85560
  });
85479
85561
  });
85480
- const layer$10 = Layer.effect(UserStateService, make$13);
85562
+ const layer$11 = Layer.effect(UserStateService, make$14);
85481
85563
  //#endregion
85482
85564
  //#region src/assist/PromptEnhancement.ts
85483
- const RECENT_MESSAGE_LIMIT = 12;
85565
+ const RECENT_MESSAGE_LIMIT$1 = 12;
85484
85566
  const GENERATION_TIMEOUT = Duration.seconds(45);
85485
85567
  const decodeEnhancedPrompt = Schema$1.decodeUnknownEffect(PromptEnhancementPrompt);
85486
85568
  const isPromptEnhancementError = Schema$1.is(PromptEnhancementError);
85487
85569
  var PromptEnhancement = class extends Context.Service()("@zl-tools/server/assist/PromptEnhancement") {};
85488
- const make$12 = Effect.gen(function* () {
85570
+ const make$13 = Effect.gen(function* () {
85489
85571
  const projections = yield* ProjectionSnapshotQuery;
85490
85572
  const serverSettings = yield* ServerSettingsService;
85491
85573
  const textGeneration = yield* TextGeneration;
@@ -85526,7 +85608,7 @@ const make$12 = Effect.gen(function* () {
85526
85608
  requestId: input.requestId,
85527
85609
  reason: "Prompt improvement conversation context is unavailable"
85528
85610
  });
85529
- recentMessages = yield* readMessages(input.projectId, input.threadId, RECENT_MESSAGE_LIMIT);
85611
+ recentMessages = yield* readMessages(input.projectId, input.threadId, RECENT_MESSAGE_LIMIT$1);
85530
85612
  }
85531
85613
  const settings = yield* serverSettings.getSettings;
85532
85614
  if (!settings.promptEnhancement.enabled) return yield* new PromptEnhancementError({
@@ -85580,7 +85662,116 @@ const make$12 = Effect.gen(function* () {
85580
85662
  cancel
85581
85663
  });
85582
85664
  });
85583
- const layer$9 = Layer.effect(PromptEnhancement, make$12);
85665
+ const layer$10 = Layer.effect(PromptEnhancement, make$13);
85666
+ //#endregion
85667
+ //#region src/assist/ThreadTitleRegeneration.ts
85668
+ const RECENT_MESSAGE_LIMIT = 12;
85669
+ const TITLE_REGENERATION_TIMEOUT = Duration.minutes(3);
85670
+ var ThreadTitleRegeneration = class extends Context.Service()("@zl-tools/server/assist/ThreadTitleRegeneration") {};
85671
+ const make$12 = Effect.gen(function* () {
85672
+ const projections = yield* ProjectionSnapshotQuery;
85673
+ const orchestration = yield* OrchestrationEngineService;
85674
+ const settingsService = yield* ServerSettingsService;
85675
+ const textGeneration = yield* TextGeneration;
85676
+ const crypto = yield* Crypto.Crypto;
85677
+ const workQueue = yield* Queue.unbounded();
85678
+ const queueState = yield* SynchronizedRef.make([]);
85679
+ yield* Effect.addFinalizer(() => Queue.shutdown(workQueue));
85680
+ const getQueue = SynchronizedRef.get(queueState).pipe(Effect.map((entries) => ({ entries: entries.map(({ threadId, status }) => ({
85681
+ threadId,
85682
+ status
85683
+ })) })));
85684
+ const removeFromQueueState = (threadId) => SynchronizedRef.update(queueState, (entries) => entries.filter((entry) => entry.threadId !== threadId));
85685
+ const process = Effect.fn("ThreadTitleRegeneration.process")(function* (threadId) {
85686
+ yield* SynchronizedRef.update(queueState, (entries) => entries.map((entry) => entry.threadId === threadId ? {
85687
+ ...entry,
85688
+ status: "processing"
85689
+ } : entry));
85690
+ const threadBefore = yield* projections.getThreadShellById(threadId);
85691
+ if (Option.isNone(threadBefore)) return yield* new ThreadTitleRegenerationError({
85692
+ threadId,
85693
+ reason: "Thread was not found while regenerating its title"
85694
+ });
85695
+ const project = yield* projections.getProjectShellById(threadBefore.value.projectId);
85696
+ if (Option.isNone(project)) return yield* new ThreadTitleRegenerationError({
85697
+ threadId,
85698
+ reason: "Thread project was not found while regenerating its title"
85699
+ });
85700
+ const readRecentMessages = projections.getRecentPromptEnhancementMessages;
85701
+ if (!readRecentMessages) return yield* new ThreadTitleRegenerationError({
85702
+ threadId,
85703
+ reason: "Thread conversation context is unavailable"
85704
+ });
85705
+ const recentMessages = yield* readRecentMessages(threadBefore.value.projectId, threadId, RECENT_MESSAGE_LIMIT);
85706
+ const latestUserMessage = [...recentMessages].toReversed().find((message) => message.role === "user")?.text;
85707
+ const settings = yield* settingsService.getSettings;
85708
+ const generated = yield* textGeneration.generateThreadTitle({
85709
+ cwd: threadBefore.value.worktreePath ?? project.value.workspaceRoot,
85710
+ message: latestUserMessage ?? threadBefore.value.title,
85711
+ modelSelection: settings.textGenerationModelSelection,
85712
+ regeneration: {
85713
+ threadId,
85714
+ recentMessages,
85715
+ guidelines: settings.titleRegenerationPromptGuidelines,
85716
+ maxCharacters: settings.titleRegenerationCharactersLimit
85717
+ }
85718
+ }).pipe(Effect.timeout(TITLE_REGENERATION_TIMEOUT));
85719
+ const threadAfter = yield* projections.getThreadShellById(threadId);
85720
+ if (Option.isNone(threadAfter)) return;
85721
+ if (threadAfter.value.title !== threadBefore.value.title) {
85722
+ yield* Effect.logInfo("thread title regeneration skipped after concurrent title change", { threadId });
85723
+ return;
85724
+ }
85725
+ const commandId = CommandId.make(`server:title-regeneration:${yield* crypto.randomUUIDv4}`);
85726
+ yield* orchestration.dispatch({
85727
+ type: "thread.meta.update",
85728
+ commandId,
85729
+ threadId,
85730
+ title: generated.title
85731
+ });
85732
+ });
85733
+ const runEntry = (threadId) => process(threadId).pipe(Effect.catchCause((cause) => Effect.logWarning("thread title regeneration failed", {
85734
+ threadId,
85735
+ cause
85736
+ })), Effect.ensuring(removeFromQueueState(threadId)));
85737
+ yield* Queue.take(workQueue).pipe(Effect.flatMap(runEntry), Effect.forever, Effect.forkScoped);
85738
+ const enqueue = Effect.fn("ThreadTitleRegeneration.enqueue")(function* (input) {
85739
+ const thread = yield* projections.getThreadShellById(input.threadId).pipe(Effect.mapError((cause) => new ThreadTitleRegenerationError({
85740
+ threadId: input.threadId,
85741
+ reason: "Unable to verify the thread before queueing title regeneration",
85742
+ cause
85743
+ })));
85744
+ if (Option.isNone(thread)) return yield* new ThreadTitleRegenerationError({
85745
+ threadId: input.threadId,
85746
+ reason: "Thread was not found"
85747
+ });
85748
+ return yield* SynchronizedRef.modifyEffect(queueState, (entries) => {
85749
+ const existingIndex = entries.findIndex((entry) => entry.threadId === input.threadId);
85750
+ if (existingIndex >= 0) {
85751
+ const existing = entries[existingIndex];
85752
+ return Effect.succeed([{
85753
+ status: "already-queued",
85754
+ queueStatus: existing.status,
85755
+ position: existingIndex + 1
85756
+ }, entries]);
85757
+ }
85758
+ const next = [...entries, {
85759
+ threadId: input.threadId,
85760
+ status: "queued"
85761
+ }];
85762
+ return Queue.offer(workQueue, input.threadId).pipe(Effect.as([{
85763
+ status: "queued",
85764
+ queueStatus: "queued",
85765
+ position: next.length
85766
+ }, next]));
85767
+ });
85768
+ });
85769
+ return ThreadTitleRegeneration.of({
85770
+ getQueue,
85771
+ enqueue
85772
+ });
85773
+ });
85774
+ const layer$9 = Layer.effect(ThreadTitleRegeneration, make$12);
85584
85775
  //#endregion
85585
85776
  //#region src/serverVersionAdvisory.ts
85586
85777
  const SERVER_VERSION_CHECK_INTERVAL = Duration.hours(6);
@@ -86331,6 +86522,8 @@ const RPC_REQUIRED_SCOPE = /* @__PURE__ */ new Map([
86331
86522
  [WS_METHODS.starterSuggestionsGet, AuthOrchestrationOperateScope],
86332
86523
  [WS_METHODS.promptEnhancementGenerate, AuthOrchestrationOperateScope],
86333
86524
  [WS_METHODS.promptEnhancementCancel, AuthOrchestrationOperateScope],
86525
+ [WS_METHODS.threadTitleRegenerationGetQueue, AuthOrchestrationReadScope],
86526
+ [WS_METHODS.threadTitleRegenerationEnqueue, AuthOrchestrationOperateScope],
86334
86527
  [WS_METHODS.serverProbe, AuthOrchestrationReadScope],
86335
86528
  [WS_METHODS.serverGetConfig, AuthOrchestrationReadScope],
86336
86529
  [WS_METHODS.serverResetProductAnalyticsIdentity, AuthAccessWriteScope],
@@ -86454,6 +86647,7 @@ const makeWsRpcLayer = (currentSession, previewAutomationBroker) => WsRpcGroup.t
86454
86647
  const usageAnalytics = yield* UsageAnalytics;
86455
86648
  const starterSuggestions = yield* StarterSuggestions;
86456
86649
  const promptEnhancement = yield* PromptEnhancement;
86650
+ const threadTitleRegeneration = yield* ThreadTitleRegeneration;
86457
86651
  const serverVersionAdvisory = yield* ServerVersionAdvisoryService;
86458
86652
  const supervisedUpdate = yield* Effect.serviceOption(SupervisedUpdateClient);
86459
86653
  const supervisedUpdateStream = Option.match(supervisedUpdate, {
@@ -86820,6 +87014,8 @@ const makeWsRpcLayer = (currentSession, previewAutomationBroker) => WsRpcGroup.t
86820
87014
  [WS_METHODS.starterSuggestionsGet]: (input) => observeRpcEffect$1(WS_METHODS.starterSuggestionsGet, starterSuggestions.get(input), { "rpc.aggregate": "assist" }),
86821
87015
  [WS_METHODS.promptEnhancementGenerate]: (input) => observeRpcEffect$1(WS_METHODS.promptEnhancementGenerate, promptEnhancement.generate(input), { "rpc.aggregate": "assist" }),
86822
87016
  [WS_METHODS.promptEnhancementCancel]: (input) => observeRpcEffect$1(WS_METHODS.promptEnhancementCancel, promptEnhancement.cancel(input), { "rpc.aggregate": "assist" }),
87017
+ [WS_METHODS.threadTitleRegenerationGetQueue]: (_input) => observeRpcEffect$1(WS_METHODS.threadTitleRegenerationGetQueue, threadTitleRegeneration.getQueue, { "rpc.aggregate": "assist" }),
87018
+ [WS_METHODS.threadTitleRegenerationEnqueue]: (input) => observeRpcEffect$1(WS_METHODS.threadTitleRegenerationEnqueue, threadTitleRegeneration.enqueue(input), { "rpc.aggregate": "assist" }),
86823
87019
  [ORCHESTRATION_WS_METHODS.dispatchCommand]: (command) => observeRpcEffect$1(ORCHESTRATION_WS_METHODS.dispatchCommand, normalizeDispatchCommand(command).pipe(Effect.flatMap(dispatchNormalizedCommand), Effect.mapError((cause) => isOrchestrationDispatchCommandError(cause) ? cause : new OrchestrationDispatchCommandError({
86824
87020
  message: "Failed to dispatch orchestration command",
86825
87021
  cause
@@ -87351,7 +87547,7 @@ const websocketRpcRouteLayer = Layer.unwrap(Effect.gen(function* () {
87351
87547
  const serverAuth = yield* EnvironmentAuth;
87352
87548
  const sessions = yield* SessionStore;
87353
87549
  const session = yield* serverAuth.authenticateWebSocketUpgrade(request).pipe(Effect.catchIf(isServerAuthCredentialError, (error) => failEnvironmentAuthInvalid(serverAuthCredentialReason(error))), Effect.catchIf(isServerAuthInternalError, (error) => failEnvironmentInternal("internal_error", error)));
87354
- const rpcWebSocketHttpEffect = yield* RpcServer.toHttpEffectWebsocket(WsRpcGroup, { disableTracing: true }).pipe(Effect.provide(makeWsRpcLayer(session, previewAutomationBroker).pipe(Layer.provideMerge(RpcSerialization.layerJson), Layer.provide(layer$34), Layer.provide(layer$7.pipe(Layer.provide(layer$19.pipe(Layer.provide(Layer.mergeAll(layer$27, layer$25, layer$23, layer$21)), Layer.provideMerge(layer$39), Layer.provide(layer$37.pipe(Layer.provide(layer$38))))), Layer.provide(layer$40))))));
87550
+ const rpcWebSocketHttpEffect = yield* RpcServer.toHttpEffectWebsocket(WsRpcGroup, { disableTracing: true }).pipe(Effect.provide(makeWsRpcLayer(session, previewAutomationBroker).pipe(Layer.provideMerge(RpcSerialization.layerJson), Layer.provide(layer$35), Layer.provide(layer$7.pipe(Layer.provide(layer$20.pipe(Layer.provide(Layer.mergeAll(layer$28, layer$26, layer$24, layer$22)), Layer.provideMerge(layer$40), Layer.provide(layer$38.pipe(Layer.provide(layer$39))))), Layer.provide(layer$41))))));
87355
87551
  return yield* Effect.acquireUseRelease(Effect.gen(function* () {
87356
87552
  yield* sessions.markConnected(session.sessionId);
87357
87553
  const live = yield* Ref.updateAndGet(liveConnections, (count) => count + 1);
@@ -88606,6 +88802,7 @@ const dependencies$1 = [
88606
88802
  McpInvocationContext,
88607
88803
  ProjectionSnapshotQuery,
88608
88804
  OrchestrationEngineService,
88805
+ ThreadTitleRegeneration,
88609
88806
  Crypto.Crypto
88610
88807
  ];
88611
88808
  const ThreadSetTitleTool = Tool.make("thread_set_title", {
@@ -88629,7 +88826,14 @@ const ThreadRequestResolveTool = Tool.make("thread_request_resolve", {
88629
88826
  failure: ThreadControlError,
88630
88827
  dependencies: dependencies$1
88631
88828
  }).annotate(Tool.Title, "Request resolve for this thread").annotate(Tool.Destructive, false).annotate(Tool.Idempotent, true);
88632
- const ThreadToolkit = Toolkit.make(ThreadSetTitleTool, ThreadRequestResolveTool);
88829
+ const ThreadRegenerateTitleTool = Tool.make("thread_regenerate_title", {
88830
+ description: "Queue background title regeneration for this Zettai Labs Code thread using the server's configured text-generation model and title-regeneration settings. Applies only to the calling thread; repeated calls while it is queued or processing return the existing queue state.",
88831
+ parameters: Schema$1.Struct({}),
88832
+ success: ThreadTitleRegenerationEnqueueResult,
88833
+ failure: ThreadControlError,
88834
+ dependencies: dependencies$1
88835
+ }).annotate(Tool.Title, "Regenerate this thread's title").annotate(Tool.Destructive, false).annotate(Tool.Idempotent, true);
88836
+ const ThreadToolkit = Toolkit.make(ThreadSetTitleTool, ThreadRequestResolveTool, ThreadRegenerateTitleTool);
88633
88837
  //#endregion
88634
88838
  //#region src/mcp/toolkits/thread/handlers.ts
88635
88839
  const failureMessage$1 = (cause) => cause instanceof Error ? cause.message : String(cause);
@@ -88681,7 +88885,11 @@ const ThreadToolkitHandlersLive = ThreadToolkit.toLayer({
88681
88885
  status: "pending",
88682
88886
  appliesAfterCurrentTurn: thread.latestTurn?.state === "running" || thread.session?.status === "running"
88683
88887
  };
88684
- }).pipe(Effect.mapError(asThreadError("thread_request_resolve")))
88888
+ }).pipe(Effect.mapError(asThreadError("thread_request_resolve"))),
88889
+ thread_regenerate_title: () => Effect.gen(function* () {
88890
+ const { invocation } = yield* requireCallingThread("thread_regenerate_title");
88891
+ return yield* (yield* ThreadTitleRegeneration).enqueue({ threadId: invocation.threadId });
88892
+ }).pipe(Effect.mapError(asThreadError("thread_regenerate_title")))
88685
88893
  });
88686
88894
  //#endregion
88687
88895
  //#region src/mcp/toolkits/workspace/tools.ts
@@ -92874,7 +93082,7 @@ const ObservabilityLive = Layer.unwrap(Effect.gen(function* () {
92874
93082
  sink,
92875
93083
  ...delegate ? { delegate } : {}
92876
93084
  });
92877
- return Layer.mergeAll(Layer.succeed(Tracer.Tracer, tracer), layer$45(sink));
93085
+ return Layer.mergeAll(Layer.succeed(Tracer.Tracer, tracer), layer$46(sink));
92878
93086
  })).pipe(Layer.provideMerge(otlpSerializationLayer));
92879
93087
  const metricsLayer = config.otlpMetricsUrl === void 0 ? Layer.empty : OtlpMetrics.layer({
92880
93088
  url: config.otlpMetricsUrl,
@@ -93579,46 +93787,47 @@ const PlatformServicesLive = Layer.unwrap(Effect.gen(function* () {
93579
93787
  return layer;
93580
93788
  }
93581
93789
  }));
93582
- const ReactorLayerLive = Layer.empty.pipe(Layer.provideMerge(OrchestrationReactorLive), Layer.provideMerge(ProviderRuntimeIngestionLive), Layer.provideMerge(ProviderCommandReactorLive), Layer.provideMerge(CheckpointReactorLive), Layer.provideMerge(ThreadLifecycleReactorLive), Layer.provideMerge(layer$1.pipe(Layer.provide(layer$72))), Layer.provideMerge(RuntimeReceiptBusLive));
93790
+ const ReactorLayerLive = Layer.empty.pipe(Layer.provideMerge(OrchestrationReactorLive), Layer.provideMerge(ProviderRuntimeIngestionLive), Layer.provideMerge(ProviderCommandReactorLive), Layer.provideMerge(CheckpointReactorLive), Layer.provideMerge(ThreadLifecycleReactorLive), Layer.provideMerge(layer$1.pipe(Layer.provide(layer$73))), Layer.provideMerge(RuntimeReceiptBusLive));
93583
93791
  const ProviderSessionDirectoryLayerLive = ProviderSessionDirectoryLive.pipe(Layer.provide(layer$4));
93584
93792
  const ProviderLayerLive = ProviderServiceLive.pipe(Layer.provide(ProviderAdapterRegistryLive), Layer.provideMerge(ProviderSessionDirectoryLayerLive));
93585
93793
  const PersistenceLayerLive = Layer.empty.pipe(Layer.provideMerge(layerConfig));
93586
- const UsageAnalyticsLayerLive = layer$11.pipe(Layer.provide(PersistenceLayerLive), Layer.provide(layer$65));
93587
- const VcsDriverRegistryLayerLive = layer$37.pipe(Layer.provide(layer$38));
93588
- const SourceControlProviderRegistryLayerLive = layer$19.pipe(Layer.provide(Layer.mergeAll(layer$27, layer$25, layer$23, layer$21)), Layer.provideMerge(layer$39), Layer.provideMerge(VcsDriverRegistryLayerLive));
93589
- const GitManagerLayerLive = layer$18.pipe(Layer.provideMerge(layer$28), Layer.provideMerge(layer$39), Layer.provideMerge(SourceControlProviderRegistryLayerLive), Layer.provideMerge(layer$51));
93590
- const GitLayerLive = Layer.empty.pipe(Layer.provideMerge(GitManagerLayerLive), Layer.provideMerge(layer$39));
93591
- const GitWorkflowLayerLive = layer$17.pipe(Layer.provideMerge(VcsDriverRegistryLayerLive), Layer.provideMerge(GitLayerLive));
93592
- const SourceControlRepositoryServiceLayerLive = layer$6.pipe(Layer.provideMerge(layer$39), Layer.provideMerge(SourceControlProviderRegistryLayerLive));
93593
- const ReviewLayerLive = layer$14.pipe(Layer.provideMerge(layer$39), Layer.provideMerge(VcsDriverRegistryLayerLive));
93594
- const VcsLayerLive = Layer.empty.pipe(Layer.provideMerge(layer$38), Layer.provideMerge(VcsDriverRegistryLayerLive), Layer.provideMerge(layer$15.pipe(Layer.provide(VcsDriverRegistryLayerLive))), Layer.provideMerge(GitWorkflowLayerLive), Layer.provideMerge(ReviewLayerLive), Layer.provideMerge(SourceControlRepositoryServiceLayerLive), Layer.provideMerge(layer$16.pipe(Layer.provide(GitWorkflowLayerLive))));
93595
- const CheckpointingLayerLive = Layer.empty.pipe(Layer.provideMerge(layer$35), Layer.provideMerge(layer$36.pipe(Layer.provide(VcsDriverRegistryLayerLive))));
93596
- const PortScannerLayerLive = layer$57.pipe(Layer.provide(layer$67));
93597
- const TerminalLayerLive = layer$56.pipe(Layer.provide(PtyAdapterLive), Layer.provide(PortScannerLayerLive));
93598
- const BrowserRuntimeLayerLive = layer$59;
93794
+ const UsageAnalyticsLayerLive = layer$12.pipe(Layer.provide(PersistenceLayerLive), Layer.provide(layer$66));
93795
+ const VcsDriverRegistryLayerLive = layer$38.pipe(Layer.provide(layer$39));
93796
+ const SourceControlProviderRegistryLayerLive = layer$20.pipe(Layer.provide(Layer.mergeAll(layer$28, layer$26, layer$24, layer$22)), Layer.provideMerge(layer$40), Layer.provideMerge(VcsDriverRegistryLayerLive));
93797
+ const GitManagerLayerLive = layer$19.pipe(Layer.provideMerge(layer$29), Layer.provideMerge(layer$40), Layer.provideMerge(SourceControlProviderRegistryLayerLive), Layer.provideMerge(layer$52));
93798
+ const GitLayerLive = Layer.empty.pipe(Layer.provideMerge(GitManagerLayerLive), Layer.provideMerge(layer$40));
93799
+ const GitWorkflowLayerLive = layer$18.pipe(Layer.provideMerge(VcsDriverRegistryLayerLive), Layer.provideMerge(GitLayerLive));
93800
+ const SourceControlRepositoryServiceLayerLive = layer$6.pipe(Layer.provideMerge(layer$40), Layer.provideMerge(SourceControlProviderRegistryLayerLive));
93801
+ const ReviewLayerLive = layer$15.pipe(Layer.provideMerge(layer$40), Layer.provideMerge(VcsDriverRegistryLayerLive));
93802
+ const VcsLayerLive = Layer.empty.pipe(Layer.provideMerge(layer$39), Layer.provideMerge(VcsDriverRegistryLayerLive), Layer.provideMerge(layer$16.pipe(Layer.provide(VcsDriverRegistryLayerLive))), Layer.provideMerge(GitWorkflowLayerLive), Layer.provideMerge(ReviewLayerLive), Layer.provideMerge(SourceControlRepositoryServiceLayerLive), Layer.provideMerge(layer$17.pipe(Layer.provide(GitWorkflowLayerLive))));
93803
+ const CheckpointingLayerLive = Layer.empty.pipe(Layer.provideMerge(layer$36), Layer.provideMerge(layer$37.pipe(Layer.provide(VcsDriverRegistryLayerLive))));
93804
+ const PortScannerLayerLive = layer$58.pipe(Layer.provide(layer$68));
93805
+ const TerminalLayerLive = layer$57.pipe(Layer.provide(PtyAdapterLive), Layer.provide(PortScannerLayerLive));
93806
+ const BrowserRuntimeLayerLive = layer$60;
93599
93807
  const PreviewManagerLayerLive = layerServerHosted$1.pipe(Layer.provide(BrowserRuntimeLayerLive));
93600
- const ServerPreviewAutomationLayerLive = layer$33.pipe(Layer.provide(PreviewManagerLayerLive), Layer.provide(BrowserRuntimeLayerLive));
93808
+ const ServerPreviewAutomationLayerLive = layer$34.pipe(Layer.provide(PreviewManagerLayerLive), Layer.provide(BrowserRuntimeLayerLive));
93601
93809
  const PreviewLayerLive = Layer.mergeAll(BrowserRuntimeLayerLive, PreviewManagerLayerLive, ServerPreviewAutomationLayerLive, PortScannerLayerLive);
93602
- const WorkspaceEntriesLayerLive = layer$30.pipe(Layer.provide(layer$47));
93603
- const WorkspaceFileSystemLayerLive = layer$29.pipe(Layer.provide(layer$47), Layer.provide(WorkspaceEntriesLayerLive));
93604
- const WorkspaceLayerLive = Layer.mergeAll(layer$47, WorkspaceEntriesLayerLive, WorkspaceFileSystemLayerLive);
93605
- const ProjectFaviconResolverLayerLive = layer$46.pipe(Layer.provide(layer$47));
93606
- const AuthLayerLive = layer$69.pipe(Layer.provideMerge(PersistenceLayerLive), Layer.provide(layer$72));
93607
- const CloudManagedEndpointRuntimeLive = Layer.mergeAll(RelayClientLive, layer.pipe(Layer.provide(layer$72), Layer.provide(RelayClientLive)));
93810
+ const WorkspaceEntriesLayerLive = layer$31.pipe(Layer.provide(layer$48));
93811
+ const WorkspaceFileSystemLayerLive = layer$30.pipe(Layer.provide(layer$48), Layer.provide(WorkspaceEntriesLayerLive));
93812
+ const WorkspaceLayerLive = Layer.mergeAll(layer$48, WorkspaceEntriesLayerLive, WorkspaceFileSystemLayerLive);
93813
+ const ProjectFaviconResolverLayerLive = layer$47.pipe(Layer.provide(layer$48));
93814
+ const AuthLayerLive = layer$70.pipe(Layer.provideMerge(PersistenceLayerLive), Layer.provide(layer$73));
93815
+ const CloudManagedEndpointRuntimeLive = Layer.mergeAll(RelayClientLive, layer.pipe(Layer.provide(layer$73), Layer.provide(RelayClientLive)));
93608
93816
  const ProviderRuntimeLayerLive = ProviderSessionReaperLive.pipe(Layer.provideMerge(ProviderLayerLive), Layer.provideMerge(OrchestrationLayerLive));
93609
- const ProviderUsageLayerLive = layer$42.pipe(Layer.provide(layer$43), Layer.provideMerge(ProviderRuntimeLayerLive));
93610
- const KeybindingsLayerLive = layer$62.pipe(Layer.provide(layer$63));
93611
- const ServerSettingsLayerLive = layer$54.pipe(Layer.provide(layer$63), Layer.provide(layer$72));
93612
- const RuntimeCoreDependenciesLive = ReactorLayerLive.pipe(Layer.provideMerge(CheckpointingLayerLive), Layer.provideMerge(SourceControlProviderRegistryLayerLive), Layer.provideMerge(GitLayerLive), Layer.provideMerge(VcsLayerLive), Layer.provideMerge(ProviderUsageLayerLive), Layer.provideMerge(Layer.mergeAll(TerminalLayerLive, PreviewLayerLive)), Layer.provideMerge(Layer.mergeAll(PersistenceLayerLive, UsageAnalyticsLayerLive)), Layer.provideMerge(KeybindingsLayerLive), Layer.provideMerge(ProviderRegistryLive), Layer.provideMerge(ProviderInstanceRegistryHydrationLive), Layer.provideMerge(ProviderEventLoggersLive), Layer.provideMerge(OpenCodeRuntimeLive), Layer.provideMerge(Layer.mergeAll(ServerSettingsLayerLive, layer$10.pipe(Layer.provide(PersistenceLayerLive)))), Layer.provideMerge(WorkspaceLayerLive), Layer.provideMerge(ProjectFaviconResolverLayerLive), Layer.provideMerge(layer$64), Layer.provideMerge(layer$65), Layer.provideMerge(AuthLayerLive), Layer.provideMerge(layer$72), Layer.provideMerge(Layer.mergeAll(layer$68.pipe(Layer.provide(layer$72)), CloudManagedEndpointRuntimeLive)));
93613
- const StarterSuggestionsLayerLive = layer$50.pipe(Layer.provide(RuntimeCoreDependenciesLive));
93614
- const StarterSuggestionPrecomputationLayerLive = layer$49.pipe(Layer.provideMerge(StarterSuggestionsLayerLive), Layer.provide(RuntimeCoreDependenciesLive));
93615
- const PromptEnhancementLayerLive = layer$9.pipe(Layer.provide(RuntimeCoreDependenciesLive));
93817
+ const ProviderUsageLayerLive = layer$43.pipe(Layer.provide(layer$44), Layer.provideMerge(ProviderRuntimeLayerLive));
93818
+ const KeybindingsLayerLive = layer$63.pipe(Layer.provide(layer$64));
93819
+ const ServerSettingsLayerLive = layer$55.pipe(Layer.provide(layer$64), Layer.provide(layer$73));
93820
+ const RuntimeCoreDependenciesLive = ReactorLayerLive.pipe(Layer.provideMerge(CheckpointingLayerLive), Layer.provideMerge(SourceControlProviderRegistryLayerLive), Layer.provideMerge(GitLayerLive), Layer.provideMerge(VcsLayerLive), Layer.provideMerge(ProviderUsageLayerLive), Layer.provideMerge(Layer.mergeAll(TerminalLayerLive, PreviewLayerLive)), Layer.provideMerge(Layer.mergeAll(PersistenceLayerLive, UsageAnalyticsLayerLive)), Layer.provideMerge(KeybindingsLayerLive), Layer.provideMerge(ProviderRegistryLive), Layer.provideMerge(ProviderInstanceRegistryHydrationLive), Layer.provideMerge(ProviderEventLoggersLive), Layer.provideMerge(OpenCodeRuntimeLive), Layer.provideMerge(Layer.mergeAll(ServerSettingsLayerLive, layer$11.pipe(Layer.provide(PersistenceLayerLive)))), Layer.provideMerge(WorkspaceLayerLive), Layer.provideMerge(ProjectFaviconResolverLayerLive), Layer.provideMerge(layer$65), Layer.provideMerge(layer$66), Layer.provideMerge(AuthLayerLive), Layer.provideMerge(layer$73), Layer.provideMerge(Layer.mergeAll(layer$69.pipe(Layer.provide(layer$73)), CloudManagedEndpointRuntimeLive)));
93821
+ const StarterSuggestionsLayerLive = layer$51.pipe(Layer.provide(RuntimeCoreDependenciesLive));
93822
+ const StarterSuggestionPrecomputationLayerLive = layer$50.pipe(Layer.provideMerge(StarterSuggestionsLayerLive), Layer.provide(RuntimeCoreDependenciesLive));
93823
+ const PromptEnhancementLayerLive = layer$10.pipe(Layer.provide(RuntimeCoreDependenciesLive));
93824
+ const ThreadTitleRegenerationLayerLive = layer$9.pipe(Layer.provide(RuntimeCoreDependenciesLive));
93616
93825
  const ServerVersionAdvisoryLayerLive = layer$8.pipe(Layer.provide(RuntimeCoreDependenciesLive), Layer.provide(FetchHttpClient.layer));
93617
- const ServerRestartDrainLayerLive = layer$55.pipe(Layer.provide(RuntimeCoreDependenciesLive));
93618
- const RuntimeDependenciesLive = RuntimeCoreDependenciesLive.pipe(Layer.provideMerge(StarterSuggestionPrecomputationLayerLive), Layer.provideMerge(PromptEnhancementLayerLive), Layer.provideMerge(ServerRestartDrainLayerLive), Layer.provideMerge(ServerVersionAdvisoryLayerLive), Layer.provideMerge(layer$66), Layer.provideMerge(layer$53), Layer.provideMerge(layer$13), Layer.provideMerge(layer$12), Layer.provideMerge(layer$52), Layer.provideMerge(layer$61), Layer.provideMerge(layer$5.pipe(Layer.provide(layer$67))), Layer.provideMerge(layer$60), Layer.provide(layer$77));
93619
- const RuntimeServicesLive = layer$48.pipe(Layer.provideMerge(RuntimeDependenciesLive));
93826
+ const ServerRestartDrainLayerLive = layer$56.pipe(Layer.provide(RuntimeCoreDependenciesLive));
93827
+ const RuntimeDependenciesLive = RuntimeCoreDependenciesLive.pipe(Layer.provideMerge(StarterSuggestionPrecomputationLayerLive), Layer.provideMerge(PromptEnhancementLayerLive), Layer.provideMerge(ThreadTitleRegenerationLayerLive), Layer.provideMerge(ServerRestartDrainLayerLive), Layer.provideMerge(ServerVersionAdvisoryLayerLive), Layer.provideMerge(layer$67), Layer.provideMerge(layer$54), Layer.provideMerge(layer$14), Layer.provideMerge(layer$13), Layer.provideMerge(layer$53), Layer.provideMerge(layer$62), Layer.provideMerge(layer$5.pipe(Layer.provide(layer$68))), Layer.provideMerge(layer$61), Layer.provide(layer$78));
93828
+ const RuntimeServicesLive = layer$49.pipe(Layer.provideMerge(RuntimeDependenciesLive));
93620
93829
  const routesLayer = Layer.mergeAll(Layer.mergeAll(HttpApiBuilder.layer(EnvironmentHttpApi).pipe(Layer.provide(authHttpApiLayer), Layer.provide(connectHttpApiLayer), Layer.provide(orchestrationHttpApiLayer), Layer.provide(serverEnvironmentHttpApiLayer), Layer.provide(environmentAuthenticatedAuthLayer)), otlpTracesProxyRouteLayer, providerUsageMetricsRouteLayer, assetRouteLayer, staticAndDevRouteLayer, websocketRpcRouteLayer), layer$2.pipe(Layer.provide(layer$3))).pipe(Layer.provide(browserApiCorsLayer), Layer.provide(httpCompressionLayer));
93621
- routesLayer.pipe(Layer.provide(layer$32));
93830
+ routesLayer.pipe(Layer.provide(layer$33));
93622
93831
  const serverHostedRoutesLayer = routesLayer.pipe(Layer.provide(layerServerHosted));
93623
93832
  const makeServerLayer = Layer.unwrap(Effect.gen(function* () {
93624
93833
  const config = yield* ServerConfig;
@@ -93670,7 +93879,7 @@ const makeServerLayer = Layer.unwrap(Effect.gen(function* () {
93670
93879
  if (typeof address === "string" || !("port" in address)) return;
93671
93880
  yield* Effect.forkScoped(Effect.sleep("250 millis").pipe(Effect.andThen(reconcileDesiredCloudLink(`http://127.0.0.1:${address.port}`)), Effect.retry({ times: 4 }), Effect.tap(() => Effect.logInfo("ZL Cloud desired link reconciled on startup")), Effect.catch((cause) => Effect.logWarning("Failed to reconcile ZL Cloud desired link on startup", { cause }))));
93672
93881
  }));
93673
- return Layer.mergeAll(HttpRouter.serve(serverHostedRoutesLayer, { disableLogger: !config.logWebSocketEvents }), httpListeningLayer, runtimeStateLayer, tailscaleServeLayer, cloudDesiredLinkReconcileLayer).pipe(Layer.provideMerge(RuntimeServicesLive), Layer.provideMerge(serverRelayBrokerTracingLayer), Layer.provideMerge(layer$41), Layer.provideMerge(HttpServerLive), Layer.provide(ObservabilityLive), Layer.provideMerge(FetchHttpClient.layer), Layer.provideMerge(layer$40), Layer.provideMerge(PlatformServicesLive));
93882
+ return Layer.mergeAll(HttpRouter.serve(serverHostedRoutesLayer, { disableLogger: !config.logWebSocketEvents }), httpListeningLayer, runtimeStateLayer, tailscaleServeLayer, cloudDesiredLinkReconcileLayer).pipe(Layer.provideMerge(RuntimeServicesLive), Layer.provideMerge(serverRelayBrokerTracingLayer), Layer.provideMerge(layer$42), Layer.provideMerge(HttpServerLive), Layer.provide(ObservabilityLive), Layer.provideMerge(FetchHttpClient.layer), Layer.provideMerge(layer$41), Layer.provideMerge(PlatformServicesLive));
93674
93883
  }));
93675
93884
  const runServer = Layer.launch(makeServerLayer);
93676
93885
  //#endregion
@@ -94033,7 +94242,7 @@ const runUpdateSupervisor = Effect.acquireRelease(Effect.tryPromise({
94033
94242
  const updateSupervisorCommand = Command.make("update-supervisor").pipe(Command.withDescription("Run the local npm-service update supervisor. Intended for the dedicated user service."), Command.withHandler(() => runUpdateSupervisor));
94034
94243
  //#endregion
94035
94244
  //#region src/bin.ts
94036
- const CliRuntimeLayer = Layer.mergeAll(NodeServices.layer, layer$77);
94245
+ const CliRuntimeLayer = Layer.mergeAll(NodeServices.layer, layer$78);
94037
94246
  const cloudPublicConfigMissingMessage = "ZL Cloud commands are unavailable: this build is missing ZL Cloud public configuration.";
94038
94247
  var CloudPublicConfigMissingError = class extends CliError$1.UserError {
94039
94248
  get message() {