zl-code 0.0.35 → 0.0.37

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 (85) hide show
  1. package/dist/bin.mjs +431 -218
  2. package/dist/client/assets/{DiffPanel-BqNt6hcz.js → DiffPanel-8Hd4abfD.js} +1 -1
  3. package/dist/client/assets/{FilePreviewPanel-DrJVoXud.js → FilePreviewPanel-B0v3dGUG.js} +1 -1
  4. package/dist/client/assets/{PreviewPanel-DNUb9-4V.js → PreviewPanel-CBRrermS.js} +1 -1
  5. package/dist/client/assets/{angular-html-BmtGAQ01.js → angular-html-w_J7uOTH.js} +1 -1
  6. package/dist/client/assets/{angular-ts-DsiGqxiq.js → angular-ts-ChuybIZB.js} +1 -1
  7. package/dist/client/assets/{apl-Cu2FuD0S.js → apl-CHTTccnk.js} +1 -1
  8. package/dist/client/assets/{astro-Bc4XoX24.js → astro-C_2It4v2.js} +1 -1
  9. package/dist/client/assets/{blade-DoJ4jnxs.js → blade-Cv3pCAo4.js} +1 -1
  10. package/dist/client/assets/{c-DzRZBPcH.js → c-3ZJXtsqs.js} +1 -1
  11. package/dist/client/assets/{cobol-DPQNciHE.js → cobol-DJu6YyKA.js} +1 -1
  12. package/dist/client/assets/{coffee-lWAIpKll.js → coffee-Dwt-W_DG.js} +1 -1
  13. package/dist/client/assets/{cpp-B0VuSywE.js → cpp-BFj0kF4u.js} +1 -1
  14. package/dist/client/assets/{crystal-C_N2McY9.js → crystal-DYaJQXBX.js} +1 -1
  15. package/dist/client/assets/{css-SmF66bQJ.js → css-vqI_jgjF.js} +1 -1
  16. package/dist/client/assets/{edge-B-ET1YHr.js → edge-DXikc9C1.js} +1 -1
  17. package/dist/client/assets/{elixir-CpmiOy4w.js → elixir-CgrjNprH.js} +1 -1
  18. package/dist/client/assets/{elm-CkD2m37L.js → elm-I1PEhUNn.js} +1 -1
  19. package/dist/client/assets/{erb-DMlDC06r.js → erb-mpS0FUk6.js} +1 -1
  20. package/dist/client/assets/{fileCommentAnnotations-C2eAwvy8.js → fileCommentAnnotations-W3EuEy4s.js} +1 -1
  21. package/dist/client/assets/{git-rebase-DcgyhIr2.js → git-rebase-BDHyHLGp.js} +1 -1
  22. package/dist/client/assets/{glimmer-js-DBNoFmYI.js → glimmer-js-CLFryDjt.js} +1 -1
  23. package/dist/client/assets/{glimmer-ts-DW2ILbNo.js → glimmer-ts-XxWFEem7.js} +1 -1
  24. package/dist/client/assets/{glsl-Dx01UlmW.js → glsl-BS4fzPpz.js} +1 -1
  25. package/dist/client/assets/{graphql-cWDeUQQG.js → graphql-DNf3Ec1r.js} +1 -1
  26. package/dist/client/assets/{hack-DKtxvnn8.js → hack-BUK0q_s5.js} +1 -1
  27. package/dist/client/assets/{haml-OrVzSusi.js → haml-DNRDw7nW.js} +1 -1
  28. package/dist/client/assets/{handlebars-CaS_YX46.js → handlebars-9Uv6Cm5E.js} +1 -1
  29. package/dist/client/assets/{html-CKL5e9k5.js → html-40jjOrIF.js} +1 -1
  30. package/dist/client/assets/{html-derivative-DGs_cUTW.js → html-derivative-CP9E1cYa.js} +1 -1
  31. package/dist/client/assets/{http-C0RNzxtI.js → http-frkGiTAX.js} +1 -1
  32. package/dist/client/assets/{hurl-Bo5uJ7BP.js → hurl-CtOvrEmD.js} +1 -1
  33. package/dist/client/assets/index-UCHAZiPS.js +577 -0
  34. package/dist/client/assets/{java-ouFgdhyE.js → java-DCLAq1Hc.js} +1 -1
  35. package/dist/client/assets/{javascript-CobXAilT.js → javascript-DGVNfbca.js} +1 -1
  36. package/dist/client/assets/{jinja-B0WuYOBR.js → jinja-BCXEU0ks.js} +1 -1
  37. package/dist/client/assets/{jison-zyMwu47j.js → jison-BpusGSjg.js} +1 -1
  38. package/dist/client/assets/{json-Ci6WNqm_.js → json-CzAy9SfW.js} +1 -1
  39. package/dist/client/assets/{jsx-C77Glka0.js → jsx-CNWJHpZl.js} +1 -1
  40. package/dist/client/assets/{julia-BHg95W3I.js → julia-BQQSPjZM.js} +1 -1
  41. package/dist/client/assets/{just-Bhjneedw.js → just-BDyIjZhm.js} +1 -1
  42. package/dist/client/assets/{latex-MAyeCTbg.js → latex-jgmiom2A.js} +1 -1
  43. package/dist/client/assets/{liquid-CtmuXxCT.js → liquid-D5ZqsH2K.js} +1 -1
  44. package/dist/client/assets/{lua-BjTJbC5C.js → lua--XSJev50.js} +1 -1
  45. package/dist/client/assets/{marko-V7TTsmWR.js → marko-j7tPPIxD.js} +1 -1
  46. package/dist/client/assets/{mdc-D2pfjGLh.js → mdc-Cb3vuotT.js} +1 -1
  47. package/dist/client/assets/{nginx-CCHOgOr0.js → nginx-BDFekwHE.js} +1 -1
  48. package/dist/client/assets/{nim-Ca8NB3i6.js → nim-Da43fXYu.js} +1 -1
  49. package/dist/client/assets/{perl-DQWxYtEg.js → perl-C61bfF7X.js} +1 -1
  50. package/dist/client/assets/{php-_i3-I7x6.js → php-blkWriJl.js} +1 -1
  51. package/dist/client/assets/{pug-BnXLSmfu.js → pug-CpfO2SPx.js} +1 -1
  52. package/dist/client/assets/{qml-BrKF8z4Z.js → qml-CmmsPD81.js} +1 -1
  53. package/dist/client/assets/{r-EFpA2uQd.js → r-COr5FZ3L.js} +1 -1
  54. package/dist/client/assets/{razor-DIgYfzFG.js → razor-5Fl2VlUp.js} +1 -1
  55. package/dist/client/assets/{regexp-BAmYrH3i.js → regexp-C7AJTlnp.js} +1 -1
  56. package/dist/client/assets/{rst-DcLD-9AD.js → rst-Dey5m7Ic.js} +1 -1
  57. package/dist/client/assets/{ruby-Dtn3YjXF.js → ruby-Djr8JNs3.js} +1 -1
  58. package/dist/client/assets/{sas-x195xVp8.js → sas-ByCAsTbG.js} +1 -1
  59. package/dist/client/assets/{scss-C7_e0JKs.js → scss-045w4eSe.js} +1 -1
  60. package/dist/client/assets/{shellscript-BY_T2f8A.js → shellscript-JSRLw6nl.js} +1 -1
  61. package/dist/client/assets/{shellsession-D9jftGru.js → shellsession-D7d7S9NH.js} +1 -1
  62. package/dist/client/assets/{soy-D_yKQEqE.js → soy-DhUh5bMe.js} +1 -1
  63. package/dist/client/assets/{sql-Bq7VLbWI.js → sql-cVADQ_Mp.js} +1 -1
  64. package/dist/client/assets/{stata-B2Uc2s2p.js → stata-D0sFyA0R.js} +1 -1
  65. package/dist/client/assets/{surrealql-DBfdNRG3.js → surrealql-Do71DcU4.js} +1 -1
  66. package/dist/client/assets/{svelte-CNQ1hYJ5.js → svelte-DlIcVLzA.js} +1 -1
  67. package/dist/client/assets/{templ-BYgG_hc-.js → templ-vk4ZuIBo.js} +1 -1
  68. package/dist/client/assets/{tex-Be6sY6WI.js → tex-DnuFx37Z.js} +1 -1
  69. package/dist/client/assets/textarea-0pwrMGBs.js +44 -0
  70. package/dist/client/assets/{ts-tags-X-29ASsJ.js → ts-tags-B9cqu4Zt.js} +1 -1
  71. package/dist/client/assets/{tsx-HqUv_SmK.js → tsx-5f7myNT6.js} +1 -1
  72. package/dist/client/assets/{twig-sdPvh98u.js → twig-GVLeNCVB.js} +1 -1
  73. package/dist/client/assets/{typescript-C-9DSeKA.js → typescript-BeeFJxgQ.js} +1 -1
  74. package/dist/client/assets/{vue-DdkaeCek.js → vue-7aTgMJNi.js} +1 -1
  75. package/dist/client/assets/{vue-html-De-2ArH0.js → vue-html-DxlVklCk.js} +1 -1
  76. package/dist/client/assets/{vue-vine-F58dAXUZ.js → vue-vine-BRkNl7fU.js} +1 -1
  77. package/dist/client/assets/{xml-D0SmDf_D.js → xml-BX7XB-4l.js} +1 -1
  78. package/dist/client/assets/{xsl-JGZfNKW_.js → xsl-D8yzJiGQ.js} +1 -1
  79. package/dist/client/assets/{yaml-B3hZzHcx.js → yaml-Dt3mMaKo.js} +1 -1
  80. package/dist/client/index.html +3 -3
  81. package/dist/npm-service-runtime.sh +33 -0
  82. package/dist/zl-code-server-npm.service +1 -1
  83. package/package.json +1 -1
  84. package/dist/client/assets/index-mkFt7-1I.js +0 -577
  85. package/dist/client/assets/textarea-l_98G8HM.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.35";
