@codeworksh/cli 0.5.0-canary.85.1.gcb2ed55e → 0.5.0-canary.87.1.gd08693c4

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 (94) hide show
  1. package/{acp-D2zYgk-c.mjs → acp-B8M5t2S-.mjs} +3 -3
  2. package/{acp-D2zYgk-c.mjs.map → acp-B8M5t2S-.mjs.map} +1 -1
  3. package/{add-CD_oZKew.mjs → add-CzFz-Mfb.mjs} +4 -4
  4. package/{add-CD_oZKew.mjs.map → add-CzFz-Mfb.mjs.map} +1 -1
  5. package/{add-BaH0bCKY.mjs → add-fJlj0O2v.mjs} +3 -3
  6. package/{add-BaH0bCKY.mjs.map → add-fJlj0O2v.mjs.map} +1 -1
  7. package/{check-CW_KEYYN.mjs → check-7oL3UVdX.mjs} +3 -3
  8. package/{check-CW_KEYYN.mjs.map → check-7oL3UVdX.mjs.map} +1 -1
  9. package/{control-B7wWLTbq.mjs → control-Bd2G-Unk.mjs} +4 -4
  10. package/{control-B7wWLTbq.mjs.map → control-Bd2G-Unk.mjs.map} +1 -1
  11. package/disconnect-Dpt7LKVl.mjs +2 -0
  12. package/{entries-Cj-3rgv6.mjs → entries-hMxcOaPm.mjs} +3 -3
  13. package/{entries-Cj-3rgv6.mjs.map → entries-hMxcOaPm.mjs.map} +1 -1
  14. package/{error-CRmRHqrm.mjs → error-BVSfzBzb.mjs} +4 -2
  15. package/error-BVSfzBzb.mjs.map +1 -0
  16. package/{fork-7rG9D-4E.mjs → fork-BtL-68qs.mjs} +3 -3
  17. package/{fork-7rG9D-4E.mjs.map → fork-BtL-68qs.mjs.map} +1 -1
  18. package/{identity-Brft7aCR.mjs → identity-DyOhZx6S.mjs} +2 -2
  19. package/{identity-Brft7aCR.mjs.map → identity-DyOhZx6S.mjs.map} +1 -1
  20. package/index.mjs +34 -34
  21. package/{install-BXK1fLeX.mjs → install-Dqx1TWtz.mjs} +3 -3
  22. package/{install-BXK1fLeX.mjs.map → install-Dqx1TWtz.mjs.map} +1 -1
  23. package/{jsonc-sQkgfV4_.mjs → jsonc-BwztMdEB.mjs} +2 -2
  24. package/{jsonc-sQkgfV4_.mjs.map → jsonc-BwztMdEB.mjs.map} +1 -1
  25. package/{link-BhTbmIjF.mjs → link-BilIb5jN.mjs} +2 -2
  26. package/{link-BhTbmIjF.mjs.map → link-BilIb5jN.mjs.map} +1 -1
  27. package/{list-B0He2Oeh.mjs → list-BUPm4Bsu.mjs} +3 -3
  28. package/{list-B0He2Oeh.mjs.map → list-BUPm4Bsu.mjs.map} +1 -1
  29. package/{list-D5L--SNg.mjs → list-BdMdlBjQ.mjs} +2 -2
  30. package/{list-D5L--SNg.mjs.map → list-BdMdlBjQ.mjs.map} +1 -1
  31. package/{list-CYj1mMVw.mjs → list-D1sa8t4P.mjs} +3 -3
  32. package/{list-CYj1mMVw.mjs.map → list-D1sa8t4P.mjs.map} +1 -1
  33. package/{list-PMi8C1mp.mjs → list-DV3VGuTp.mjs} +2 -2
  34. package/{list-PMi8C1mp.mjs.map → list-DV3VGuTp.mjs.map} +1 -1
  35. package/{login-Bis5nu70.mjs → login-COjr-kTw.mjs} +3 -3
  36. package/{login-Bis5nu70.mjs.map → login-COjr-kTw.mjs.map} +1 -1
  37. package/{login-BJ3l56S2.mjs → login-DC6bw2pG.mjs} +3 -3
  38. package/{login-BJ3l56S2.mjs.map → login-DC6bw2pG.mjs.map} +1 -1
  39. package/{logout-DcRRrgUZ.mjs → logout-CfyRsTUE.mjs} +3 -3
  40. package/{logout-DcRRrgUZ.mjs.map → logout-CfyRsTUE.mjs.map} +1 -1
  41. package/{logout-DamznwWG.mjs → logout-D02BdsX6.mjs} +3 -3
  42. package/{logout-DamznwWG.mjs.map → logout-D02BdsX6.mjs.map} +1 -1
  43. package/package-CJzUVSrB.mjs +6 -0
  44. package/package-CJzUVSrB.mjs.map +1 -0
  45. package/package.json +4 -4
  46. package/{providers-BS23_JeN.mjs → providers-8XcCtqG7.mjs} +2 -2
  47. package/{providers-BS23_JeN.mjs.map → providers-8XcCtqG7.mjs.map} +1 -1
  48. package/reconnect-C4KrnFkT.mjs +2 -0
  49. package/{refresh-D9fmy-1d.mjs → refresh-CPt2ua-n.mjs} +3 -3
  50. package/{refresh-D9fmy-1d.mjs.map → refresh-CPt2ua-n.mjs.map} +1 -1
  51. package/{refresh-CvVSsbmb.mjs → refresh-zDPc39tX.mjs} +2 -2
  52. package/{refresh-CvVSsbmb.mjs.map → refresh-zDPc39tX.mjs.map} +1 -1
  53. package/{relink-fgQgTx90.mjs → relink-Cr5T6W7K.mjs} +3 -3
  54. package/{relink-fgQgTx90.mjs.map → relink-Cr5T6W7K.mjs.map} +1 -1
  55. package/{reload-T-kTrntd.mjs → reload-xhRj21Ic.mjs} +2 -2
  56. package/{reload-T-kTrntd.mjs.map → reload-xhRj21Ic.mjs.map} +1 -1
  57. package/{remove-CVWfldD_.mjs → remove-BuO_0yjy.mjs} +4 -4
  58. package/{remove-CVWfldD_.mjs.map → remove-BuO_0yjy.mjs.map} +1 -1
  59. package/{remove-Br2C-HhF.mjs → remove-DRBU8YfV.mjs} +3 -3
  60. package/{remove-Br2C-HhF.mjs.map → remove-DRBU8YfV.mjs.map} +1 -1
  61. package/{restart-Ci2rws6T.mjs → restart-k3KOdJPO.mjs} +3 -3
  62. package/{restart-Ci2rws6T.mjs.map → restart-k3KOdJPO.mjs.map} +1 -1
  63. package/{run-1GOqh3FE.mjs → run-B3acSsVy.mjs} +3 -3
  64. package/{run-1GOqh3FE.mjs.map → run-B3acSsVy.mjs.map} +1 -1
  65. package/{serve-B6lpSO80.mjs → serve-BUlJaIps.mjs} +16 -5
  66. package/serve-BUlJaIps.mjs.map +1 -0
  67. package/{service-FNdObvl_.mjs → service-DZU5boh9.mjs} +3 -3
  68. package/{service-FNdObvl_.mjs.map → service-DZU5boh9.mjs.map} +1 -1
  69. package/{settings-BdQ5I6pP.mjs → settings-Ct8kxLeD.mjs} +3 -3
  70. package/{settings-BdQ5I6pP.mjs.map → settings-Ct8kxLeD.mjs.map} +1 -1
  71. package/{shared-CylEGf0k.mjs → shared-5A9FR7Lo.mjs} +3 -3
  72. package/{shared-CylEGf0k.mjs.map → shared-5A9FR7Lo.mjs.map} +1 -1
  73. package/{shared-CmsiacJn.mjs → shared-CfaUYDk4.mjs} +2 -2
  74. package/{shared-CmsiacJn.mjs.map → shared-CfaUYDk4.mjs.map} +1 -1
  75. package/{start-9ZH7fTis.mjs → start-6DLRfiJj.mjs} +3 -3
  76. package/{start-9ZH7fTis.mjs.map → start-6DLRfiJj.mjs.map} +1 -1
  77. package/{status-BNH7PFOW.mjs → status-CxMJSYQV.mjs} +3 -3
  78. package/{status-BNH7PFOW.mjs.map → status-CxMJSYQV.mjs.map} +1 -1
  79. package/{status-zwo0fIgN.mjs → status-DDhz93PH.mjs} +3 -3
  80. package/{status-zwo0fIgN.mjs.map → status-DDhz93PH.mjs.map} +1 -1
  81. package/{stop-CaZB-wi-.mjs → stop-DjSagHYr.mjs} +3 -3
  82. package/{stop-CaZB-wi-.mjs.map → stop-DjSagHYr.mjs.map} +1 -1
  83. package/{thread-DLd9j1cI.mjs → thread-skUkybyv.mjs} +2 -2
  84. package/{thread-DLd9j1cI.mjs.map → thread-skUkybyv.mjs.map} +1 -1
  85. package/{tui-DRYJFp-G.mjs → tui-BaF9hU1f.mjs} +4 -4
  86. package/{tui-DRYJFp-G.mjs.map → tui-BaF9hU1f.mjs.map} +1 -1
  87. package/{update-CB9YgFxd.mjs → update-oK_209iL.mjs} +3 -3
  88. package/{update-CB9YgFxd.mjs.map → update-oK_209iL.mjs.map} +1 -1
  89. package/disconnect-C1-XHbvO.mjs +0 -2
  90. package/error-CRmRHqrm.mjs.map +0 -1
  91. package/package-D9XjmXH6.mjs +0 -6
  92. package/package-D9XjmXH6.mjs.map +0 -1
  93. package/reconnect-CHBrxoQf.mjs +0 -2
  94. package/serve-B6lpSO80.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { i as Cmd, t as handler } from "./runtime-CwoLsQy7.mjs";
2
- import { f as writeOut, i as reportFailure } from "./error-CRmRHqrm.mjs";
3
- import { r as discover, t as home } from "./service-FNdObvl_.mjs";
2
+ import { f as writeOut, i as reportFailure } from "./error-BVSfzBzb.mjs";
3
+ import { r as discover, t as home } from "./service-DZU5boh9.mjs";
4
4
  import { Effect } from "effect";
5
5
  //#region src/cli/cmd/handlers/service/status.ts