249
+ var version = "0.0.37";
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;
@@ -33985,9 +34030,13 @@ const make$59 = (options = {}) => Effect.gen(function* () {
33985
34030
  const loadExisting = yield* provideFsAndPath(readPersistedServerRestartState(config.serverRestartStatePath));
33986
34031
  if (Option.isSome(loadExisting)) {
33987
34032
  const startupObservedAt = yield* nowIso$9;
34033
+ const recoveredInterruptedDrain = loadExisting.value.drainStartedAt && !loadExisting.value.shutdownCompletedAt;
33988
34034
  yield* persistAndSet(withStatePatch(loadExisting.value, {
33989
34035
  startupObservedAt,
33990
- ...loadExisting.value.drainStartedAt && !loadExisting.value.shutdownCompletedAt ? { shutdownOutcome: loadExisting.value.systemdServiceResult === "timeout" ? "timeout" : "unclean" } : {}
34036
+ ...recoveredInterruptedDrain ? {
34037
+ shutdownCompletedAt: startupObservedAt,
34038
+ shutdownOutcome: loadExisting.value.systemdServiceResult === "timeout" ? "timeout" : "unclean"
34039
+ } : {}
33991
34040
  }));
33992
34041
  }
33993
34042
  const requestDrain = Effect.gen(function* () {
@@ -34079,7 +34128,7 @@ const make$59 = (options = {}) => Effect.gen(function* () {
34079
34128
  authorizeMutation
34080
34129
  });
34081
34130
  });
34082
- const layer$55 = Layer.effect(ServerRestartDrain, make$59());
34131
+ const layer$56 = Layer.effect(ServerRestartDrain, make$60());
34083
34132
  //#endregion
34084
34133
  //#region src/serverSettings.ts
34085
34134
  /**
@@ -34199,7 +34248,7 @@ function stripDefaultServerSettings(current, defaults) {
34199
34248
  }
34200
34249
  return Object.is(current, defaults) ? void 0 : current;
34201
34250
  }
34202
- const make$58 = Effect.gen(function* () {
34251
+ const make$59 = Effect.gen(function* () {
34203
34252
  const { settingsPath } = yield* ServerConfig;
34204
34253
  const configFileWatcher = yield* ConfigFileWatcher;
34205
34254
  const fs = yield* FileSystem.FileSystem;
@@ -34412,7 +34461,7 @@ const make$58 = Effect.gen(function* () {
34412
34461
  }
34413
34462
  };
34414
34463
  });
34415
- const layer$54 = Layer.effect(ServerSettingsService, make$58);
34464
+ const layer$55 = Layer.effect(ServerSettingsService, make$59);
34416
34465
  //#endregion
34417
34466
  //#region src/diagnostics/ProcessDiagnostics.ts
34418
34467
  const PROCESS_QUERY_TIMEOUT_MS = 1e3;
@@ -34707,7 +34756,7 @@ function assertDescendantPid(pid) {
34707
34756
  }));
34708
34757
  }));
34709
34758
  }
34710
- const make$57 = Effect.gen(function* () {
34759
+ const make$58 = Effect.gen(function* () {
34711
34760
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
34712
34761
  const read = Effect.gen(function* () {
34713
34762
  const readAt = yield* DateTime.now;
@@ -34751,7 +34800,7 @@ const make$57 = Effect.gen(function* () {
34751
34800
  signal
34752
34801
  });
34753
34802
  });
34754
- const layer$53 = Layer.effect(ProcessDiagnostics, make$57);
34803
+ const layer$54 = Layer.effect(ProcessDiagnostics, make$58);
34755
34804
  //#endregion
34756
34805
  //#region src/process/AgentProcessPriority.ts
34757
34806
  /**
@@ -35070,7 +35119,7 @@ var AnalyticsService = class AnalyticsService extends Context.Service()("@zl-too
35070
35119
  resetIdentity: Effect.succeed(true)
35071
35120
  }));
35072
35121
  };
35073
- const make$56 = Effect.gen(function* () {
35122
+ const make$57 = Effect.gen(function* () {
35074
35123
  const telemetryConfig = yield* TelemetryEnvConfig;
35075
35124
  const httpClient = yield* HttpClient$1.HttpClient;
35076
35125
  const serverConfig = yield* ServerConfig;
@@ -35177,7 +35226,7 @@ const make$56 = Effect.gen(function* () {
35177
35226
  resetIdentity
35178
35227
  });
35179
35228
  });
35180
- const layer$52 = Layer.effect(AnalyticsService, make$56);
35229
+ const layer$53 = Layer.effect(AnalyticsService, make$57);
35181
35230
  AnalyticsService.layerTest;
35182
35231
  //#endregion
35183
35232
  //#region src/provider/Services/ProviderSessionReaper.ts
@@ -35225,11 +35274,11 @@ const makeTextGenerationFromRegistry = (registry) => TextGeneration.of({
35225
35274
  generateStarterSuggestions: (input) => resolveInstance(registry, "generateStarterSuggestions", input.modelSelection.instanceId).pipe(Effect.flatMap((textGeneration) => textGeneration.generateStarterSuggestions(input))),
35226
35275
  generatePromptEnhancement: (input) => resolveInstance(registry, "generatePromptEnhancement", input.modelSelection.instanceId).pipe(Effect.flatMap((textGeneration) => textGeneration.generatePromptEnhancement(input)))
35227
35276
  });
35228
- const make$55 = Effect.gen(function* () {
35277
+ const make$56 = Effect.gen(function* () {
35229
35278
  const registry = yield* ProviderInstanceRegistry;
35230
35279
  return makeTextGenerationFromRegistry(registry);
35231
35280
  });
35232
- const layer$51 = Layer.effect(TextGeneration, make$55);
35281
+ const layer$52 = Layer.effect(TextGeneration, make$56);
35233
35282
  //#endregion
35234
35283
  //#region src/assist/StarterSuggestions.ts
35235
35284
  const RECENT_THREAD_LIMIT = 8;
@@ -35293,7 +35342,7 @@ const sanitizeGeneratedSuggestions = (suggestions) => {
35293
35342
  return unique;
35294
35343
  };
35295
35344
  var StarterSuggestions = class extends Context.Service()("@zl-tools/server/assist/StarterSuggestions") {};
35296
- const make$54 = Effect.gen(function* () {
35345
+ const make$55 = Effect.gen(function* () {
35297
35346
  const sql = yield* SqlClient.SqlClient;
35298
35347
  const projections = yield* ProjectionSnapshotQuery;
35299
35348
  const serverSettings = yield* ServerSettingsService;
@@ -35509,12 +35558,12 @@ const make$54 = Effect.gen(function* () {
35509
35558
  precompute
35510
35559
  });
35511
35560
  });
35512
- const layer$50 = Layer.effect(StarterSuggestions, make$54);
35561
+ const layer$51 = Layer.effect(StarterSuggestions, make$55);
35513
35562
  //#endregion
35514
35563
  //#region src/assist/StarterSuggestionPrecomputation.ts
35515
35564
  const isPrecomputeLifecycleEvent = (event) => event.type === "thread.resolved" || event.type === "thread.archived";
35516
35565
  var StarterSuggestionPrecomputation = class extends Context.Service()("@zl-tools/server/assist/StarterSuggestionPrecomputation") {};
35517
- const make$53 = Effect.gen(function* () {
35566
+ const make$54 = Effect.gen(function* () {
35518
35567
  const orchestrationEngine = yield* OrchestrationEngineService;
35519
35568
  const projections = yield* ProjectionSnapshotQuery;
35520
35569
  const starterSuggestions = yield* StarterSuggestions;
@@ -35554,7 +35603,7 @@ const make$53 = Effect.gen(function* () {
35554
35603
  drain: worker.drain
35555
35604
  });
35556
35605
  });
35557
- const layer$49 = Layer.effect(StarterSuggestionPrecomputation, make$53);
35606
+ const layer$50 = Layer.effect(StarterSuggestionPrecomputation, make$54);
35558
35607
  //#endregion
35559
35608
  //#region src/serverRuntimeStartup.ts
35560
35609
  var ServerRuntimeStartupError = class extends Schema$1.TaggedErrorClass()("ServerRuntimeStartupError", {
@@ -35695,7 +35744,7 @@ const maybeOpenBrowser = (target) => Effect.gen(function* () {
35695
35744
  yield* (yield* ExternalLauncher).launchBrowser(target).pipe(Effect.catch(() => Effect.logInfo("browser auto-open unavailable", { hint: `Open ${target} in your browser.` })));
35696
35745
  });
35697
35746
  const runStartupPhase = (phase, effect) => effect.pipe(Effect.annotateSpans({ "startup.phase": phase }), Effect.withSpan(`server.startup.${phase}`));
35698
- const make$52 = Effect.gen(function* () {
35747
+ const make$53 = Effect.gen(function* () {
35699
35748
  const serverConfig = yield* ServerConfig;
35700
35749
  const keybindings = yield* Keybindings;
35701
35750
  const orchestrationReactor = yield* OrchestrationReactor;
@@ -35836,7 +35885,7 @@ const make$52 = Effect.gen(function* () {
35836
35885
  enqueueCommand: commandGate.enqueueCommand
35837
35886
  };
35838
35887
  });
35839
- const layer$48 = Layer.effect(ServerRuntimeStartup, make$52);
35888
+ const layer$49 = Layer.effect(ServerRuntimeStartup, make$53);
35840
35889
  //#endregion
35841
35890
  //#region src/workspace/WorkspacePaths.ts
35842
35891
  /**
@@ -35907,7 +35956,7 @@ function expandHomePath$3(input, path) {
35907
35956
  if (input.startsWith("~/") || input.startsWith("~\\")) return path.join(NodeOS.homedir(), input.slice(2));
35908
35957
  return input;
35909
35958
  }
35910
- const make$51 = Effect.gen(function* () {
35959
+ const make$52 = Effect.gen(function* () {
35911
35960
  const fileSystem = yield* FileSystem.FileSystem;
35912
35961
  const path = yield* Path.Path;
35913
35962
  const statWorkspaceRoot = Effect.fn("WorkspacePaths.statWorkspaceRoot")(function* (workspaceRoot, normalizedWorkspaceRoot, phase) {
@@ -35964,7 +36013,7 @@ const make$51 = Effect.gen(function* () {
35964
36013
  resolveRelativePathWithinRoot
35965
36014
  });
35966
36015
  });
35967
- const layer$47 = Layer.effect(WorkspacePaths, make$51);
36016
+ const layer$48 = Layer.effect(WorkspacePaths, make$52);
35968
36017
  //#endregion
35969
36018
  //#region src/cli/project.ts
35970
36019
  const isEnvironmentHttpCommonError = Schema$1.is(EnvironmentHttpCommonError);
@@ -36070,7 +36119,7 @@ const projectCommandUuid = Crypto.Crypto.pipe(Effect.flatMap((crypto) => crypto.
36070
36119
  operation: "generateProjectCommandId",
36071
36120
  cause
36072
36121
  })));
36073
- 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)));
36074
36123
  const PROJECT_CLI_LIVE_SERVER_TIMEOUT = Duration.seconds(1);
36075
36124
  const withProjectCliSessionToken = (environmentAuth, run) => Effect.acquireUseRelease(environmentAuth.issueSession({
36076
36125
  scopes: AuthAdministrativeScopes,
@@ -36161,7 +36210,7 @@ const runProjectMutation = Effect.fn("runProjectMutation")(function* (flags, run
36161
36210
  });
36162
36211
  yield* Console.log(output);
36163
36212
  }));
36164
- 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)));
36165
36214
  return yield* Effect.gen(function* () {
36166
36215
  const snapshot = yield* getOfflineSnapshot();
36167
36216
  const orchestrationEngine = yield* OrchestrationEngineService;
@@ -36172,7 +36221,7 @@ const runProjectMutation = Effect.fn("runProjectMutation")(function* (flags, run
36172
36221
  });
36173
36222
  yield* Console.log(output);
36174
36223
  }).pipe(Effect.provide(offlineRuntimeLayer));
36175
- }).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)))));
36176
36225
  });
36177
36226
  const projectAddCommand = Command.make("add", {
36178
36227
  ...projectLocationFlags,
@@ -37055,7 +37104,7 @@ function extractIconHref(source) {
37055
37104
  return null;
37056
37105
  }
37057
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) }));
37058
- const make$50 = Effect.gen(function* () {
37107
+ const make$51 = Effect.gen(function* () {
37059
37108
  const fileSystem = yield* FileSystem.FileSystem;
37060
37109
  const path = yield* Path.Path;
37061
37110
  const workspacePaths = yield* WorkspacePaths;
@@ -37118,7 +37167,7 @@ const make$50 = Effect.gen(function* () {
37118
37167
  });
37119
37168
  return ProjectFaviconResolver.of({ resolvePath });
37120
37169
  });
37121
- const layer$46 = Layer.effect(ProjectFaviconResolver, make$50);
37170
+ const layer$47 = Layer.effect(ProjectFaviconResolver, make$51);
37122
37171
  //#endregion
37123
37172
  //#region src/assets/AssetAccess.ts
37124
37173
  const ASSET_ROUTE_PREFIX = "/api/assets";
@@ -37456,10 +37505,10 @@ const resolveAsset = Effect.fn("AssetAccess.resolveAsset")(function* (token, rel
37456
37505
  //#endregion
37457
37506
  //#region src/observability/BrowserTraceCollector.ts
37458
37507
  var BrowserTraceCollector = class extends Context.Service()("@zl-tools/server/observability/BrowserTraceCollector") {};
37459
- const make$49 = (sink) => BrowserTraceCollector.of({ record: (records) => Effect.sync(() => {
37508
+ const make$50 = (sink) => BrowserTraceCollector.of({ record: (records) => Effect.sync(() => {
37460
37509
  for (const record of records) sink.push(record);
37461
37510
  }) });
37462
- const layer$45 = (sink) => Layer.succeed(BrowserTraceCollector, make$49(sink));
37511
+ const layer$46 = (sink) => Layer.succeed(BrowserTraceCollector, make$50(sink));
37463
37512
  //#endregion
37464
37513
  //#region src/providerUsage/ProviderUsageMetrics.ts
37465
37514
  const METRIC_PREFIX = "ai_usage_";
@@ -37569,6 +37618,11 @@ function limitSection(value, maxChars) {
37569
37618
  if (value.length <= maxChars) return value;
37570
37619
  return `${value.slice(0, maxChars)}\n\n[truncated]`;
37571
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
+ }
37572
37626
  /** Normalise a raw commit subject to imperative-mood, ≤72 chars, no trailing period. */
37573
37627
  function sanitizeCommitSubject(raw) {
37574
37628
  const withoutTrailingPeriod = (raw.trim().split(/\r?\n/g)[0]?.trim() ?? "").replace(/[.]+$/g, "").trim();
@@ -37589,6 +37643,14 @@ function sanitizeThreadTitle(raw) {
37589
37643
  if (normalized.length <= 50) return normalized;
37590
37644
  return `${normalized.slice(0, 47).trimEnd()}...`;
37591
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
+ }
37592
37654
  /** CLI name to human-readable label, e.g. "codex" → "Codex CLI (`codex`)" */
37593
37655
  function cliLabel(cliName) {
37594
37656
  return `${cliName.charAt(0).toUpperCase() + cliName.slice(1)} CLI (\`${cliName}\`)`;
@@ -37737,6 +37799,20 @@ function buildBranchNamePrompt(input) {
37737
37799
  };
37738
37800
  }
37739
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
+ }
37740
37816
  return {
37741
37817
  prompt: buildPromptFromMessage({
37742
37818
  instruction: "You write concise thread titles for coding conversations.",
@@ -39374,15 +39450,17 @@ const makeClaudeTextGeneration = Effect.fn("makeClaudeTextGeneration")(function*
39374
39450
  generateThreadTitle: Effect.fn("ClaudeTextGeneration.generateThreadTitle")(function* (input) {
39375
39451
  const { prompt, outputSchema } = buildThreadTitlePrompt({
39376
39452
  message: input.message,
39377
- attachments: input.attachments
39453
+ attachments: input.attachments,
39454
+ regeneration: input.regeneration
39378
39455
  });
39379
- return { title: sanitizeThreadTitle((yield* runClaudeJson({
39456
+ const generated = yield* runClaudeJson({
39380
39457
  operation: "generateThreadTitle",
39381
39458
  cwd: input.cwd,
39382
39459
  prompt,
39383
39460
  outputSchemaJson: outputSchema,
39384
39461
  modelSelection: input.modelSelection
39385
- })).title) };
39462
+ });
39463
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
39386
39464
  }),
39387
39465
  generateStarterSuggestions: Effect.fn("ClaudeTextGeneration.generateStarterSuggestions")(function* (input) {
39388
39466
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -42815,16 +42893,18 @@ const makeCodexTextGeneration = Effect.fn("makeCodexTextGeneration")(function* (
42815
42893
  const { imagePaths } = yield* materializeImageAttachments("generateThreadTitle", input.attachments);
42816
42894
  const { prompt, outputSchema } = buildThreadTitlePrompt({
42817
42895
  message: input.message,
42818
- attachments: input.attachments
42896
+ attachments: input.attachments,
42897
+ regeneration: input.regeneration
42819
42898
  });
42820
- return { title: sanitizeThreadTitle((yield* runCodexJson({
42899
+ const generated = yield* runCodexJson({
42821
42900
  operation: "generateThreadTitle",
42822
42901
  cwd: input.cwd,
42823
42902
  prompt,
42824
42903
  outputSchemaJson: outputSchema,
42825
42904
  imagePaths,
42826
42905
  modelSelection: input.modelSelection
42827
- })).title) };
42906
+ });
42907
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
42828
42908
  }),
42829
42909
  generateStarterSuggestions: Effect.fn("CodexTextGeneration.generateStarterSuggestions")(function* (input) {
42830
42910
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -59027,7 +59107,7 @@ const makeTerminationError$1 = (handle) => Effect.match(handle.exitCode, {
59027
59107
  //#endregion
59028
59108
  //#region ../../packages/effect-codex-app-server/src/client.ts
59029
59109
  var CodexAppServerClient = class extends Context.Service()("effect-codex-app-server/client/CodexAppServerClient") {};
59030
- 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) {
59031
59111
  const requestHandlers = /* @__PURE__ */ new Map();
59032
59112
  const notificationHandlers = /* @__PURE__ */ new Map();
59033
59113
  let unknownRequestHandler;
@@ -59094,7 +59174,7 @@ const make$48 = Effect.fn("effect-codex-app-server/CodexAppServerClient.make")(f
59094
59174
  const layerChildProcess$1 = (handle, options = {}) => Layer.effect(CodexAppServerClient, makeChildProcessClient(handle, options));
59095
59175
  const makeChildProcessClient = Effect.fn("effect-codex-app-server/CodexAppServerClient.makeChildProcessClient")(function* (handle, options) {
59096
59176
  yield* Stream.runDrain(handle.stderr).pipe(Effect.ignore, Effect.forkScoped);
59097
- return yield* make$48(makeChildStdio$1(handle), options, makeTerminationError$1(handle));
59177
+ return yield* make$49(makeChildStdio$1(handle), options, makeTerminationError$1(handle));
59098
59178
  });
59099
59179
  //#endregion
59100
59180
  //#region src/provider/Layers/CodexProvider.ts
@@ -65415,7 +65495,7 @@ const makeTerminationError = (handle) => Effect.match(handle.exitCode, {
65415
65495
  //#endregion
65416
65496
  //#region ../../packages/effect-acp/src/client.ts
65417
65497
  var AcpClient = class extends Context.Service()("effect-acp/client/AcpClient") {};
65418
- 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) {
65419
65499
  const coreHandlers = {};
65420
65500
  const notificationHandlers = {
65421
65501
  sessionUpdate: {
@@ -65573,7 +65653,7 @@ const make$47 = Effect.fn("effect-acp/AcpClient.make")(function* (stdio, options
65573
65653
  const layerChildProcess = (handle, options = {}) => {
65574
65654
  const stdio = makeChildStdio(handle);
65575
65655
  const terminationError = makeTerminationError(handle);
65576
- return Layer.effect(AcpClient, make$47(stdio, options, terminationError));
65656
+ return Layer.effect(AcpClient, make$48(stdio, options, terminationError));
65577
65657
  };
65578
65658
  //#endregion
65579
65659
  //#region ../../packages/shared/src/toolActivity.ts
@@ -66038,7 +66118,7 @@ function isNonInteractiveAuthMethodUnavailableError(error) {
66038
66118
  return isAcpRequestError$2(error) && error.errorMessage === "ACP agent does not advertise the required non-interactive authentication method.";
66039
66119
  }
66040
66120
  var AcpSessionRuntime = class extends Context.Service()("@zl-tools/server/provider/acp/AcpSessionRuntime") {};
66041
- const make$46 = (options) => Effect.gen(function* () {
66121
+ const make$47 = (options) => Effect.gen(function* () {
66042
66122
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
66043
66123
  const runtimeScope = yield* Scope.Scope;
66044
66124
  const eventQueue = yield* Queue.unbounded();
@@ -66351,7 +66431,7 @@ const make$46 = (options) => Effect.gen(function* () {
66351
66431
  notify: acp.raw.notify
66352
66432
  };
66353
66433
  });
66354
- const layer$44 = (options) => Layer.effect(AcpSessionRuntime, make$46(options));
66434
+ const layer$45 = (options) => Layer.effect(AcpSessionRuntime, make$47(options));
66355
66435
  function sessionConfigOptionsFromSetup(response) {
66356
66436
  return response?.configOptions ?? [];
66357
66437
  }
@@ -66719,7 +66799,7 @@ function buildCursorDiscoveredModelsFromAvailableModelsResponse(response) {
66719
66799
  }
66720
66800
  const makeCursorAcpProbeRuntime = (cursorSettings, environment) => Effect.gen(function* () {
66721
66801
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
66722
- const acpContext = yield* Layer.build(layer$44({
66802
+ const acpContext = yield* Layer.build(layer$45({
66723
66803
  spawn: {
66724
66804
  command: cursorSettings.binaryPath,
66725
66805
  args: [...cursorSettings.apiEndpoint ? ["-e", cursorSettings.apiEndpoint] : [], "acp"],
@@ -67168,7 +67248,7 @@ function buildCursorAcpSpawnInput(cursorSettings, cwd, environment) {
67168
67248
  };
67169
67249
  }
67170
67250
  const makeCursorAcpRuntime = (input) => Effect.gen(function* () {
67171
- const acpContext = yield* Layer.build(layer$44({
67251
+ const acpContext = yield* Layer.build(layer$45({
67172
67252
  ...input,
67173
67253
  spawn: buildCursorAcpSpawnInput(input.cursorSettings, input.cwd, input.environment),
67174
67254
  authMethodId: "cursor_login",
@@ -67320,15 +67400,17 @@ const makeCursorTextGeneration = Effect.fn("makeCursorTextGeneration")(function*
67320
67400
  generateThreadTitle: Effect.fn("CursorTextGeneration.generateThreadTitle")(function* (input) {
67321
67401
  const { prompt, outputSchema } = buildThreadTitlePrompt({
67322
67402
  message: input.message,
67323
- attachments: input.attachments
67403
+ attachments: input.attachments,
67404
+ regeneration: input.regeneration
67324
67405
  });
67325
- return { title: sanitizeThreadTitle((yield* runCursorJson({
67406
+ const generated = yield* runCursorJson({
67326
67407
  operation: "generateThreadTitle",
67327
67408
  cwd: input.cwd,
67328
67409
  prompt,
67329
67410
  outputSchemaJson: outputSchema,
67330
67411
  modelSelection: input.modelSelection
67331
- })).title) };
67412
+ });
67413
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
67332
67414
  }),
67333
67415
  generateStarterSuggestions: Effect.fn("CursorTextGeneration.generateStarterSuggestions")(function* (input) {
67334
67416
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -68610,7 +68692,7 @@ function resolveGrokAuthMethodId(environment) {
68610
68692
  return environment?.[GROK_API_KEY_ENV$1]?.trim() ? GROK_AUTH_METHOD_API_KEY$1 : GROK_AUTH_METHOD_CACHED_TOKEN$1;
68611
68693
  }
68612
68694
  const makeGrokAcpRuntime = (input) => Effect.gen(function* () {
68613
- const acpContext = yield* Layer.build(layer$44({
68695
+ const acpContext = yield* Layer.build(layer$45({
68614
68696
  ...input,
68615
68697
  spawn: buildGrokAcpSpawnInput(input.grokSettings, input.cwd, input.environment),
68616
68698
  authMethodId: resolveGrokAuthMethodId(input.environment),
@@ -68754,15 +68836,17 @@ const makeGrokTextGeneration = Effect.fn("makeGrokTextGeneration")(function* (gr
68754
68836
  generateThreadTitle: Effect.fn("GrokTextGeneration.generateThreadTitle")(function* (input) {
68755
68837
  const { prompt, outputSchema } = buildThreadTitlePrompt({
68756
68838
  message: input.message,
68757
- attachments: input.attachments
68839
+ attachments: input.attachments,
68840
+ regeneration: input.regeneration
68758
68841
  });
68759
- return { title: sanitizeThreadTitle((yield* runGrokJson({
68842
+ const generated = yield* runGrokJson({
68760
68843
  operation: "generateThreadTitle",
68761
68844
  cwd: input.cwd,
68762
68845
  prompt,
68763
68846
  outputSchemaJson: outputSchema,
68764
68847
  modelSelection: input.modelSelection
68765
- })).title) };
68848
+ });
68849
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
68766
68850
  }),
68767
68851
  generateStarterSuggestions: Effect.fn("GrokTextGeneration.generateStarterSuggestions")(function* (input) {
68768
68852
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -70444,7 +70528,7 @@ const makeOpenCodeRuntime = Effect.gen(function* () {
70444
70528
  };
70445
70529
  });
70446
70530
  var OpenCodeRuntime = class extends Context.Service()("@zl-tools/server/provider/opencodeRuntime") {};
70447
- const OpenCodeRuntimeLive = Layer.effect(OpenCodeRuntime, makeOpenCodeRuntime).pipe(Layer.provide(layer$77));
70531
+ const OpenCodeRuntimeLive = Layer.effect(OpenCodeRuntime, makeOpenCodeRuntime).pipe(Layer.provide(layer$78));
70448
70532
  //#endregion
70449
70533
  //#region src/textGeneration/OpenCodeTextGeneration.ts
70450
70534
  const OPENCODE_TEXT_GENERATION_IDLE_TTL = "30 seconds";
@@ -70771,16 +70855,18 @@ const makeOpenCodeTextGeneration = Effect.fn("makeOpenCodeTextGeneration")(funct
70771
70855
  generateThreadTitle: Effect.fn("OpenCodeTextGeneration.generateThreadTitle")(function* (input) {
70772
70856
  const { prompt, outputSchema } = buildThreadTitlePrompt({
70773
70857
  message: input.message,
70774
- attachments: input.attachments
70858
+ attachments: input.attachments,
70859
+ regeneration: input.regeneration
70775
70860
  });
70776
- return { title: sanitizeThreadTitle((yield* runOpenCodeJson({
70861
+ const generated = yield* runOpenCodeJson({
70777
70862
  operation: "generateThreadTitle",
70778
70863
  cwd: input.cwd,
70779
70864
  prompt,
70780
70865
  outputSchemaJson: outputSchema,
70781
70866
  modelSelection: input.modelSelection,
70782
70867
  attachments: input.attachments
70783
- })).title) };
70868
+ });
70869
+ return { title: input.regeneration ? sanitizeRegeneratedThreadTitle(generated.title, input.regeneration.maxCharacters) : sanitizeThreadTitle(generated.title) };
70784
70870
  }),
70785
70871
  generateStarterSuggestions: Effect.fn("OpenCodeTextGeneration.generateStarterSuggestions")(function* (input) {
70786
70872
  const { prompt, outputSchema } = buildStarterSuggestionsPrompt(input);
@@ -73352,7 +73438,7 @@ function sourceFromRow(row) {
73352
73438
  };
73353
73439
  }
73354
73440
  var ProviderUsageStore = class extends Context.Service()("@zl-tools/server/providerUsage/ProviderUsageStore") {};
73355
- const make$45 = Effect.gen(function* () {
73441
+ const make$46 = Effect.gen(function* () {
73356
73442
  const sql = yield* SqlClient.SqlClient;
73357
73443
  const listSnapshots = Effect.gen(function* () {
73358
73444
  const rows = yield* sql`
@@ -73488,7 +73574,7 @@ const make$45 = Effect.gen(function* () {
73488
73574
  deleteSource
73489
73575
  });
73490
73576
  });
73491
- const layer$43 = Layer.effect(ProviderUsageStore, make$45);
73577
+ const layer$44 = Layer.effect(ProviderUsageStore, make$46);
73492
73578
  //#endregion
73493
73579
  //#region src/providerUsage/scheduler.ts
73494
73580
  const MAX_EXPONENTIAL_BACKOFF_SECONDS = 1800;
@@ -73609,7 +73695,7 @@ function mergeCanonicalWindows(previous, incoming) {
73609
73695
  return Array.from(byKey.values());
73610
73696
  }
73611
73697
  var ProviderUsageService = class extends Context.Service()("@zl-tools/server/providerUsage/ProviderUsageService") {};
73612
- const make$44 = Effect.gen(function* () {
73698
+ const make$45 = Effect.gen(function* () {
73613
73699
  const store = yield* ProviderUsageStore;
73614
73700
  const serverSettings = yield* ServerSettingsService;
73615
73701
  const serverConfig = yield* ServerConfig;
@@ -74373,7 +74459,7 @@ const make$44 = Effect.gen(function* () {
74373
74459
  streamSnapshots: Stream.fromPubSub(changes)
74374
74460
  });
74375
74461
  });
74376
- const layer$42 = Layer.effect(ProviderUsageService, make$44);
74462
+ const layer$43 = Layer.effect(ProviderUsageService, make$45);
74377
74463
  //#endregion
74378
74464
  //#region src/cloud/traceRelayRequest.ts
74379
74465
  const traceRelayRequest = (effect) => effect.pipe(withRelayClientTracing);
@@ -74585,7 +74671,7 @@ const layerNode = Layer.effect(HttpResponseCompression, Effect.gen(function* ()
74585
74671
  }));
74586
74672
  const layerBun = Layer.succeed(HttpResponseCompression, { gzip: (body, options) => HttpServerResponse$1.raw(new Response(body).body.pipeThrough(new CompressionStream("gzip")), options) });
74587
74673
  /** Selects the runtime implementation the same way the HTTP server layer does. */
74588
- 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));
74589
74675
  //#endregion
74590
74676
  //#region src/httpCors.ts
74591
74677
  const browserApiCorsAllowedMethods = [
@@ -76593,7 +76679,7 @@ const classifyNonZeroExit = (command, stderr) => {
76593
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";
76594
76680
  return "command-failed";
76595
76681
  };
76596
- const make$43 = Effect.gen(function* () {
76682
+ const make$44 = Effect.gen(function* () {
76597
76683
  const processRunner = yield* ProcessRunner;
76598
76684
  const run = Effect.fn("VcsProcess.run")(function* (input) {
76599
76685
  const baseError = {
@@ -76650,7 +76736,7 @@ const make$43 = Effect.gen(function* () {
76650
76736
  });
76651
76737
  return VcsProcess.of({ run });
76652
76738
  });
76653
- 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));
76654
76740
  //#endregion
76655
76741
  //#region src/vcs/VcsDriver.ts
76656
76742
  var VcsDriver = class extends Context.Service()("@zl-tools/server/vcs/VcsDriver") {};
@@ -77101,12 +77187,12 @@ const makeVcsDriver = Effect.gen(function* () {
77101
77187
  const driver = yield* makeVcsDriverShape();
77102
77188
  return VcsDriver.of(driver);
77103
77189
  });
77104
- const make$42 = Effect.gen(function* () {
77190
+ const make$43 = Effect.gen(function* () {
77105
77191
  const git = yield* makeGitVcsDriverCore();
77106
77192
  return GitVcsDriver.of(git);
77107
77193
  });
77108
77194
  Layer.effect(VcsDriver, makeVcsDriver);
77109
- const layer$39 = Layer.effect(GitVcsDriver, make$42);
77195
+ const layer$40 = Layer.effect(GitVcsDriver, make$43);
77110
77196
  //#endregion
77111
77197
  //#region src/vcs/VcsProjectConfig.ts
77112
77198
  const ProjectVcsConfigJson = fromLenientJson(Schema$1.Struct({
@@ -77138,7 +77224,7 @@ const logVcsProjectConfigError = (error) => Effect.logWarning(error).pipe(Effect
77138
77224
  configPath: error.configPath,
77139
77225
  errorTag: error._tag
77140
77226
  }));
77141
- const make$41 = Effect.gen(function* () {
77227
+ const make$42 = Effect.gen(function* () {
77142
77228
  const fileSystem = yield* FileSystem.FileSystem;
77143
77229
  const path = yield* Path.Path;
77144
77230
  const findConfigPath = Effect.fn("VcsProjectConfig.findConfigPath")(function* (cwd) {
@@ -77179,7 +77265,7 @@ const make$41 = Effect.gen(function* () {
77179
77265
  });
77180
77266
  return VcsProjectConfig.of({ resolveKind });
77181
77267
  });
77182
- const layer$38 = Layer.effect(VcsProjectConfig, make$41);
77268
+ const layer$39 = Layer.effect(VcsProjectConfig, make$42);
77183
77269
  //#endregion
77184
77270
  //#region src/vcs/VcsDriverRegistry.ts
77185
77271
  const DETECTION_CACHE_CAPACITY = 2048;
@@ -77199,7 +77285,7 @@ function parseDetectionCacheKey(key) {
77199
77285
  cwd: key.slice(separatorIndex + 1)
77200
77286
  };
77201
77287
  }
77202
- const make$40 = Effect.gen(function* () {
77288
+ const make$41 = Effect.gen(function* () {
77203
77289
  const projectConfig = yield* VcsProjectConfig;
77204
77290
  const git = yield* makeVcsDriver;
77205
77291
  const drivers = { git };
@@ -77256,7 +77342,7 @@ const make$40 = Effect.gen(function* () {
77256
77342
  resolve
77257
77343
  });
77258
77344
  });
77259
- 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));
77260
77346
  //#endregion
77261
77347
  //#region src/checkpointing/CheckpointStore.ts
77262
77348
  /**
@@ -77276,7 +77362,7 @@ const layer$37 = Layer.effect(VcsDriverRegistry, make$40).pipe(Layer.provide(lay
77276
77362
  */
77277
77363
  /** Service tag for checkpoint persistence and restore operations. */
77278
77364
  var CheckpointStore = class extends Context.Service()("@zl-tools/server/checkpointing/CheckpointStore") {};
77279
- const make$39 = Effect.gen(function* () {
77365
+ const make$40 = Effect.gen(function* () {
77280
77366
  const vcsRegistry = yield* VcsDriverRegistry;
77281
77367
  const resolveCheckpoints = Effect.fn("CheckpointStore.resolveCheckpoints")(function* (operation, cwd) {
77282
77368
  const handle = yield* vcsRegistry.resolve({ cwd });
@@ -77315,7 +77401,7 @@ const make$39 = Effect.gen(function* () {
77315
77401
  deleteCheckpointRefs
77316
77402
  });
77317
77403
  });
77318
- const layer$36 = Layer.effect(CheckpointStore, make$39);
77404
+ const layer$37 = Layer.effect(CheckpointStore, make$40);
77319
77405
  //#endregion
77320
77406
  //#region src/checkpointing/CheckpointDiffQuery.ts
77321
77407
  /**
@@ -77337,7 +77423,7 @@ function buildTurnDiffResult(input, diff) {
77337
77423
  diff
77338
77424
  };
77339
77425
  }
77340
- const make$38 = Effect.gen(function* () {
77426
+ const make$39 = Effect.gen(function* () {
77341
77427
  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;
77342
77428
  const checkpointStore = yield* CheckpointStore;
77343
77429
  const getTurnDiff = Effect.fn("getTurnDiff")(function* (input) {
@@ -77473,7 +77559,7 @@ const make$38 = Effect.gen(function* () {
77473
77559
  getFullThreadDiff
77474
77560
  });
77475
77561
  });
77476
- const layer$35 = Layer.effect(CheckpointDiffQuery, make$38);
77562
+ const layer$36 = Layer.effect(CheckpointDiffQuery, make$39);
77477
77563
  //#endregion
77478
77564
  //#region src/orchestration/Normalizer.ts
77479
77565
  const canonicalizeClientCommandTimestamps = (command, receivedAt) => {
@@ -77789,7 +77875,7 @@ function makeUpdateState(input) {
77789
77875
  output: input.output ?? null
77790
77876
  };
77791
77877
  }
77792
- const make$37 = Effect.fn("ProviderMaintenanceRunner.make")(function* () {
77878
+ const make$38 = Effect.fn("ProviderMaintenanceRunner.make")(function* () {
77793
77879
  const providerRegistry = yield* ProviderRegistry;
77794
77880
  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
77795
77881
  const httpClient = yield* HttpClient.HttpClient;
@@ -77904,7 +77990,7 @@ const make$37 = Effect.fn("ProviderMaintenanceRunner.make")(function* () {
77904
77990
  });
77905
77991
  return ProviderMaintenanceRunner.of({ updateProvider });
77906
77992
  });
77907
- const layer$34 = Layer.effect(ProviderMaintenanceRunner, make$37());
77993
+ const layer$35 = Layer.effect(ProviderMaintenanceRunner, make$38());
77908
77994
  //#endregion
77909
77995
  //#region src/mcp/McpInvocationContext.ts
77910
77996
  var McpInvocationContext = class extends Context.Service()("@zl-tools/server/mcp/McpInvocationContext") {};
@@ -78090,7 +78176,7 @@ const SERVER_OPERATIONS = /* @__PURE__ */ new Set([
78090
78176
  "waitFor"
78091
78177
  ]);
78092
78178
  var ServerPreviewAutomation = class extends Context.Service()("@zl-tools/server/preview/ServerPreviewAutomation") {};
78093
- const make$36 = Effect.gen(function* ServerPreviewAutomationMake() {
78179
+ const make$37 = Effect.gen(function* ServerPreviewAutomationMake() {
78094
78180
  const manager = yield* PreviewManager;
78095
78181
  const browser = yield* BrowserRuntime;
78096
78182
  const invoke = Effect.fn("ServerPreviewAutomation.invoke")(function* (request) {
@@ -78240,7 +78326,7 @@ const make$36 = Effect.gen(function* ServerPreviewAutomationMake() {
78240
78326
  invoke
78241
78327
  });
78242
78328
  });
78243
- const layer$33 = Layer.effect(ServerPreviewAutomation, make$36);
78329
+ const layer$34 = Layer.effect(ServerPreviewAutomation, make$37);
78244
78330
  //#endregion
78245
78331
  //#region src/mcp/PreviewAutomationBroker.ts
78246
78332
  var PreviewAutomationBroker = class extends Context.Service()("@zl-tools/server/mcp/PreviewAutomationBroker") {};
@@ -78628,8 +78714,8 @@ const makeWithServerHosted = Effect.fn("PreviewAutomationBroker.make")(function*
78628
78714
  invoke
78629
78715
  });
78630
78716
  });
78631
- const make$35 = makeWithServerHosted();
78632
- const layer$32 = Layer.effect(PreviewAutomationBroker, make$35);
78717
+ const make$36 = makeWithServerHosted();
78718
+ const layer$33 = Layer.effect(PreviewAutomationBroker, make$36);
78633
78719
  const layerServerHosted = Layer.effect(PreviewAutomationBroker, Effect.gen(function* () {
78634
78720
  const serverHosted = yield* ServerPreviewAutomation;
78635
78721
  return yield* makeWithServerHosted(serverHosted);
@@ -78781,7 +78867,7 @@ const waitForScan = (cwd, finder, onFailure) => Effect.try({
78781
78867
  timeout: WORKSPACE_INDEX_SCAN_TIMEOUT
78782
78868
  })
78783
78869
  }), Effect.withSpan("WorkspaceSearchIndex.waitForScan"));
78784
- const make$34 = Effect.fn("WorkspaceSearchIndex.make")(function* (cwd) {
78870
+ const make$35 = Effect.fn("WorkspaceSearchIndex.make")(function* (cwd) {
78785
78871
  const finder = yield* Effect.acquireRelease(createFinder(cwd), (finder) => Effect.try({
78786
78872
  try: () => finder.destroy(),
78787
78873
  catch: (cause) => new WorkspaceSearchIndexDestroyFailed({
@@ -78855,9 +78941,9 @@ const make$34 = Effect.fn("WorkspaceSearchIndex.make")(function* (cwd) {
78855
78941
  * workspace root. WorkspaceSearchIndexMap owns memoization and idle cleanup;
78856
78942
  * using a default cwd here would mix resources from different workspaces.
78857
78943
  */
78858
- const layer$31 = (cwd) => Layer.effect(WorkspaceSearchIndex, make$34(cwd));
78944
+ const layer$32 = (cwd) => Layer.effect(WorkspaceSearchIndex, make$35(cwd));
78859
78945
  var WorkspaceSearchIndexMap = class extends LayerMap.Service()("@zl-tools/server/workspace/WorkspaceSearchIndexMap", {
78860
- lookup: layer$31,
78946
+ lookup: layer$32,
78861
78947
  idleTimeToLive: WORKSPACE_INDEX_IDLE_TTL
78862
78948
  }) {};
78863
78949
  //#endregion
@@ -78919,7 +79005,7 @@ const resolveBrowseTarget = Effect.fn("WorkspaceEntries.resolveBrowseTarget")(fu
78919
79005
  if (!input.cwd) return yield* new WorkspaceEntriesCurrentProjectRequiredError({ partialPath: input.partialPath });
78920
79006
  return path.resolve(expandHomePath$1(input.cwd, path), input.partialPath);
78921
79007
  });
78922
- const make$33 = Effect.gen(function* () {
79008
+ const make$34 = Effect.gen(function* () {
78923
79009
  const path = yield* Path.Path;
78924
79010
  const workspacePaths = yield* WorkspacePaths;
78925
79011
  const workspaceSearchIndexes = yield* WorkspaceSearchIndexMap;
@@ -78993,7 +79079,7 @@ const make$33 = Effect.gen(function* () {
78993
79079
  search
78994
79080
  });
78995
79081
  });
78996
- 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));
78997
79083
  //#endregion
78998
79084
  //#region src/workspace/WorkspaceFileSystem.ts
78999
79085
  /**
@@ -79062,7 +79148,7 @@ Schema$1.Union([
79062
79148
  ]);
79063
79149
  /** Service tag for workspace file operations. */
79064
79150
  var WorkspaceFileSystem = class extends Context.Service()("@zl-tools/server/workspace/WorkspaceFileSystem") {};
79065
- const make$32 = Effect.gen(function* () {
79151
+ const make$33 = Effect.gen(function* () {
79066
79152
  const fileSystem = yield* FileSystem.FileSystem;
79067
79153
  const path = yield* Path.Path;
79068
79154
  const workspacePaths = yield* WorkspacePaths;
@@ -79194,7 +79280,7 @@ const make$32 = Effect.gen(function* () {
79194
79280
  writeFile
79195
79281
  });
79196
79282
  });
79197
- const layer$29 = Layer.effect(WorkspaceFileSystem, make$32);
79283
+ const layer$30 = Layer.effect(WorkspaceFileSystem, make$33);
79198
79284
  //#endregion
79199
79285
  //#region ../../packages/shared/src/projectScripts.ts
79200
79286
  function projectScriptRuntimeEnv(input) {
@@ -79239,7 +79325,7 @@ var ProjectSetupScriptProjectNotFoundError = class extends Schema$1.TaggedErrorC
79239
79325
  };
79240
79326
  Schema$1.Union([ProjectSetupScriptOperationError, ProjectSetupScriptProjectNotFoundError]);
79241
79327
  var ProjectSetupScriptRunner = class extends Context.Service()("@zl-tools/server/project/ProjectSetupScriptRunner") {};
79242
- const make$31 = Effect.gen(function* () {
79328
+ const make$32 = Effect.gen(function* () {
79243
79329
  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;
79244
79330
  const terminalManager = yield* TerminalManager;
79245
79331
  const runForThread = Effect.fn("ProjectSetupScriptRunner.runForThread")(function* (input) {
@@ -79297,7 +79383,7 @@ const make$31 = Effect.gen(function* () {
79297
79383
  });
79298
79384
  return ProjectSetupScriptRunner.of({ runForThread });
79299
79385
  });
79300
- const layer$28 = Layer.effect(ProjectSetupScriptRunner, make$31);
79386
+ const layer$29 = Layer.effect(ProjectSetupScriptRunner, make$32);
79301
79387
  //#endregion
79302
79388
  //#region src/sourceControl/SourceControlProvider.ts
79303
79389
  const MAX_ERROR_TRANSPORT_VALUE_LENGTH = 256;
@@ -79600,7 +79686,7 @@ function decodeAzureDevOpsJson(raw, schema, operation, cwd) {
79600
79686
  cause
79601
79687
  })));
79602
79688
  }
79603
- const make$30 = Effect.gen(function* () {
79689
+ const make$31 = Effect.gen(function* () {
79604
79690
  const process = yield* VcsProcess;
79605
79691
  const execute = (input) => process.run({
79606
79692
  operation: "AzureDevOpsCli.execute",
@@ -79742,7 +79828,7 @@ const make$30 = Effect.gen(function* () {
79742
79828
  }).pipe(Effect.asVoid)
79743
79829
  });
79744
79830
  });
79745
- const layer$27 = Layer.effect(AzureDevOpsCli, make$30);
79831
+ const layer$28 = Layer.effect(AzureDevOpsCli, make$31);
79746
79832
  //#endregion
79747
79833
  //#region src/sourceControl/SourceControlProviderDiscovery.ts
79748
79834
  function firstNonEmptyLine(text) {
@@ -79945,7 +80031,7 @@ function toChangeRequest$3(summary) {
79945
80031
  isCrossRepository: false
79946
80032
  };
79947
80033
  }
79948
- const make$29 = Effect.gen(function* () {
80034
+ const make$30 = Effect.gen(function* () {
79949
80035
  const azure = yield* AzureDevOpsCli;
79950
80036
  return SourceControlProvider.of({
79951
80037
  kind: "azure-devops",
@@ -80037,7 +80123,7 @@ const make$29 = Effect.gen(function* () {
80037
80123
  })))
80038
80124
  });
80039
80125
  });
80040
- Layer.effect(SourceControlProvider, make$29);
80126
+ Layer.effect(SourceControlProvider, make$30);
80041
80127
  //#endregion
80042
80128
  //#region src/sourceControl/bitbucketPullRequests.ts
80043
80129
  const BitbucketRepositoryRefSchema = Schema$1.Struct({
@@ -80351,7 +80437,7 @@ function responseError(operation, response) {
80351
80437
  responseBodyLength: body.length
80352
80438
  }))));
80353
80439
  }
80354
- const make$28 = Effect.gen(function* () {
80440
+ const make$29 = Effect.gen(function* () {
80355
80441
  const config = yield* BitbucketApiEnvConfig;
80356
80442
  const httpClient = yield* HttpClient.HttpClient;
80357
80443
  const fileSystem = yield* FileSystem.FileSystem;
@@ -80515,7 +80601,7 @@ const make$28 = Effect.gen(function* () {
80515
80601
  })))
80516
80602
  });
80517
80603
  });
80518
- const layer$25 = Layer.effect(BitbucketApi, make$28);
80604
+ const layer$26 = Layer.effect(BitbucketApi, make$29);
80519
80605
  //#endregion
80520
80606
  //#region src/sourceControl/BitbucketSourceControlProvider.ts
80521
80607
  function toChangeRequest$2(summary) {
@@ -80533,7 +80619,7 @@ function toChangeRequest$2(summary) {
80533
80619
  ...summary.headRepositoryOwnerLogin !== void 0 ? { headRepositoryOwnerLogin: summary.headRepositoryOwnerLogin } : {}
80534
80620
  };
80535
80621
  }
80536
- const make$27 = Effect.gen(function* () {
80622
+ const make$28 = Effect.gen(function* () {
80537
80623
  const bitbucket = yield* BitbucketApi;
80538
80624
  return SourceControlProvider.of({
80539
80625
  kind: "bitbucket",
@@ -80624,7 +80710,7 @@ const make$27 = Effect.gen(function* () {
80624
80710
  })))
80625
80711
  });
80626
80712
  });
80627
- Layer.effect(SourceControlProvider, make$27);
80713
+ Layer.effect(SourceControlProvider, make$28);
80628
80714
  const makeDiscovery = Effect.gen(function* () {
80629
80715
  return {
80630
80716
  type: "api",
@@ -80853,7 +80939,7 @@ function deriveRepositoryCloneUrlsFromCreateOutput(stdout, repository) {
80853
80939
  sshUrl: `git@${fallbackHost}:${repository}.git`
80854
80940
  };
80855
80941
  }
80856
- const make$26 = Effect.gen(function* () {
80942
+ const make$27 = Effect.gen(function* () {
80857
80943
  const process = yield* VcsProcess;
80858
80944
  const execute = (input) => process.run({
80859
80945
  operation: "GitHubCli.execute",
@@ -80969,7 +81055,7 @@ const make$26 = Effect.gen(function* () {
80969
81055
  }).pipe(Effect.asVoid)
80970
81056
  });
80971
81057
  });
80972
- const layer$23 = Layer.effect(GitHubCli, make$26);
81058
+ const layer$24 = Layer.effect(GitHubCli, make$27);
80973
81059
  //#endregion
80974
81060
  //#region src/sourceControl/gitHubAuthStatus.ts
80975
81061
  const GitHubAuthStatusAccountSchema = Schema$1.Struct({
@@ -81070,7 +81156,7 @@ const discovery$1 = {
81070
81156
  parseAuth: parseGitHubAuth,
81071
81157
  installHint: "Install the GitHub command-line tool (`gh`) via https://cli.github.com/ or your package manager (for example `brew install gh`)."
81072
81158
  };
81073
- const make$25 = Effect.gen(function* () {
81159
+ const make$26 = Effect.gen(function* () {
81074
81160
  const github = yield* GitHubCli;
81075
81161
  const listChangeRequests = (input) => {
81076
81162
  if (input.state === "open") return github.listOpenPullRequests({
@@ -81186,7 +81272,7 @@ const make$25 = Effect.gen(function* () {
81186
81272
  })))
81187
81273
  });
81188
81274
  });
81189
- Layer.effect(SourceControlProvider, make$25);
81275
+ Layer.effect(SourceControlProvider, make$26);
81190
81276
  //#endregion
81191
81277
  //#region src/sourceControl/gitLabMergeRequests.ts
81192
81278
  const GitLabProjectReferenceSchema = Schema$1.Struct({
@@ -81497,7 +81583,7 @@ function parseRepositoryPath(repository) {
81497
81583
  projectPath
81498
81584
  };
81499
81585
  }
81500
- const make$24 = Effect.gen(function* () {
81586
+ const make$25 = Effect.gen(function* () {
81501
81587
  const process = yield* VcsProcess;
81502
81588
  const run = (input, mapError) => process.run({
81503
81589
  operation: "GitLabCli.execute",
@@ -81646,7 +81732,7 @@ const make$24 = Effect.gen(function* () {
81646
81732
  }).pipe(Effect.asVoid)
81647
81733
  });
81648
81734
  });
81649
- const layer$21 = Layer.effect(GitLabCli, make$24);
81735
+ const layer$22 = Layer.effect(GitLabCli, make$25);
81650
81736
  //#endregion
81651
81737
  //#region src/sourceControl/gitLabAuthStatus.ts
81652
81738
  const HOST_LINE_PATTERN = /^(?:[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?|\[[a-f0-9:.]+\])(?::\d+)?$/iu;
@@ -81743,7 +81829,7 @@ const discovery = {
81743
81829
  refineUnknownRemote: refineUnknownGitLabRemote,
81744
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`)."
81745
81831
  };
81746
- const make$23 = Effect.gen(function* () {
81832
+ const make$24 = Effect.gen(function* () {
81747
81833
  const gitlab = yield* GitLabCli;
81748
81834
  return SourceControlProvider.of({
81749
81835
  kind: "gitlab",
@@ -81831,7 +81917,7 @@ const make$23 = Effect.gen(function* () {
81831
81917
  })))
81832
81918
  });
81833
81919
  });
81834
- Layer.effect(SourceControlProvider, make$23);
81920
+ Layer.effect(SourceControlProvider, make$24);
81835
81921
  //#endregion
81836
81922
  //#region src/sourceControl/SourceControlProviderRegistry.ts
81837
81923
  const PROVIDER_DETECTION_CACHE_CAPACITY = 2048;
@@ -81982,12 +82068,12 @@ const makeWithProviders = Effect.fn("makeSourceControlProviderRegistryWithProvid
81982
82068
  })), { concurrency: "unbounded" })
81983
82069
  });
81984
82070
  });
81985
- const make$22 = Effect.gen(function* () {
81986
- const github = yield* make$25;
81987
- const gitlab = yield* make$23;
81988
- 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;
81989
82075
  const bitbucketDiscovery = yield* makeDiscovery;
81990
- const azureDevOps = yield* make$29;
82076
+ const azureDevOps = yield* make$30;
81991
82077
  return yield* makeWithProviders([
81992
82078
  {
81993
82079
  kind: "github",
@@ -82011,7 +82097,7 @@ const make$22 = Effect.gen(function* () {
82011
82097
  }
82012
82098
  ]);
82013
82099
  });
82014
- const layer$19 = Layer.effect(SourceControlProviderRegistry, make$22);
82100
+ const layer$20 = Layer.effect(SourceControlProviderRegistry, make$23);
82015
82101
  //#endregion
82016
82102
  //#region src/git/GitManager.ts
82017
82103
  var GitManager = class extends Context.Service()("@zl-tools/server/git/GitManager") {};
@@ -82224,7 +82310,7 @@ function toPullRequestHeadRemoteInfo(pr) {
82224
82310
  ...pr.headRepositoryOwnerLogin !== void 0 ? { headRepositoryOwnerLogin: pr.headRepositoryOwnerLogin } : {}
82225
82311
  };
82226
82312
  }
82227
- const make$21 = Effect.gen(function* () {
82313
+ const make$22 = Effect.gen(function* () {
82228
82314
  const gitCore = yield* GitVcsDriver;
82229
82315
  const sourceControlProviders = yield* SourceControlProviderRegistry;
82230
82316
  const textGeneration = yield* TextGeneration;
@@ -83103,7 +83189,7 @@ const make$21 = Effect.gen(function* () {
83103
83189
  runStackedAction
83104
83190
  });
83105
83191
  });
83106
- const layer$18 = Layer.effect(GitManager, make$21);
83192
+ const layer$19 = Layer.effect(GitManager, make$22);
83107
83193
  //#endregion
83108
83194
  //#region src/git/GitWorkflowService.ts
83109
83195
  var GitWorkflowService = class extends Context.Service()("@zl-tools/server/git/GitWorkflowService") {};
@@ -83149,7 +83235,7 @@ function hasMissingPathCause(value, seen = /* @__PURE__ */ new Set()) {
83149
83235
  if (record.reason && typeof record.reason === "object" && record.reason._tag === "NotFound") return true;
83150
83236
  return hasMissingPathCause(record.cause, seen);
83151
83237
  }
83152
- const make$20 = Effect.gen(function* () {
83238
+ const make$21 = Effect.gen(function* () {
83153
83239
  const registry = yield* VcsDriverRegistry;
83154
83240
  const git = yield* GitVcsDriver;
83155
83241
  const gitManager = yield* GitManager;
@@ -83235,7 +83321,7 @@ const make$20 = Effect.gen(function* () {
83235
83321
  renameBranch: (input) => ensureGit("GitWorkflowService.renameBranch", input.cwd).pipe(Effect.andThen(git.renameBranch(input)))
83236
83322
  });
83237
83323
  });
83238
- const layer$17 = Layer.effect(GitWorkflowService, make$20);
83324
+ const layer$18 = Layer.effect(GitWorkflowService, make$21);
83239
83325
  //#endregion
83240
83326
  //#region src/vcs/VcsStatusBroadcaster.ts
83241
83327
  const DEFAULT_VCS_STATUS_REFRESH_INTERVAL = Duration.seconds(30);
@@ -83307,7 +83393,7 @@ function fingerprintStatusPart(status) {
83307
83393
  return JSON.stringify(status);
83308
83394
  }
83309
83395
  const normalizeCwd = (cwd) => Effect.service(FileSystem.FileSystem).pipe(Effect.flatMap((fs) => fs.realPath(cwd)), Effect.orElseSucceed(() => cwd));
83310
- const make$19 = Effect.gen(function* () {
83396
+ const make$20 = Effect.gen(function* () {
83311
83397
  const workflow = yield* GitWorkflowService;
83312
83398
  const fs = yield* FileSystem.FileSystem;
83313
83399
  const changesPubSub = yield* Effect.acquireRelease(PubSub.unbounded(), (pubsub) => PubSub.shutdown(pubsub));
@@ -83531,7 +83617,7 @@ const make$19 = Effect.gen(function* () {
83531
83617
  streamStatus
83532
83618
  });
83533
83619
  });
83534
- const layer$16 = Layer.effect(VcsStatusBroadcaster, make$19);
83620
+ const layer$17 = Layer.effect(VcsStatusBroadcaster, make$20);
83535
83621
  //#endregion
83536
83622
  //#region src/vcs/VcsProvisioningService.ts
83537
83623
  var VcsProvisioningService = class extends Context.Service()("@zl-tools/server/vcs/VcsProvisioningService") {};
@@ -83544,7 +83630,7 @@ function resolveRequestedKind(kind) {
83544
83630
  }));
83545
83631
  return Effect.succeed(kind);
83546
83632
  }
83547
- const make$18 = Effect.gen(function* () {
83633
+ const make$19 = Effect.gen(function* () {
83548
83634
  const registry = yield* VcsDriverRegistry;
83549
83635
  const initRepository = Effect.fn("VcsProvisioningService.initRepository")(function* (input) {
83550
83636
  const kind = yield* resolveRequestedKind(input.kind);
@@ -83552,11 +83638,11 @@ const make$18 = Effect.gen(function* () {
83552
83638
  });
83553
83639
  return VcsProvisioningService.of({ initRepository });
83554
83640
  });
83555
- const layer$15 = Layer.effect(VcsProvisioningService, make$18);
83641
+ const layer$16 = Layer.effect(VcsProvisioningService, make$19);
83556
83642
  //#endregion
83557
83643
  //#region src/review/ReviewService.ts
83558
83644
  var ReviewService = class extends Context.Service()("@zl-tools/server/review/ReviewService") {};
83559
- const make$17 = Effect.gen(function* () {
83645
+ const make$18 = Effect.gen(function* () {
83560
83646
  const config = yield* ServerConfig;
83561
83647
  const fileSystem = yield* FileSystem.FileSystem;
83562
83648
  const path = yield* Path.Path;
@@ -83612,7 +83698,7 @@ const make$17 = Effect.gen(function* () {
83612
83698
  });
83613
83699
  return ReviewService.of({ getDiffPreview });
83614
83700
  });
83615
- const layer$14 = Layer.effect(ReviewService, make$17);
83701
+ const layer$15 = Layer.effect(ReviewService, make$18);
83616
83702
  //#endregion
83617
83703
  //#region src/diagnostics/ProcessResourceMonitor.ts
83618
83704
  const SAMPLE_INTERVAL_MS = 5e3;
@@ -83763,7 +83849,7 @@ function aggregateProcessResourceHistory(input) {
83763
83849
  }) : Option.none()
83764
83850
  };
83765
83851
  }
83766
- const make$16 = Effect.gen(function* () {
83852
+ const make$17 = Effect.gen(function* () {
83767
83853
  const spawner = yield* ChildProcessSpawner$1.ChildProcessSpawner;
83768
83854
  const state = yield* Ref.make({
83769
83855
  samples: [],
@@ -83812,7 +83898,7 @@ const make$16 = Effect.gen(function* () {
83812
83898
  });
83813
83899
  return ProcessResourceMonitor.of({ readHistory });
83814
83900
  });
83815
- const layer$13 = Layer.effect(ProcessResourceMonitor, make$16);
83901
+ const layer$14 = Layer.effect(ProcessResourceMonitor, make$17);
83816
83902
  //#endregion
83817
83903
  //#region src/diagnostics/TraceDiagnostics.ts
83818
83904
  var TraceFileReadError = class extends Schema$1.TaggedErrorClass()("TraceFileReadError", {
@@ -84083,7 +84169,7 @@ function readTraceFile(fileSystem, path) {
84083
84169
  cause
84084
84170
  })) }));
84085
84171
  }
84086
- const make$15 = Effect.gen(function* () {
84172
+ const make$16 = Effect.gen(function* () {
84087
84173
  const fileSystem = yield* FileSystem.FileSystem;
84088
84174
  const read = Effect.fn("TraceDiagnostics.read")(function* (options) {
84089
84175
  const readAt = options.readAt ?? (yield* DateTime.now);
@@ -84127,7 +84213,7 @@ const make$15 = Effect.gen(function* () {
84127
84213
  });
84128
84214
  return TraceDiagnostics.of({ read });
84129
84215
  });
84130
- const layer$12 = Layer.effect(TraceDiagnostics, make$15);
84216
+ const layer$13 = Layer.effect(TraceDiagnostics, make$16);
84131
84217
  function readTraceDiagnostics(options) {
84132
84218
  return Effect.gen(function* () {
84133
84219
  return yield* (yield* TraceDiagnostics).read(options);
@@ -84519,7 +84605,7 @@ const turnSelect = `
84519
84605
  reported_cost_provenance AS "reportedCostProvenance", completeness,
84520
84606
  completeness_reasons_json AS "completenessReasonsJson"
84521
84607
  FROM usage_analytics_turns`;
84522
- const make$14 = Effect.gen(function* () {
84608
+ const make$15 = Effect.gen(function* () {
84523
84609
  const sql = yield* SqlClient.SqlClient;
84524
84610
  const environmentId = yield* (yield* ServerEnvironment).getEnvironmentId;
84525
84611
  const getThreadContext = (threadId) => sql`
@@ -85326,7 +85412,7 @@ const make$14 = Effect.gen(function* () {
85326
85412
  getActivity
85327
85413
  });
85328
85414
  });
85329
- const layer$11 = Layer.effect(UsageAnalytics, make$14);
85415
+ const layer$12 = Layer.effect(UsageAnalytics, make$15);
85330
85416
  //#endregion
85331
85417
  //#region src/userState/UserStateService.ts
85332
85418
  const isUserStateError = Schema$1.is(UserStateError);
@@ -85336,7 +85422,7 @@ const persistenceError = (message) => new UserStateError({
85336
85422
  message
85337
85423
  });
85338
85424
  var UserStateService = class extends Context.Service()("@zl-tools/server/userState/UserStateService") {};
85339
- const make$13 = Effect.gen(function* () {
85425
+ const make$14 = Effect.gen(function* () {
85340
85426
  const sql = yield* SqlClient.SqlClient;
85341
85427
  const changes = yield* PubSub.unbounded();
85342
85428
  const writeSemaphore = yield* Semaphore.make(1);
@@ -85473,15 +85559,15 @@ const make$13 = Effect.gen(function* () {
85473
85559
  streamChanges: Stream.fromPubSub(changes)
85474
85560
  });
85475
85561
  });
85476
- const layer$10 = Layer.effect(UserStateService, make$13);
85562
+ const layer$11 = Layer.effect(UserStateService, make$14);
85477
85563
  //#endregion
85478
85564
  //#region src/assist/PromptEnhancement.ts
85479
- const RECENT_MESSAGE_LIMIT = 12;
85565
+ const RECENT_MESSAGE_LIMIT$1 = 12;
85480
85566
  const GENERATION_TIMEOUT = Duration.seconds(45);
85481
85567
  const decodeEnhancedPrompt = Schema$1.decodeUnknownEffect(PromptEnhancementPrompt);
85482
85568
  const isPromptEnhancementError = Schema$1.is(PromptEnhancementError);
85483
85569
  var PromptEnhancement = class extends Context.Service()("@zl-tools/server/assist/PromptEnhancement") {};
85484
- const make$12 = Effect.gen(function* () {
85570
+ const make$13 = Effect.gen(function* () {
85485
85571
  const projections = yield* ProjectionSnapshotQuery;
85486
85572
  const serverSettings = yield* ServerSettingsService;
85487
85573
  const textGeneration = yield* TextGeneration;
@@ -85522,7 +85608,7 @@ const make$12 = Effect.gen(function* () {
85522
85608
  requestId: input.requestId,
85523
85609
  reason: "Prompt improvement conversation context is unavailable"
85524
85610
  });
85525
- recentMessages = yield* readMessages(input.projectId, input.threadId, RECENT_MESSAGE_LIMIT);
85611
+ recentMessages = yield* readMessages(input.projectId, input.threadId, RECENT_MESSAGE_LIMIT$1);
85526
85612
  }
85527
85613
  const settings = yield* serverSettings.getSettings;
85528
85614
  if (!settings.promptEnhancement.enabled) return yield* new PromptEnhancementError({
@@ -85576,7 +85662,116 @@ const make$12 = Effect.gen(function* () {
85576
85662
  cancel
85577
85663
  });
85578
85664
  });
85579
- 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);
85580
85775
  //#endregion
85581
85776
  //#region src/serverVersionAdvisory.ts
85582
85777
  const SERVER_VERSION_CHECK_INTERVAL = Duration.hours(6);
@@ -86327,6 +86522,8 @@ const RPC_REQUIRED_SCOPE = /* @__PURE__ */ new Map([
86327
86522
  [WS_METHODS.starterSuggestionsGet, AuthOrchestrationOperateScope],
86328
86523
  [WS_METHODS.promptEnhancementGenerate, AuthOrchestrationOperateScope],
86329
86524
  [WS_METHODS.promptEnhancementCancel, AuthOrchestrationOperateScope],
86525
+ [WS_METHODS.threadTitleRegenerationGetQueue, AuthOrchestrationReadScope],
86526
+ [WS_METHODS.threadTitleRegenerationEnqueue, AuthOrchestrationOperateScope],
86330
86527
  [WS_METHODS.serverProbe, AuthOrchestrationReadScope],
86331
86528
  [WS_METHODS.serverGetConfig, AuthOrchestrationReadScope],
86332
86529
  [WS_METHODS.serverResetProductAnalyticsIdentity, AuthAccessWriteScope],
@@ -86450,6 +86647,7 @@ const makeWsRpcLayer = (currentSession, previewAutomationBroker) => WsRpcGroup.t
86450
86647
  const usageAnalytics = yield* UsageAnalytics;
86451
86648
  const starterSuggestions = yield* StarterSuggestions;
86452
86649
  const promptEnhancement = yield* PromptEnhancement;
86650
+ const threadTitleRegeneration = yield* ThreadTitleRegeneration;
86453
86651
  const serverVersionAdvisory = yield* ServerVersionAdvisoryService;
86454
86652
  const supervisedUpdate = yield* Effect.serviceOption(SupervisedUpdateClient);
86455
86653
  const supervisedUpdateStream = Option.match(supervisedUpdate, {
@@ -86816,6 +87014,8 @@ const makeWsRpcLayer = (currentSession, previewAutomationBroker) => WsRpcGroup.t
86816
87014
  [WS_METHODS.starterSuggestionsGet]: (input) => observeRpcEffect$1(WS_METHODS.starterSuggestionsGet, starterSuggestions.get(input), { "rpc.aggregate": "assist" }),
86817
87015
  [WS_METHODS.promptEnhancementGenerate]: (input) => observeRpcEffect$1(WS_METHODS.promptEnhancementGenerate, promptEnhancement.generate(input), { "rpc.aggregate": "assist" }),
86818
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" }),
86819
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({
86820
87020
  message: "Failed to dispatch orchestration command",
86821
87021
  cause
@@ -87347,7 +87547,7 @@ const websocketRpcRouteLayer = Layer.unwrap(Effect.gen(function* () {
87347
87547
  const serverAuth = yield* EnvironmentAuth;
87348
87548
  const sessions = yield* SessionStore;
87349
87549
  const session = yield* serverAuth.authenticateWebSocketUpgrade(request).pipe(Effect.catchIf(isServerAuthCredentialError, (error) => failEnvironmentAuthInvalid(serverAuthCredentialReason(error))), Effect.catchIf(isServerAuthInternalError, (error) => failEnvironmentInternal("internal_error", error)));
87350
- 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))))));
87351
87551
  return yield* Effect.acquireUseRelease(Effect.gen(function* () {
87352
87552
  yield* sessions.markConnected(session.sessionId);
87353
87553
  const live = yield* Ref.updateAndGet(liveConnections, (count) => count + 1);
@@ -88602,6 +88802,7 @@ const dependencies$1 = [
88602
88802
  McpInvocationContext,
88603
88803
  ProjectionSnapshotQuery,
88604
88804
  OrchestrationEngineService,
88805
+ ThreadTitleRegeneration,
88605
88806
  Crypto.Crypto
88606
88807
  ];
88607
88808
  const ThreadSetTitleTool = Tool.make("thread_set_title", {
@@ -88625,7 +88826,14 @@ const ThreadRequestResolveTool = Tool.make("thread_request_resolve", {
88625
88826
  failure: ThreadControlError,
88626
88827
  dependencies: dependencies$1
88627
88828
  }).annotate(Tool.Title, "Request resolve for this thread").annotate(Tool.Destructive, false).annotate(Tool.Idempotent, true);
88628
- 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);
88629
88837
  //#endregion
88630
88838
  //#region src/mcp/toolkits/thread/handlers.ts
88631
88839
  const failureMessage$1 = (cause) => cause instanceof Error ? cause.message : String(cause);
@@ -88677,7 +88885,11 @@ const ThreadToolkitHandlersLive = ThreadToolkit.toLayer({
88677
88885
  status: "pending",
88678
88886
  appliesAfterCurrentTurn: thread.latestTurn?.state === "running" || thread.session?.status === "running"
88679
88887
  };
88680
- }).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")))
88681
88893
  });
88682
88894
  //#endregion
88683
88895
  //#region src/mcp/toolkits/workspace/tools.ts
@@ -92870,7 +93082,7 @@ const ObservabilityLive = Layer.unwrap(Effect.gen(function* () {
92870
93082
  sink,
92871
93083
  ...delegate ? { delegate } : {}
92872
93084
  });
92873
- return Layer.mergeAll(Layer.succeed(Tracer.Tracer, tracer), layer$45(sink));
93085
+ return Layer.mergeAll(Layer.succeed(Tracer.Tracer, tracer), layer$46(sink));
92874
93086
  })).pipe(Layer.provideMerge(otlpSerializationLayer));
92875
93087
  const metricsLayer = config.otlpMetricsUrl === void 0 ? Layer.empty : OtlpMetrics.layer({
92876
93088
  url: config.otlpMetricsUrl,
@@ -93575,46 +93787,47 @@ const PlatformServicesLive = Layer.unwrap(Effect.gen(function* () {
93575
93787
  return layer;
93576
93788
  }
93577
93789
  }));
93578
- 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));
93579
93791
  const ProviderSessionDirectoryLayerLive = ProviderSessionDirectoryLive.pipe(Layer.provide(layer$4));
93580
93792
  const ProviderLayerLive = ProviderServiceLive.pipe(Layer.provide(ProviderAdapterRegistryLive), Layer.provideMerge(ProviderSessionDirectoryLayerLive));
93581
93793
  const PersistenceLayerLive = Layer.empty.pipe(Layer.provideMerge(layerConfig));
93582
- const UsageAnalyticsLayerLive = layer$11.pipe(Layer.provide(PersistenceLayerLive), Layer.provide(layer$65));
93583
- const VcsDriverRegistryLayerLive = layer$37.pipe(Layer.provide(layer$38));
93584
- const SourceControlProviderRegistryLayerLive = layer$19.pipe(Layer.provide(Layer.mergeAll(layer$27, layer$25, layer$23, layer$21)), Layer.provideMerge(layer$39), Layer.provideMerge(VcsDriverRegistryLayerLive));
93585
- const GitManagerLayerLive = layer$18.pipe(Layer.provideMerge(layer$28), Layer.provideMerge(layer$39), Layer.provideMerge(SourceControlProviderRegistryLayerLive), Layer.provideMerge(layer$51));
93586
- const GitLayerLive = Layer.empty.pipe(Layer.provideMerge(GitManagerLayerLive), Layer.provideMerge(layer$39));
93587
- const GitWorkflowLayerLive = layer$17.pipe(Layer.provideMerge(VcsDriverRegistryLayerLive), Layer.provideMerge(GitLayerLive));
93588
- const SourceControlRepositoryServiceLayerLive = layer$6.pipe(Layer.provideMerge(layer$39), Layer.provideMerge(SourceControlProviderRegistryLayerLive));
93589
- const ReviewLayerLive = layer$14.pipe(Layer.provideMerge(layer$39), Layer.provideMerge(VcsDriverRegistryLayerLive));
93590
- 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))));
93591
- const CheckpointingLayerLive = Layer.empty.pipe(Layer.provideMerge(layer$35), Layer.provideMerge(layer$36.pipe(Layer.provide(VcsDriverRegistryLayerLive))));
93592
- const PortScannerLayerLive = layer$57.pipe(Layer.provide(layer$67));
93593
- const TerminalLayerLive = layer$56.pipe(Layer.provide(PtyAdapterLive), Layer.provide(PortScannerLayerLive));
93594
- 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;
93595
93807
  const PreviewManagerLayerLive = layerServerHosted$1.pipe(Layer.provide(BrowserRuntimeLayerLive));
93596
- const ServerPreviewAutomationLayerLive = layer$33.pipe(Layer.provide(PreviewManagerLayerLive), Layer.provide(BrowserRuntimeLayerLive));
93808
+ const ServerPreviewAutomationLayerLive = layer$34.pipe(Layer.provide(PreviewManagerLayerLive), Layer.provide(BrowserRuntimeLayerLive));
93597
93809
  const PreviewLayerLive = Layer.mergeAll(BrowserRuntimeLayerLive, PreviewManagerLayerLive, ServerPreviewAutomationLayerLive, PortScannerLayerLive);
93598
- const WorkspaceEntriesLayerLive = layer$30.pipe(Layer.provide(layer$47));
93599
- const WorkspaceFileSystemLayerLive = layer$29.pipe(Layer.provide(layer$47), Layer.provide(WorkspaceEntriesLayerLive));
93600
- const WorkspaceLayerLive = Layer.mergeAll(layer$47, WorkspaceEntriesLayerLive, WorkspaceFileSystemLayerLive);
93601
- const ProjectFaviconResolverLayerLive = layer$46.pipe(Layer.provide(layer$47));
93602
- const AuthLayerLive = layer$69.pipe(Layer.provideMerge(PersistenceLayerLive), Layer.provide(layer$72));
93603
- 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)));
93604
93816
  const ProviderRuntimeLayerLive = ProviderSessionReaperLive.pipe(Layer.provideMerge(ProviderLayerLive), Layer.provideMerge(OrchestrationLayerLive));
93605
- const ProviderUsageLayerLive = layer$42.pipe(Layer.provide(layer$43), Layer.provideMerge(ProviderRuntimeLayerLive));
93606
- const KeybindingsLayerLive = layer$62.pipe(Layer.provide(layer$63));
93607
- const ServerSettingsLayerLive = layer$54.pipe(Layer.provide(layer$63), Layer.provide(layer$72));
93608
- 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)));
93609
- const StarterSuggestionsLayerLive = layer$50.pipe(Layer.provide(RuntimeCoreDependenciesLive));
93610
- const StarterSuggestionPrecomputationLayerLive = layer$49.pipe(Layer.provideMerge(StarterSuggestionsLayerLive), Layer.provide(RuntimeCoreDependenciesLive));
93611
- 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));
93612
93825
  const ServerVersionAdvisoryLayerLive = layer$8.pipe(Layer.provide(RuntimeCoreDependenciesLive), Layer.provide(FetchHttpClient.layer));
93613
- const ServerRestartDrainLayerLive = layer$55.pipe(Layer.provide(RuntimeCoreDependenciesLive));
93614
- 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));
93615
- 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));
93616
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));
93617
- routesLayer.pipe(Layer.provide(layer$32));
93830
+ routesLayer.pipe(Layer.provide(layer$33));
93618
93831
  const serverHostedRoutesLayer = routesLayer.pipe(Layer.provide(layerServerHosted));
93619
93832
  const makeServerLayer = Layer.unwrap(Effect.gen(function* () {
93620
93833
  const config = yield* ServerConfig;
@@ -93666,7 +93879,7 @@ const makeServerLayer = Layer.unwrap(Effect.gen(function* () {
93666
93879
  if (typeof address === "string" || !("port" in address)) return;
93667
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 }))));
93668
93881
  }));
93669
- 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));
93670
93883
  }));
93671
93884
  const runServer = Layer.launch(makeServerLayer);
93672
93885
  //#endregion
@@ -94029,7 +94242,7 @@ const runUpdateSupervisor = Effect.acquireRelease(Effect.tryPromise({
94029
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));
94030
94243
  //#endregion
94031
94244
  //#region src/bin.ts
94032
- const CliRuntimeLayer = Layer.mergeAll(NodeServices.layer, layer$77);
94245
+ const CliRuntimeLayer = Layer.mergeAll(NodeServices.layer, layer$78);
94033
94246
  const cloudPublicConfigMissingMessage = "ZL Cloud commands are unavailable: this build is missing ZL Cloud public configuration.";
94034
94247
  var CloudPublicConfigMissingError = class extends CliError$1.UserError {
94035
94248
  get message() {