6
6
  var status_default = handler(Cmd.commands.service.commands.status, Effect.fn("CLI.service.status")(function* () {
@@ -11,4 +11,4 @@ var status_default = handler(Cmd.commands.service.commands.status, Effect.fn("CL
11
11
  //#endregion
12
12
  export { status_default as default };
13
13
 
14
- //# sourceMappingURL=status-BNH7PFOW.mjs.map
14
+ //# sourceMappingURL=status-CxMJSYQV.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-BNH7PFOW.mjs","names":["Runtime.handler","Service.home","Discovery.discover"],"sources":["../../src/cli/cmd/handlers/service/status.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { Discovery } from \"../../../../server/discovery.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Service } from \"../../../service.ts\";\nimport { Cmd } from \"../../cmd.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.service.commands.status,\n\tEffect.fn(\"CLI.service.status\")(function* () {\n\t\tconst paths = yield* Service.home(yield* Cmd.spec);\n\t\tconst server = yield* Discovery.discover(paths.home);\n\t\tyield* writeOut(`${server?.url ?? \"stopped\"}\\n`);\n\t}, Effect.catch(reportFailure)),\n);\n"],"mappings":";;;;;AAQA,IAAA,iBAAeA,QACd,IAAI,SAAS,QAAQ,SAAS,QAC9B,OAAO,GAAG,oBAAoB,CAAC,CAAC,aAAa;CAC5C,MAAM,QAAQ,OAAOC,KAAa,OAAO,IAAI,IAAI;CACjD,MAAM,SAAS,OAAOC,SAAmB,MAAM,IAAI;CACnD,OAAO,SAAS,GAAG,QAAQ,OAAO,UAAU,GAAG;AAChD,GAAG,OAAO,MAAM,aAAa,CAAC,CAC/B"}
1
+ {"version":3,"file":"status-CxMJSYQV.mjs","names":["Runtime.handler","Service.home","Discovery.discover"],"sources":["../../src/cli/cmd/handlers/service/status.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { Discovery } from \"../../../../server/discovery.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Service } from \"../../../service.ts\";\nimport { Cmd } from \"../../cmd.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.service.commands.status,\n\tEffect.fn(\"CLI.service.status\")(function* () {\n\t\tconst paths = yield* Service.home(yield* Cmd.spec);\n\t\tconst server = yield* Discovery.discover(paths.home);\n\t\tyield* writeOut(`${server?.url ?? \"stopped\"}\\n`);\n\t}, Effect.catch(reportFailure)),\n);\n"],"mappings":";;;;;AAQA,IAAA,iBAAeA,QACd,IAAI,SAAS,QAAQ,SAAS,QAC9B,OAAO,GAAG,oBAAoB,CAAC,CAAC,aAAa;CAC5C,MAAM,QAAQ,OAAOC,KAAa,OAAO,IAAI,IAAI;CACjD,MAAM,SAAS,OAAOC,SAAmB,MAAM,IAAI;CACnD,OAAO,SAAS,GAAG,QAAQ,OAAO,UAAU,GAAG;AAChD,GAAG,OAAO,MAAM,aAAa,CAAC,CAC/B"}
@@ -1,6 +1,6 @@
1
1
  import { i as Cmd, t as handler } from "./runtime-CwoLsQy7.mjs";
2
- import { f as writeOut, i as reportFailure, m as make, n as OAuthError } from "./error-CRmRHqrm.mjs";
3
- import { a as oauthProviderLabel, n as attempt, o as selectProvider, r as localOps, s as withServer, t as assertServerScope } from "./shared-CmsiacJn.mjs";
2
+ import { f as writeOut, i as reportFailure, m as make, n as OAuthError } from "./error-BVSfzBzb.mjs";
3
+ import { a as oauthProviderLabel, n as attempt, o as selectProvider, r as localOps, s as withServer, t as assertServerScope } from "./shared-CfaUYDk4.mjs";
4
4
  import { Effect, Option } from "effect";
5
5
  import { formatOAuthSummary, oauthNotice } from "@codeworksh/aikit/oauth/summary";
6
6
  //#region src/cli/cmd/handlers/auth/status.ts
@@ -28,4 +28,4 @@ var status_default = handler(Cmd.commands.auth.commands.status, Effect.fn("CLI.a
28
28
  //#endregion
29
29
  export { status_default as default };
30
30
 
31
- //# sourceMappingURL=status-zwo0fIgN.mjs.map
31
+ //# sourceMappingURL=status-DDhz93PH.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-zwo0fIgN.mjs","names":["Runtime.handler","Client.make"],"sources":["../../src/cli/cmd/handlers/auth/status.ts"],"sourcesContent":["import { formatOAuthSummary, oauthNotice } from \"@codeworksh/aikit/oauth/summary\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { OAuthError, reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport {\n\tassertServerScope,\n\tattempt,\n\tClient,\n\tlocalOps,\n\toauthProviderLabel,\n\tselectProvider,\n\twithServer,\n} from \"./shared.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.auth.commands.status,\n\tEffect.fn(\"CLI.auth.status\")(function* ({ server, openaiCodex, githubCopilot, authFile, json }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst provider = yield* selectProvider({ openaiCodex, githubCopilot });\n\t\t\tconst name = oauthProviderLabel(provider);\n\n\t\t\tif (Option.isSome(server)) {\n\t\t\t\tyield* assertServerScope(authFile);\n\t\t\t\treturn yield* withServer(\n\t\t\t\t\tserver.value,\n\t\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\t\tconst rpc = yield* Client.make;\n\t\t\t\t\t\tconst info = yield* rpc[\"auth.status\"]({ provider });\n\t\t\t\t\t\tif (info === null) {\n\t\t\t\t\t\t\treturn yield* new OAuthError({ message: oauthNotice(\"missing\", provider, \"the server\") });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield* writeOut(formatOAuthSummary(info, { json }));\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst ops = yield* localOps(provider, authFile);\n\t\t\tconst summary = yield* attempt(`failed to read ${name} credentials`, () => ops.stored());\n\t\t\tif (summary === undefined) {\n\t\t\t\treturn yield* new OAuthError({ message: oauthNotice(\"missing\", provider, ops.path) });\n\t\t\t}\n\t\t\tyield* writeOut(formatOAuthSummary(summary, { json }));\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;AAgBA,IAAA,iBAAeA,QACd,IAAI,SAAS,KAAK,SAAS,QAC3B,OAAO,GAAG,iBAAiB,CAAC,CAAC,WAAW,EAAE,QAAQ,aAAa,eAAe,UAAU,QAAQ;CA4B/F,OAAO,OA3BS,OAAO,IAAI,aAAa;EACvC,MAAM,WAAW,OAAO,eAAe;GAAE;GAAa;EAAc,CAAC;EACrE,MAAM,OAAO,mBAAmB,QAAQ;EAExC,IAAI,OAAO,OAAO,MAAM,GAAG;GAC1B,OAAO,kBAAkB,QAAQ;GACjC,OAAO,OAAO,WACb,OAAO,OACP,OAAO,IAAI,aAAa;IAEvB,MAAM,OAAO,QAAO,OADDC,KAAAA,CACK,cAAc,CAAC,EAAE,SAAS,CAAC;IACnD,IAAI,SAAS,MACZ,OAAO,OAAO,IAAI,WAAW,EAAE,SAAS,YAAY,WAAW,UAAU,YAAY,EAAE,CAAC;IAEzF,OAAO,SAAS,mBAAmB,MAAM,EAAE,KAAK,CAAC,CAAC;GACnD,CAAC,CACF;EACD;EAEA,MAAM,MAAM,OAAO,SAAS,UAAU,QAAQ;EAC9C,MAAM,UAAU,OAAO,QAAQ,kBAAkB,KAAK,qBAAqB,IAAI,OAAO,CAAC;EACvF,IAAI,YAAY,KAAA,GACf,OAAO,OAAO,IAAI,WAAW,EAAE,SAAS,YAAY,WAAW,UAAU,IAAI,IAAI,EAAE,CAAC;EAErF,OAAO,SAAS,mBAAmB,SAAS,EAAE,KAAK,CAAC,CAAC;CACtD,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
1
+ {"version":3,"file":"status-DDhz93PH.mjs","names":["Runtime.handler","Client.make"],"sources":["../../src/cli/cmd/handlers/auth/status.ts"],"sourcesContent":["import { formatOAuthSummary, oauthNotice } from \"@codeworksh/aikit/oauth/summary\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { OAuthError, reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport {\n\tassertServerScope,\n\tattempt,\n\tClient,\n\tlocalOps,\n\toauthProviderLabel,\n\tselectProvider,\n\twithServer,\n} from \"./shared.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.auth.commands.status,\n\tEffect.fn(\"CLI.auth.status\")(function* ({ server, openaiCodex, githubCopilot, authFile, json }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst provider = yield* selectProvider({ openaiCodex, githubCopilot });\n\t\t\tconst name = oauthProviderLabel(provider);\n\n\t\t\tif (Option.isSome(server)) {\n\t\t\t\tyield* assertServerScope(authFile);\n\t\t\t\treturn yield* withServer(\n\t\t\t\t\tserver.value,\n\t\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\t\tconst rpc = yield* Client.make;\n\t\t\t\t\t\tconst info = yield* rpc[\"auth.status\"]({ provider });\n\t\t\t\t\t\tif (info === null) {\n\t\t\t\t\t\t\treturn yield* new OAuthError({ message: oauthNotice(\"missing\", provider, \"the server\") });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield* writeOut(formatOAuthSummary(info, { json }));\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst ops = yield* localOps(provider, authFile);\n\t\t\tconst summary = yield* attempt(`failed to read ${name} credentials`, () => ops.stored());\n\t\t\tif (summary === undefined) {\n\t\t\t\treturn yield* new OAuthError({ message: oauthNotice(\"missing\", provider, ops.path) });\n\t\t\t}\n\t\t\tyield* writeOut(formatOAuthSummary(summary, { json }));\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;AAgBA,IAAA,iBAAeA,QACd,IAAI,SAAS,KAAK,SAAS,QAC3B,OAAO,GAAG,iBAAiB,CAAC,CAAC,WAAW,EAAE,QAAQ,aAAa,eAAe,UAAU,QAAQ;CA4B/F,OAAO,OA3BS,OAAO,IAAI,aAAa;EACvC,MAAM,WAAW,OAAO,eAAe;GAAE;GAAa;EAAc,CAAC;EACrE,MAAM,OAAO,mBAAmB,QAAQ;EAExC,IAAI,OAAO,OAAO,MAAM,GAAG;GAC1B,OAAO,kBAAkB,QAAQ;GACjC,OAAO,OAAO,WACb,OAAO,OACP,OAAO,IAAI,aAAa;IAEvB,MAAM,OAAO,QAAO,OADDC,KAAAA,CACK,cAAc,CAAC,EAAE,SAAS,CAAC;IACnD,IAAI,SAAS,MACZ,OAAO,OAAO,IAAI,WAAW,EAAE,SAAS,YAAY,WAAW,UAAU,YAAY,EAAE,CAAC;IAEzF,OAAO,SAAS,mBAAmB,MAAM,EAAE,KAAK,CAAC,CAAC;GACnD,CAAC,CACF;EACD;EAEA,MAAM,MAAM,OAAO,SAAS,UAAU,QAAQ;EAC9C,MAAM,UAAU,OAAO,QAAQ,kBAAkB,KAAK,qBAAqB,IAAI,OAAO,CAAC;EACvF,IAAI,YAAY,KAAA,GACf,OAAO,OAAO,IAAI,WAAW,EAAE,SAAS,YAAY,WAAW,UAAU,IAAI,IAAI,EAAE,CAAC;EAErF,OAAO,SAAS,mBAAmB,SAAS,EAAE,KAAK,CAAC,CAAC;CACtD,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
@@ -1,6 +1,6 @@
1
1
  import { i as Cmd, t as handler } from "./runtime-CwoLsQy7.mjs";
2
- import { i as reportFailure } from "./error-CRmRHqrm.mjs";
3
- import { o as stop, t as home } from "./service-FNdObvl_.mjs";
2
+ import { i as reportFailure } from "./error-BVSfzBzb.mjs";
3
+ import { o as stop, t as home } from "./service-DZU5boh9.mjs";
4
4
  import { Effect } from "effect";
5
5
  //#region src/cli/cmd/handlers/service/stop.ts
6
6
  var stop_default = handler(Cmd.commands.service.commands.stop, Effect.fn("CLI.service.stop")(function* () {
@@ -10,4 +10,4 @@ var stop_default = handler(Cmd.commands.service.commands.stop, Effect.fn("CLI.se
10
10
  //#endregion
11
11
  export { stop_default as default };
12
12
 
13
- //# sourceMappingURL=stop-CaZB-wi-.mjs.map
13
+ //# sourceMappingURL=stop-DjSagHYr.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop-CaZB-wi-.mjs","names":["Runtime.handler","Service.home","Discovery.stop"],"sources":["../../src/cli/cmd/handlers/service/stop.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { Discovery } from \"../../../../server/discovery.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { Service } from \"../../../service.ts\";\nimport { Cmd } from \"../../cmd.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.service.commands.stop,\n\tEffect.fn(\"CLI.service.stop\")(function* () {\n\t\tconst paths = yield* Service.home(yield* Cmd.spec);\n\t\tyield* Discovery.stop(paths.home);\n\t}, Effect.catch(reportFailure)),\n);\n"],"mappings":";;;;;AAOA,IAAA,eAAeA,QACd,IAAI,SAAS,QAAQ,SAAS,MAC9B,OAAO,GAAG,kBAAkB,CAAC,CAAC,aAAa;CAC1C,MAAM,QAAQ,OAAOC,KAAa,OAAO,IAAI,IAAI;CACjD,OAAOC,KAAe,MAAM,IAAI;AACjC,GAAG,OAAO,MAAM,aAAa,CAAC,CAC/B"}
1
+ {"version":3,"file":"stop-DjSagHYr.mjs","names":["Runtime.handler","Service.home","Discovery.stop"],"sources":["../../src/cli/cmd/handlers/service/stop.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { Discovery } from \"../../../../server/discovery.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { Service } from \"../../../service.ts\";\nimport { Cmd } from \"../../cmd.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.service.commands.stop,\n\tEffect.fn(\"CLI.service.stop\")(function* () {\n\t\tconst paths = yield* Service.home(yield* Cmd.spec);\n\t\tyield* Discovery.stop(paths.home);\n\t}, Effect.catch(reportFailure)),\n);\n"],"mappings":";;;;;AAOA,IAAA,eAAeA,QACd,IAAI,SAAS,QAAQ,SAAS,MAC9B,OAAO,GAAG,kBAAkB,CAAC,CAAC,aAAa;CAC1C,MAAM,QAAQ,OAAOC,KAAa,OAAO,IAAI,IAAI;CACjD,OAAOC,KAAe,MAAM,IAAI;AACjC,GAAG,OAAO,MAAM,aAAa,CAAC,CAC/B"}
@@ -1,4 +1,4 @@
1
- import { t as InvalidInputError } from "./error-CRmRHqrm.mjs";
1
+ import { t as InvalidInputError } from "./error-BVSfzBzb.mjs";
2
2
  import { Effect, Option, Schema } from "effect";
3
3
  import { Session } from "@codeworksh/harness/effect";
4
4
  //#region src/cli/thread.ts
@@ -12,4 +12,4 @@ const threadFlag = Effect.fn("CLI.threadFlag")(function* (flag) {
12
12
  //#endregion
13
13
  export { threadFlag as t };
14
14
 
15
- //# sourceMappingURL=thread-DLd9j1cI.mjs.map
15
+ //# sourceMappingURL=thread-skUkybyv.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread-DLd9j1cI.mjs","names":[],"sources":["../../src/cli/thread.ts"],"sourcesContent":["import { Session } from \"@codeworksh/harness/effect\";\nimport { Effect, Option, Schema } from \"effect\";\nimport { InvalidInputError } from \"./error.ts\";\n\nconst isThreadId = Schema.is(Session.ThreadSchema.ID);\n\n/** A `--thread` value; `main`, like no flag at all, is the session's main thread and reads as absent. */\nexport const threadFlag = Effect.fn(\"CLI.threadFlag\")(function* (flag: Option.Option<string>) {\n\tif (Option.isNone(flag) || flag.value === Session.ThreadSchema.MAIN) return undefined;\n\tif (!isThreadId(flag.value)) {\n\t\treturn yield* new InvalidInputError({ message: \"--thread takes a thread ID (thr_…) or main\" });\n\t}\n\treturn Session.ThreadSchema.ID.make(flag.value);\n});\n"],"mappings":";;;;AAIA,MAAM,aAAa,OAAO,GAAG,QAAQ,aAAa,EAAE;;AAGpD,MAAa,aAAa,OAAO,GAAG,gBAAgB,CAAC,CAAC,WAAW,MAA6B;CAC7F,IAAI,OAAO,OAAO,IAAI,KAAK,KAAK,UAAU,QAAQ,aAAa,MAAM,OAAO,KAAA;CAC5E,IAAI,CAAC,WAAW,KAAK,KAAK,GACzB,OAAO,OAAO,IAAI,kBAAkB,EAAE,SAAS,6CAA6C,CAAC;CAE9F,OAAO,QAAQ,aAAa,GAAG,KAAK,KAAK,KAAK;AAC/C,CAAC"}
1
+ {"version":3,"file":"thread-skUkybyv.mjs","names":[],"sources":["../../src/cli/thread.ts"],"sourcesContent":["import { Session } from \"@codeworksh/harness/effect\";\nimport { Effect, Option, Schema } from \"effect\";\nimport { InvalidInputError } from \"./error.ts\";\n\nconst isThreadId = Schema.is(Session.ThreadSchema.ID);\n\n/** A `--thread` value; `main`, like no flag at all, is the session's main thread and reads as absent. */\nexport const threadFlag = Effect.fn(\"CLI.threadFlag\")(function* (flag: Option.Option<string>) {\n\tif (Option.isNone(flag) || flag.value === Session.ThreadSchema.MAIN) return undefined;\n\tif (!isThreadId(flag.value)) {\n\t\treturn yield* new InvalidInputError({ message: \"--thread takes a thread ID (thr_…) or main\" });\n\t}\n\treturn Session.ThreadSchema.ID.make(flag.value);\n});\n"],"mappings":";;;;AAIA,MAAM,aAAa,OAAO,GAAG,QAAQ,aAAa,EAAE;;AAGpD,MAAa,aAAa,OAAO,GAAG,gBAAgB,CAAC,CAAC,WAAW,MAA6B;CAC7F,IAAI,OAAO,OAAO,IAAI,KAAK,KAAK,UAAU,QAAQ,aAAa,MAAM,OAAO,KAAA;CAC5E,IAAI,CAAC,WAAW,KAAK,KAAK,GACzB,OAAO,OAAO,IAAI,kBAAkB,EAAE,SAAS,6CAA6C,CAAC;CAE9F,OAAO,QAAQ,aAAa,GAAG,KAAK,KAAK,KAAK;AAC/C,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { i as Cmd, t as handler } from "./runtime-CwoLsQy7.mjs";
2
- import { r as renderError, t as InvalidInputError, u as writeError } from "./error-CRmRHqrm.mjs";
3
- import { n as current } from "./identity-Brft7aCR.mjs";
4
- import { a as keepAlive, i as ensure, n as options, s as probe } from "./service-FNdObvl_.mjs";
2
+ import { r as renderError, t as InvalidInputError, u as writeError } from "./error-BVSfzBzb.mjs";
3
+ import { n as current } from "./identity-DyOhZx6S.mjs";
4
+ import { a as keepAlive, i as ensure, n as options, s as probe } from "./service-DZU5boh9.mjs";
5
5
  import { Effect, Option } from "effect";
6
6
  import { ChildProcess, ChildProcessSpawner } from "effect/process";
7
7
  //#region src/cli/cmd/handlers/tui.ts
@@ -73,4 +73,4 @@ var tui_default = handler(Cmd.commands.tui, Effect.fn("CLI.tui", { level: "Info"
73
73
  //#endregion
74
74
  export { tui_default as default };
75
75
 
76
- //# sourceMappingURL=tui-DRYJFp-G.mjs.map
76
+ //# sourceMappingURL=tui-BaF9hU1f.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tui-DRYJFp-G.mjs","names":["Health.probe","Discovery.ensure","Discovery.keepAlive","Runtime.handler","options","Service.options"],"sources":["../../src/cli/cmd/handlers/tui.ts"],"sourcesContent":["import { Effect, Option } from \"effect\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/process\";\nimport { Runtime } from \"../../../framework/runtime.ts\";\nimport { Discovery } from \"../../../server/discovery.ts\";\nimport { Health } from \"../../../server/health.ts\";\nimport { Identity } from \"../../../server/identity.ts\";\nimport { InvalidInputError, renderError } from \"../../error.ts\";\nimport { writeError } from \"../../output.ts\";\nimport { Service } from \"../../service.ts\";\nimport { Cmd } from \"../cmd.ts\";\n\n/**\n * Adopt a server the user started, only if it answers `server.info`: the UI must\n * never launch against an endpoint that is not a CodeWork server. A different\n * build is allowed, with a warning, because the user chose it.\n */\nconst attach = (url: string) =>\n\tEffect.gen(function* () {\n\t\tconst info = yield* Health.probe(url);\n\t\tif (info === undefined) return yield* new InvalidInputError({ message: `no CodeWork server answered at ${url}` });\n\t\tif (info.version !== Identity.current.version) {\n\t\t\tyield* Effect.sync(() =>\n\t\t\t\tprocess.stderr.write(\n\t\t\t\t\t`warning: server at ${url} runs ${info.version}; this client is ${Identity.current.version}\\n`,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn url;\n\t});\n\n/** Start or reuse the local server, and keep it up while the TUI runs. */\nconst managed = (options: Discovery.Options) =>\n\tEffect.gen(function* () {\n\t\tconst resolved = yield* Discovery.ensure({\n\t\t\t...options,\n\t\t\t// An upgraded CLI must not drive a server from an older build.\n\t\t\treplace: true,\n\t\t\tonStart: (reason) =>\n\t\t\t\tvoid process.stderr.write(\n\t\t\t\t\treason === \"version-mismatch\"\n\t\t\t\t\t\t? \"Restarting CodeWork server (version mismatch)...\\n\"\n\t\t\t\t\t\t: `Starting CodeWork server on ${options.host}:${options.port}...\\n`,\n\t\t\t\t),\n\t\t});\n\t\t// The TUI only reconnects; restoring a server that dies under it is ours to do.\n\t\tyield* Discovery.keepAlive(resolved, options).pipe(Effect.forkScoped);\n\t\treturn resolved.url;\n\t});\n\n/**\n * Run the TUI in the foreground, on this terminal, for as long as this command\n * runs. It stays in this process group (`detached: false`) so it keeps the\n * terminal; stdio is inherited because it draws and reads raw keys itself. The\n * scope is what ties their lifetimes: when this command is interrupted (SIGINT,\n * SIGTERM), closing it terminates the TUI rather than leaving it on the screen.\n */\nconst run = (binary: string, args: ReadonlyArray<string>, env: Record<string, string>) =>\n\tEffect.gen(function* () {\n\t\tconst spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n\t\tconst tui = yield* spawner.spawn(\n\t\t\tChildProcess.make(binary, [...args], {\n\t\t\t\tenv,\n\t\t\t\textendEnv: true,\n\t\t\t\tdetached: false,\n\t\t\t\tstdin: \"inherit\",\n\t\t\t\tstdout: \"inherit\",\n\t\t\t\tstderr: \"inherit\",\n\t\t\t}),\n\t\t);\n\t\t// A TUI killed by a signal has no exit code; it still must not read as success.\n\t\treturn yield* tui.exitCode.pipe(Effect.orElseSucceed(() => 1));\n\t}).pipe(Effect.scoped);\n\nexport default Runtime.handler(\n\tCmd.commands.tui,\n\tEffect.fn(\"CLI.tui\", { level: \"Info\" })(function* ({ server, host, port, args }) {\n\t\tconst shared = yield* Cmd.spec;\n\n\t\tconst program = Effect.gen(function* () {\n\t\t\tif (Option.isSome(server) && [shared.home, shared.database, shared.userConfigDir].some(Option.isSome)) {\n\t\t\t\treturn yield* new InvalidInputError({\n\t\t\t\t\tmessage: \"--home, --database, and --user-config-dir belong on codework serve when using --server\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst options = yield* Service.options(shared, { host, port });\n\t\t\tconst url = yield* Option.isSome(server) ? attach(server.value) : managed(options);\n\n\t\t\t// Imported lazily: binary resolution must stay off the path of every other command.\n\t\t\tconst launcher = yield* Effect.promise(() => import(\"@codeworksh/tui\"));\n\t\t\tconst binary = yield* Effect.try({\n\t\t\t\ttry: () => launcher.resolveBinary(),\n\t\t\t\tcatch: (error) => new InvalidInputError({ message: (error as Error).message }),\n\t\t\t});\n\t\t\treturn yield* run(binary, args, {\n\t\t\t\t[launcher.ENV_SERVER]: url,\n\t\t\t\t// The TUI reads its own config and credentials, so it must resolve the same home\n\t\t\t\t// the server uses; otherwise the UI would show a different installation.\n\t\t\t\tCODEWORK_HOME_DIR: options.home,\n\t\t\t});\n\t\t});\n\n\t\tconst code = yield* program.pipe(\n\t\t\tEffect.scoped,\n\t\t\tEffect.catch((error) => writeError(renderError(error)).pipe(Effect.as(1))),\n\t\t);\n\t\tyield* Effect.sync(() => {\n\t\t\tprocess.exitCode = code;\n\t\t});\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAM,UAAU,QACf,OAAO,IAAI,aAAa;CACvB,MAAM,OAAO,OAAOA,MAAa,GAAG;CACpC,IAAI,SAAS,KAAA,GAAW,OAAO,OAAO,IAAI,kBAAkB,EAAE,SAAS,kCAAkC,MAAM,CAAC;CAChH,IAAI,KAAK,YAAA,QAA6B,SACrC,OAAO,OAAO,WACb,QAAQ,OAAO,MACd,sBAAsB,IAAI,QAAQ,KAAK,QAAQ,mBAAA,QAAoC,QAAQ,GAC5F,CACD;CAED,OAAO;AACR,CAAC;;AAGF,MAAM,WAAW,YAChB,OAAO,IAAI,aAAa;CACvB,MAAM,WAAW,OAAOC,OAAiB;EACxC,GAAG;EAEH,SAAS;EACT,UAAU,WACT,KAAK,QAAQ,OAAO,MACnB,WAAW,qBACR,uDACA,+BAA+B,QAAQ,KAAK,GAAG,QAAQ,KAAK,MAChE;CACF,CAAC;CAED,OAAOC,UAAoB,UAAU,OAAO,CAAC,CAAC,KAAK,OAAO,UAAU;CACpE,OAAO,SAAS;AACjB,CAAC;;;;;;;;AASF,MAAM,OAAO,QAAgB,MAA6B,QACzD,OAAO,IAAI,aAAa;CAavB,OAAO,QAAO,QAXK,OADI,oBAAoB,oBAAA,CAChB,MAC1B,aAAa,KAAK,QAAQ,CAAC,GAAG,IAAI,GAAG;EACpC;EACA,WAAW;EACX,UAAU;EACV,OAAO;EACP,QAAQ;EACR,QAAQ;CACT,CAAC,CACF,EAAA,CAEkB,SAAS,KAAK,OAAO,oBAAoB,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM;AAEtB,IAAA,cAAeC,QACd,IAAI,SAAS,KACb,OAAO,GAAG,WAAW,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,MAAM,MAAM,QAAQ;CAChF,MAAM,SAAS,OAAO,IAAI;CA0B1B,MAAM,OAAO,OAxBG,OAAO,IAAI,aAAa;EACvC,IAAI,OAAO,OAAO,MAAM,KAAK;GAAC,OAAO;GAAM,OAAO;GAAU,OAAO;EAAa,CAAC,CAAC,KAAK,OAAO,MAAM,GACnG,OAAO,OAAO,IAAI,kBAAkB,EACnC,SAAS,yFACV,CAAC;EAGF,MAAMC,YAAU,OAAOC,QAAgB,QAAQ;GAAE;GAAM;EAAK,CAAC;EAC7D,MAAM,MAAM,OAAO,OAAO,OAAO,MAAM,IAAI,OAAO,OAAO,KAAK,IAAI,QAAQD,SAAO;EAGjF,MAAM,WAAW,OAAO,OAAO,cAAc,OAAO,kBAAkB;EACtE,MAAM,SAAS,OAAO,OAAO,IAAI;GAChC,WAAW,SAAS,cAAc;GAClC,QAAQ,UAAU,IAAI,kBAAkB,EAAE,SAAU,MAAgB,QAAQ,CAAC;EAC9E,CAAC;EACD,OAAO,OAAO,IAAI,QAAQ,MAAM;IAC9B,SAAS,aAAa;GAGvB,mBAAmBA,UAAQ;EAC5B,CAAC;CACF,CAE0B,CAAC,CAAC,KAC3B,OAAO,QACP,OAAO,OAAO,UAAU,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,CAC1E;CACA,OAAO,OAAO,WAAW;EACxB,QAAQ,WAAW;CACpB,CAAC;AACF,CAAC,CACF"}
1
+ {"version":3,"file":"tui-BaF9hU1f.mjs","names":["Health.probe","Discovery.ensure","Discovery.keepAlive","Runtime.handler","options","Service.options"],"sources":["../../src/cli/cmd/handlers/tui.ts"],"sourcesContent":["import { Effect, Option } from \"effect\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/process\";\nimport { Runtime } from \"../../../framework/runtime.ts\";\nimport { Discovery } from \"../../../server/discovery.ts\";\nimport { Health } from \"../../../server/health.ts\";\nimport { Identity } from \"../../../server/identity.ts\";\nimport { InvalidInputError, renderError } from \"../../error.ts\";\nimport { writeError } from \"../../output.ts\";\nimport { Service } from \"../../service.ts\";\nimport { Cmd } from \"../cmd.ts\";\n\n/**\n * Adopt a server the user started, only if it answers `server.info`: the UI must\n * never launch against an endpoint that is not a CodeWork server. A different\n * build is allowed, with a warning, because the user chose it.\n */\nconst attach = (url: string) =>\n\tEffect.gen(function* () {\n\t\tconst info = yield* Health.probe(url);\n\t\tif (info === undefined) return yield* new InvalidInputError({ message: `no CodeWork server answered at ${url}` });\n\t\tif (info.version !== Identity.current.version) {\n\t\t\tyield* Effect.sync(() =>\n\t\t\t\tprocess.stderr.write(\n\t\t\t\t\t`warning: server at ${url} runs ${info.version}; this client is ${Identity.current.version}\\n`,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn url;\n\t});\n\n/** Start or reuse the local server, and keep it up while the TUI runs. */\nconst managed = (options: Discovery.Options) =>\n\tEffect.gen(function* () {\n\t\tconst resolved = yield* Discovery.ensure({\n\t\t\t...options,\n\t\t\t// An upgraded CLI must not drive a server from an older build.\n\t\t\treplace: true,\n\t\t\tonStart: (reason) =>\n\t\t\t\tvoid process.stderr.write(\n\t\t\t\t\treason === \"version-mismatch\"\n\t\t\t\t\t\t? \"Restarting CodeWork server (version mismatch)...\\n\"\n\t\t\t\t\t\t: `Starting CodeWork server on ${options.host}:${options.port}...\\n`,\n\t\t\t\t),\n\t\t});\n\t\t// The TUI only reconnects; restoring a server that dies under it is ours to do.\n\t\tyield* Discovery.keepAlive(resolved, options).pipe(Effect.forkScoped);\n\t\treturn resolved.url;\n\t});\n\n/**\n * Run the TUI in the foreground, on this terminal, for as long as this command\n * runs. It stays in this process group (`detached: false`) so it keeps the\n * terminal; stdio is inherited because it draws and reads raw keys itself. The\n * scope is what ties their lifetimes: when this command is interrupted (SIGINT,\n * SIGTERM), closing it terminates the TUI rather than leaving it on the screen.\n */\nconst run = (binary: string, args: ReadonlyArray<string>, env: Record<string, string>) =>\n\tEffect.gen(function* () {\n\t\tconst spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n\t\tconst tui = yield* spawner.spawn(\n\t\t\tChildProcess.make(binary, [...args], {\n\t\t\t\tenv,\n\t\t\t\textendEnv: true,\n\t\t\t\tdetached: false,\n\t\t\t\tstdin: \"inherit\",\n\t\t\t\tstdout: \"inherit\",\n\t\t\t\tstderr: \"inherit\",\n\t\t\t}),\n\t\t);\n\t\t// A TUI killed by a signal has no exit code; it still must not read as success.\n\t\treturn yield* tui.exitCode.pipe(Effect.orElseSucceed(() => 1));\n\t}).pipe(Effect.scoped);\n\nexport default Runtime.handler(\n\tCmd.commands.tui,\n\tEffect.fn(\"CLI.tui\", { level: \"Info\" })(function* ({ server, host, port, args }) {\n\t\tconst shared = yield* Cmd.spec;\n\n\t\tconst program = Effect.gen(function* () {\n\t\t\tif (Option.isSome(server) && [shared.home, shared.database, shared.userConfigDir].some(Option.isSome)) {\n\t\t\t\treturn yield* new InvalidInputError({\n\t\t\t\t\tmessage: \"--home, --database, and --user-config-dir belong on codework serve when using --server\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst options = yield* Service.options(shared, { host, port });\n\t\t\tconst url = yield* Option.isSome(server) ? attach(server.value) : managed(options);\n\n\t\t\t// Imported lazily: binary resolution must stay off the path of every other command.\n\t\t\tconst launcher = yield* Effect.promise(() => import(\"@codeworksh/tui\"));\n\t\t\tconst binary = yield* Effect.try({\n\t\t\t\ttry: () => launcher.resolveBinary(),\n\t\t\t\tcatch: (error) => new InvalidInputError({ message: (error as Error).message }),\n\t\t\t});\n\t\t\treturn yield* run(binary, args, {\n\t\t\t\t[launcher.ENV_SERVER]: url,\n\t\t\t\t// The TUI reads its own config and credentials, so it must resolve the same home\n\t\t\t\t// the server uses; otherwise the UI would show a different installation.\n\t\t\t\tCODEWORK_HOME_DIR: options.home,\n\t\t\t});\n\t\t});\n\n\t\tconst code = yield* program.pipe(\n\t\t\tEffect.scoped,\n\t\t\tEffect.catch((error) => writeError(renderError(error)).pipe(Effect.as(1))),\n\t\t);\n\t\tyield* Effect.sync(() => {\n\t\t\tprocess.exitCode = code;\n\t\t});\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAM,UAAU,QACf,OAAO,IAAI,aAAa;CACvB,MAAM,OAAO,OAAOA,MAAa,GAAG;CACpC,IAAI,SAAS,KAAA,GAAW,OAAO,OAAO,IAAI,kBAAkB,EAAE,SAAS,kCAAkC,MAAM,CAAC;CAChH,IAAI,KAAK,YAAA,QAA6B,SACrC,OAAO,OAAO,WACb,QAAQ,OAAO,MACd,sBAAsB,IAAI,QAAQ,KAAK,QAAQ,mBAAA,QAAoC,QAAQ,GAC5F,CACD;CAED,OAAO;AACR,CAAC;;AAGF,MAAM,WAAW,YAChB,OAAO,IAAI,aAAa;CACvB,MAAM,WAAW,OAAOC,OAAiB;EACxC,GAAG;EAEH,SAAS;EACT,UAAU,WACT,KAAK,QAAQ,OAAO,MACnB,WAAW,qBACR,uDACA,+BAA+B,QAAQ,KAAK,GAAG,QAAQ,KAAK,MAChE;CACF,CAAC;CAED,OAAOC,UAAoB,UAAU,OAAO,CAAC,CAAC,KAAK,OAAO,UAAU;CACpE,OAAO,SAAS;AACjB,CAAC;;;;;;;;AASF,MAAM,OAAO,QAAgB,MAA6B,QACzD,OAAO,IAAI,aAAa;CAavB,OAAO,QAAO,QAXK,OADI,oBAAoB,oBAAA,CAChB,MAC1B,aAAa,KAAK,QAAQ,CAAC,GAAG,IAAI,GAAG;EACpC;EACA,WAAW;EACX,UAAU;EACV,OAAO;EACP,QAAQ;EACR,QAAQ;CACT,CAAC,CACF,EAAA,CAEkB,SAAS,KAAK,OAAO,oBAAoB,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM;AAEtB,IAAA,cAAeC,QACd,IAAI,SAAS,KACb,OAAO,GAAG,WAAW,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,MAAM,MAAM,QAAQ;CAChF,MAAM,SAAS,OAAO,IAAI;CA0B1B,MAAM,OAAO,OAxBG,OAAO,IAAI,aAAa;EACvC,IAAI,OAAO,OAAO,MAAM,KAAK;GAAC,OAAO;GAAM,OAAO;GAAU,OAAO;EAAa,CAAC,CAAC,KAAK,OAAO,MAAM,GACnG,OAAO,OAAO,IAAI,kBAAkB,EACnC,SAAS,yFACV,CAAC;EAGF,MAAMC,YAAU,OAAOC,QAAgB,QAAQ;GAAE;GAAM;EAAK,CAAC;EAC7D,MAAM,MAAM,OAAO,OAAO,OAAO,MAAM,IAAI,OAAO,OAAO,KAAK,IAAI,QAAQD,SAAO;EAGjF,MAAM,WAAW,OAAO,OAAO,cAAc,OAAO,kBAAkB;EACtE,MAAM,SAAS,OAAO,OAAO,IAAI;GAChC,WAAW,SAAS,cAAc;GAClC,QAAQ,UAAU,IAAI,kBAAkB,EAAE,SAAU,MAAgB,QAAQ,CAAC;EAC9E,CAAC;EACD,OAAO,OAAO,IAAI,QAAQ,MAAM;IAC9B,SAAS,aAAa;GAGvB,mBAAmBA,UAAQ;EAC5B,CAAC;CACF,CAE0B,CAAC,CAAC,KAC3B,OAAO,QACP,OAAO,OAAO,UAAU,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,CAC1E;CACA,OAAO,OAAO,WAAW;EACxB,QAAQ,WAAW;CACpB,CAAC;AACF,CAAC,CACF"}
@@ -1,6 +1,6 @@
1
1
  import { i as Cmd, t as handler } from "./runtime-CwoLsQy7.mjs";
2
- import { f as writeOut, i as reportFailure } from "./error-CRmRHqrm.mjs";
3
- import { a as targeted, i as read, n as local, r as probe, t as fetchable } from "./entries-Cj-3rgv6.mjs";
2
+ import { f as writeOut, i as reportFailure } from "./error-BVSfzBzb.mjs";
3
+ import { a as targeted, i as read, n as local, r as probe, t as fetchable } from "./entries-hMxcOaPm.mjs";
4
4
  import { Effect, Option } from "effect";
5
5
  import { Plugin } from "@codeworksh/harness/effect";
6
6
  //#region src/cli/cmd/handlers/plugin/update.ts
@@ -48,4 +48,4 @@ var update_default = handler(Cmd.commands.plugin.commands.update, Effect.fn("CLI
48
48
  //#endregion
49
49
  export { update_default as default };
50
50
 
51
- //# sourceMappingURL=update-CB9YgFxd.mjs.map
51
+ //# sourceMappingURL=update-oK_209iL.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-CB9YgFxd.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/plugin/update.ts"],"sourcesContent":["import { Plugin } from \"@codeworksh/harness/effect\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport { fetchable, local, probe, read, targeted } from \"./entries.ts\";\n\n/**\n * Take whatever `check` found.\n *\n * Only a plugin that is **already installed** is refreshed: \"not installed\" is not \"outdated\", and\n * `plugin install` is the verb for that. Each refresh publishes a new generation, which a running\n * session picks up at its next exchange -- so this command never has to reach into a server.\n */\nexport default Runtime.handler(\n\tCmd.commands.plugin.commands.update,\n\tEffect.fn(\"CLI.plugin.update\")(function* ({ spec }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst shared = yield* Cmd.spec;\n\t\t\tconst { entries, cache, hostDir } = yield* read(shared);\n\t\t\tconst selected = yield* targeted(entries, spec, hostDir);\n\t\t\tif (selected.length === 0 && Option.isSome(spec)) return;\n\n\t\t\tlet updated = 0;\n\t\t\tlet failed = 0;\n\t\t\tfor (const entry of selected) {\n\t\t\t\tconst target = fetchable(entry.target);\n\t\t\t\t// A local plugin has no revision to compare and is never copied into the store.\n\t\t\t\tif (target === undefined) {\n\t\t\t\t\tyield* local(entry, spec);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst result = yield* Plugin.update(target, cache, {\n\t\t\t\t\tprobe: probe(cache, entry.from),\n\t\t\t\t\tfrom: entry.from,\n\t\t\t\t\t// Validated while staged, so a refresh that fetches something broken leaves\n\t\t\t\t\t// the generation already in use as the answer. Preserve the loader's reason:\n\t\t\t\t\t// an import failure or invalid definition is not a missing entrypoint.\n\t\t\t\t\tvalidate: (fetched) => Plugin.definition(fetched.entrypoint, entry.reference).pipe(Effect.asVoid),\n\t\t\t\t}).pipe(Effect.result);\n\n\t\t\t\tif (result._tag === \"Failure\") {\n\t\t\t\t\tfailed += 1;\n\t\t\t\t\tyield* writeOut(`${entry.reference} error[${result.failure.reason}]: ${result.failure.message}\\n`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (result.success._tag === \"updated\") {\n\t\t\t\t\tupdated += 1;\n\t\t\t\t\tyield* writeOut(`Updated ${entry.reference} to ${result.success.entry.revision ?? \"a new revision\"}\\n`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// A spec that named only local plugins compared nothing, so there is nothing to sum up.\n\t\t\tif (Option.isSome(spec) && selected.every((entry) => fetchable(entry.target) === undefined)) return;\n\t\t\tyield* writeOut(updated === 0 ? \"Nothing to update.\\n\" : `${updated} updated.\\n`);\n\t\t\tif (failed > 0) process.exitCode = 1;\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;;AAeA,IAAA,iBAAeA,QACd,IAAI,SAAS,OAAO,SAAS,QAC7B,OAAO,GAAG,mBAAmB,CAAC,CAAC,WAAW,EAAE,QAAQ;CA2CnD,OAAO,OA1CS,OAAO,IAAI,aAAa;EACvC,MAAM,SAAS,OAAO,IAAI;EAC1B,MAAM,EAAE,SAAS,OAAO,YAAY,OAAO,KAAK,MAAM;EACtD,MAAM,WAAW,OAAO,SAAS,SAAS,MAAM,OAAO;EACvD,IAAI,SAAS,WAAW,KAAK,OAAO,OAAO,IAAI,GAAG;EAElD,IAAI,UAAU;EACd,IAAI,SAAS;EACb,KAAK,MAAM,SAAS,UAAU;GAC7B,MAAM,SAAS,UAAU,MAAM,MAAM;GAErC,IAAI,WAAW,KAAA,GAAW;IACzB,OAAO,MAAM,OAAO,IAAI;IACxB;GACD;GAEA,MAAM,SAAS,OAAO,OAAO,OAAO,QAAQ,OAAO;IAClD,OAAO,MAAM,OAAO,MAAM,IAAI;IAC9B,MAAM,MAAM;IAIZ,WAAW,YAAY,OAAO,WAAW,QAAQ,YAAY,MAAM,SAAS,CAAC,CAAC,KAAK,OAAO,MAAM;GACjG,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM;GAErB,IAAI,OAAO,SAAS,WAAW;IAC9B,UAAU;IACV,OAAO,SAAS,GAAG,MAAM,UAAU,UAAU,OAAO,QAAQ,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;IAClG;GACD;GACA,IAAI,OAAO,QAAQ,SAAS,WAAW;IACtC,WAAW;IACX,OAAO,SAAS,WAAW,MAAM,UAAU,MAAM,OAAO,QAAQ,MAAM,YAAY,iBAAiB,GAAG;GACvG;EACD;EAGA,IAAI,OAAO,OAAO,IAAI,KAAK,SAAS,OAAO,UAAU,UAAU,MAAM,MAAM,MAAM,KAAA,CAAS,GAAG;EAC7F,OAAO,SAAS,YAAY,IAAI,yBAAyB,GAAG,QAAQ,YAAY;EAChF,IAAI,SAAS,GAAG,QAAQ,WAAW;CACpC,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
1
+ {"version":3,"file":"update-oK_209iL.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/plugin/update.ts"],"sourcesContent":["import { Plugin } from \"@codeworksh/harness/effect\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport { fetchable, local, probe, read, targeted } from \"./entries.ts\";\n\n/**\n * Take whatever `check` found.\n *\n * Only a plugin that is **already installed** is refreshed: \"not installed\" is not \"outdated\", and\n * `plugin install` is the verb for that. Each refresh publishes a new generation, which a running\n * session picks up at its next exchange -- so this command never has to reach into a server.\n */\nexport default Runtime.handler(\n\tCmd.commands.plugin.commands.update,\n\tEffect.fn(\"CLI.plugin.update\")(function* ({ spec }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst shared = yield* Cmd.spec;\n\t\t\tconst { entries, cache, hostDir } = yield* read(shared);\n\t\t\tconst selected = yield* targeted(entries, spec, hostDir);\n\t\t\tif (selected.length === 0 && Option.isSome(spec)) return;\n\n\t\t\tlet updated = 0;\n\t\t\tlet failed = 0;\n\t\t\tfor (const entry of selected) {\n\t\t\t\tconst target = fetchable(entry.target);\n\t\t\t\t// A local plugin has no revision to compare and is never copied into the store.\n\t\t\t\tif (target === undefined) {\n\t\t\t\t\tyield* local(entry, spec);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst result = yield* Plugin.update(target, cache, {\n\t\t\t\t\tprobe: probe(cache, entry.from),\n\t\t\t\t\tfrom: entry.from,\n\t\t\t\t\t// Validated while staged, so a refresh that fetches something broken leaves\n\t\t\t\t\t// the generation already in use as the answer. Preserve the loader's reason:\n\t\t\t\t\t// an import failure or invalid definition is not a missing entrypoint.\n\t\t\t\t\tvalidate: (fetched) => Plugin.definition(fetched.entrypoint, entry.reference).pipe(Effect.asVoid),\n\t\t\t\t}).pipe(Effect.result);\n\n\t\t\t\tif (result._tag === \"Failure\") {\n\t\t\t\t\tfailed += 1;\n\t\t\t\t\tyield* writeOut(`${entry.reference} error[${result.failure.reason}]: ${result.failure.message}\\n`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (result.success._tag === \"updated\") {\n\t\t\t\t\tupdated += 1;\n\t\t\t\t\tyield* writeOut(`Updated ${entry.reference} to ${result.success.entry.revision ?? \"a new revision\"}\\n`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// A spec that named only local plugins compared nothing, so there is nothing to sum up.\n\t\t\tif (Option.isSome(spec) && selected.every((entry) => fetchable(entry.target) === undefined)) return;\n\t\t\tyield* writeOut(updated === 0 ? \"Nothing to update.\\n\" : `${updated} updated.\\n`);\n\t\t\tif (failed > 0) process.exitCode = 1;\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;;AAeA,IAAA,iBAAeA,QACd,IAAI,SAAS,OAAO,SAAS,QAC7B,OAAO,GAAG,mBAAmB,CAAC,CAAC,WAAW,EAAE,QAAQ;CA2CnD,OAAO,OA1CS,OAAO,IAAI,aAAa;EACvC,MAAM,SAAS,OAAO,IAAI;EAC1B,MAAM,EAAE,SAAS,OAAO,YAAY,OAAO,KAAK,MAAM;EACtD,MAAM,WAAW,OAAO,SAAS,SAAS,MAAM,OAAO;EACvD,IAAI,SAAS,WAAW,KAAK,OAAO,OAAO,IAAI,GAAG;EAElD,IAAI,UAAU;EACd,IAAI,SAAS;EACb,KAAK,MAAM,SAAS,UAAU;GAC7B,MAAM,SAAS,UAAU,MAAM,MAAM;GAErC,IAAI,WAAW,KAAA,GAAW;IACzB,OAAO,MAAM,OAAO,IAAI;IACxB;GACD;GAEA,MAAM,SAAS,OAAO,OAAO,OAAO,QAAQ,OAAO;IAClD,OAAO,MAAM,OAAO,MAAM,IAAI;IAC9B,MAAM,MAAM;IAIZ,WAAW,YAAY,OAAO,WAAW,QAAQ,YAAY,MAAM,SAAS,CAAC,CAAC,KAAK,OAAO,MAAM;GACjG,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM;GAErB,IAAI,OAAO,SAAS,WAAW;IAC9B,UAAU;IACV,OAAO,SAAS,GAAG,MAAM,UAAU,UAAU,OAAO,QAAQ,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;IAClG;GACD;GACA,IAAI,OAAO,QAAQ,SAAS,WAAW;IACtC,WAAW;IACX,OAAO,SAAS,WAAW,MAAM,UAAU,MAAM,OAAO,QAAQ,MAAM,YAAY,iBAAiB,GAAG;GACvG;EACD;EAGA,IAAI,OAAO,OAAO,IAAI,KAAK,SAAS,OAAO,UAAU,UAAU,MAAM,MAAM,MAAM,KAAA,CAAS,GAAG;EAC7F,OAAO,SAAS,YAAY,IAAI,yBAAyB,GAAG,QAAQ,YAAY;EAChF,IAAI,SAAS,GAAG,QAAQ,WAAW;CACpC,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
@@ -1,2 +0,0 @@
1
- import { t as disconnect } from "./control-B7wWLTbq.mjs";
2
- export { disconnect as default };
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-CRmRHqrm.mjs","names":["decode","OAuthError","Contract.Api","Envelope.decode","Client.ExecutionError"],"sources":["../../src/server/envelope.ts","../../src/server/part.ts","../../src/server/contract.ts","../../src/server/client.ts","../../src/cli/output.ts","../../src/cli/error.ts"],"sourcesContent":["import { EventList, EventSchema, optional } from \"@codeworksh/harness/effect\";\nimport { Effect, Predicate, Schema } from \"effect\";\n\n/**\n * The wire form of an `EventSchema.Payload`. `data` is carried in its encoded\n * form — decoded payloads are not wire-safe (`Schema.Duration`, aikit class\n * transforms) — so clients decode it lazily through their own copy of the\n * registry and can skip types they do not know.\n */\nexport const EventEnvelope = Schema.Struct({\n\tid: EventSchema.ID,\n\ttype: Schema.String,\n\tdurable: optional(Schema.Struct({ aggregateId: Schema.String, seq: Schema.Int, version: Schema.Int })),\n\tmetadata: optional(Schema.Record(Schema.String, Schema.String)),\n\tdata: Schema.Unknown,\n});\nexport type EventEnvelope = typeof EventEnvelope.Type;\n\n/** Whether an event belongs to a thread: every thread-scoped event names its `threadId`. */\nexport const ofThread =\n\t(threadId: string) =>\n\t(event: { readonly data: unknown }): boolean =>\n\t\tPredicate.hasProperty(event.data, \"threadId\") && event.data.threadId === threadId;\n\nexport class UnknownEventTypeError extends Schema.TaggedError<UnknownEventTypeError>()(\"UnknownEventTypeError\", {\n\ttype: Schema.String,\n}) {}\n\n/** The transport's own readiness frame; it has no meaning inside the harness. */\nexport const Connected = EventSchema.define({ type: \"server.connected\", schema: {} });\n\n/** Resolves a published type to the definition that encodes it. */\nexport type Registry = (type: string) => EventSchema.Definition | undefined;\n\n/**\n * What a stock client can decode: the harness's public events plus the frames\n * the transport adds itself. A server may know more than this -- plugins\n * register their own types -- which is exactly why `data` crosses the wire\n * encoded and is decoded lazily, so an unknown type is skipped, not fatal.\n */\nconst core = EventSchema.latest([...EventList.PublicDefinitions, Connected]);\nexport const Core: Registry = (type) => core.get(type);\n\nexport class EncodingError extends Schema.TaggedError<EncodingError>()(\"EventEncodingError\", {\n\ttype: Schema.String,\n\tcause: Schema.Defect(),\n}) {}\n\nexport const encode = Effect.fn(\"Envelope.encode\")(function* (payload: EventSchema.Payload, registry: Registry = Core) {\n\tconst definition = registry(payload.type);\n\tif (definition === undefined) return yield* new UnknownEventTypeError({ type: payload.type });\n\tconst data = yield* Schema.encodeEffect(definition.data)(payload.data).pipe(\n\t\tEffect.mapError((cause) => new EncodingError({ type: payload.type, cause })),\n\t);\n\treturn {\n\t\tid: payload.id,\n\t\ttype: payload.type,\n\t\t...(payload.durable === undefined ? {} : { durable: payload.durable }),\n\t\t...(payload.metadata === undefined ? {} : { metadata: payload.metadata }),\n\t\tdata,\n\t};\n});\n\nexport const decode = Effect.fn(\"Envelope.decode\")(function* (envelope: EventEnvelope, registry: Registry = Core) {\n\tconst definition = registry(envelope.type);\n\tif (definition === undefined) {\n\t\treturn yield* new UnknownEventTypeError({ type: envelope.type });\n\t}\n\tconst data = yield* Schema.decodeEffect(definition.data)(envelope.data);\n\treturn {\n\t\tid: envelope.id,\n\t\ttype: envelope.type,\n\t\t...(envelope.durable === undefined ? {} : { durable: envelope.durable }),\n\t\t...(envelope.metadata === undefined ? {} : { metadata: envelope.metadata }),\n\t\tdata,\n\t} as EventSchema.Payload;\n});\n\nexport * as Envelope from \"./envelope.ts\";\n","import { Schema } from \"effect\";\n\n/*\n * A stored message part as clients see it: aikit's part JSON (persisted verbatim by the harness),\n * narrowed to what a client renders. Provider replay data (signatures, namespaces) and tool\n * `details` are left out, so decoding a stored part drops them.\n */\n\nexport const TextContent = Schema.Struct({ type: Schema.Literal(\"text\"), text: Schema.String });\nexport const ImageContent = Schema.Struct({\n\ttype: Schema.Literal(\"image\"),\n\tdata: Schema.String,\n\tmimeType: Schema.String,\n});\nexport const ThinkingContent = Schema.Struct({\n\ttype: Schema.Literal(\"thinking\"),\n\tthinking: Schema.String,\n\t/** The provider withheld the reasoning; `thinking` is then empty. */\n\tredacted: Schema.optionalKey(Schema.Boolean),\n});\n\n/** aikit's ToolStatusEnum. */\nexport const ToolStatus = Schema.Literals([\"pending\", \"running\", \"completed\", \"error\", \"skipped\", \"aborted\"]);\n\nexport const ToolResult = Schema.Struct({\n\tcontent: Schema.Array(Schema.Union([TextContent, ImageContent])),\n\tisError: Schema.Boolean,\n});\n\nexport const ToolCall = Schema.Struct({\n\ttype: Schema.Literal(\"toolCall\"),\n\tcallID: Schema.String,\n\tname: Schema.String,\n\targuments: Schema.Record(Schema.String, Schema.Json),\n\tstatus: ToolStatus,\n\t/** Present once the call settled (completed, error, skipped, aborted). */\n\tresult: Schema.optionalKey(ToolResult),\n\t/** Epoch milliseconds: started, and last lifecycle update. */\n\ttime: Schema.optionalKey(Schema.Struct({ start: Schema.Finite, end: Schema.Finite })),\n});\nexport type ToolCall = typeof ToolCall.Type;\n\nexport const Part = Schema.Union([TextContent, ImageContent, ThinkingContent, ToolCall]);\nexport type Part = typeof Part.Type;\n\n/** A stored part row's JSON, or none when it is not a part a client renders. */\nexport const decode = Schema.decodeUnknownOption(Schema.fromJsonString(Part));\n\nexport * as MessagePart from \"./part.ts\";\n","import { Model } from \"@codeworksh/aikit\";\nimport {\n\tControl,\n\tEvent,\n\tEventList,\n\tLocation,\n\tMcpError,\n\toptional,\n\tProject,\n\tPromptSchema,\n\tRunner,\n\tSandbox,\n\tSandboxError,\n\tSession,\n\tSessionStore,\n\tSettings,\n\tThreadSchema,\n\tThreadStore,\n} from \"@codeworksh/harness/effect\";\nimport { Schema } from \"effect\";\nimport { Rpc, RpcGroup } from \"effect/rpc\";\nimport { EncodingError, EventEnvelope } from \"./envelope.ts\";\nimport { Part } from \"./part.ts\";\n\n/** The HTTP path the RPC endpoint is served on; the version moves with breaking wire changes. */\nexport const path = \"/rpc/v1\";\n\nexport const SandboxInfo = Schema.Struct({\n\tid: Sandbox.SandboxInstance.ID,\n\tdriver: Schema.String,\n\tkind: Sandbox.SandboxInstance.Kind,\n\tproviderResourceId: Schema.OptionFromNullOr(Schema.String),\n\townership: Sandbox.SandboxInstance.Ownership,\n\tstatus: Sandbox.SandboxInstance.Status,\n\tusage: Sandbox.SandboxInstance.Usage,\n\trefCount: Schema.Int,\n\tcreatedAt: Schema.DateFromString,\n\tupdatedAt: Schema.DateFromString,\n});\nexport type SandboxInfo = typeof SandboxInfo.Type;\n\n/** The container: where its threads run by default, and which host project it reads. */\nexport const SessionInfo = Schema.Struct({\n\tid: Session.SessionSchema.ID,\n\tdirectory: Session.AbsolutePath,\n\t/** The host directory this session is anchored to. Absent when it has none. */\n\thostDir: optional(Session.AbsolutePath),\n\tsandbox: optional(SandboxInfo),\n\t/** The project the session's space belongs to. */\n\tproject: optional(Schema.Struct({ id: Schema.String, name: Schema.String })),\n\t/** Last activity in any of its threads, epoch milliseconds. */\n\tupdatedAt: Schema.Finite,\n\t/** Where unaddressed prompts go. */\n\tmainThreadId: ThreadSchema.ID,\n});\nexport type SessionInfo = typeof SessionInfo.Type;\n\nexport const ThreadOrigin = Schema.Union([\n\tSchema.Struct({ kind: Schema.Literal(\"main\") }),\n\tSchema.Struct({ kind: Schema.Literal(\"fork\"), threadId: Schema.String, entryId: Schema.String }),\n\tSchema.Struct({\n\t\tkind: Schema.Literal(\"subagent\"),\n\t\tthreadId: Schema.String,\n\t\tcallId: Schema.String,\n\t\tentryId: optional(Schema.String),\n\t}),\n]);\n\n/** Billed usage of a thread's own entries; what it inherits through a fork point counts for its source. */\nexport const ThreadUsage = Schema.Struct({\n\t/** Total cost in US dollars, from the catalog's prices. */\n\tcost: Schema.Finite,\n\tinput: Schema.Int,\n\toutput: Schema.Int,\n\tcacheRead: Schema.Int,\n\tcacheWrite: Schema.Int,\n});\nexport type ThreadUsage = typeof ThreadUsage.Type;\n\n/** One linear transcript of a session, with the session embedded. */\nexport const ThreadInfo = Schema.Struct({\n\tid: ThreadSchema.ID,\n\torigin: ThreadOrigin,\n\t/** Absent until its first own prompt; clients show a fork's source title until then. */\n\ttitle: optional(Schema.String),\n\t/** Last activity, epoch milliseconds. */\n\tupdatedAt: Schema.Finite,\n\t/** The model chosen for this thread; absent when settings decide. */\n\tmodel: optional(Schema.Struct({ provider: Schema.String, id: Schema.String })),\n\t/** The thinking level chosen for this thread; absent when settings decide. */\n\tthinkingLevel: optional(Schema.Enum(Model.ThinkingLevelEnum)),\n\t/** The prompt foundation chosen for this thread; absent when prompt plugins render it. */\n\tfoundation: optional(Schema.String),\n\t/** Where it runs instead of the session's space and directory. */\n\tplacement: optional(Schema.Struct({ spaceId: Schema.String, directory: Session.AbsolutePath })),\n\tusage: ThreadUsage,\n\tsession: SessionInfo,\n});\nexport type ThreadInfo = typeof ThreadInfo.Type;\n\n/** A thread of a session: `threadId`, or the session's `main` thread when absent. */\nconst ThreadRef = {\n\tsessionId: Session.SessionSchema.ID,\n\tthreadId: optional(ThreadSchema.ID),\n};\n\n/** A thread's MCP server, by the name its `mcp.json` gives it. */\nconst McpServerRef = { ...ThreadRef, server: Schema.String };\n\n/** One message in a thread's line (inherited ones first), oldest first. */\nexport const HistoryEntry = Schema.Struct({\n\t/** The entry id: what live events and `thread.message` refer to. */\n\tid: Schema.String,\n\t/** The thread that wrote it: this one, or a source it was forked from. */\n\tthreadId: Schema.String,\n\t/** Its place in the session's durable log; live events continue from it. */\n\tseq: Schema.Int,\n\trole: Schema.Literals([\"user\", \"assistant\"]),\n\t/** `draft` is a reply still streaming; `aborted` one that was interrupted. */\n\tstate: Schema.Literals([\"committed\", \"draft\", \"aborted\"]),\n\t/** Epoch milliseconds. */\n\tcreatedAt: Schema.Finite,\n\t/** Epoch milliseconds of the last change; for a reply, when it ended once it is no longer a draft. */\n\tupdatedAt: Schema.Finite,\n\tparts: Schema.Array(Part),\n});\nexport type HistoryEntry = typeof HistoryEntry.Type;\n\n/** A prompt admitted but not yet in the conversation: a steer waiting for the next model request, or a follow-up for the next turn. */\nexport const QueuedPrompt = Schema.Struct({\n\t/** The id of the user message it becomes once promoted. */\n\tid: Schema.String,\n\tdelivery: PromptSchema.Delivery,\n\ttext: Schema.String,\n\t/** Epoch milliseconds. */\n\tcreatedAt: Schema.Finite,\n});\nexport type QueuedPrompt = typeof QueuedPrompt.Type;\n\n/** Ends `session.log`'s replay; `seq` is absent when the session has no durable events yet. */\nexport const LogSynced = Schema.Struct({\n\ttype: Schema.Literal(\"log.synced\"),\n\t/** The session the log was read for. */\n\taggregateId: Schema.String,\n\tseq: optional(Schema.Int),\n});\nexport type LogSynced = typeof LogSynced.Type;\n\n/** A thread's model, thinking and foundation choices: a given field replaces the stored one, `null` clears it. */\nexport const RuntimeConfig = Schema.Struct({\n\tmodel: optional(Schema.NullOr(Schema.Struct({ provider: Schema.String, id: Schema.String }))),\n\tthinkingLevel: optional(Schema.NullOr(Schema.Enum(Model.ThinkingLevelEnum))),\n\tfoundation: optional(Schema.NullOr(Schema.NonEmptyString)),\n});\nexport type RuntimeConfig = typeof RuntimeConfig.Type;\n\nexport const SandboxRef = Sandbox.Selection;\n\n/** A model to choose, by the catalog's id and display name, with the thinking levels it supports. */\nexport const ModelOption = Schema.Struct({\n\tid: Schema.String,\n\tname: Schema.String,\n\t/** In ascending order; `[\"off\"]` for a model that does not reason. */\n\tthinkingLevels: Schema.Array(Schema.Enum(Model.ThinkingLevelEnum)),\n});\n\n/** A provider this server can call, with the models a session may use from it. */\nexport const ModelProvider = Schema.Struct({\n\tid: Schema.String,\n\tname: Schema.String,\n\tmodels: Schema.Array(ModelOption),\n});\nexport type ModelProvider = typeof ModelProvider.Type;\n\n/** A project's name as a client sets it: trimmed, never empty. */\nexport const ProjectName = Schema.Trimmed.check(Schema.isNonEmpty());\n\nexport class OAuthError extends Schema.TaggedError<OAuthError>()(\"Server.OAuthError\", {\n\tmessage: Schema.String,\n}) {}\n\n/** OAuth providers whose credentials this server stores. */\nexport const OAuthProvider = Schema.Literals([\"openai-codex\", \"github-copilot\"]);\nexport type OAuthProvider = typeof OAuthProvider.Type;\n\n/**\n * Credentials as the provider's aikit module persists them. The union is\n * discriminated by `provider` so one set of RPCs serves every login.\n */\nexport const OAuthCredentials = Schema.Union([\n\tSchema.Struct({\n\t\tprovider: Schema.Literal(\"openai-codex\"),\n\t\taccess: Schema.String,\n\t\trefresh: Schema.String,\n\t\texpires: Schema.Finite,\n\t\taccountId: Schema.String,\n\t}),\n\tSchema.Struct({\n\t\tprovider: Schema.Literal(\"github-copilot\"),\n\t\taccess: Schema.String,\n\t\trefresh: Schema.String,\n\t\texpires: Schema.Finite,\n\t\tenterpriseUrl: optional(Schema.String),\n\t\tapiEndpoint: optional(Schema.String),\n\t\tavailableModelIds: optional(Schema.Array(Schema.String)),\n\t}),\n]);\nexport type OAuthCredentials = typeof OAuthCredentials.Type;\n\n/** What a login looks like from the outside: never the tokens themselves. */\nexport const OAuthInfo = Schema.Struct({\n\tprovider: OAuthProvider,\n\t/** Epoch millis, or 0 for a credential that does not expire. */\n\texpires: Schema.Finite,\n\taccountId: optional(Schema.String),\n\tapiEndpoint: optional(Schema.String),\n\tenterpriseUrl: optional(Schema.String),\n\tavailableModels: optional(Schema.Int),\n});\nexport type OAuthInfo = typeof OAuthInfo.Type;\n\nconst SessionErrors = Schema.Union([\n\tSessionStore.SessionNotFoundError,\n\tThreadStore.ThreadNotFoundError,\n\tSessionStore.SessionLinkedSpaceNotFoundError,\n\tSessionStore.RelinkError,\n]);\n\nconst ThreadErrors = Schema.Union([SessionStore.SessionNotFoundError, ThreadStore.ThreadNotFoundError]);\n\n// Every lifecycle error the sandbox control plane can raise; narrowing per\n// endpoint would misreport what `withMount` and `stop` actually fail with.\nconst SandboxErrors = Schema.Union([\n\tSandboxError.SandboxNotFoundError,\n\tSandboxError.SandboxDriverNotRegisteredError,\n\tSandboxError.SandboxDriverRegistrationError,\n\tSandboxError.SandboxUnsupportedError,\n\tSandboxError.SandboxProviderError,\n\tSandboxError.SandboxUnavailError,\n\tSandboxError.SandboxRemovedError,\n\tSandboxError.SandboxTransitionConflictError,\n\tSandboxError.SandboxBusyError,\n]);\n\nconst LocationErrors = Schema.Union([Location.DirectoryNotFoundError, Location.NotDirectoryError]);\n\n/** One of a thread's MCP servers as that thread sees it. */\nexport const McpStatus = Schema.Struct({\n\tserver: Schema.String,\n\tstate: EventList.McpState,\n\terror: optional(Schema.String),\n\t/** Tools the server offered when last listed, each with its exposure in the thread. */\n\ttools: Schema.Array(\n\t\tSchema.Struct({ name: Schema.String, exposure: Schema.Literals([\"direct\", \"codemode\", \"deferred\", \"hidden\"]) }),\n\t),\n\tresources: Schema.Boolean,\n\t/** Tools it listed last that were left out because the MCP SDK rejects them; absent when none were. */\n\tskipped: optional(EventList.McpSkipped),\n});\nexport type McpStatus = typeof McpStatus.Type;\n\nconst McpErrors = Schema.Union([ThreadErrors, McpError.UnknownServerError]);\n\nexport const Api = RpcGroup.make(\n\t/**\n\t * The server's own identity: the process and build a client is talking to.\n\t *\n\t * The health probe: a discovery registration names a pid and version, and a\n\t * caller confirms the process answering is the one that registered before it\n\t * trusts the endpoint. Like every other capability it rides the RPC channel,\n\t * so there is no separate HTTP surface to keep in step.\n\t */\n\tRpc.make(\"server.info\", {\n\t\tpayload: {},\n\t\tsuccess: Schema.Struct({ pid: Schema.Int, version: Schema.String }),\n\t}),\n\tRpc.make(\"auth.save\", {\n\t\tpayload: { credentials: OAuthCredentials },\n\t\tsuccess: OAuthInfo,\n\t\terror: OAuthError,\n\t}),\n\tRpc.make(\"auth.status\", {\n\t\tpayload: { provider: OAuthProvider },\n\t\tsuccess: Schema.NullOr(OAuthInfo),\n\t\terror: OAuthError,\n\t}),\n\tRpc.make(\"auth.refresh\", {\n\t\tpayload: { provider: OAuthProvider },\n\t\tsuccess: Schema.NullOr(OAuthInfo),\n\t\terror: OAuthError,\n\t}),\n\tRpc.make(\"auth.logout\", {\n\t\tpayload: { provider: OAuthProvider },\n\t\tsuccess: Schema.Void,\n\t\terror: OAuthError,\n\t}),\n\t/** A session and its `main` thread; the main thread's info, with the session embedded. */\n\tRpc.make(\"session.create\", {\n\t\tpayload: {\n\t\t\t/** The main thread's title; absent = its first prompt names it. */\n\t\t\ttitle: optional(Schema.String),\n\t\t\tdirectory: optional(Schema.String),\n\t\t\t/**\n\t\t\t * The host directory this session is anchored to, usually the caller's project root.\n\t\t\t * Unrelated to `directory`, which names a place inside the session's space.\n\t\t\t *\n\t\t\t * It is an anchor and nothing more: whatever needs a host-side directory resolves from\n\t\t\t * here rather than from wherever the server happens to be running. What reads it is the\n\t\t\t * reader's business, not this field's.\n\t\t\t *\n\t\t\t * Optional and honoured as given. Omitting it is normal, not a failure.\n\t\t\t */\n\t\t\thostDir: optional(Session.AbsolutePath),\n\t\t\tsandbox: optional(SandboxRef),\n\t\t\truntime: optional(RuntimeConfig),\n\t\t\t/**\n\t\t\t * Names the project when this session creates it, ahead of the repository's and the\n\t\t\t * folder's name. A project that already exists keeps its name; `project.rename` changes it.\n\t\t\t */\n\t\t\tproject: optional(Schema.Struct({ name: ProjectName })),\n\t\t},\n\t\tsuccess: ThreadInfo,\n\t\terror: Schema.Union([SessionErrors, SandboxErrors, LocationErrors]),\n\t}),\n\tRpc.make(\"project.rename\", {\n\t\tpayload: { projectId: Schema.String, name: ProjectName },\n\t\tsuccess: Schema.Struct({ id: Schema.String, name: Schema.String }),\n\t\terror: Project.ProjectNotFoundError,\n\t}),\n\t/**\n\t * The models a session anchored at `hostDir` can use: providers this server holds credentials\n\t * for, in the catalog plus that project's settings, and the model settings pick when a session\n\t * names none. Without `hostDir`, only the user's settings apply. Credentials are checked for\n\t * presence, not validity.\n\t */\n\tRpc.make(\"model.list\", {\n\t\tpayload: { hostDir: optional(Session.AbsolutePath) },\n\t\tsuccess: Schema.Struct({\n\t\t\tproviders: Schema.Array(ModelProvider),\n\t\t\tdefault: Schema.Struct({\n\t\t\t\tprovider: Schema.String,\n\t\t\t\tid: Schema.String,\n\t\t\t\t/** As settings name it; a run clamps it to what the model supports. */\n\t\t\t\tthinkingLevel: Schema.Enum(Model.ThinkingLevelEnum),\n\t\t\t\t/** Display names from the catalog, present even when its provider is not listed. */\n\t\t\t\tname: optional(Schema.String),\n\t\t\t\tproviderName: optional(Schema.String),\n\t\t\t}),\n\t\t}),\n\t\terror: Schema.Union([Settings.SettingsError, Runner.ModelCatalogError]),\n\t}),\n\t/**\n\t * Point an existing session at a host directory, or clear it with `null`.\n\t *\n\t * Not `session.relink`: that moves where the *work* happens, this changes which host directory\n\t * the session is *anchored to*. Conflating them would recreate exactly the `cwd`/`hostDir`\n\t * confusion the split exists to remove, which is why they sound alike and stay apart.\n\t */\n\tRpc.make(\"session.link\", {\n\t\tpayload: {\n\t\t\tsessionId: Session.SessionSchema.ID,\n\t\t\t/** Absent clears the anchor, leaving the session with no host directory. */\n\t\t\thostDir: optional(Session.AbsolutePath),\n\t\t},\n\t\tsuccess: SessionInfo,\n\t\terror: SessionStore.SessionNotFoundError,\n\t}),\n\t/**\n\t * Moves where the work happens. Without `threadId`, the session's default space and directory,\n\t * which every thread without its own placement follows; with it, that thread's placement only.\n\t * Answers with the addressed thread (`main` when absent): its `placement` and embedded session\n\t * show where it now runs.\n\t */\n\tRpc.make(\"session.relink\", {\n\t\tpayload: {\n\t\t\tsessionId: Session.SessionSchema.ID,\n\t\t\tthreadId: optional(ThreadSchema.ID),\n\t\t\tsandbox: optional(SandboxRef),\n\t\t\tdirectory: optional(Schema.String),\n\t\t},\n\t\tsuccess: ThreadInfo,\n\t\terror: Schema.Union([SessionErrors, SandboxErrors, LocationErrors]),\n\t}),\n\t/** Stops every thread, then removes the session with its log. `deleted` is false when it did not exist. */\n\tRpc.make(\"session.delete\", {\n\t\tpayload: { sessionId: Session.SessionSchema.ID },\n\t\tsuccess: Schema.Struct({ deleted: Schema.Boolean }),\n\t}),\n\t/** Interrupts every running thread of the session. */\n\tRpc.make(\"session.interrupt\", {\n\t\tpayload: { sessionId: Session.SessionSchema.ID },\n\t\tsuccess: Schema.Struct({ interrupted: Schema.Boolean }),\n\t}),\n\t/**\n\t * A session's durable events after `after` (exclusive; omitted reads from the start), then a\n\t * `log.synced` marker at the head read when the call began. With `follow`, each event then\n\t * streams as it commits; without it the stream ends at the marker. Every thread of the session\n\t * writes this one log; events name their `threadId`.\n\t * Ephemeral events (text and tool progress deltas) are never stored, so they are not here;\n\t * `event.subscribe` carries them live. To resume, pass the higher of the last event's\n\t * `durable.seq` and the last marker's `seq`: the marker can sit past the last event sent.\n\t * With `threadId`, only that thread's events; the marker still names the session's head. A fork's\n\t * own log starts at its `session.thread.forked`: what it inherits is in `thread.history`.\n\t */\n\tRpc.make(\"session.log\", {\n\t\tpayload: {\n\t\t\tsessionId: Session.SessionSchema.ID,\n\t\t\tthreadId: optional(ThreadSchema.ID),\n\t\t\tafter: optional(Schema.Int),\n\t\t\tfollow: optional(Schema.Boolean),\n\t\t},\n\t\tsuccess: Schema.Union([EventEnvelope, LogSynced]),\n\t\terror: Schema.Union([SessionStore.SessionNotFoundError, EncodingError]),\n\t\tstream: true,\n\t}),\n\t/** Threads newest first, each with its session embedded: of one session, or all. */\n\tRpc.make(\"thread.list\", {\n\t\tpayload: { sessionId: optional(Session.SessionSchema.ID) },\n\t\tsuccess: Schema.Array(ThreadInfo),\n\t}),\n\tRpc.make(\"thread.info\", {\n\t\tpayload: ThreadRef,\n\t\tsuccess: ThreadInfo,\n\t\terror: ThreadErrors,\n\t}),\n\t/**\n\t * The conversation in a thread's line: user and assistant messages, inherited ones first, oldest\n\t * first. The harness's own entries (compactions, resets, notices) are left out.\n\t */\n\tRpc.make(\"thread.history\", {\n\t\tpayload: ThreadRef,\n\t\tsuccess: Schema.Struct({ entries: Schema.Array(HistoryEntry) }),\n\t\terror: ThreadErrors,\n\t}),\n\t/**\n\t * Prompts admitted to the thread but not yet promoted, in admission order. Admission and\n\t * promotion are durable events, so a client following `session.log` rereads this whenever the\n\t * log moves.\n\t */\n\tRpc.make(\"thread.queue\", {\n\t\tpayload: ThreadRef,\n\t\tsuccess: Schema.Struct({ entries: Schema.Array(QueuedPrompt) }),\n\t\terror: ThreadErrors,\n\t}),\n\tRpc.make(\"thread.configure\", {\n\t\tpayload: { ...ThreadRef, runtime: RuntimeConfig },\n\t\tsuccess: ThreadInfo,\n\t\terror: ThreadErrors,\n\t}),\n\t/**\n\t * A new thread whose history continues from this one's line through `entryId`, which must be\n\t * committed. `before` stops at the entry's predecessor and returns its text to edit again.\n\t */\n\tRpc.make(\"thread.fork\", {\n\t\tpayload: { ...ThreadRef, entryId: Schema.String, mode: optional(Schema.Literals([\"at\", \"before\"])) },\n\t\tsuccess: Schema.Struct({ thread: ThreadInfo, text: optional(Schema.String) }),\n\t\terror: Schema.Union([ThreadErrors, ThreadStore.ForkError]),\n\t}),\n\tRpc.make(\"thread.prompt\", {\n\t\tpayload: {\n\t\t\t...ThreadRef,\n\t\t\ttext: Schema.String,\n\t\t\tdelivery: optional(PromptSchema.Delivery),\n\t\t\tid: optional(Session.SessionMessageSchema.ID),\n\t\t},\n\t\tsuccess: Schema.Struct({ threadId: ThreadSchema.ID }),\n\t\terror: Schema.Union([ThreadErrors, Control.PromptConflictError]),\n\t}),\n\t/**\n\t * Withdraws a queued prompt before it joins the conversation. `cancelled` is false when it had\n\t * already been promoted (it then stays in the conversation) or no pending prompt has that id.\n\t */\n\tRpc.make(\"thread.cancel\", {\n\t\tpayload: { ...ThreadRef, messageId: Session.SessionMessageSchema.ID },\n\t\tsuccess: Schema.Struct({ cancelled: Schema.Boolean }),\n\t\terror: ThreadErrors,\n\t}),\n\t/**\n\t * Moves a queued prompt to the other lane or rewrites it, keeping its place in the queue.\n\t * `delivery: \"steer\"` also wakes the thread, so a prompt left waiting after a stop runs now.\n\t * `updated` is false when it had already been promoted or cancelled, or no pending prompt has that id.\n\t */\n\tRpc.make(\"thread.update\", {\n\t\tpayload: {\n\t\t\t...ThreadRef,\n\t\t\tmessageId: Session.SessionMessageSchema.ID,\n\t\t\tdelivery: optional(PromptSchema.Delivery),\n\t\t\ttext: optional(Schema.String),\n\t\t},\n\t\tsuccess: Schema.Struct({ updated: Schema.Boolean }),\n\t\terror: ThreadErrors,\n\t}),\n\tRpc.make(\"thread.interrupt\", {\n\t\tpayload: ThreadRef,\n\t\tsuccess: Schema.Struct({ interrupted: Schema.Boolean }),\n\t\terror: ThreadErrors,\n\t}),\n\t/**\n\t * Whether a prompt materialized into the thread's conversation. An admitted prompt that is still\n\t * queued has no entry yet, so this is the projection a client reconciles against when the\n\t * volatile stream left it unsure.\n\t */\n\tRpc.make(\"thread.message\", {\n\t\tpayload: { ...ThreadRef, messageId: Session.SessionMessageSchema.ID },\n\t\tsuccess: Schema.Struct({ found: Schema.Boolean }),\n\t\terror: ThreadErrors,\n\t}),\n\tRpc.make(\"thread.wait\", {\n\t\tpayload: ThreadRef,\n\t\tsuccess: Schema.Void,\n\t\terror: ThreadErrors,\n\t}),\n\t/**\n\t * Re-import every configured plugin, for the whole server.\n\t *\n\t * The one thing an exchange cannot notice on its own: a local plugin whose contents changed\n\t * while its path did not. A failure keeps the previous set and is reported here rather than\n\t * emptying a running server's tool registry.\n\t */\n\tRpc.make(\"plugin.reload\", {\n\t\tpayload: {},\n\t\t// No error channel: a reload that fails keeps the previous set and reports why, because a\n\t\t// server that empties its tool registry over a typo is worse than one that says so.\n\t\tsuccess: Schema.Struct({ plugins: Schema.Int, failure: optional(Schema.String) }),\n\t}),\n\t/**\n\t * Close the instance behind a thread's MCP server, or its attempt, and connect it afresh, for\n\t * every thread sharing it. Answers once that attempt finished, with the server's state then.\n\t */\n\tRpc.make(\"mcp.connect\", {\n\t\tpayload: McpServerRef,\n\t\tsuccess: McpStatus,\n\t\terror: McpErrors,\n\t}),\n\t/** Close it, for every thread sharing it, and keep it closed until `mcp.connect` or a config change. */\n\tRpc.make(\"mcp.disconnect\", {\n\t\tpayload: McpServerRef,\n\t\tsuccess: McpStatus,\n\t\terror: McpErrors,\n\t}),\n\tRpc.make(\"sandbox.drivers\", {\n\t\tpayload: {},\n\t\tsuccess: Schema.Array(Schema.Struct({ name: Schema.String, kind: Schema.String })),\n\t}),\n\tRpc.make(\"sandbox.list\", {\n\t\tpayload: {},\n\t\tsuccess: Schema.Array(SandboxInfo),\n\t}),\n\tRpc.make(\"sandbox.create\", {\n\t\tpayload: { driver: Schema.String },\n\t\tsuccess: SandboxInfo,\n\t\terror: SandboxErrors,\n\t}),\n\tRpc.make(\"sandbox.register\", {\n\t\tpayload: { driver: Schema.String, providerResourceId: Schema.String },\n\t\tsuccess: SandboxInfo,\n\t\terror: SandboxErrors,\n\t}),\n\tRpc.make(\"sandbox.stop\", {\n\t\tpayload: { sandboxId: Sandbox.SandboxInstance.ID },\n\t\tsuccess: Schema.Void,\n\t\terror: SandboxErrors,\n\t}),\n\t/**\n\t * Every event the server publishes, live, after a `server.connected` frame. With `threadId`,\n\t * only the events naming that thread; the frame still comes first.\n\t */\n\tRpc.make(\"event.subscribe\", {\n\t\tpayload: { threadId: optional(ThreadSchema.ID) },\n\t\tsuccess: EventEnvelope,\n\t\terror: Schema.Union([Event.SubscriptionOverflowError, EncodingError]),\n\t\tstream: true,\n\t}),\n);\n\nexport * as Contract from \"./contract.ts\";\n","import { EventList, type EventSchema, optional, Session } from \"@codeworksh/harness/effect\";\nimport { NodeSocket } from \"@effect/platform-node\";\nimport { Deferred, Effect, Layer, Schema, Stream } from \"effect\";\nimport { RpcClient, RpcSerialization } from \"effect/rpc\";\nimport { Contract } from \"./contract.ts\";\nimport { Envelope } from \"./envelope.ts\";\n\nexport const make = RpcClient.make(Contract.Api);\nexport type Client = Effect.Success<typeof make>;\n\nexport const layer = (url: string) =>\n\tRpcClient.layerProtocolSocket().pipe(\n\t\tLayer.provide(NodeSocket.layerWebSocket(url)),\n\t\tLayer.provide(RpcSerialization.layerNdjson),\n\t);\n\n/** A server-side failure as the client sees it: the category, not the cause. */\nexport class ExecutionError extends Schema.TaggedError<ExecutionError>()(\"Client.ExecutionError\", {\n\ttype: Schema.String,\n\tmessage: Schema.String,\n\tstatus: optional(Schema.Int),\n}) {}\n\n/**\n * Runs one prompt against a server and renders its output.\n *\n * Threads are shared, so the stream carries other clients' work too and every\n * terminal event has to be attributed before it is believed. A terminal that\n * arrives before our own prompt is promoted belongs to somebody else's drain:\n * it is remembered rather than raised, and forgotten the moment our prompt is\n * promoted. It only becomes our outcome if the session reaches idle having\n * never promoted us -- at which point it is the best explanation available for\n * why our prompt never ran.\n */\nexport const run = Effect.fn(\"Client.run\")(function* <E, R>(\n\trpc: Client,\n\tinput: { sessionId: Session.SessionSchema.ID; threadId: Session.ThreadSchema.ID; text: string },\n\trender: (event: EventSchema.Payload) => Effect.Effect<void, E, R>,\n) {\n\tconst id = Session.SessionMessageSchema.ID.create();\n\tlet admitted = false;\n\tlet promoted = false;\n\tlet settled = false;\n\tlet unattributed: ExecutionError | undefined;\n\t// Raised once a busy period ends without our prompt in it: the session may be\n\t// about to go idle, and only idleness proves our prompt is never running.\n\tconst stalled = yield* Deferred.make<void>();\n\n\tconst terminal = (event: EventSchema.Payload): ExecutionError | undefined => {\n\t\tif (Schema.is(EventList.ExecutionInterrupted)(event))\n\t\t\treturn new ExecutionError({\n\t\t\t\ttype: \"aborted\",\n\t\t\t\tmessage: event.data.reason === \"shutdown\" ? \"Server stopped the session\" : \"Session interrupted\",\n\t\t\t});\n\t\tif (Schema.is(EventList.ExecutionFailed)(event))\n\t\t\treturn new ExecutionError({\n\t\t\t\ttype: event.data.error.type,\n\t\t\t\tmessage: event.data.error.message,\n\t\t\t\t...(event.data.error.status === undefined ? {} : { status: event.data.error.status }),\n\t\t\t});\n\t\treturn undefined;\n\t};\n\n\tconst consume = rpc[\"event.subscribe\"]({ threadId: input.threadId }).pipe(\n\t\tStream.mapEffect(\n\t\t\tEffect.fnUntraced(function* (envelope) {\n\t\t\t\tif (envelope.type === Envelope.Connected.type) {\n\t\t\t\t\tyield* rpc[\"thread.prompt\"]({ ...input, id, delivery: \"followUp\" });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst event = yield* Envelope.decode(envelope).pipe(\n\t\t\t\t\tEffect.catchTag(\"UnknownEventTypeError\", () => Effect.void),\n\t\t\t\t);\n\t\t\t\tif (event === undefined) return;\n\t\t\t\tif (Schema.is(EventList.PromptAdmitted)(event) && event.data.messageId === id) admitted = true;\n\t\t\t\tif (Schema.is(EventList.Prompted)(event) && event.data.messageId === id) {\n\t\t\t\t\tpromoted = true;\n\t\t\t\t\t// Our prompt is running after all; whatever ended before it was not ours.\n\t\t\t\t\tunattributed = undefined;\n\t\t\t\t}\n\t\t\t\tif (!admitted) return;\n\n\t\t\t\tconst ended = terminal(event);\n\t\t\t\tconst succeeded = Schema.is(EventList.ExecutionSucceeded)(event);\n\t\t\t\tif (!promoted) {\n\t\t\t\t\tif (ended !== undefined) unattributed = ended;\n\t\t\t\t\t// A busy period that ended without us: wait for idle to find out\n\t\t\t\t\t// whether a successor still picks our prompt up.\n\t\t\t\t\tif (ended !== undefined || succeeded) yield* Deferred.succeed(stalled, undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (ended !== undefined) return yield* ended;\n\t\t\t\tif (succeeded) {\n\t\t\t\t\tsettled = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tyield* render(event);\n\t\t\t}),\n\t\t),\n\t\tStream.takeUntil(() => settled),\n\t\tStream.runDrain,\n\t);\n\n\t// Idle is the cue to reconcile, not the verdict. `wait` follows successors, so\n\t// it resolves only once the session is quiet -- then the projection says\n\t// whether our prompt was ever part of it. A prompt that did run leaves its\n\t// terminal in flight on the same socket, so the consumer is left alone to\n\t// finish; only a prompt that never materialized ends the run early.\n\tlet abandoned = false;\n\tconst reconcile = Deferred.await(stalled).pipe(\n\t\tEffect.andThen(rpc[\"thread.wait\"]({ sessionId: input.sessionId, threadId: input.threadId })),\n\t\tEffect.andThen(rpc[\"thread.message\"]({ sessionId: input.sessionId, threadId: input.threadId, messageId: id })),\n\t\tEffect.andThen(({ found }) =>\n\t\t\tfound\n\t\t\t\t? Effect.never\n\t\t\t\t: Effect.sync(() => {\n\t\t\t\t\t\tabandoned = true;\n\t\t\t\t\t}),\n\t\t),\n\t);\n\n\tyield* Effect.raceFirst(consume, reconcile);\n\tif (settled) return;\n\tif (abandoned)\n\t\treturn yield* unattributed ?? new ExecutionError({ type: \"unknown\", message: \"Prompt was not promoted\" });\n\treturn yield* new ExecutionError({\n\t\ttype: \"transport.disconnected\",\n\t\tmessage: \"Event stream ended before the prompt finished; its output was not rendered\",\n\t});\n});\n\nexport * as Client from \"./client.ts\";\n","import type { Message } from \"@codeworksh/aikit\";\nimport { Effect, Schema } from \"effect\";\n\nexport interface UsageSummary {\n\treadonly turns: number;\n\treadonly provider?: string;\n\treadonly model?: string;\n\treadonly input: number;\n\treadonly output: number;\n\treadonly reasoning: number;\n\treadonly cacheRead: number;\n\treadonly cacheWrite: number;\n\treadonly totalTokens: number;\n\treadonly cost: number;\n}\n\nexport const emptyUsage: UsageSummary = {\n\tturns: 0,\n\tinput: 0,\n\toutput: 0,\n\treasoning: 0,\n\tcacheRead: 0,\n\tcacheWrite: 0,\n\ttotalTokens: 0,\n\tcost: 0,\n};\n\nexport const addUsage = (summary: UsageSummary, message: Message.AssistantMessage): UsageSummary => ({\n\tturns: summary.turns + 1,\n\tprovider: message.provider.id,\n\tmodel: message.responseModel ?? message.model,\n\tinput: summary.input + message.usage.input,\n\toutput: summary.output + message.usage.output,\n\treasoning: summary.reasoning + (message.usage.reasoning ?? 0),\n\tcacheRead: summary.cacheRead + message.usage.cacheRead,\n\tcacheWrite: summary.cacheWrite + message.usage.cacheWrite,\n\ttotalTokens: summary.totalTokens + message.usage.totalTokens,\n\tcost: summary.cost + message.usage.cost.total,\n});\n\nconst number = new Intl.NumberFormat(\"en-US\");\nconst row = (label: string, value: string) => `${label.padEnd(9)}${value}\\n`;\n\nconst formatCost = (cost: number): string => `$${cost.toFixed(cost > 0 && cost < 0.01 ? 6 : 4)}`;\n\nexport const divider = (label: string, columns = 72): string => {\n\tconst width = Math.min(100, Math.max(32, columns));\n\tconst start = `── ${label} `;\n\treturn `${start}${\"─\".repeat(Math.max(2, width - start.length))}\\n`;\n};\n\nexport const header = (input: {\n\treadonly sessionId: string;\n\treadonly sandbox: string;\n\treadonly directory: string;\n\treadonly columns?: number;\n}): string =>\n\t`${row(\"session\", input.sessionId)}${row(\"sandbox\", `${input.sandbox} · ${input.directory}`)}\\n${divider(\n\t\t\"response\",\n\t\tinput.columns,\n\t)}`;\n\nexport const usage = (summary: UsageSummary, columns?: number): string => {\n\tconst turns = `${summary.turns} ${summary.turns === 1 ? \"turn\" : \"turns\"}`;\n\tconst model =\n\t\tsummary.provider === undefined || summary.model === undefined\n\t\t\t? \"unknown\"\n\t\t\t: `${summary.provider}/${summary.model}`;\n\tconst reasoning = summary.reasoning === 0 ? \"\" : ` · ${number.format(summary.reasoning)} reasoning`;\n\treturn `${divider(\"usage\", columns)}${row(\"model\", model)}${row(\n\t\t\"tokens\",\n\t\t`${number.format(summary.input)} input · ${number.format(summary.output)} output${reasoning} · ${number.format(\n\t\t\tsummary.totalTokens,\n\t\t)} total`,\n\t)}${row(\"cache\", `${number.format(summary.cacheRead)} read · ${number.format(summary.cacheWrite)} write`)}${row(\n\t\t\"cost\",\n\t\t`${formatCost(summary.cost)} · ${turns}`,\n\t)}`;\n};\n\nexport const writeOut = (value: string) => Effect.sync(() => void process.stdout.write(value));\n/** A value in its wire form, as indented JSON. */\nexport const writeJson = <A, I>(schema: Schema.Codec<A, I>, value: A) =>\n\tSchema.encodeEffect(schema)(value).pipe(\n\t\tEffect.orDie,\n\t\tEffect.flatMap((encoded) => writeOut(`${JSON.stringify(encoded, null, \"\\t\")}\\n`)),\n\t);\nexport const writeError = (value: string) => Effect.sync(() => void process.stderr.write(value));\nexport const terminalColumns = () => (process.stderr.isTTY ? (process.stderr.columns ?? 72) : 72);\n","import { ModelCatalog, Plugin, Runner, SandboxError, SessionStore, Settings } from \"@codeworksh/harness/effect\";\nimport { SandboxProvider } from \"@codeworksh/harness/sandbox\";\nimport { Duration, Effect, Schema } from \"effect\";\nimport { Client } from \"../server/client.ts\";\nimport { writeError } from \"./output.ts\";\n\n/** Bad flag or argument combinations the parser cannot express on its own. */\nexport class InvalidInputError extends Schema.TaggedError<InvalidInputError>()(\"CLI.InvalidInputError\", {\n\tmessage: Schema.String,\n}) {}\n\nexport class OAuthError extends Schema.TaggedError<OAuthError>()(\"CLI.OAuthError\", {\n\tmessage: Schema.String,\n\tcause: Schema.optional(Schema.Defect()),\n}) {}\n\n/**\n * Every failure a command handler may surface to the runtime. Harness failures are\n * rendered inside the handler that owns them, so only the CLI's own errors reach\n * the top-level renderer.\n */\nexport type CommandError = InvalidInputError | OAuthError;\n\nconst isInvalidInputError = Schema.is(InvalidInputError);\nconst isOAuthError = Schema.is(OAuthError);\nconst isProviderError = Schema.is(Runner.ProviderError);\nconst isModelCatalogError = Schema.is(Runner.ModelCatalogError);\nconst isModelCatalogRefreshError = Schema.is(ModelCatalog.RefreshError);\nconst isModelNotFoundError = Schema.is(Runner.ModelNotFoundError);\nconst isLLMStreamError = Schema.is(Runner.LLMStreamError);\nconst isSandboxProviderError = Schema.is(SandboxProvider.SandboxProviderError);\nconst isPluginInstallError = Schema.is(Plugin.InstallError);\nconst isPluginSourceError = Schema.is(Plugin.SourceError);\nconst isPluginStoreError = Schema.is(Plugin.StoreError);\nconst isPluginLoadError = Schema.is(Plugin.LoadError);\nconst isSessionNotLinkedError = Schema.is(SessionStore.SessionNotLinkedError);\nconst isSettingsError = Schema.is(Settings.SettingsError);\nconst isSandboxDriverNotRegisteredError = Schema.is(SandboxError.SandboxDriverNotRegisteredError);\nconst isSandboxDriverRegistrationError = Schema.is(SandboxError.SandboxDriverRegistrationError);\nconst isExecutionError = Schema.is(Client.ExecutionError);\n\nconst credentialHint = (provider: string): string => {\n\tswitch (provider) {\n\t\tcase \"openrouter\":\n\t\t\treturn \"set OPENROUTER_API_KEY and retry\";\n\t\tcase \"openai\":\n\t\t\treturn \"set OPENAI_API_KEY and retry\";\n\t\tcase \"openai-codex\":\n\t\t\treturn \"run `codework auth login --openai-codex` and retry\";\n\t\tcase \"github-copilot\":\n\t\t\treturn \"run `codework auth login --github-copilot` and retry\";\n\t\tcase \"anthropic\":\n\t\t\treturn \"set ANTHROPIC_API_KEY and retry\";\n\t\tcase \"google\":\n\t\t\treturn \"set GOOGLE_GENERATIVE_AI_API_KEY and retry\";\n\t\tcase \"xai\":\n\t\t\treturn \"set XAI_API_KEY and retry\";\n\t\tdefault:\n\t\t\treturn `configure credentials for provider \"${provider}\" and retry`;\n\t}\n};\n\nconst providerHint = (error: Runner.ProviderError): string | undefined => {\n\tswitch (error.reason._tag) {\n\t\tcase \"Runner.ProviderAuthenticationError\":\n\t\t\treturn error.reason.authentication === \"missing\"\n\t\t\t\t? credentialHint(error.provider)\n\t\t\t\t: `check the credentials configured for provider \"${error.provider}\"`;\n\t\tcase \"Runner.ProviderAuthorizationError\":\n\t\t\treturn \"check that the credential can access this model and endpoint\";\n\t\tcase \"Runner.ProviderModelUnavailableError\":\n\t\t\treturn \"check the provider model ID and whether your account can access it\";\n\t\tcase \"Runner.ProviderRateLimitError\":\n\t\t\treturn error.reason.retryAfter === undefined\n\t\t\t\t? \"retry after the provider rate-limit window resets\"\n\t\t\t\t: `retry in about ${Math.ceil(Duration.toMillis(error.reason.retryAfter) / 1_000)} seconds`;\n\t\tcase \"Runner.ProviderQuotaError\":\n\t\t\treturn \"check the provider account quota or billing balance\";\n\t\tcase \"Runner.ProviderTimeoutError\":\n\t\tcase \"Runner.ProviderTransportError\":\n\t\tcase \"Runner.ProviderUnavailableError\":\n\t\t\treturn error.isRetryable ? \"this failure is retryable\" : undefined;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n};\n\nconst unknownMessage = (error: unknown): string => {\n\tif (error instanceof Error && error.message.trim().length > 0) return error.message;\n\tif (typeof error === \"string\" && error.trim().length > 0) return error;\n\tif (typeof error === \"object\" && error !== null && \"_tag\" in error) {\n\t\t// A bare tag such as `ServeError` hides the reason; its cause carries it (`EADDRINUSE`).\n\t\tconst cause = \"cause\" in error ? error.cause : undefined;\n\t\treturn cause instanceof Error ? `${String(error._tag)}: ${cause.message}` : String(error._tag);\n\t}\n\treturn \"the command failed for an unknown reason\";\n};\n\n/**\n * What the reader can do about a reference that failed to prepare. A plugin list is\n * usually hand-written in a settings file, so the phase is worth translating.\n */\n/** One hint per reason. Lowercase, like everything else a plugin failure prints. */\nconst providerCategory = (reason: Runner.ProviderFailureReason): string => {\n\tswitch (reason._tag) {\n\t\tcase \"Runner.ProviderAuthenticationError\":\n\t\t\treturn \"provider-authentication-error\";\n\t\tcase \"Runner.ProviderConfigurationError\":\n\t\t\treturn \"provider-configuration-error\";\n\t\tcase \"Runner.ProviderAuthorizationError\":\n\t\t\treturn \"provider-authorization-error\";\n\t\tcase \"Runner.ProviderModelUnavailableError\":\n\t\t\treturn \"provider-model-unavailable-error\";\n\t\tcase \"Runner.ProviderRateLimitError\":\n\t\t\treturn \"provider-rate-limit-error\";\n\t\tcase \"Runner.ProviderQuotaError\":\n\t\t\treturn \"provider-quota-error\";\n\t\tcase \"Runner.ProviderInvalidRequestError\":\n\t\t\treturn \"provider-invalid-request-error\";\n\t\tcase \"Runner.ProviderContentPolicyError\":\n\t\t\treturn \"provider-content-filter-error\";\n\t\tcase \"Runner.ProviderTimeoutError\":\n\t\t\treturn \"provider-timeout-error\";\n\t\tcase \"Runner.ProviderTransportError\":\n\t\t\treturn \"provider-transport-error\";\n\t\tcase \"Runner.ProviderUnavailableError\":\n\t\t\treturn \"provider-unavailable-error\";\n\t\tcase \"Runner.ProviderInvalidResponseError\":\n\t\t\treturn \"provider-invalid-response-error\";\n\t\tcase \"Runner.ProviderUnknownError\":\n\t\t\treturn \"provider-unknown-error\";\n\t}\n};\n\nconst pluginReasonHint = (\n\treason:\n\t\t| Plugin.SourceError[\"reason\"]\n\t\t| Plugin.InstallError[\"reason\"]\n\t\t| Plugin.StoreError[\"reason\"]\n\t\t| Plugin.LoadError[\"reason\"],\n): string => {\n\tswitch (reason) {\n\t\tcase \"plugin-unsupported-source\":\n\t\t\treturn \"a path entry starts with `./`, `../`, `~/` or `/`; anything else is a package or a git spec, and a remote tarball is not supported\";\n\t\tcase \"plugin-not-found\":\n\t\t\treturn \"the path does not exist; check the spelling, remembering it anchors to the settings file that declares it\";\n\t\tcase \"plugin-escapes-root\":\n\t\t\treturn \"a plugin path must stay inside the project it is declared in\";\n\t\tcase \"plugin-resolve-failed\":\n\t\t\treturn \"check that the registry or git remote is reachable, and that your credentials are current\";\n\t\tcase \"plugin-fetch-failed\":\n\t\t\treturn \"check the package name and version, and that the registry is reachable\";\n\t\tcase \"plugin-no-commit\":\n\t\t\treturn \"the git source installed but no commit could be recovered; name a branch, tag or commit explicitly\";\n\t\tcase \"plugin-no-entrypoint\":\n\t\t\treturn \"the package installed but exports no module to import; check its `exports` and `main`\";\n\t\tcase \"plugin-not-installed\":\n\t\t\treturn \"run `codework plugin install` to fetch what the settings files name\";\n\t\tcase \"plugin-lock-timeout\":\n\t\t\treturn \"another install is holding this entry; wait for it to finish, or remove the stale `.lock` directory\";\n\t\tcase \"plugin-marker-invalid\":\n\t\tcase \"plugin-index-invalid\":\n\t\t\treturn \"the store entry is damaged; remove it and install again\";\n\t\tcase \"plugin-collect-failed\":\n\t\t\treturn \"the store could not be tidied; check the permissions on the plugin cache\";\n\t\tcase \"plugin-import-failed\":\n\t\t\treturn \"the module failed to load; import it directly to see its own error\";\n\t\tcase \"plugin-missing-dependency\":\n\t\t\treturn \"the plugin's own dependencies are missing; install them where the plugin lives\";\n\t\tcase \"plugin-not-compiled\":\n\t\t\treturn \"a plugin installed from git or npm must ship compiled javascript; build it and commit or publish the output\";\n\t\tcase \"plugin-invalid-definition\":\n\t\t\treturn \"a plugin module must default-export one object with a `setup` and a `vendor.domain.name` id\";\n\t}\n};\n\nconst settingsHint = (reason: Settings.SettingsError[\"reason\"]): string => {\n\tswitch (reason) {\n\t\tcase \"read\":\n\t\t\treturn \"the file exists but could not be read; check that it is a file and readable\";\n\t\tcase \"parse\":\n\t\t\treturn \"the file is not valid JSON; the location above is where parsing stopped\";\n\t\tcase \"decode\":\n\t\t\treturn \"the key above holds a value this setting does not accept\";\n\t}\n};\n\n/** Render typed SDK errors for humans without exposing Effect causes or provider payloads. */\nexport const renderError = (error: unknown): string => {\n\tif (isSandboxDriverNotRegisteredError(error)) {\n\t\treturn `error: sandbox driver \"${error.driver}\" is not registered (available: ${error.registered?.join(\", \") ?? \"none\"})\\n`;\n\t}\n\tif (isSandboxDriverRegistrationError(error)) {\n\t\treturn `error: ${error.reason}\\n`;\n\t}\n\tif (isInvalidInputError(error)) {\n\t\treturn `error: ${error.message}\\n`;\n\t}\n\tif (isOAuthError(error)) {\n\t\treturn (\n\t\t\t[\n\t\t\t\t`error[oauth-credential-error]: ${error.message}`,\n\t\t\t\t...(error.cause === undefined ? [] : [`detail: ${unknownMessage(error.cause)}`]),\n\t\t\t].join(\"\\n\") + \"\\n\"\n\t\t);\n\t}\n\tif (isSandboxProviderError(error)) {\n\t\treturn (\n\t\t\t[\n\t\t\t\t`error: SandboxProviderError - ${error.sanitized.message}`,\n\t\t\t\t`driver: ${error.driver}`,\n\t\t\t\t`operation: ${error.operation}`,\n\t\t\t\t...(error.sanitized.code === undefined ? [] : [`code: ${error.sanitized.code}`]),\n\t\t\t\t...(error.stack === undefined ? [] : [\"traceback:\", error.stack]),\n\t\t\t].join(\"\\n\") + \"\\n\"\n\t\t);\n\t}\n\tif (isSessionNotLinkedError(error)) {\n\t\treturn (\n\t\t\t[\n\t\t\t\t`error[${error.reason}]: ${error.message}`,\n\t\t\t\t`session: ${error.sessionId}`,\n\t\t\t\t\"hint: run `codework session link <session-id>` from the directory to anchor it to\",\n\t\t\t].join(\"\\n\") + \"\\n\"\n\t\t);\n\t}\n\tif (isSettingsError(error)) {\n\t\treturn (\n\t\t\t[\n\t\t\t\t`error[settings-${error.reason}-failed]: ${error.path}`,\n\t\t\t\t`detail: ${error.detail}`,\n\t\t\t\t`hint: ${settingsHint(error.reason)}`,\n\t\t\t].join(\"\\n\") + \"\\n\"\n\t\t);\n\t}\n\t// One shape for all three plugin domains: the reason is the slug, the message is the sentence,\n\t// and the reference is the string the person recognises from their settings file.\n\tif (\n\t\tisPluginSourceError(error) ||\n\t\tisPluginInstallError(error) ||\n\t\tisPluginStoreError(error) ||\n\t\tisPluginLoadError(error)\n\t) {\n\t\treturn (\n\t\t\t[\n\t\t\t\t`error[${error.reason}]: ${error.message}`,\n\t\t\t\t...(error.reference === \"\" ? [] : [`reference: ${error.reference}`]),\n\t\t\t\t...(error.file === undefined ? [] : [`declared in: ${error.file}`]),\n\t\t\t\t...(isPluginLoadError(error) && error.id !== undefined ? [`id: ${error.id}`] : []),\n\t\t\t\t`hint: ${pluginReasonHint(error.reason)}`,\n\t\t\t].join(\"\\n\") + \"\\n\"\n\t\t);\n\t}\n\tif (isProviderError(error)) {\n\t\tconst hint = providerHint(error);\n\t\treturn (\n\t\t\t[\n\t\t\t\t`error[${providerCategory(error.reason)}]: ${error.message}`,\n\t\t\t\t`provider: ${error.provider}`,\n\t\t\t\t`model: ${error.model}`,\n\t\t\t\t...(error.reason.requestId === undefined ? [] : [`request: ${error.reason.requestId}`]),\n\t\t\t\t...(hint === undefined ? [] : [`hint: ${hint}`]),\n\t\t\t].join(\"\\n\") + \"\\n\"\n\t\t);\n\t}\n\tif (isModelCatalogError(error)) {\n\t\treturn (\n\t\t\t[`error[model-catalog-${error.reason}]: ${error.message}`, \"hint: run `codework models refresh`\"].join(\"\\n\") +\n\t\t\t\"\\n\"\n\t\t);\n\t}\n\tif (isModelCatalogRefreshError(error)) {\n\t\treturn (\n\t\t\t[`error[catalog-refresh-failed]: ${error.message}`, \"hint: check the network connection and retry\"].join(\n\t\t\t\t\"\\n\",\n\t\t\t) + \"\\n\"\n\t\t);\n\t}\n\tif (isModelNotFoundError(error)) {\n\t\treturn (\n\t\t\t[\n\t\t\t\t`error[model-not-found-error]: ${error.message}`,\n\t\t\t\t\"hint: check the provider/model IDs in models.gen.json or regenerate the catalog\",\n\t\t\t].join(\"\\n\") + \"\\n\"\n\t\t);\n\t}\n\tif (isLLMStreamError(error)) {\n\t\treturn `error[llm-stream-error]: ${error.message}\\n`;\n\t}\n\t// A remote run has only the category the server published; render it the same\n\t// way a local typed error is rendered, minus the detail that stayed server-side.\n\tif (isExecutionError(error)) {\n\t\treturn (\n\t\t\t[\n\t\t\t\terror.type === \"aborted\" ? `error: ${error.message}` : `error[${error.type}]: ${error.message}`,\n\t\t\t\t...(error.status === undefined ? [] : [`status: ${error.status}`]),\n\t\t\t].join(\"\\n\") + \"\\n\"\n\t\t);\n\t}\n\treturn `error: ${unknownMessage(error)}\\n`;\n};\n\nexport const reportFailure = (error: unknown) =>\n\twriteError(renderError(error)).pipe(\n\t\tEffect.andThen(\n\t\t\tEffect.sync(() => {\n\t\t\t\tprocess.exitCode = 1;\n\t\t\t}),\n\t\t),\n\t);\n"],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- //#region package.json
2
- var version = "0.5.0-canary.85.1.gcb2ed55e";
3
- //#endregion
4
- export { version as t };
5
-
6
- //# sourceMappingURL=package-D9XjmXH6.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-D9XjmXH6.mjs","names":[],"sources":["../../package.json"],"sourcesContent":[""],"mappings":""}
@@ -1,2 +0,0 @@
1
- import { n as reconnect } from "./control-B7wWLTbq.mjs";
2
- export { reconnect as default };
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-B6lpSO80.mjs","names":["Service","Envelope.Core","Envelope.encode","layer","layer","Contract.OAuthError","Envelope.encode","layer","EventFeed.Service","OAuth.Service","Identity.Service","Envelope.ofThread","MessagePart.decode","Identity.Service","Contract.path","Registration.register","Contract.Api","EventFeed.layer","OAuth.layer","Identity.layer","Runtime.handler","Server.layer","Registration.log"],"sources":["../../src/server/feed.ts","../../src/server/oauth.ts","../../src/server/handlers.ts","../../src/server/server.ts","../../src/cli/cmd/handlers/serve.ts"],"sourcesContent":["import { Event, EventRegistry, EventSchema } from \"@codeworksh/harness/effect\";\nimport { Cause, Context, Effect, Layer, Queue, Scope, Stream } from \"effect\";\nimport { EncodingError, type EventEnvelope, Envelope } from \"./envelope.ts\";\n\nexport const SubscriberCapacity = 4096;\n\nexport type Error = Event.SubscriptionOverflowError | EncodingError;\n\nexport interface Interface {\n\t/** A live envelope stream for one client; releasing the scope unregisters it. */\n\treadonly subscribe: Effect.Effect<Stream.Stream<EventEnvelope, Error>, never, Scope.Scope>;\n}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@codeworksh/cli/server/feed/Service\") {}\n\n/**\n * Fan-out for `event.subscribe`. One listener on the event bus encodes each\n * event once and hands the same envelope to every client, rather than every\n * client re-encoding the same payload.\n *\n * Failure is per-cause, not per-feed: a client that cannot keep up fails alone\n * with its own overflow, while an event that cannot be encoded is a server bug\n * that disconnects everyone currently attached -- the feed stays usable for\n * whoever connects next. Types outside the server's registry are dropped\n * before they can consume a client's capacity.\n */\nexport const make = Effect.fn(\"EventFeed.make\")(function* (\n\tlisten: (subscriber: Event.Subscriber) => Effect.Effect<Event.Unsubscribe>,\n\toptions?: { readonly capacity?: number; readonly registry?: Envelope.Registry },\n) {\n\tconst capacity = options?.capacity ?? SubscriberCapacity;\n\t// Whatever this server knows how to describe, plugin registrations included.\n\tconst registry = options?.registry ?? Envelope.Core;\n\tconst subscribers = new Set<Queue.Queue<EventEnvelope, Error>>();\n\n\tconst failAll = (error: Error) =>\n\t\tEffect.sync(() => {\n\t\t\tconst current = Array.from(subscribers);\n\t\t\tsubscribers.clear();\n\t\t\tfor (const subscriber of current) Queue.failCauseUnsafe(subscriber, Cause.fail(error));\n\t\t});\n\n\tconst deliver = Effect.fnUntraced(function* (event: EventSchema.Payload) {\n\t\tif (subscribers.size === 0) return;\n\t\t// Dropped here rather than after the queue: a burst of events this server\n\t\t// cannot describe must not spend a client's capacity on its way to nowhere.\n\t\tif (registry(event.type) === undefined) return;\n\t\tconst envelope = yield* Envelope.encode(event, registry);\n\t\tfor (const subscriber of subscribers) {\n\t\t\tif (Queue.offerUnsafe(subscriber, envelope)) continue;\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tQueue.failCauseUnsafe(subscriber, Cause.fail(new Event.SubscriptionOverflowError({ capacity })));\n\t\t}\n\t});\n\n\tconst publish = (event: EventSchema.Payload) =>\n\t\tdeliver(event).pipe(\n\t\t\tEffect.catchTags({\n\t\t\t\tEventEncodingError: (error) =>\n\t\t\t\t\tEffect.logError(\"Failed to encode public event\", { type: error.type, cause: error.cause }).pipe(\n\t\t\t\t\t\tEffect.andThen(failAll(error)),\n\t\t\t\t\t),\n\t\t\t\t// The registry guard in `deliver` already returned for unknown types.\n\t\t\t\tUnknownEventTypeError: Effect.die,\n\t\t\t}),\n\t\t);\n\n\tconst unsubscribe = yield* listen(publish);\n\tyield* Effect.addFinalizer(() => unsubscribe);\n\n\treturn Service.of({\n\t\tsubscribe: Effect.acquireRelease(\n\t\t\tQueue.dropping<EventEnvelope, Error>(capacity).pipe(\n\t\t\t\tEffect.tap((queue) => Effect.sync(() => subscribers.add(queue))),\n\t\t\t),\n\t\t\t(queue) => Effect.sync(() => subscribers.delete(queue)).pipe(Effect.andThen(Queue.shutdown(queue))),\n\t\t).pipe(Effect.map(Stream.fromQueue)),\n\t});\n});\n\nexport const layer = Layer.effect(\n\tService,\n\tEffect.gen(function* () {\n\t\tconst events = yield* Event.Service;\n\t\tconst registered = yield* EventRegistry.Service;\n\t\treturn yield* make(events.listen, { registry: registered.get });\n\t}),\n);\n\nexport * as EventFeed from \"./feed.ts\";\n","/**\n * Server-side OAuth credential storage.\n *\n * The CLI runs the interactive part of every login locally — a browser\n * callback or a device code cannot travel over RPC — and sends the resulting\n * credentials here, so this service only ever reads, writes, refreshes and\n * clears the server home's `auth.json`.\n */\nimport {\n\tGitHubCopilotOAuthClient,\n\tJsonGitHubCopilotAuthStorage,\n\ttype GitHubCopilotOAuthCredentials,\n} from \"@codeworksh/aikit/oauth/github/copilot\";\nimport {\n\tJsonOpenAICodexAuthStorage,\n\tOpenAICodexOAuthClient,\n\ttype OpenAICodexOAuthCredentials,\n} from \"@codeworksh/aikit/oauth/openai/codex\";\nimport { summarizeGitHubCopilot, summarizeOpenAICodex } from \"@codeworksh/aikit/oauth/summary\";\nimport { Global } from \"@codeworksh/harness/effect\";\nimport { Context, Effect, Layer } from \"effect\";\nimport { Contract } from \"./contract.ts\";\n\ninterface Interface {\n\treadonly save: (credentials: Contract.OAuthCredentials) => Effect.Effect<Contract.OAuthInfo, Contract.OAuthError>;\n\treadonly status: (provider: Contract.OAuthProvider) => Effect.Effect<Contract.OAuthInfo | null, Contract.OAuthError>;\n\treadonly refresh: (\n\t\tprovider: Contract.OAuthProvider,\n\t) => Effect.Effect<Contract.OAuthInfo | null, Contract.OAuthError>;\n\treadonly logout: (provider: Contract.OAuthProvider) => Effect.Effect<void, Contract.OAuthError>;\n}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@codeworksh/cli/server/oauth/Service\") {}\n\nconst message = (cause: unknown): string =>\n\tcause instanceof Error && cause.message.trim().length > 0 ? cause.message : String(cause);\n\n/**\n * Re-exported so the server, the CLI and aikit all describe a login the same\n * way; `Contract.OAuthInfo` is the wire shape of {@link OAuthSummary}.\n */\nexport const codexInfo = summarizeOpenAICodex;\nexport const copilotInfo = summarizeGitHubCopilot;\n\nexport const layer = (options: { readonly home?: string | undefined } = {}) =>\n\tLayer.effect(\n\t\tService,\n\t\tEffect.gen(function* () {\n\t\t\tconst global = yield* Global.Service;\n\t\t\tconst authFile = Global.authFile(options.home === undefined ? undefined : global.home);\n\t\t\tconst file = authFile === undefined ? {} : { path: authFile };\n\t\t\tconst codex = new OpenAICodexOAuthClient({ storage: new JsonOpenAICodexAuthStorage(file) });\n\t\t\tconst copilot = new GitHubCopilotOAuthClient({ storage: new JsonGitHubCopilotAuthStorage(file) });\n\t\t\tconst attempt = <A>(run: () => Promise<A>) =>\n\t\t\t\tEffect.tryPromise({\n\t\t\t\t\ttry: run,\n\t\t\t\t\tcatch: (cause) => new Contract.OAuthError({ message: message(cause) }),\n\t\t\t\t});\n\t\t\tconst optional = <A>(run: () => Promise<A | undefined>, info: (value: A) => Contract.OAuthInfo) =>\n\t\t\t\tattempt(run).pipe(Effect.map((value) => (value === undefined ? null : info(value))));\n\n\t\t\treturn Service.of({\n\t\t\t\t// The `provider` tag is routing, not a credential: it never reaches disk.\n\t\t\t\tsave: (wire) => {\n\t\t\t\t\tif (wire.provider === \"openai-codex\") {\n\t\t\t\t\t\tconst credentials: OpenAICodexOAuthCredentials = {\n\t\t\t\t\t\t\taccess: wire.access,\n\t\t\t\t\t\t\trefresh: wire.refresh,\n\t\t\t\t\t\t\texpires: wire.expires,\n\t\t\t\t\t\t\taccountId: wire.accountId,\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn attempt(() => codex.storage.set(credentials)).pipe(Effect.as(codexInfo(credentials)));\n\t\t\t\t\t}\n\t\t\t\t\tconst credentials: GitHubCopilotOAuthCredentials = {\n\t\t\t\t\t\taccess: wire.access,\n\t\t\t\t\t\trefresh: wire.refresh,\n\t\t\t\t\t\texpires: wire.expires,\n\t\t\t\t\t\t...(wire.enterpriseUrl === undefined ? {} : { enterpriseUrl: wire.enterpriseUrl }),\n\t\t\t\t\t\t...(wire.apiEndpoint === undefined ? {} : { apiEndpoint: wire.apiEndpoint }),\n\t\t\t\t\t\t...(wire.availableModelIds === undefined ? {} : { availableModelIds: [...wire.availableModelIds] }),\n\t\t\t\t\t};\n\t\t\t\t\treturn attempt(() => copilot.storage.set(credentials)).pipe(Effect.as(copilotInfo(credentials)));\n\t\t\t\t},\n\t\t\t\tstatus: (provider) =>\n\t\t\t\t\tprovider === \"openai-codex\"\n\t\t\t\t\t\t? optional(() => codex.storage.get(), codexInfo)\n\t\t\t\t\t\t: optional(() => copilot.storage.get(), copilotInfo),\n\t\t\t\t// GitHub OAuth tokens never expire, so a Copilot \"refresh\" is a read.\n\t\t\t\trefresh: (provider) =>\n\t\t\t\t\tprovider === \"openai-codex\"\n\t\t\t\t\t\t? optional(() => codex.getCredentials(), codexInfo)\n\t\t\t\t\t\t: optional(() => copilot.getCredentials(), copilotInfo),\n\t\t\t\tlogout: (provider) => attempt(() => (provider === \"openai-codex\" ? codex.logout() : copilot.logout())),\n\t\t\t});\n\t\t}),\n\t);\n\nexport * as OAuth from \"./oauth.ts\";\n","import { Model } from \"@codeworksh/aikit\";\nimport {\n\tControl,\n\tEvent,\n\tEventList,\n\tEventRegistry,\n\tEventSchema,\n\tMcp,\n\tModelCatalog,\n\tProject,\n\tPromptSchema,\n\tSandbox,\n\tSession,\n\tSessionStore,\n\tSettings,\n\tState,\n\tThreadSchema,\n\tThreadStore,\n} from \"@codeworksh/harness/effect\";\nimport { DateTime, Effect, Option, Stream } from \"effect\";\nimport {\n\tContract,\n\ttype HistoryEntry,\n\ttype LogSynced,\n\ttype RuntimeConfig,\n\ttype SandboxInfo,\n\ttype SessionInfo,\n\ttype ThreadInfo,\n} from \"./contract.ts\";\nimport { type EncodingError, Envelope, type EventEnvelope } from \"./envelope.ts\";\nimport { EventFeed } from \"./feed.ts\";\nimport { Identity } from \"./identity.ts\";\nimport { OAuth } from \"./oauth.ts\";\nimport { MessagePart } from \"./part.ts\";\n\nconst toSandboxInfo = (info: Sandbox.Info): SandboxInfo => ({\n\tid: info.id,\n\tdriver: info.driver,\n\tkind: info.kind,\n\tproviderResourceId: info.providerResourceId,\n\townership: info.ownership,\n\tstatus: info.status,\n\tusage: info.usage,\n\trefCount: info.refCount,\n\tcreatedAt: info.createdAt,\n\tupdatedAt: info.updatedAt,\n});\n\nconst toSessionInfo = (info: Session.Info): SessionInfo => ({\n\tid: info.id,\n\tdirectory: info.directory,\n\t...(info.hostDir === undefined ? {} : { hostDir: info.hostDir }),\n\t...(info.sandbox === undefined ? {} : { sandbox: toSandboxInfo(info.sandbox) }),\n\t...(info.project === undefined ? {} : { project: info.project }),\n\tupdatedAt: info.updatedAt,\n\tmainThreadId: info.mainThreadId,\n});\n\nconst toThreadInfo = (info: Session.ThreadInfo): ThreadInfo => ({\n\tid: info.id,\n\torigin: info.origin,\n\t...(info.title === undefined ? {} : { title: info.title }),\n\tupdatedAt: info.updatedAt,\n\t...(info.model === undefined ? {} : { model: info.model }),\n\t...(info.thinkingLevel === undefined ? {} : { thinkingLevel: info.thinkingLevel }),\n\t...(info.foundation === undefined ? {} : { foundation: info.foundation }),\n\t...(info.placement === undefined ? {} : { placement: info.placement }),\n\tusage: info.usage,\n\tsession: toSessionInfo(info.session),\n});\n\n// Wire configs name only the keys they set, so `undefined` never reaches the harness under\n// exactOptionalPropertyTypes. Creating takes choices only; `null` clears nothing there.\nconst runtimeInput = (runtime: RuntimeConfig | undefined): Session.RuntimeInput => ({\n\t...(runtime?.model == null ? {} : { model: runtime.model }),\n\t...(runtime?.thinkingLevel == null ? {} : { thinkingLevel: runtime.thinkingLevel }),\n\t...(runtime?.foundation == null ? {} : { foundation: runtime.foundation }),\n});\n\nconst threadInfo = (threadId: ThreadSchema.ID) => Session.threadInfo(threadId).pipe(Effect.map(toThreadInfo));\n\n// RpcServer's request span has no level, so it is Debug and drops every Info span under it.\n// Provisioning a sandbox is worth exporting, so it starts a trace of its own.\nconst exported = <A, E, R>(name: string, self: Effect.Effect<A, E, R>) =>\n\tself.pipe(Effect.withSpan(name, { level: \"Info\", root: true }));\n\nconst releaseOnFailure = (selection: Effect.Success<ReturnType<typeof Sandbox.resolve>> | undefined) =>\n\tselection?.created && selection.info !== undefined\n\t\t? Sandbox.stop(selection.info.id).pipe(Effect.catchCause(Effect.logError))\n\t\t: Effect.void;\n\n/** A `session.log` item for the wire: a stored event as its envelope, or the replay marker. */\nconst toLogItem =\n\t(registry: Envelope.Registry) =>\n\t(item: Event.LogItem): Effect.Effect<EventEnvelope | LogSynced, EncodingError> =>\n\t\tEvent.isSynced(item)\n\t\t\t? Effect.succeed(item)\n\t\t\t: Envelope.encode(item, registry).pipe(\n\t\t\t\t\t// Every stored type is a kernel durable one, which the registry always knows.\n\t\t\t\t\tEffect.catchTag(\"UnknownEventTypeError\", Effect.die),\n\t\t\t\t);\n\nexport const layer = Contract.Api.toLayer(\n\tEffect.gen(function* () {\n\t\tconst control = yield* Control.Service;\n\t\tconst feed = yield* EventFeed.Service;\n\t\tconst sessions = yield* SessionStore.Service;\n\t\tconst threads = yield* ThreadStore.Service;\n\t\tconst resolve = (ref: Control.ThreadRef) =>\n\t\t\tcontrol.resolve(ref).pipe(Effect.map((thread) => ThreadSchema.ID.make(thread.id)));\n\t\tconst state = yield* State.Service;\n\t\tconst oauth = yield* OAuth.Service;\n\t\tconst identity = yield* Identity.Service;\n\t\tconst events = yield* Event.Service;\n\t\tconst registry = yield* EventRegistry.Service;\n\t\tconst mcp = yield* Mcp.Service;\n\t\tconst mcpControl = (operation: \"connect\" | \"disconnect\") =>\n\t\t\tEffect.fnUntraced(function* ({ server, ...ref }: Control.ThreadRef & { readonly server: string }) {\n\t\t\t\treturn yield* mcp[operation](yield* resolve(ref), server);\n\t\t\t});\n\n\t\treturn Contract.Api.of({\n\t\t\t\"server.info\": () => Effect.succeed({ pid: identity.pid, version: identity.version }),\n\t\t\t\"auth.save\": ({ credentials }) => oauth.save(credentials),\n\t\t\t\"auth.status\": ({ provider }) => oauth.status(provider),\n\t\t\t\"auth.refresh\": ({ provider }) => oauth.refresh(provider),\n\t\t\t\"auth.logout\": ({ provider }) => oauth.logout(provider),\n\t\t\t\"session.create\": Effect.fnUntraced(function* ({ title, directory, hostDir, sandbox, runtime, project }) {\n\t\t\t\tconst selection =\n\t\t\t\t\tsandbox === undefined ? undefined : yield* exported(\"Server.session.create\", Sandbox.resolve(sandbox));\n\t\t\t\tconst selected = selection?.info;\n\t\t\t\tconst handle = yield* Session.create({\n\t\t\t\t\t...(title === undefined ? {} : { title }),\n\t\t\t\t\t...(directory === undefined ? {} : { directory }),\n\t\t\t\t\t// Passed through as given, never defaulted to the server's own directory: a\n\t\t\t\t\t// session the client did not place has no project, which is a normal state.\n\t\t\t\t\t...(hostDir === undefined ? {} : { hostDir }),\n\t\t\t\t\t...(selected === undefined ? {} : { sandbox: selected }),\n\t\t\t\t\t...(project === undefined ? {} : { project }),\n\t\t\t\t\t...runtimeInput(runtime),\n\t\t\t\t}).pipe(Effect.onError(() => releaseOnFailure(selection)));\n\t\t\t\treturn toThreadInfo(yield* handle.main.info);\n\t\t\t}),\n\t\t\t\"model.list\": Effect.fnUntraced(function* ({ hostDir }) {\n\t\t\t\tconst filter = hostDir === undefined ? {} : { hostDir };\n\t\t\t\tconst settings = yield* Settings.Service;\n\t\t\t\tconst loaded = yield* settings.load(hostDir);\n\t\t\t\tconst { model } = loaded;\n\t\t\t\tconst providers = yield* ModelCatalog.available(filter);\n\t\t\t\t// Named from the whole catalog, so a default without credentials still reads as itself.\n\t\t\t\tconst entry = (yield* ModelCatalog.effective(loaded.models))[model.provider]?.[model.id];\n\t\t\t\treturn {\n\t\t\t\t\tproviders: providers.flatMap((provider) => {\n\t\t\t\t\t\tconst models = Object.values(provider.models);\n\t\t\t\t\t\tconst first = models[0];\n\t\t\t\t\t\treturn first === undefined\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: provider.id,\n\t\t\t\t\t\t\t\t\t\tname: first.provider.name,\n\t\t\t\t\t\t\t\t\t\tmodels: models.map((info) => ({\n\t\t\t\t\t\t\t\t\t\t\tid: info.id,\n\t\t\t\t\t\t\t\t\t\t\tname: info.name,\n\t\t\t\t\t\t\t\t\t\t\tthinkingLevels: Model.getSupportedThinkingLevels(info),\n\t\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t}),\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\tid: model.id,\n\t\t\t\t\t\tthinkingLevel: model.thinkingLevel,\n\t\t\t\t\t\t...(entry === undefined ? {} : { name: entry.name, providerName: entry.provider.name }),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}),\n\t\t\t\"project.rename\": Effect.fnUntraced(function* ({ projectId, name }) {\n\t\t\t\tconst renamed = yield* Project.rename({ projectId, name });\n\t\t\t\treturn { id: renamed.id, name: renamed.name };\n\t\t\t}),\n\t\t\t\"plugin.reload\": Effect.fnUntraced(function* () {\n\t\t\t\treturn yield* state.reload;\n\t\t\t}),\n\t\t\t\"session.link\": Effect.fnUntraced(function* ({ sessionId, hostDir }) {\n\t\t\t\tconst handle = yield* Session.link({ sessionId, hostDir: hostDir ?? null });\n\t\t\t\treturn toSessionInfo(yield* handle.info);\n\t\t\t}),\n\t\t\t\"session.relink\": Effect.fnUntraced(function* ({ sessionId, threadId, sandbox, directory }) {\n\t\t\t\tconst selection =\n\t\t\t\t\tsandbox === undefined ? undefined : yield* exported(\"Server.session.relink\", Sandbox.resolve(sandbox));\n\t\t\t\tconst selected = selection?.info;\n\t\t\t\tconst handle = yield* Session.relink({\n\t\t\t\t\tsessionId,\n\t\t\t\t\t...(threadId === undefined ? {} : { threadId }),\n\t\t\t\t\t...(selected === undefined ? {} : { sandbox: selected }),\n\t\t\t\t\t...(directory === undefined ? {} : { directory }),\n\t\t\t\t}).pipe(Effect.onError(() => releaseOnFailure(selection)));\n\t\t\t\tconst thread = yield* handle.thread(threadId ?? ThreadSchema.MAIN);\n\t\t\t\treturn toThreadInfo(yield* thread.info);\n\t\t\t}),\n\t\t\t\"session.delete\": Effect.fnUntraced(function* ({ sessionId }) {\n\t\t\t\treturn { deleted: yield* Session.remove(sessionId) };\n\t\t\t}),\n\t\t\t\"session.interrupt\": Effect.fnUntraced(function* ({ sessionId }) {\n\t\t\t\t// Ack only: the wire answers \"was there work to stop\", and the caller\n\t\t\t\t// uses `thread.wait` when it needs cleanup to have finished.\n\t\t\t\treturn { interrupted: yield* control.interruptSession(sessionId, { reason: \"user\" }) };\n\t\t\t}),\n\t\t\t\"session.log\": ({ sessionId, threadId, after, follow }) =>\n\t\t\t\tStream.unwrap(\n\t\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\t\tif (Option.isNone(yield* sessions.get(sessionId))) {\n\t\t\t\t\t\t\treturn yield* new SessionStore.SessionNotFoundError({ sessionId });\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn events\n\t\t\t\t\t\t\t.log({\n\t\t\t\t\t\t\t\taggregateId: sessionId,\n\t\t\t\t\t\t\t\tfollow: follow ?? false,\n\t\t\t\t\t\t\t\t...(after === undefined ? {} : { after }),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\tStream.filter(\n\t\t\t\t\t\t\t\t\t(item) =>\n\t\t\t\t\t\t\t\t\t\tthreadId === undefined || Event.isSynced(item) || Envelope.ofThread(threadId)(item),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tStream.mapEffect(toLogItem(registry.get)),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t\"thread.list\": Effect.fnUntraced(function* ({ sessionId }) {\n\t\t\t\tconst rows = yield* threads.list(sessionId);\n\t\t\t\treturn yield* Effect.forEach(rows, (row) => threadInfo(ThreadSchema.ID.make(row.id)).pipe(Effect.orDie));\n\t\t\t}),\n\t\t\t\"thread.info\": Effect.fnUntraced(function* (ref) {\n\t\t\t\treturn yield* threadInfo(yield* resolve(ref));\n\t\t\t}),\n\t\t\t\"thread.configure\": Effect.fnUntraced(function* ({ runtime, ...ref }) {\n\t\t\t\tconst threadId = yield* resolve(ref);\n\t\t\t\tconst change = {\n\t\t\t\t\t...(runtime.model === undefined ? {} : { model: runtime.model }),\n\t\t\t\t\t...(runtime.thinkingLevel === undefined ? {} : { thinkingLevel: runtime.thinkingLevel }),\n\t\t\t\t\t...(runtime.foundation === undefined ? {} : { foundation: runtime.foundation }),\n\t\t\t\t};\n\t\t\t\tif (Object.keys(change).length > 0) {\n\t\t\t\t\tyield* events.publish(EventList.ThreadConfigured, {\n\t\t\t\t\t\tsessionId: ref.sessionId,\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\ttimestamp: yield* DateTime.now,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn yield* threadInfo(threadId);\n\t\t\t}),\n\t\t\t\"thread.fork\": Effect.fnUntraced(function* ({ entryId, mode, ...ref }) {\n\t\t\t\tconst forked = yield* threads.fork({\n\t\t\t\t\tthreadId: yield* resolve(ref),\n\t\t\t\t\tentryId,\n\t\t\t\t\t...(mode === undefined ? {} : { mode }),\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tthread: yield* threadInfo(ThreadSchema.ID.make(forked.thread.id)),\n\t\t\t\t\t...(forked.text === undefined ? {} : { text: forked.text }),\n\t\t\t\t};\n\t\t\t}),\n\t\t\t\"thread.history\": Effect.fnUntraced(function* (ref) {\n\t\t\t\tconst line = yield* threads.line(yield* resolve(ref));\n\t\t\t\tconst entries = line.flatMap(({ entry, parts }): ReadonlyArray<HistoryEntry> =>\n\t\t\t\t\tentry.type === \"user\" || entry.type === \"assistant\"\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: entry.id,\n\t\t\t\t\t\t\t\t\tthreadId: entry.threadId,\n\t\t\t\t\t\t\t\t\tseq: entry.seq,\n\t\t\t\t\t\t\t\t\trole: entry.type,\n\t\t\t\t\t\t\t\t\tstate: entry.state,\n\t\t\t\t\t\t\t\t\tcreatedAt: DateTime.toEpochMillis(entry.createdAt),\n\t\t\t\t\t\t\t\t\tupdatedAt: DateTime.toEpochMillis(entry.updatedAt),\n\t\t\t\t\t\t\t\t\t// A part this schema does not render (a future aikit type) is skipped, not fatal.\n\t\t\t\t\t\t\t\t\tparts: parts.flatMap((part) => Option.toArray(MessagePart.decode(part.data))),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: [],\n\t\t\t\t);\n\t\t\t\treturn { entries };\n\t\t\t}),\n\t\t\t\"thread.queue\": Effect.fnUntraced(function* (ref) {\n\t\t\t\tconst pending = yield* control.pending(yield* resolve(ref));\n\t\t\t\treturn {\n\t\t\t\t\tentries: pending.map((input) => ({\n\t\t\t\t\t\tid: input.id,\n\t\t\t\t\t\tdelivery: input.delivery,\n\t\t\t\t\t\ttext: PromptSchema.Prompt.text(input.prompt),\n\t\t\t\t\t\tcreatedAt: DateTime.toEpochMillis(input.timeCreated),\n\t\t\t\t\t})),\n\t\t\t\t};\n\t\t\t}),\n\t\t\t\"thread.prompt\": Effect.fnUntraced(function* ({ text, delivery, id, ...ref }) {\n\t\t\t\tconst admitted = yield* control.prompt({\n\t\t\t\t\t...ref,\n\t\t\t\t\tprompt: PromptSchema.Prompt.fromText(text),\n\t\t\t\t\t...(delivery === undefined ? {} : { delivery }),\n\t\t\t\t\t...(id === undefined ? {} : { id }),\n\t\t\t\t});\n\t\t\t\treturn { threadId: admitted.threadId };\n\t\t\t}),\n\t\t\t\"thread.interrupt\": Effect.fnUntraced(function* (ref) {\n\t\t\t\t// Ack only: the wire answers \"was there work to stop\", and the caller\n\t\t\t\t// uses `thread.wait` when it needs cleanup to have finished.\n\t\t\t\treturn { interrupted: yield* control.interrupt(yield* resolve(ref), { reason: \"user\" }) };\n\t\t\t}),\n\t\t\t\"thread.cancel\": Effect.fnUntraced(function* ({ messageId, ...ref }) {\n\t\t\t\treturn { cancelled: yield* control.cancel(yield* resolve(ref), messageId) };\n\t\t\t}),\n\t\t\t\"thread.update\": Effect.fnUntraced(function* ({ messageId, delivery, text, ...ref }) {\n\t\t\t\tconst updated = yield* control.update(yield* resolve(ref), messageId, {\n\t\t\t\t\t...(delivery === undefined ? {} : { delivery }),\n\t\t\t\t\t...(text === undefined ? {} : { prompt: PromptSchema.Prompt.fromText(text) }),\n\t\t\t\t});\n\t\t\t\treturn { updated };\n\t\t\t}),\n\t\t\t\"thread.message\": Effect.fnUntraced(function* ({ messageId, ...ref }) {\n\t\t\t\t// Scoped to the thread's line: an entry id is global, and a client should not learn\n\t\t\t\t// about conversations it did not ask for. An inherited prompt is in the thread's.\n\t\t\t\tconst line = yield* threads.line(yield* resolve(ref));\n\t\t\t\treturn { found: line.some(({ entry }) => entry.id === messageId) };\n\t\t\t}),\n\t\t\t\"thread.wait\": Effect.fnUntraced(function* (ref) {\n\t\t\t\tyield* control.wait(yield* resolve(ref));\n\t\t\t}),\n\t\t\t\"mcp.connect\": mcpControl(\"connect\"),\n\t\t\t\"mcp.disconnect\": mcpControl(\"disconnect\"),\n\t\t\t\"sandbox.drivers\": Effect.fnUntraced(function* () {\n\t\t\t\tconst drivers = yield* Sandbox.drivers();\n\t\t\t\treturn drivers.map(({ name, kind }) => ({ name, kind }));\n\t\t\t}),\n\t\t\t\"sandbox.list\": Effect.fnUntraced(function* () {\n\t\t\t\treturn (yield* Sandbox.list()).map(toSandboxInfo);\n\t\t\t}),\n\t\t\t\"sandbox.create\": Effect.fnUntraced(function* ({ driver }) {\n\t\t\t\treturn toSandboxInfo(yield* exported(\"Server.sandbox.create\", Sandbox.create({ driver })));\n\t\t\t}),\n\t\t\t\"sandbox.register\": Effect.fnUntraced(function* ({ driver, providerResourceId }) {\n\t\t\t\treturn toSandboxInfo(yield* Sandbox.register({ driver, providerResourceId }));\n\t\t\t}),\n\t\t\t\"sandbox.stop\": Effect.fnUntraced(function* ({ sandboxId }) {\n\t\t\t\tyield* Sandbox.stop(sandboxId);\n\t\t\t}),\n\t\t\t// Acquiring the feed subscription is the readiness barrier: `server.connected`\n\t\t\t// is only emitted once this client is registered, so a prompt admitted after\n\t\t\t// it cannot land in the gap.\n\t\t\t\"event.subscribe\": ({ threadId }) =>\n\t\t\t\tStream.unwrap(\n\t\t\t\t\tfeed.subscribe.pipe(\n\t\t\t\t\t\tEffect.map((events) =>\n\t\t\t\t\t\t\tStream.make({ id: EventSchema.ID.create(), type: Envelope.Connected.type, data: {} }).pipe(\n\t\t\t\t\t\t\t\tStream.concat(\n\t\t\t\t\t\t\t\t\tthreadId === undefined ? events : events.pipe(Stream.filter(Envelope.ofThread(threadId))),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t});\n\t}),\n);\n\nexport * as Handlers from \"./handlers.ts\";\n","import { Control, Global, Harness, Sandbox } from \"@codeworksh/harness/effect\";\nimport { NodeHttpServer } from \"@effect/platform-node\";\nimport { Effect, Layer } from \"effect\";\nimport { HttpRouter, HttpServer } from \"effect/http\";\nimport * as NetAddress from \"effect/net/NetAddress\";\nimport { RpcSerialization, RpcServer } from \"effect/rpc\";\n/* @effect-diagnostics nodeBuiltinImport:off -- the RPC listener needs a raw node server. */\nimport { createServer } from \"node:http\";\nimport { Contract } from \"./contract.ts\";\nimport { EventFeed } from \"./feed.ts\";\nimport { Handlers } from \"./handlers.ts\";\nimport { Identity } from \"./identity.ts\";\nimport { OAuth } from \"./oauth.ts\";\nimport { Registration } from \"./registration.ts\";\n\n// Managed instances outlive any single RPC; the serve scope is what stops them.\nconst managedShutdown = Layer.unwrap(\n\tEffect.gen(function* () {\n\t\tconst control = yield* Control.Service;\n\t\tyield* Effect.addFinalizer(() =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\t// Release drain leases before stopping the server's managed sandboxes.\n\t\t\t\t// Both phases are best effort and bounded so a provider cannot prevent\n\t\t\t\t// process shutdown; an interrupted stop is persisted as faulted and can\n\t\t\t\t// recover the next time that sandbox is mounted.\n\t\t\t\tyield* Effect.forEach(\n\t\t\t\t\tyield* control.active,\n\t\t\t\t\t(id) =>\n\t\t\t\t\t\tcontrol\n\t\t\t\t\t\t\t.interrupt(id, { reason: \"shutdown\", awaitSettlement: true })\n\t\t\t\t\t\t\t.pipe(Effect.timeout(\"10 seconds\"), Effect.ignore),\n\t\t\t\t\t{ concurrency: \"unbounded\", discard: true },\n\t\t\t\t);\n\t\t\t\tconst infos = yield* Sandbox.list();\n\t\t\t\tyield* Effect.forEach(\n\t\t\t\t\tinfos.filter((info) => info.ownership === \"managed\"),\n\t\t\t\t\t(info) =>\n\t\t\t\t\t\tSandbox.stop(info.id).pipe(\n\t\t\t\t\t\t\tEffect.timeout(\"10 seconds\"),\n\t\t\t\t\t\t\tEffect.catchCause((cause) =>\n\t\t\t\t\t\t\t\tEffect.logError(\"Failed to stop managed sandbox during shutdown\", cause).pipe(\n\t\t\t\t\t\t\t\t\tEffect.annotateLogs({ sandboxInstanceId: info.id }),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t{ concurrency: \"unbounded\", discard: true },\n\t\t\t\t);\n\t\t\t}),\n\t\t);\n\t\treturn Layer.empty;\n\t}),\n);\n\n/**\n * Resumes the runs the last server left unfinished, whether it crashed or shut down: the session\n * table records them as they start, so this needs nothing from the previous process.\n */\nconst resumeUnfinished = Layer.effectDiscard(\n\tEffect.gen(function* () {\n\t\tconst control = yield* Control.Service;\n\t\tyield* Effect.forkScoped(control.resumeUnfinished);\n\t}),\n);\n\n/**\n * Advertises the listener once it has an address: logs the endpoint and files\n * the registration later invocations discover it through.\n */\nconst announce = Layer.unwrap(\n\tEffect.gen(function* () {\n\t\tconst server = yield* HttpServer.HttpServer;\n\t\tconst global = yield* Global.Service;\n\t\tconst identity = yield* Identity.Service;\n\t\t// A ws server always binds TCP; the guard keeps the logger honest if that ever changes.\n\t\tconst address = server.address;\n\t\tconst url = `${NetAddress.formatUrlUnsafe(address, \"ws\")}${Contract.path}`;\n\t\tyield* Effect.log(`codework serve listening on ${url}`);\n\t\tif (!NetAddress.isInetAddress(address)) return Layer.empty;\n\t\treturn Registration.register({\n\t\t\thome: global.home,\n\t\t\tinfo: { pid: identity.pid, version: identity.version, url, port: address.port },\n\t\t});\n\t}),\n);\n\nexport const layer = (options: { host: string; port: number; harness: Harness.Options }) => {\n\tconst rpc = RpcServer.layerHttp({ group: Contract.Api, path: Contract.path, protocol: \"websocket\" }).pipe(\n\t\tLayer.provide(Handlers.layer.pipe(Layer.provide(EventFeed.layer))),\n\t);\n\tconst app = HttpRouter.serve(rpc, { disableListenLog: true }).pipe(\n\t\tLayer.provideMerge(managedShutdown),\n\t\tLayer.provideMerge(resumeUnfinished),\n\t\tLayer.provide(OAuth.layer(options.harness.home === undefined ? {} : { home: options.harness.home })),\n\t);\n\treturn app.pipe(\n\t\tLayer.provideMerge(announce),\n\t\tLayer.provideMerge(NodeHttpServer.layer(createServer, { host: options.host, port: options.port })),\n\t\tLayer.provide(RpcSerialization.layerNdjson),\n\t\tLayer.provide(Identity.layer),\n\t\tLayer.provide(Harness.layer(options.harness)),\n\t);\n};\n\nexport * as Server from \"./server.ts\";\n","import { Global } from \"@codeworksh/harness/effect\";\nimport { Effect, FileSystem, Layer, Logger } from \"effect\";\nimport { Runtime } from \"../../../framework/runtime.ts\";\nimport { Registration } from \"../../../server/registration.ts\";\nimport { Server } from \"../../../server/server.ts\";\nimport { renderError } from \"../../error.ts\";\nimport { harnessOptions } from \"../../harness.ts\";\nimport { writeError } from \"../../output.ts\";\nimport { Cmd } from \"../cmd.ts\";\n\nconst failed = Effect.sync(() => {\n\tprocess.exitCode = 1;\n});\n\nconst report = (error: unknown) => writeError(renderError(error)).pipe(Effect.andThen(failed));\n\nexport default Runtime.handler(\n\tCmd.commands.serve,\n\tEffect.fn(\"CLI.serve\", { level: \"Info\" })(function* ({ host, port, service }) {\n\t\tconst shared = yield* Cmd.spec;\n\t\tconst harness = { ...harnessOptions(shared), watchModels: true };\n\t\tconst serve = Layer.launch(Server.layer({ host, port, harness }));\n\t\tif (!service) return yield* serve.pipe(Effect.catch(report));\n\n\t\t// A background server has no terminal: its log, and the reason it stopped, go to a\n\t\t// file the CLI that started it reads back when startup fails.\n\t\tconst background = Effect.gen(function* () {\n\t\t\tconst paths = yield* Global.resolve(harness.home === undefined ? {} : { home: harness.home });\n\t\t\tconst fs = yield* FileSystem.FileSystem;\n\t\t\tyield* fs.makeDirectory(paths.log, { recursive: true });\n\t\t\tconst logger = Logger.formatSimple.pipe(Logger.toFile(Registration.log(paths.log), { flag: \"w\" }));\n\t\t\tyield* serve.pipe(\n\t\t\t\tEffect.catch((error) => Effect.logError(renderError(error).trim()).pipe(Effect.andThen(failed))),\n\t\t\t\tEffect.provide(Logger.layer([logger])),\n\t\t\t);\n\t\t});\n\t\tyield* background.pipe(Effect.catch(report));\n\t}),\n);\n"],"mappings":"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"}