@codeworksh/cli 0.1.0-canary.29.1.g3f9ed90b → 0.1.0-canary.3.1.g84a32a13

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 (69) hide show
  1. package/README.md +5 -5
  2. package/{acp-BsMEC3DC.mjs → acp-BHv2HR2W.mjs} +3 -3
  3. package/{acp-BsMEC3DC.mjs.map → acp-BHv2HR2W.mjs.map} +1 -1
  4. package/{add-B9gIgFb3.mjs → add-DlwSE-gO.mjs} +4 -4
  5. package/{add-B9gIgFb3.mjs.map → add-DlwSE-gO.mjs.map} +1 -1
  6. package/{catalog-D5BxyTfH.mjs → catalog-BDSnGfE_.mjs} +2 -2
  7. package/{catalog-D5BxyTfH.mjs.map → catalog-BDSnGfE_.mjs.map} +1 -1
  8. package/{check-B9PJ6rn_.mjs → check-CpZTFCDq.mjs} +4 -4
  9. package/{check-B9PJ6rn_.mjs.map → check-CpZTFCDq.mjs.map} +1 -1
  10. package/{entries-CzgqHfKQ.mjs → entries-8LFGwy4n.mjs} +3 -3
  11. package/{entries-CzgqHfKQ.mjs.map → entries-8LFGwy4n.mjs.map} +1 -1
  12. package/{error-C9ACQhhu.mjs → error-CzUxh0Q9.mjs} +23 -3
  13. package/error-CzUxh0Q9.mjs.map +1 -0
  14. package/identity-B3FOHqbf.mjs +89 -0
  15. package/identity-B3FOHqbf.mjs.map +1 -0
  16. package/index.mjs +26 -19
  17. package/index.mjs.map +1 -1
  18. package/{install-Cw6h6IRB.mjs → install-CNWMNyaf.mjs} +4 -4
  19. package/{install-Cw6h6IRB.mjs.map → install-CNWMNyaf.mjs.map} +1 -1
  20. package/{link-B7iVolAn.mjs → link-oTpS3aUc.mjs} +3 -3
  21. package/{link-B7iVolAn.mjs.map → link-oTpS3aUc.mjs.map} +1 -1
  22. package/{list-BAonMfru.mjs → list-CmHTTB8Z.mjs} +4 -4
  23. package/{list-BAonMfru.mjs.map → list-CmHTTB8Z.mjs.map} +1 -1
  24. package/{list-3hYMW1Wo.mjs → list-DhdnHHJ5.mjs} +4 -4
  25. package/{list-3hYMW1Wo.mjs.map → list-DhdnHHJ5.mjs.map} +1 -1
  26. package/{login-CXelgTth.mjs → login-DPJbdjAY.mjs} +4 -4
  27. package/{login-CXelgTth.mjs.map → login-DPJbdjAY.mjs.map} +1 -1
  28. package/{logout-DrQQPxEW.mjs → logout-CL5CN_af.mjs} +4 -4
  29. package/{logout-DrQQPxEW.mjs.map → logout-CL5CN_af.mjs.map} +1 -1
  30. package/package.json +4 -3
  31. package/{providers-DksUoT4Z.mjs → providers-Dg8UlU_O.mjs} +4 -4
  32. package/{providers-DksUoT4Z.mjs.map → providers-Dg8UlU_O.mjs.map} +1 -1
  33. package/{refresh-DPBpboO0.mjs → refresh-OsgI6DYK.mjs} +4 -4
  34. package/{refresh-DPBpboO0.mjs.map → refresh-OsgI6DYK.mjs.map} +1 -1
  35. package/{refresh-CHBg5ya9.mjs → refresh-TK948P0j.mjs} +4 -4
  36. package/{refresh-CHBg5ya9.mjs.map → refresh-TK948P0j.mjs.map} +1 -1
  37. package/{reload-DDsh7kFG.mjs → reload-_hDmESKE.mjs} +3 -3
  38. package/{reload-DDsh7kFG.mjs.map → reload-_hDmESKE.mjs.map} +1 -1
  39. package/{remove-__JfeHO-.mjs → remove-DjBJe09T.mjs} +4 -4
  40. package/{remove-__JfeHO-.mjs.map → remove-DjBJe09T.mjs.map} +1 -1
  41. package/restart-CqAQCig7.mjs +21 -0
  42. package/restart-CqAQCig7.mjs.map +1 -0
  43. package/{run-D47jXr5Q.mjs → run-BpiW8Wxp.mjs} +3 -3
  44. package/{run-D47jXr5Q.mjs.map → run-BpiW8Wxp.mjs.map} +1 -1
  45. package/{runtime-D4zyJPrh.mjs → runtime-CIBm_3RX.mjs} +44 -5
  46. package/runtime-CIBm_3RX.mjs.map +1 -0
  47. package/{serve-gOODO9pv.mjs → serve-RFw_BCHm.mjs} +52 -19
  48. package/serve-RFw_BCHm.mjs.map +1 -0
  49. package/service-7_FrDOGJ.mjs +222 -0
  50. package/service-7_FrDOGJ.mjs.map +1 -0
  51. package/{settings-DDkmAxW5.mjs → settings-BM_gw7Fm.mjs} +2 -2
  52. package/{settings-DDkmAxW5.mjs.map → settings-BM_gw7Fm.mjs.map} +1 -1
  53. package/{shared-DFB2--6V.mjs → shared-DjyUhNsi.mjs} +3 -3
  54. package/{shared-DFB2--6V.mjs.map → shared-DjyUhNsi.mjs.map} +1 -1
  55. package/start-DcvqAhc4.mjs +20 -0
  56. package/start-DcvqAhc4.mjs.map +1 -0
  57. package/status-9o_2AAAv.mjs +14 -0
  58. package/status-9o_2AAAv.mjs.map +1 -0
  59. package/{status-BNc5JZ1C.mjs → status-BTCqpq7x.mjs} +4 -4
  60. package/{status-BNc5JZ1C.mjs.map → status-BTCqpq7x.mjs.map} +1 -1
  61. package/stop-De_XWxXw.mjs +13 -0
  62. package/stop-De_XWxXw.mjs.map +1 -0
  63. package/tui-B5RAnvTr.mjs +76 -0
  64. package/tui-B5RAnvTr.mjs.map +1 -0
  65. package/{update-CaW7oDOl.mjs → update-6Fn2_4fJ.mjs} +4 -4
  66. package/{update-CaW7oDOl.mjs.map → update-6Fn2_4fJ.mjs.map} +1 -1
  67. package/error-C9ACQhhu.mjs.map +0 -1
  68. package/runtime-D4zyJPrh.mjs.map +0 -1
  69. package/serve-gOODO9pv.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-CzUxh0Q9.mjs","names":["OAuthError","Contract.Api","Envelope.decode","Client.ExecutionError"],"sources":["../../src/server/envelope.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, 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\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 { Model } from \"@codeworksh/aikit\";\nimport {\n\tControl,\n\tEvent,\n\tLocation,\n\toptional,\n\tPromptSchema,\n\tSandbox,\n\tSandboxError,\n\tSession,\n\tSessionStore,\n} from \"@codeworksh/harness/effect\";\nimport { Schema } from \"effect\";\nimport { Rpc, RpcGroup } from \"effect/rpc\";\nimport { EncodingError, EventEnvelope } from \"./envelope.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\nexport const SessionInfo = Schema.Struct({\n\tid: Session.SessionSchema.ID,\n\ttitle: Schema.String,\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});\nexport type SessionInfo = typeof SessionInfo.Type;\n\nexport const RuntimeConfig = Schema.Struct({\n\tmodel: optional(Schema.Struct({ provider: Schema.String, id: Schema.String })),\n\tthinkingLevel: optional(Schema.Enum(Model.ThinkingLevelEnum)),\n});\nexport type RuntimeConfig = typeof RuntimeConfig.Type;\n\nexport const SandboxRef = Sandbox.Selection;\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\tSessionStore.SessionLinkedSpaceNotFoundError,\n\tSessionStore.RelinkError,\n]);\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\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\tRpc.make(\"session.create\", {\n\t\tpayload: {\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},\n\t\tsuccess: SessionInfo,\n\t\terror: Schema.Union([SessionErrors, SandboxErrors, LocationErrors]),\n\t}),\n\tRpc.make(\"session.list\", {\n\t\tpayload: {},\n\t\tsuccess: Schema.Array(SessionInfo),\n\t}),\n\tRpc.make(\"session.configure\", {\n\t\tpayload: { sessionId: Session.SessionSchema.ID, runtime: RuntimeConfig },\n\t\tsuccess: SessionInfo,\n\t\terror: SessionStore.SessionNotFoundError,\n\t}),\n\tRpc.make(\"session.info\", {\n\t\tpayload: { sessionId: Session.SessionSchema.ID },\n\t\tsuccess: SessionInfo,\n\t\terror: SessionStore.SessionNotFoundError,\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\tRpc.make(\"session.relink\", {\n\t\tpayload: {\n\t\t\tsessionId: Session.SessionSchema.ID,\n\t\t\tsandbox: optional(SandboxRef),\n\t\t\tdirectory: optional(Schema.String),\n\t\t},\n\t\tsuccess: SessionInfo,\n\t\terror: Schema.Union([SessionErrors, SandboxErrors, LocationErrors]),\n\t}),\n\tRpc.make(\"session.prompt\", {\n\t\tpayload: {\n\t\t\tsessionId: Session.SessionSchema.ID,\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.Void,\n\t\terror: Schema.Union([SessionStore.SessionNotFoundError, Control.PromptConflictError]),\n\t}),\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 * Whether a prompt materialized into the conversation. An admitted prompt\n\t * that is still queued has no entry yet, so this is the projection a client\n\t * reconciles against when the volatile stream left it unsure\n\t */\n\tRpc.make(\"session.message\", {\n\t\tpayload: { sessionId: Session.SessionSchema.ID, messageId: Session.SessionMessageSchema.ID },\n\t\tsuccess: Schema.Struct({ found: Schema.Boolean }),\n\t}),\n\tRpc.make(\"session.wait\", {\n\t\tpayload: { sessionId: Session.SessionSchema.ID },\n\t\tsuccess: Schema.Void,\n\t\terror: SessionStore.SessionNotFoundError,\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\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\tRpc.make(\"event.subscribe\", {\n\t\tpayload: {},\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, Predicate, 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 * Sessions 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; 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\"]({}).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[\"session.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 (\n\t\t\t\t\tevent === undefined ||\n\t\t\t\t\t!Predicate.hasProperty(event.data, \"sessionId\") ||\n\t\t\t\t\tevent.data.sessionId !== input.sessionId\n\t\t\t\t)\n\t\t\t\t\treturn;\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[\"session.wait\"]({ sessionId: input.sessionId })),\n\t\tEffect.andThen(rpc[\"session.message\"]({ sessionId: input.sessionId, 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 } 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));\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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"}
@@ -0,0 +1,89 @@
1
+ import { t as version } from "./package-7FOUqcPO.mjs";
2
+ import { Context, Effect, FileSystem, Layer, Option, Path, Schedule, Schema } from "effect";
3
+ //#region src/server/registration.ts
4
+ /**
5
+ * How a running server advertises itself so later invocations can find it
6
+ * without scanning ports or the process table.
7
+ *
8
+ * The file is a discovery hint, never proof: a caller reads it for the endpoint,
9
+ * then asks the endpoint `server.info` and believes the answer only when the
10
+ * live pid and version match the ones on file. A crashed server leaves a
11
+ * registration behind; the failed probe is what retires it.
12
+ */
13
+ const Info = Schema.Struct({
14
+ /** Operating system process identifier of the server that wrote this. */
15
+ pid: Schema.Int,
16
+ /** The build serving this endpoint; a mismatch means a different binary. */
17
+ version: Schema.String,
18
+ /** The `ws://host:port/rpc/v1` endpoint a client connects to. */
19
+ url: Schema.String,
20
+ /** The TCP port the server bound, for a caller that would rather reuse it than default. */
21
+ port: Schema.Int
22
+ });
23
+ const infoJson = Schema.fromJsonString(Info);
24
+ /** The registration file for a CodeWork home: `<home>/service.json`. */
25
+ const file = (home) => `${home}/service.json`;
26
+ /** Where a background (`serve --service`) server writes its log: `<log>/server.log`, truncated per start. */
27
+ const log = (logDir) => `${logDir}/server.log`;
28
+ const decode = Schema.decodeUnknownEffect(infoJson);
29
+ const write = Effect.fn("ServerRegistration.write")(function* (path, info) {
30
+ const fs = yield* FileSystem.FileSystem;
31
+ const paths = yield* Path.Path;
32
+ yield* fs.makeDirectory(paths.dirname(path), { recursive: true });
33
+ const encoded = yield* Schema.encodeEffect(infoJson)(info);
34
+ const temp = `${path}.${info.pid}.tmp`;
35
+ yield* fs.writeFileString(temp, encoded, { mode: 384 });
36
+ yield* fs.rename(temp, path);
37
+ });
38
+ /**
39
+ * Publishes a registration for as long as this server lives, removing it on the
40
+ * way out if it is still the one on file. A file left by a crash is overwritten
41
+ * by the next server to start, and retired by a probe that cannot confirm it.
42
+ *
43
+ * One home has one discoverable server. Every few seconds the file is checked:
44
+ * a missing or unreadable file is written again, and a file naming another
45
+ * server means this one lost discovery for good, so it shuts down rather than
46
+ * run on where nothing can find or stop it.
47
+ */
48
+ const register = (options) => Layer.effectDiscard(Effect.gen(function* () {
49
+ const path = file(options.home);
50
+ const fs = yield* FileSystem.FileSystem;
51
+ const current = fs.readFileString(path).pipe(Effect.flatMap(decode), Effect.option);
52
+ const owns = (found) => found.pid === options.info.pid && found.url === options.info.url;
53
+ yield* write(path, options.info);
54
+ yield* Effect.addFinalizer(() => current.pipe(Effect.flatMap((found) => Option.isSome(found) && owns(found.value) ? fs.remove(path) : Effect.void), Effect.ignore));
55
+ yield* current.pipe(Effect.flatMap((found) => Option.isNone(found) ? write(path, options.info).pipe(Effect.ignore, Effect.as(true)) : Effect.succeed(owns(found.value))), Effect.repeat({
56
+ while: (ours) => ours,
57
+ schedule: Schedule.spaced("5 seconds")
58
+ }), Effect.andThen(Effect.logWarning(`${path} names another server; shutting down`)), Effect.andThen(Effect.sync(() => process.kill(process.pid, "SIGTERM"))), Effect.forkScoped);
59
+ }));
60
+ /**
61
+ * The launcher command for a managed server: this same CLI, asked to serve.
62
+ *
63
+ * A packaged install runs `dist/pack/index.mjs`; under `--conditions=development`
64
+ * the entry is TypeScript, and `process.execArgv` carries the conditions forward
65
+ * so a managed server resolves workspace sources the same way this process did.
66
+ */
67
+ const command = () => {
68
+ const entry = process.argv[1];
69
+ if (entry === void 0) return [process.execPath];
70
+ const runtime = import.meta.url.endsWith(".ts") ? process.execArgv : [];
71
+ return [
72
+ process.execPath,
73
+ ...runtime,
74
+ entry
75
+ ];
76
+ };
77
+ //#endregion
78
+ //#region src/server/identity.ts
79
+ var Service = class extends Context.Service()("@codeworksh/cli/server/identity/Service") {};
80
+ /** This process: a server answers with it, a client compares a server's version against it. */
81
+ const current = {
82
+ pid: process.pid,
83
+ version
84
+ };
85
+ const layer = Layer.succeed(Service, Service.of(current));
86
+ //#endregion
87
+ export { file as a, register as c, command as i, current as n, infoJson as o, layer as r, log as s, Service as t };
88
+
89
+ //# sourceMappingURL=identity-B3FOHqbf.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-B3FOHqbf.mjs","names":["pkg.version"],"sources":["../../src/server/registration.ts","../../src/server/identity.ts"],"sourcesContent":["import { Effect, FileSystem, Layer, Option, Path, Schedule, Schema } from \"effect\";\n\n/**\n * How a running server advertises itself so later invocations can find it\n * without scanning ports or the process table.\n *\n * The file is a discovery hint, never proof: a caller reads it for the endpoint,\n * then asks the endpoint `server.info` and believes the answer only when the\n * live pid and version match the ones on file. A crashed server leaves a\n * registration behind; the failed probe is what retires it.\n */\nexport const Info = Schema.Struct({\n\t/** Operating system process identifier of the server that wrote this. */\n\tpid: Schema.Int,\n\t/** The build serving this endpoint; a mismatch means a different binary. */\n\tversion: Schema.String,\n\t/** The `ws://host:port/rpc/v1` endpoint a client connects to. */\n\turl: Schema.String,\n\t/** The TCP port the server bound, for a caller that would rather reuse it than default. */\n\tport: Schema.Int,\n});\nexport type Info = typeof Info.Type;\n\nexport const infoJson = Schema.fromJsonString(Info);\n\n/** The registration file for a CodeWork home: `<home>/service.json`. */\nexport const file = (home: string) => `${home}/service.json`;\n\n/** Where a background (`serve --service`) server writes its log: `<log>/server.log`, truncated per start. */\nexport const log = (logDir: string) => `${logDir}/server.log`;\n\nconst decode = Schema.decodeUnknownEffect(infoJson);\n\nexport const write = Effect.fn(\"ServerRegistration.write\")(function* (path: string, info: Info) {\n\tconst fs = yield* FileSystem.FileSystem;\n\tconst paths = yield* Path.Path;\n\tyield* fs.makeDirectory(paths.dirname(path), { recursive: true });\n\tconst encoded = yield* Schema.encodeEffect(infoJson)(info);\n\t// Write beside the target and rename, so a reader never sees a half-written\n\t// file. 0600 because a future registration may carry a credential.\n\tconst temp = `${path}.${info.pid}.tmp`;\n\tyield* fs.writeFileString(temp, encoded, { mode: 0o600 });\n\tyield* fs.rename(temp, path);\n});\n\n/**\n * Publishes a registration for as long as this server lives, removing it on the\n * way out if it is still the one on file. A file left by a crash is overwritten\n * by the next server to start, and retired by a probe that cannot confirm it.\n *\n * One home has one discoverable server. Every few seconds the file is checked:\n * a missing or unreadable file is written again, and a file naming another\n * server means this one lost discovery for good, so it shuts down rather than\n * run on where nothing can find or stop it.\n */\nexport const register = (options: { readonly home: string; readonly info: Info }) =>\n\tLayer.effectDiscard(\n\t\tEffect.gen(function* () {\n\t\t\tconst path = file(options.home);\n\t\t\tconst fs = yield* FileSystem.FileSystem;\n\t\t\tconst current = fs.readFileString(path).pipe(Effect.flatMap(decode), Effect.option);\n\t\t\tconst owns = (found: Info) => found.pid === options.info.pid && found.url === options.info.url;\n\n\t\t\tyield* write(path, options.info);\n\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\tcurrent.pipe(\n\t\t\t\t\tEffect.flatMap((found) => (Option.isSome(found) && owns(found.value) ? fs.remove(path) : Effect.void)),\n\t\t\t\t\tEffect.ignore,\n\t\t\t\t),\n\t\t\t);\n\t\t\t// Forked after the finalizer, so shutdown stops the watch before the file is removed.\n\t\t\tyield* current.pipe(\n\t\t\t\tEffect.flatMap((found) =>\n\t\t\t\t\tOption.isNone(found)\n\t\t\t\t\t\t? write(path, options.info).pipe(Effect.ignore, Effect.as(true))\n\t\t\t\t\t\t: Effect.succeed(owns(found.value)),\n\t\t\t\t),\n\t\t\t\tEffect.repeat({ while: (ours) => ours, schedule: Schedule.spaced(\"5 seconds\") }),\n\t\t\t\tEffect.andThen(Effect.logWarning(`${path} names another server; shutting down`)),\n\t\t\t\t// The same graceful path `codework service stop` takes.\n\t\t\t\tEffect.andThen(Effect.sync(() => process.kill(process.pid, \"SIGTERM\"))),\n\t\t\t\tEffect.forkScoped,\n\t\t\t);\n\t\t}),\n\t);\n\n/**\n * The launcher command for a managed server: this same CLI, asked to serve.\n *\n * A packaged install runs `dist/pack/index.mjs`; under `--conditions=development`\n * the entry is TypeScript, and `process.execArgv` carries the conditions forward\n * so a managed server resolves workspace sources the same way this process did.\n */\nexport const command = (): ReadonlyArray<string> => {\n\tconst entry = process.argv[1];\n\tif (entry === undefined) return [process.execPath];\n\tconst runtime = import.meta.url.endsWith(\".ts\") ? process.execArgv : [];\n\treturn [process.execPath, ...runtime, entry];\n};\n\nexport * as Registration from \"./registration.ts\";\n","import { Context, Layer } from \"effect\";\nimport pkg from \"../../package.json\" with { type: \"json\" };\n\n/**\n * What a running server is, as its clients need to know it.\n *\n * A discovery registration names the pid and version it wrote; `server.info`\n * answers with the live ones so a caller can tell the process it reached is the\n * one that registered rather than a different server that took the same port.\n */\nexport interface Interface {\n\treadonly pid: number;\n\treadonly version: string;\n}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@codeworksh/cli/server/identity/Service\") {}\n\n/** This process: a server answers with it, a client compares a server's version against it. */\nexport const current: Interface = { pid: process.pid, version: pkg.version };\n\nexport const layer = Layer.succeed(Service, Service.of(current));\n\nexport * as Identity from \"./identity.ts\";\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,OAAO,OAAO,OAAO;;CAEjC,KAAK,OAAO;;CAEZ,SAAS,OAAO;;CAEhB,KAAK,OAAO;;CAEZ,MAAM,OAAO;AACd,CAAC;AAGD,MAAa,WAAW,OAAO,eAAe,IAAI;;AAGlD,MAAa,QAAQ,SAAiB,GAAG,KAAK;;AAG9C,MAAa,OAAO,WAAmB,GAAG,OAAO;AAEjD,MAAM,SAAS,OAAO,oBAAoB,QAAQ;AAElD,MAAa,QAAQ,OAAO,GAAG,0BAA0B,CAAC,CAAC,WAAW,MAAc,MAAY;CAC/F,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,QAAQ,OAAO,KAAK;CAC1B,OAAO,GAAG,cAAc,MAAM,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;CAChE,MAAM,UAAU,OAAO,OAAO,aAAa,QAAQ,CAAC,CAAC,IAAI;CAGzD,MAAM,OAAO,GAAG,KAAK,GAAG,KAAK,IAAI;CACjC,OAAO,GAAG,gBAAgB,MAAM,SAAS,EAAE,MAAM,IAAM,CAAC;CACxD,OAAO,GAAG,OAAO,MAAM,IAAI;AAC5B,CAAC;;;;;;;;;;;AAYD,MAAa,YAAY,YACxB,MAAM,cACL,OAAO,IAAI,aAAa;CACvB,MAAM,OAAO,KAAK,QAAQ,IAAI;CAC9B,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,UAAU,GAAG,eAAe,IAAI,CAAC,CAAC,KAAK,OAAO,QAAQ,MAAM,GAAG,OAAO,MAAM;CAClF,MAAM,QAAQ,UAAgB,MAAM,QAAQ,QAAQ,KAAK,OAAO,MAAM,QAAQ,QAAQ,KAAK;CAE3F,OAAO,MAAM,MAAM,QAAQ,IAAI;CAC/B,OAAO,OAAO,mBACb,QAAQ,KACP,OAAO,SAAS,UAAW,OAAO,OAAO,KAAK,KAAK,KAAK,MAAM,KAAK,IAAI,GAAG,OAAO,IAAI,IAAI,OAAO,IAAK,GACrG,OAAO,MACR,CACD;CAEA,OAAO,QAAQ,KACd,OAAO,SAAS,UACf,OAAO,OAAO,KAAK,IAChB,MAAM,MAAM,QAAQ,IAAI,CAAC,CAAC,KAAK,OAAO,QAAQ,OAAO,GAAG,IAAI,CAAC,IAC7D,OAAO,QAAQ,KAAK,MAAM,KAAK,CAAC,CACpC,GACA,OAAO,OAAO;EAAE,QAAQ,SAAS;EAAM,UAAU,SAAS,OAAO,WAAW;CAAE,CAAC,GAC/E,OAAO,QAAQ,OAAO,WAAW,GAAG,KAAK,qCAAqC,CAAC,GAE/E,OAAO,QAAQ,OAAO,WAAW,QAAQ,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC,GACtE,OAAO,UACR;AACD,CAAC,CACF;;;;;;;;AASD,MAAa,gBAAuC;CACnD,MAAM,QAAQ,QAAQ,KAAK;CAC3B,IAAI,UAAU,KAAA,GAAW,OAAO,CAAC,QAAQ,QAAQ;CACjD,MAAM,UAAU,YAAY,IAAI,SAAS,KAAK,IAAI,QAAQ,WAAW,CAAC;CACtE,OAAO;EAAC,QAAQ;EAAU,GAAG;EAAS;CAAK;AAC5C;;;ACnFA,IAAa,UAAb,cAA6B,QAAQ,QAA4B,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC;;AAG/G,MAAa,UAAqB;CAAE,KAAK,QAAQ;CAAcA;AAAY;AAE3E,MAAa,QAAQ,MAAM,QAAQ,SAAS,QAAQ,GAAG,OAAO,CAAC"}
package/index.mjs CHANGED
@@ -1,34 +1,41 @@
1
1
  #!/usr/bin/env node
2
2
  import { t as version } from "./package-7FOUqcPO.mjs";
3
- import { i as Cmd, n as handlers, r as run } from "./runtime-D4zyJPrh.mjs";
3
+ import { i as Cmd, n as handlers, r as run } from "./runtime-CIBm_3RX.mjs";
4
4
  import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
5
5
  import * as NodeServices from "@effect/platform-node/NodeServices";
6
6
  import { Effect } from "effect";
7
7
  //#region src/index.ts
8
8
  const Handlers = handlers(Cmd, {
9
9
  auth: {
10
- login: () => import("./login-CXelgTth.mjs"),
11
- status: () => import("./status-BNc5JZ1C.mjs"),
12
- refresh: () => import("./refresh-CHBg5ya9.mjs"),
13
- logout: () => import("./logout-DrQQPxEW.mjs")
10
+ login: () => import("./login-DPJbdjAY.mjs"),
11
+ status: () => import("./status-BTCqpq7x.mjs"),
12
+ refresh: () => import("./refresh-TK948P0j.mjs"),
13
+ logout: () => import("./logout-CL5CN_af.mjs")
14
14
  },
15
- run: () => import("./run-D47jXr5Q.mjs"),
16
- serve: () => import("./serve-gOODO9pv.mjs"),
17
- session: { link: () => import("./link-B7iVolAn.mjs") },
18
- acp: () => import("./acp-BsMEC3DC.mjs"),
15
+ run: () => import("./run-BpiW8Wxp.mjs"),
16
+ tui: () => import("./tui-B5RAnvTr.mjs"),
17
+ serve: () => import("./serve-RFw_BCHm.mjs"),
18
+ service: {
19
+ start: () => import("./start-DcvqAhc4.mjs"),
20
+ restart: () => import("./restart-CqAQCig7.mjs"),
21
+ status: () => import("./status-9o_2AAAv.mjs"),
22
+ stop: () => import("./stop-De_XWxXw.mjs")
23
+ },
24
+ session: { link: () => import("./link-oTpS3aUc.mjs") },
25
+ acp: () => import("./acp-BHv2HR2W.mjs"),
19
26
  plugin: {
20
- add: () => import("./add-B9gIgFb3.mjs"),
21
- check: () => import("./check-B9PJ6rn_.mjs"),
22
- install: () => import("./install-Cw6h6IRB.mjs"),
23
- list: () => import("./list-3hYMW1Wo.mjs"),
24
- reload: () => import("./reload-DDsh7kFG.mjs"),
25
- remove: () => import("./remove-__JfeHO-.mjs"),
26
- update: () => import("./update-CaW7oDOl.mjs")
27
+ add: () => import("./add-DlwSE-gO.mjs"),
28
+ check: () => import("./check-CpZTFCDq.mjs"),
29
+ install: () => import("./install-CNWMNyaf.mjs"),
30
+ list: () => import("./list-DhdnHHJ5.mjs"),
31
+ reload: () => import("./reload-_hDmESKE.mjs"),
32
+ remove: () => import("./remove-DjBJe09T.mjs"),
33
+ update: () => import("./update-6Fn2_4fJ.mjs")
27
34
  },
28
35
  models: {
29
- $: () => import("./list-BAonMfru.mjs"),
30
- providers: () => import("./providers-DksUoT4Z.mjs"),
31
- refresh: () => import("./refresh-DPBpboO0.mjs")
36
+ $: () => import("./list-CmHTTB8Z.mjs"),
37
+ providers: () => import("./providers-Dg8UlU_O.mjs"),
38
+ refresh: () => import("./refresh-OsgI6DYK.mjs")
32
39
  }
33
40
  });
34
41
  const main = run(Cmd, Handlers, { version }).pipe(Effect.provide(NodeServices.layer));
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Runtime.handlers","Runtime.run","pkg.version"],"sources":["../../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as NodeRuntime from \"@effect/platform-node/NodeRuntime\";\nimport * as NodeServices from \"@effect/platform-node/NodeServices\";\nimport { Effect } from \"effect\";\nimport type { CliError } from \"effect/cli\";\nimport pkg from \"../package.json\" with { type: \"json\" };\nimport { Cmd } from \"./cli/cmd/cmd.ts\";\nimport type { CommandError } from \"./cli/error.ts\";\nimport { Runtime } from \"./framework/runtime.ts\";\n\nconst Handlers = Runtime.handlers(Cmd, {\n\tauth: {\n\t\tlogin: () => import(\"./cli/cmd/handlers/auth/login.ts\"),\n\t\tstatus: () => import(\"./cli/cmd/handlers/auth/status.ts\"),\n\t\trefresh: () => import(\"./cli/cmd/handlers/auth/refresh.ts\"),\n\t\tlogout: () => import(\"./cli/cmd/handlers/auth/logout.ts\"),\n\t},\n\trun: () => import(\"./cli/cmd/handlers/run.ts\"),\n\tserve: () => import(\"./cli/cmd/handlers/serve.ts\"),\n\tsession: {\n\t\tlink: () => import(\"./cli/cmd/handlers/session/link.ts\"),\n\t},\n\tacp: () => import(\"./cli/cmd/handlers/acp.ts\"),\n\tplugin: {\n\t\tadd: () => import(\"./cli/cmd/handlers/plugin/add.ts\"),\n\t\tcheck: () => import(\"./cli/cmd/handlers/plugin/check.ts\"),\n\t\tinstall: () => import(\"./cli/cmd/handlers/plugin/install.ts\"),\n\t\tlist: () => import(\"./cli/cmd/handlers/plugin/list.ts\"),\n\t\treload: () => import(\"./cli/cmd/handlers/plugin/reload.ts\"),\n\t\tremove: () => import(\"./cli/cmd/handlers/plugin/remove.ts\"),\n\t\tupdate: () => import(\"./cli/cmd/handlers/plugin/update.ts\"),\n\t},\n\tmodels: {\n\t\t$: () => import(\"./cli/cmd/handlers/models/list.ts\"),\n\t\tproviders: () => import(\"./cli/cmd/handlers/models/providers.ts\"),\n\t\trefresh: () => import(\"./cli/cmd/handlers/models/refresh.ts\"),\n\t},\n});\n\nexport const main: Effect.Effect<void, CommandError | CliError.CliError> = Runtime.run(Cmd, Handlers, {\n\tversion: pkg.version,\n}).pipe(Effect.provide(NodeServices.layer));\n\nNodeRuntime.runMain(main);\n"],"mappings":";;;;;;;AAWA,MAAM,WAAWA,SAAiB,KAAK;CACtC,MAAM;EACL,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,eAAe,OAAO;EACtB,cAAc,OAAO;CACtB;CACA,WAAW,OAAO;CAClB,aAAa,OAAO;CACpB,SAAS,EACR,YAAY,OAAO,uBACpB;CACA,WAAW,OAAO;CAClB,QAAQ;EACP,WAAW,OAAO;EAClB,aAAa,OAAO;EACpB,eAAe,OAAO;EACtB,YAAY,OAAO;EACnB,cAAc,OAAO;EACrB,cAAc,OAAO;EACrB,cAAc,OAAO;CACtB;CACA,QAAQ;EACP,SAAS,OAAO;EAChB,iBAAiB,OAAO;EACxB,eAAe,OAAO;CACvB;AACD,CAAC;AAED,MAAa,OAA8DC,IAAY,KAAK,UAAU,EAC5FC,QACV,CAAC,CAAC,CAAC,KAAK,OAAO,QAAQ,aAAa,KAAK,CAAC;AAE1C,YAAY,QAAQ,IAAI"}
1
+ {"version":3,"file":"index.mjs","names":["Runtime.handlers","Runtime.run","pkg.version"],"sources":["../../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as NodeRuntime from \"@effect/platform-node/NodeRuntime\";\nimport * as NodeServices from \"@effect/platform-node/NodeServices\";\nimport { Effect } from \"effect\";\nimport type { CliError } from \"effect/cli\";\nimport pkg from \"../package.json\" with { type: \"json\" };\nimport { Cmd } from \"./cli/cmd/cmd.ts\";\nimport type { CommandError } from \"./cli/error.ts\";\nimport { Runtime } from \"./framework/runtime.ts\";\n\nconst Handlers = Runtime.handlers(Cmd, {\n\tauth: {\n\t\tlogin: () => import(\"./cli/cmd/handlers/auth/login.ts\"),\n\t\tstatus: () => import(\"./cli/cmd/handlers/auth/status.ts\"),\n\t\trefresh: () => import(\"./cli/cmd/handlers/auth/refresh.ts\"),\n\t\tlogout: () => import(\"./cli/cmd/handlers/auth/logout.ts\"),\n\t},\n\trun: () => import(\"./cli/cmd/handlers/run.ts\"),\n\ttui: () => import(\"./cli/cmd/handlers/tui.ts\"),\n\tserve: () => import(\"./cli/cmd/handlers/serve.ts\"),\n\tservice: {\n\t\tstart: () => import(\"./cli/cmd/handlers/service/start.ts\"),\n\t\trestart: () => import(\"./cli/cmd/handlers/service/restart.ts\"),\n\t\tstatus: () => import(\"./cli/cmd/handlers/service/status.ts\"),\n\t\tstop: () => import(\"./cli/cmd/handlers/service/stop.ts\"),\n\t},\n\tsession: {\n\t\tlink: () => import(\"./cli/cmd/handlers/session/link.ts\"),\n\t},\n\tacp: () => import(\"./cli/cmd/handlers/acp.ts\"),\n\tplugin: {\n\t\tadd: () => import(\"./cli/cmd/handlers/plugin/add.ts\"),\n\t\tcheck: () => import(\"./cli/cmd/handlers/plugin/check.ts\"),\n\t\tinstall: () => import(\"./cli/cmd/handlers/plugin/install.ts\"),\n\t\tlist: () => import(\"./cli/cmd/handlers/plugin/list.ts\"),\n\t\treload: () => import(\"./cli/cmd/handlers/plugin/reload.ts\"),\n\t\tremove: () => import(\"./cli/cmd/handlers/plugin/remove.ts\"),\n\t\tupdate: () => import(\"./cli/cmd/handlers/plugin/update.ts\"),\n\t},\n\tmodels: {\n\t\t$: () => import(\"./cli/cmd/handlers/models/list.ts\"),\n\t\tproviders: () => import(\"./cli/cmd/handlers/models/providers.ts\"),\n\t\trefresh: () => import(\"./cli/cmd/handlers/models/refresh.ts\"),\n\t},\n});\n\nexport const main: Effect.Effect<void, CommandError | CliError.CliError> = Runtime.run(Cmd, Handlers, {\n\tversion: pkg.version,\n}).pipe(Effect.provide(NodeServices.layer));\n\nNodeRuntime.runMain(main);\n"],"mappings":";;;;;;;AAWA,MAAM,WAAWA,SAAiB,KAAK;CACtC,MAAM;EACL,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,eAAe,OAAO;EACtB,cAAc,OAAO;CACtB;CACA,WAAW,OAAO;CAClB,WAAW,OAAO;CAClB,aAAa,OAAO;CACpB,SAAS;EACR,aAAa,OAAO;EACpB,eAAe,OAAO;EACtB,cAAc,OAAO;EACrB,YAAY,OAAO;CACpB;CACA,SAAS,EACR,YAAY,OAAO,uBACpB;CACA,WAAW,OAAO;CAClB,QAAQ;EACP,WAAW,OAAO;EAClB,aAAa,OAAO;EACpB,eAAe,OAAO;EACtB,YAAY,OAAO;EACnB,cAAc,OAAO;EACrB,cAAc,OAAO;EACrB,cAAc,OAAO;CACtB;CACA,QAAQ;EACP,SAAS,OAAO;EAChB,iBAAiB,OAAO;EACxB,eAAe,OAAO;CACvB;AACD,CAAC;AAED,MAAa,OAA8DC,IAAY,KAAK,UAAU,EAC5FC,QACV,CAAC,CAAC,CAAC,KAAK,OAAO,QAAQ,aAAa,KAAK,CAAC;AAE1C,YAAY,QAAQ,IAAI"}
@@ -1,6 +1,6 @@
1
- import { i as Cmd, t as handler } from "./runtime-D4zyJPrh.mjs";
2
- import { d as writeOut, i as reportFailure } from "./error-C9ACQhhu.mjs";
3
- import { i as read, t as fetchable } from "./entries-CzgqHfKQ.mjs";
1
+ import { i as Cmd, t as handler } from "./runtime-CIBm_3RX.mjs";
2
+ import { d as writeOut, i as reportFailure } from "./error-CzUxh0Q9.mjs";
3
+ import { i as read, t as fetchable } from "./entries-8LFGwy4n.mjs";
4
4
  import { Effect } from "effect";
5
5
  import { Plugin } from "@codeworksh/harness/effect";
6
6
  //#region src/cli/cmd/handlers/plugin/install.ts
@@ -51,4 +51,4 @@ var install_default = handler(Cmd.commands.plugin.commands.install, Effect.fn("C
51
51
  //#endregion
52
52
  export { install_default as default };
53
53
 
54
- //# sourceMappingURL=install-Cw6h6IRB.mjs.map
54
+ //# sourceMappingURL=install-CNWMNyaf.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-Cw6h6IRB.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/plugin/install.ts"],"sourcesContent":["import { Plugin } from \"@codeworksh/harness/effect\";\nimport { Effect } 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, read } from \"./entries.ts\";\n\n/**\n * `plugin install`, with no argument: the answer to a fresh checkout.\n *\n * A committed `.codework/settings.jsonc` names plugins, the store on a colleague's machine is\n * empty, and something has to materialise them. This is `npm install` with no arguments -- it\n * writes no settings entry, because the entries already exist.\n *\n * It is also what lets **boot stay offline**. Without it the only path from an entry to bytes is a\n * boot that installs, which makes every fresh start a possible network wait; with it, boot\n * resolves or reports, and the error names this command as the remedy.\n */\nexport default Runtime.handler(\n\tCmd.commands.plugin.commands.install,\n\tEffect.fn(\"CLI.plugin.install\")(function* () {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst shared = yield* Cmd.spec;\n\t\t\tconst { entries, cache } = yield* read(shared);\n\n\t\t\tlet installed = 0;\n\t\t\tlet present = 0;\n\t\t\tlet local = 0;\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst target = fetchable(entry.target);\n\t\t\t\tif (target === undefined) {\n\t\t\t\t\t// A local plugin is loaded where it lies and never copied into the store, so\n\t\t\t\t\t// there is nothing to install. An unparseable entry is `list`'s to report.\n\t\t\t\t\tlocal += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ((yield* Plugin.resolve(target, cache, entry.from)) !== undefined) {\n\t\t\t\t\tpresent += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// `inspect` installs, imports and validates, so a spec that turns out not to be a\n\t\t\t\t// plugin fails here rather than at the next run. The reported ID comes from the\n\t\t\t\t// module, never from the spec.\n\t\t\t\tconst plugin = yield* Plugin.inspect(entry.reference, { cache, hostDir: entry.from, file: entry.file });\n\t\t\t\tinstalled += 1;\n\t\t\t\tyield* writeOut(`Installed ${entry.reference} (${plugin.id})\\n`);\n\t\t\t}\n\n\t\t\tconst parts = [\n\t\t\t\t`${installed} installed`,\n\t\t\t\t...(present === 0 ? [] : [`${present} already present`]),\n\t\t\t\t...(local === 0 ? [] : [`${local} local`]),\n\t\t\t];\n\t\t\tyield* writeOut(`${parts.join(\", \")}\\n`);\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,IAAA,kBAAeA,QACd,IAAI,SAAS,OAAO,SAAS,SAC7B,OAAO,GAAG,oBAAoB,CAAC,CAAC,aAAa;CAoC5C,OAAO,OAnCS,OAAO,IAAI,aAAa;EACvC,MAAM,SAAS,OAAO,IAAI;EAC1B,MAAM,EAAE,SAAS,UAAU,OAAO,KAAK,MAAM;EAE7C,IAAI,YAAY;EAChB,IAAI,UAAU;EACd,IAAI,QAAQ;EACZ,KAAK,MAAM,SAAS,SAAS;GAC5B,MAAM,SAAS,UAAU,MAAM,MAAM;GACrC,IAAI,WAAW,KAAA,GAAW;IAGzB,SAAS;IACT;GACD;GACA,KAAK,OAAO,OAAO,QAAQ,QAAQ,OAAO,MAAM,IAAI,OAAO,KAAA,GAAW;IACrE,WAAW;IACX;GACD;GAIA,MAAM,SAAS,OAAO,OAAO,QAAQ,MAAM,WAAW;IAAE;IAAO,SAAS,MAAM;IAAM,MAAM,MAAM;GAAK,CAAC;GACtG,aAAa;GACb,OAAO,SAAS,aAAa,MAAM,UAAU,IAAI,OAAO,GAAG,IAAI;EAChE;EAEA,MAAM,QAAQ;GACb,GAAG,UAAU;GACb,GAAI,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,iBAAiB;GACtD,GAAI,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO;EACzC;EACA,OAAO,SAAS,GAAG,MAAM,KAAK,IAAI,EAAE,GAAG;CACxC,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
1
+ {"version":3,"file":"install-CNWMNyaf.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/plugin/install.ts"],"sourcesContent":["import { Plugin } from \"@codeworksh/harness/effect\";\nimport { Effect } 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, read } from \"./entries.ts\";\n\n/**\n * `plugin install`, with no argument: the answer to a fresh checkout.\n *\n * A committed `.codework/settings.jsonc` names plugins, the store on a colleague's machine is\n * empty, and something has to materialise them. This is `npm install` with no arguments -- it\n * writes no settings entry, because the entries already exist.\n *\n * It is also what lets **boot stay offline**. Without it the only path from an entry to bytes is a\n * boot that installs, which makes every fresh start a possible network wait; with it, boot\n * resolves or reports, and the error names this command as the remedy.\n */\nexport default Runtime.handler(\n\tCmd.commands.plugin.commands.install,\n\tEffect.fn(\"CLI.plugin.install\")(function* () {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst shared = yield* Cmd.spec;\n\t\t\tconst { entries, cache } = yield* read(shared);\n\n\t\t\tlet installed = 0;\n\t\t\tlet present = 0;\n\t\t\tlet local = 0;\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst target = fetchable(entry.target);\n\t\t\t\tif (target === undefined) {\n\t\t\t\t\t// A local plugin is loaded where it lies and never copied into the store, so\n\t\t\t\t\t// there is nothing to install. An unparseable entry is `list`'s to report.\n\t\t\t\t\tlocal += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ((yield* Plugin.resolve(target, cache, entry.from)) !== undefined) {\n\t\t\t\t\tpresent += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// `inspect` installs, imports and validates, so a spec that turns out not to be a\n\t\t\t\t// plugin fails here rather than at the next run. The reported ID comes from the\n\t\t\t\t// module, never from the spec.\n\t\t\t\tconst plugin = yield* Plugin.inspect(entry.reference, { cache, hostDir: entry.from, file: entry.file });\n\t\t\t\tinstalled += 1;\n\t\t\t\tyield* writeOut(`Installed ${entry.reference} (${plugin.id})\\n`);\n\t\t\t}\n\n\t\t\tconst parts = [\n\t\t\t\t`${installed} installed`,\n\t\t\t\t...(present === 0 ? [] : [`${present} already present`]),\n\t\t\t\t...(local === 0 ? [] : [`${local} local`]),\n\t\t\t];\n\t\t\tyield* writeOut(`${parts.join(\", \")}\\n`);\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,IAAA,kBAAeA,QACd,IAAI,SAAS,OAAO,SAAS,SAC7B,OAAO,GAAG,oBAAoB,CAAC,CAAC,aAAa;CAoC5C,OAAO,OAnCS,OAAO,IAAI,aAAa;EACvC,MAAM,SAAS,OAAO,IAAI;EAC1B,MAAM,EAAE,SAAS,UAAU,OAAO,KAAK,MAAM;EAE7C,IAAI,YAAY;EAChB,IAAI,UAAU;EACd,IAAI,QAAQ;EACZ,KAAK,MAAM,SAAS,SAAS;GAC5B,MAAM,SAAS,UAAU,MAAM,MAAM;GACrC,IAAI,WAAW,KAAA,GAAW;IAGzB,SAAS;IACT;GACD;GACA,KAAK,OAAO,OAAO,QAAQ,QAAQ,OAAO,MAAM,IAAI,OAAO,KAAA,GAAW;IACrE,WAAW;IACX;GACD;GAIA,MAAM,SAAS,OAAO,OAAO,QAAQ,MAAM,WAAW;IAAE;IAAO,SAAS,MAAM;IAAM,MAAM,MAAM;GAAK,CAAC;GACtG,aAAa;GACb,OAAO,SAAS,aAAa,MAAM,UAAU,IAAI,OAAO,GAAG,IAAI;EAChE;EAEA,MAAM,QAAQ;GACb,GAAG,UAAU;GACb,GAAI,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,iBAAiB;GACtD,GAAI,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO;EACzC;EACA,OAAO,SAAS,GAAG,MAAM,KAAK,IAAI,EAAE,GAAG;CACxC,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
@@ -1,5 +1,5 @@
1
- import { i as Cmd, t as handler } from "./runtime-D4zyJPrh.mjs";
2
- import { d as writeOut, f as layer, i as reportFailure, p as make } from "./error-C9ACQhhu.mjs";
1
+ import { i as Cmd, t as handler } from "./runtime-CIBm_3RX.mjs";
2
+ import { d as writeOut, f as layer, i as reportFailure, p as make } from "./error-CzUxh0Q9.mjs";
3
3
  import { Effect, Option, Path } from "effect";
4
4
  import { Session } from "@codeworksh/harness/effect";
5
5
  //#region src/cli/cmd/handlers/session/link.ts
@@ -38,4 +38,4 @@ var link_default = handler(Cmd.commands.session.commands.link, Effect.fn("CLI.se
38
38
  //#endregion
39
39
  export { link_default as default };
40
40
 
41
- //# sourceMappingURL=link-B7iVolAn.mjs.map
41
+ //# sourceMappingURL=link-oTpS3aUc.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"link-B7iVolAn.mjs","names":["Runtime.handler","Client.make","Client.layer"],"sources":["../../src/cli/cmd/handlers/session/link.ts"],"sourcesContent":["import { Session } from \"@codeworksh/harness/effect\";\nimport { Effect, Option, Path } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Client } from \"../../../../server/client.ts\";\nimport { Cmd } from \"../../cmd.ts\";\n\n/**\n * Sets `hostDir` on an existing session.\n *\n * **The session ID identifies it; the path is the target.** A project cannot identify a session --\n * it may have many or none, and it is the session that carries the field.\n *\n * The path defaults to the shell's directory, which is both the common case (you are standing in\n * the project you want to link) and safe to default: the CLI runs on the host, so the trust\n * question about naming host paths is about remote clients, not about a local shell's own cwd.\n *\n * Not `session relink`, which moves a session to another checkout of the same project. Different\n * axes -- `relink` changes where the *work* happens, `link` changes which host directory the\n * session is *anchored to* -- and conflating them would recreate the confusion the two names\n * exist to avoid.\n *\n * The anchor is not a settings mechanism. Settings discovery reads it, so do plugin installs, and\n * so will whatever needs a host-side directory next; naming any one of them in the description is\n * what made this read like a settings flag.\n */\nexport default Runtime.handler(\n\tCmd.commands.session.commands.link,\n\tEffect.fn(\"CLI.session.link\")(function* ({ session, path, unlink, server }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst nodePath = yield* Path.Path;\n\t\t\tconst rpc = yield* Client.make;\n\t\t\tconst sessionId = Session.SessionSchema.ID.make(session);\n\t\t\tconst hostDir = unlink\n\t\t\t\t? undefined\n\t\t\t\t: Session.AbsolutePath.make(nodePath.resolve(Option.getOrElse(path, () => \".\")));\n\n\t\t\tconst info = yield* rpc[\"session.link\"]({\n\t\t\t\tsessionId,\n\t\t\t\t...(hostDir === undefined ? {} : { hostDir }),\n\t\t\t});\n\t\t\t// Settings are re-read every exchange, so this applies at the next one: no reload, no\n\t\t\t// restart, the project layer simply starts or stops being read.\n\t\t\tyield* writeOut(\n\t\t\t\tinfo.hostDir === undefined\n\t\t\t\t\t? `Unlinked ${info.id}; it now reads the user settings alone.\\n`\n\t\t\t\t\t: `Linked ${info.id} to ${info.hostDir}\\n`,\n\t\t\t);\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.provide(Client.layer(server)), Effect.scoped, Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAA,eAAeA,QACd,IAAI,SAAS,QAAQ,SAAS,MAC9B,OAAO,GAAG,kBAAkB,CAAC,CAAC,WAAW,EAAE,SAAS,MAAM,QAAQ,UAAU;CAsB3E,OAAO,OArBS,OAAO,IAAI,aAAa;EACvC,MAAM,WAAW,OAAO,KAAK;EAC7B,MAAM,MAAM,OAAOC;EACnB,MAAM,YAAY,QAAQ,cAAc,GAAG,KAAK,OAAO;EACvD,MAAM,UAAU,SACb,KAAA,IACA,QAAQ,aAAa,KAAK,SAAS,QAAQ,OAAO,UAAU,YAAY,GAAG,CAAC,CAAC;EAEhF,MAAM,OAAO,OAAO,IAAI,eAAe,CAAC;GACvC;GACA,GAAI,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ;EAC5C,CAAC;EAGD,OAAO,SACN,KAAK,YAAY,KAAA,IACd,YAAY,KAAK,GAAG,6CACpB,UAAU,KAAK,GAAG,MAAM,KAAK,QAAQ,GACzC;CACD,CAEoB,CAAC,CAAC,KAAK,OAAO,QAAQC,MAAa,MAAM,CAAC,GAAG,OAAO,QAAQ,OAAO,MAAM,aAAa,CAAC;AAC5G,CAAC,CACF"}
1
+ {"version":3,"file":"link-oTpS3aUc.mjs","names":["Runtime.handler","Client.make","Client.layer"],"sources":["../../src/cli/cmd/handlers/session/link.ts"],"sourcesContent":["import { Session } from \"@codeworksh/harness/effect\";\nimport { Effect, Option, Path } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Client } from \"../../../../server/client.ts\";\nimport { Cmd } from \"../../cmd.ts\";\n\n/**\n * Sets `hostDir` on an existing session.\n *\n * **The session ID identifies it; the path is the target.** A project cannot identify a session --\n * it may have many or none, and it is the session that carries the field.\n *\n * The path defaults to the shell's directory, which is both the common case (you are standing in\n * the project you want to link) and safe to default: the CLI runs on the host, so the trust\n * question about naming host paths is about remote clients, not about a local shell's own cwd.\n *\n * Not `session relink`, which moves a session to another checkout of the same project. Different\n * axes -- `relink` changes where the *work* happens, `link` changes which host directory the\n * session is *anchored to* -- and conflating them would recreate the confusion the two names\n * exist to avoid.\n *\n * The anchor is not a settings mechanism. Settings discovery reads it, so do plugin installs, and\n * so will whatever needs a host-side directory next; naming any one of them in the description is\n * what made this read like a settings flag.\n */\nexport default Runtime.handler(\n\tCmd.commands.session.commands.link,\n\tEffect.fn(\"CLI.session.link\")(function* ({ session, path, unlink, server }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst nodePath = yield* Path.Path;\n\t\t\tconst rpc = yield* Client.make;\n\t\t\tconst sessionId = Session.SessionSchema.ID.make(session);\n\t\t\tconst hostDir = unlink\n\t\t\t\t? undefined\n\t\t\t\t: Session.AbsolutePath.make(nodePath.resolve(Option.getOrElse(path, () => \".\")));\n\n\t\t\tconst info = yield* rpc[\"session.link\"]({\n\t\t\t\tsessionId,\n\t\t\t\t...(hostDir === undefined ? {} : { hostDir }),\n\t\t\t});\n\t\t\t// Settings are re-read every exchange, so this applies at the next one: no reload, no\n\t\t\t// restart, the project layer simply starts or stops being read.\n\t\t\tyield* writeOut(\n\t\t\t\tinfo.hostDir === undefined\n\t\t\t\t\t? `Unlinked ${info.id}; it now reads the user settings alone.\\n`\n\t\t\t\t\t: `Linked ${info.id} to ${info.hostDir}\\n`,\n\t\t\t);\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.provide(Client.layer(server)), Effect.scoped, Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAA,eAAeA,QACd,IAAI,SAAS,QAAQ,SAAS,MAC9B,OAAO,GAAG,kBAAkB,CAAC,CAAC,WAAW,EAAE,SAAS,MAAM,QAAQ,UAAU;CAsB3E,OAAO,OArBS,OAAO,IAAI,aAAa;EACvC,MAAM,WAAW,OAAO,KAAK;EAC7B,MAAM,MAAM,OAAOC;EACnB,MAAM,YAAY,QAAQ,cAAc,GAAG,KAAK,OAAO;EACvD,MAAM,UAAU,SACb,KAAA,IACA,QAAQ,aAAa,KAAK,SAAS,QAAQ,OAAO,UAAU,YAAY,GAAG,CAAC,CAAC;EAEhF,MAAM,OAAO,OAAO,IAAI,eAAe,CAAC;GACvC;GACA,GAAI,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ;EAC5C,CAAC;EAGD,OAAO,SACN,KAAK,YAAY,KAAA,IACd,YAAY,KAAK,GAAG,6CACpB,UAAU,KAAK,GAAG,MAAM,KAAK,QAAQ,GACzC;CACD,CAEoB,CAAC,CAAC,KAAK,OAAO,QAAQC,MAAa,MAAM,CAAC,GAAG,OAAO,QAAQ,OAAO,MAAM,aAAa,CAAC;AAC5G,CAAC,CACF"}
@@ -1,6 +1,6 @@
1
- import { i as Cmd, t as handler } from "./runtime-D4zyJPrh.mjs";
2
- import { d as writeOut, i as reportFailure, t as InvalidInputError } from "./error-C9ACQhhu.mjs";
3
- import { n as synced } from "./catalog-D5BxyTfH.mjs";
1
+ import { i as Cmd, t as handler } from "./runtime-CIBm_3RX.mjs";
2
+ import { d as writeOut, i as reportFailure, t as InvalidInputError } from "./error-CzUxh0Q9.mjs";
3
+ import { n as synced } from "./catalog-BDSnGfE_.mjs";
4
4
  import { Effect, Option } from "effect";
5
5
  import { ModelCatalog } from "@codeworksh/harness/effect";
6
6
  //#region src/cli/cmd/handlers/models/list.ts
@@ -27,4 +27,4 @@ var list_default = handler(Cmd.commands.models, Effect.fn("CLI.models.list")(fun
27
27
  //#endregion
28
28
  export { list_default as default };
29
29
 
30
- //# sourceMappingURL=list-BAonMfru.mjs.map
30
+ //# sourceMappingURL=list-CmHTTB8Z.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-BAonMfru.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/models/list.ts"],"sourcesContent":["import { ModelCatalog } from \"@codeworksh/harness/effect\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { InvalidInputError, reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport { synced } from \"./catalog.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.models,\n\tEffect.fn(\"CLI.models.list\")(function* ({ provider }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tyield* synced;\n\t\t\tconst catalog = yield* ModelCatalog.models;\n\t\t\tif (Option.isSome(provider)) {\n\t\t\t\tconst providerId = provider.value;\n\t\t\t\tif (!Object.hasOwn(catalog, providerId)) {\n\t\t\t\t\treturn yield* new InvalidInputError({\n\t\t\t\t\t\tmessage: `provider \"${providerId}\" is not in the catalog\\nhint: run \\`codework models providers\\``,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst sorted = Object.keys(catalog[providerId] ?? {}).sort((a, b) => a.localeCompare(b));\n\t\t\t\tyield* writeOut(sorted.map((modelId) => `${providerId}/${modelId}\\n`).join(\"\"));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lines: string[] = [];\n\t\t\tconst providers = Object.keys(catalog).sort((a, b) => a.localeCompare(b));\n\t\t\tfor (const providerId of providers) {\n\t\t\t\tconst providerModels = Object.keys(catalog[providerId] ?? {}).sort((a, b) => a.localeCompare(b));\n\t\t\t\tfor (const modelId of providerModels) {\n\t\t\t\t\tlines.push(`${providerId}/${modelId}\\n`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tyield* writeOut(lines.join(\"\"));\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;AAQA,IAAA,eAAeA,QACd,IAAI,SAAS,QACb,OAAO,GAAG,iBAAiB,CAAC,CAAC,WAAW,EAAE,YAAY;CA2BrD,OAAO,OA1BS,OAAO,IAAI,aAAa;EACvC,OAAO;EACP,MAAM,UAAU,OAAO,aAAa;EACpC,IAAI,OAAO,OAAO,QAAQ,GAAG;GAC5B,MAAM,aAAa,SAAS;GAC5B,IAAI,CAAC,OAAO,OAAO,SAAS,UAAU,GACrC,OAAO,OAAO,IAAI,kBAAkB,EACnC,SAAS,aAAa,WAAW,kEAClC,CAAC;GAEF,MAAM,SAAS,OAAO,KAAK,QAAQ,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;GACvF,OAAO,SAAS,OAAO,KAAK,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;GAC9E;EACD;EAEA,MAAM,QAAkB,CAAC;EACzB,MAAM,YAAY,OAAO,KAAK,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;EACxE,KAAK,MAAM,cAAc,WAAW;GACnC,MAAM,iBAAiB,OAAO,KAAK,QAAQ,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;GAC/F,KAAK,MAAM,WAAW,gBACrB,MAAM,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG;EAEzC;EACA,OAAO,SAAS,MAAM,KAAK,EAAE,CAAC;CAC/B,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
1
+ {"version":3,"file":"list-CmHTTB8Z.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/models/list.ts"],"sourcesContent":["import { ModelCatalog } from \"@codeworksh/harness/effect\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { InvalidInputError, reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport { synced } from \"./catalog.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.models,\n\tEffect.fn(\"CLI.models.list\")(function* ({ provider }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tyield* synced;\n\t\t\tconst catalog = yield* ModelCatalog.models;\n\t\t\tif (Option.isSome(provider)) {\n\t\t\t\tconst providerId = provider.value;\n\t\t\t\tif (!Object.hasOwn(catalog, providerId)) {\n\t\t\t\t\treturn yield* new InvalidInputError({\n\t\t\t\t\t\tmessage: `provider \"${providerId}\" is not in the catalog\\nhint: run \\`codework models providers\\``,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst sorted = Object.keys(catalog[providerId] ?? {}).sort((a, b) => a.localeCompare(b));\n\t\t\t\tyield* writeOut(sorted.map((modelId) => `${providerId}/${modelId}\\n`).join(\"\"));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lines: string[] = [];\n\t\t\tconst providers = Object.keys(catalog).sort((a, b) => a.localeCompare(b));\n\t\t\tfor (const providerId of providers) {\n\t\t\t\tconst providerModels = Object.keys(catalog[providerId] ?? {}).sort((a, b) => a.localeCompare(b));\n\t\t\t\tfor (const modelId of providerModels) {\n\t\t\t\t\tlines.push(`${providerId}/${modelId}\\n`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tyield* writeOut(lines.join(\"\"));\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;AAQA,IAAA,eAAeA,QACd,IAAI,SAAS,QACb,OAAO,GAAG,iBAAiB,CAAC,CAAC,WAAW,EAAE,YAAY;CA2BrD,OAAO,OA1BS,OAAO,IAAI,aAAa;EACvC,OAAO;EACP,MAAM,UAAU,OAAO,aAAa;EACpC,IAAI,OAAO,OAAO,QAAQ,GAAG;GAC5B,MAAM,aAAa,SAAS;GAC5B,IAAI,CAAC,OAAO,OAAO,SAAS,UAAU,GACrC,OAAO,OAAO,IAAI,kBAAkB,EACnC,SAAS,aAAa,WAAW,kEAClC,CAAC;GAEF,MAAM,SAAS,OAAO,KAAK,QAAQ,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;GACvF,OAAO,SAAS,OAAO,KAAK,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;GAC9E;EACD;EAEA,MAAM,QAAkB,CAAC;EACzB,MAAM,YAAY,OAAO,KAAK,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;EACxE,KAAK,MAAM,cAAc,WAAW;GACnC,MAAM,iBAAiB,OAAO,KAAK,QAAQ,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;GAC/F,KAAK,MAAM,WAAW,gBACrB,MAAM,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG;EAEzC;EACA,OAAO,SAAS,MAAM,KAAK,EAAE,CAAC;CAC/B,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
@@ -1,6 +1,6 @@
1
- import { i as Cmd, t as handler } from "./runtime-D4zyJPrh.mjs";
2
- import { d as writeOut, i as reportFailure } from "./error-C9ACQhhu.mjs";
3
- import { i as read } from "./entries-CzgqHfKQ.mjs";
1
+ import { i as Cmd, t as handler } from "./runtime-CIBm_3RX.mjs";
2
+ import { d as writeOut, i as reportFailure } from "./error-CzUxh0Q9.mjs";
3
+ import { i as read } from "./entries-8LFGwy4n.mjs";
4
4
  import { Effect, Schema } from "effect";
5
5
  import { Plugin } from "@codeworksh/harness/effect";
6
6
  //#region src/cli/cmd/handlers/plugin/list.ts
@@ -74,4 +74,4 @@ var list_default = handler(Cmd.commands.plugin.commands.list, Effect.fn("CLI.plu
74
74
  //#endregion
75
75
  export { list_default as default };
76
76
 
77
- //# sourceMappingURL=list-3hYMW1Wo.mjs.map
77
+ //# sourceMappingURL=list-DhdnHHJ5.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-3hYMW1Wo.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/plugin/list.ts"],"sourcesContent":["import { Plugin } from \"@codeworksh/harness/effect\";\nimport { Effect, Schema } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport { read } from \"./entries.ts\";\n\n/**\n * Two columns: what was written, and what it turned out to be.\n *\n * **The second column doubles as the state, for free.** An ID cannot be known without importing\n * the module -- the store records nothing about the plugin inside a package -- so printing one is\n * proof that everything worked: the entry parsed, the store had it, the import succeeded, and the\n * definition validated. When any of that fails there is no ID to print, and the reason goes in its\n * place.\n *\n * **Nothing is stored to make that work.** The reason is the live error from this run, not a\n * record of an older one: a stored failure goes stale the moment someone fixes the cause, and a\n * list still printing `plugin-import-failed` after you installed the missing dependency is worse\n * than one that says nothing. The work is cheap and local -- a parse, a lookup and an import.\n *\n * (`checkedAt`/`outdated` are stored, for the opposite reason: those come from the network, so\n * re-obtaining them is expensive and a slightly stale answer is the right trade. Local facts are\n * recomputed; remote facts are cached.)\n */\nconst isSourceError = Schema.is(Plugin.SourceError);\nconst isInstallError = Schema.is(Plugin.InstallError);\nconst isStoreError = Schema.is(Plugin.StoreError);\nconst isLoadError = Schema.is(Plugin.LoadError);\n\n/** The §5.5 reason slug, which is the same string the CLI prints and a log line carries. */\nconst reasonOf = (error: unknown): { readonly reason: string; readonly message: string } =>\n\tisSourceError(error) || isInstallError(error) || isStoreError(error) || isLoadError(error)\n\t\t? { reason: error.reason, message: error.message }\n\t\t: { reason: \"plugin-load-failed\", message: String(error) };\n\nexport default Runtime.handler(\n\tCmd.commands.plugin.commands.list,\n\tEffect.fn(\"CLI.plugin.list\")(function* ({ verbose }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst shared = yield* Cmd.spec;\n\t\t\tconst { entries, cache } = yield* read(shared);\n\t\t\tif (entries.length === 0) {\n\t\t\t\tyield* writeOut(\"No plugins are configured.\\n\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst rows: Array<{ written: string; file: string; state: string; detail?: string }> = [];\n\t\t\tfor (const entry of entries) {\n\t\t\t\t// Resolve-only: listing what is configured must never install anything.\n\t\t\t\tconst inspected = yield* Plugin.inspect(entry.reference, {\n\t\t\t\t\tcache,\n\t\t\t\t\thostDir: entry.from,\n\t\t\t\t\tfile: entry.file,\n\t\t\t\t\tinstall: Plugin.resolveCached,\n\t\t\t\t}).pipe(Effect.result);\n\t\t\t\trows.push(\n\t\t\t\t\tinspected._tag === \"Success\"\n\t\t\t\t\t\t? { written: entry.written, file: entry.file, state: inspected.success.id }\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\twritten: entry.written,\n\t\t\t\t\t\t\t\tfile: entry.file,\n\t\t\t\t\t\t\t\tstate: reasonOf(inspected.failure).reason,\n\t\t\t\t\t\t\t\tdetail: reasonOf(inspected.failure).message,\n\t\t\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// The left column is the reference exactly as the entry spells it, because that is the\n\t\t\t// string a person will search their settings for.\n\t\t\tconst width = Math.max(...rows.map((row) => row.written.length));\n\t\t\tfor (const row of rows) {\n\t\t\t\tyield* writeOut(`${row.written.padEnd(width)} ${row.state}\\n`);\n\t\t\t\tif (verbose) {\n\t\t\t\t\tif (row.detail !== undefined) yield* writeOut(`${\" \".repeat(width)} ${row.detail}\\n`);\n\t\t\t\t\tyield* writeOut(`${\" \".repeat(width)} declared in: ${row.file}\\n`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAM,gBAAgB,OAAO,GAAG,OAAO,WAAW;AAClD,MAAM,iBAAiB,OAAO,GAAG,OAAO,YAAY;AACpD,MAAM,eAAe,OAAO,GAAG,OAAO,UAAU;AAChD,MAAM,cAAc,OAAO,GAAG,OAAO,SAAS;;AAG9C,MAAM,YAAY,UACjB,cAAc,KAAK,KAAK,eAAe,KAAK,KAAK,aAAa,KAAK,KAAK,YAAY,KAAK,IACtF;CAAE,QAAQ,MAAM;CAAQ,SAAS,MAAM;AAAQ,IAC/C;CAAE,QAAQ;CAAsB,SAAS,OAAO,KAAK;AAAE;AAE3D,IAAA,eAAeA,QACd,IAAI,SAAS,OAAO,SAAS,MAC7B,OAAO,GAAG,iBAAiB,CAAC,CAAC,WAAW,EAAE,WAAW;CA0CpD,OAAO,OAzCS,OAAO,IAAI,aAAa;EACvC,MAAM,SAAS,OAAO,IAAI;EAC1B,MAAM,EAAE,SAAS,UAAU,OAAO,KAAK,MAAM;EAC7C,IAAI,QAAQ,WAAW,GAAG;GACzB,OAAO,SAAS,8BAA8B;GAC9C;EACD;EAEA,MAAM,OAAiF,CAAC;EACxF,KAAK,MAAM,SAAS,SAAS;GAE5B,MAAM,YAAY,OAAO,OAAO,QAAQ,MAAM,WAAW;IACxD;IACA,SAAS,MAAM;IACf,MAAM,MAAM;IACZ,SAAS,OAAO;GACjB,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM;GACrB,KAAK,KACJ,UAAU,SAAS,YAChB;IAAE,SAAS,MAAM;IAAS,MAAM,MAAM;IAAM,OAAO,UAAU,QAAQ;GAAG,IACxE;IACA,SAAS,MAAM;IACf,MAAM,MAAM;IACZ,OAAO,SAAS,UAAU,OAAO,CAAC,CAAC;IACnC,QAAQ,SAAS,UAAU,OAAO,CAAC,CAAC;GACrC,CACH;EACD;EAIA,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,QAAQ,MAAM,CAAC;EAC/D,KAAK,MAAM,OAAO,MAAM;GACvB,OAAO,SAAS,GAAG,IAAI,QAAQ,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,GAAG;GAC9D,IAAI,SAAS;IACZ,IAAI,IAAI,WAAW,KAAA,GAAW,OAAO,SAAS,GAAG,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,OAAO,GAAG;IACrF,OAAO,SAAS,GAAG,IAAI,OAAO,KAAK,EAAE,iBAAiB,IAAI,KAAK,GAAG;GACnE;EACD;CACD,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
1
+ {"version":3,"file":"list-DhdnHHJ5.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/plugin/list.ts"],"sourcesContent":["import { Plugin } from \"@codeworksh/harness/effect\";\nimport { Effect, Schema } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport { read } from \"./entries.ts\";\n\n/**\n * Two columns: what was written, and what it turned out to be.\n *\n * **The second column doubles as the state, for free.** An ID cannot be known without importing\n * the module -- the store records nothing about the plugin inside a package -- so printing one is\n * proof that everything worked: the entry parsed, the store had it, the import succeeded, and the\n * definition validated. When any of that fails there is no ID to print, and the reason goes in its\n * place.\n *\n * **Nothing is stored to make that work.** The reason is the live error from this run, not a\n * record of an older one: a stored failure goes stale the moment someone fixes the cause, and a\n * list still printing `plugin-import-failed` after you installed the missing dependency is worse\n * than one that says nothing. The work is cheap and local -- a parse, a lookup and an import.\n *\n * (`checkedAt`/`outdated` are stored, for the opposite reason: those come from the network, so\n * re-obtaining them is expensive and a slightly stale answer is the right trade. Local facts are\n * recomputed; remote facts are cached.)\n */\nconst isSourceError = Schema.is(Plugin.SourceError);\nconst isInstallError = Schema.is(Plugin.InstallError);\nconst isStoreError = Schema.is(Plugin.StoreError);\nconst isLoadError = Schema.is(Plugin.LoadError);\n\n/** The §5.5 reason slug, which is the same string the CLI prints and a log line carries. */\nconst reasonOf = (error: unknown): { readonly reason: string; readonly message: string } =>\n\tisSourceError(error) || isInstallError(error) || isStoreError(error) || isLoadError(error)\n\t\t? { reason: error.reason, message: error.message }\n\t\t: { reason: \"plugin-load-failed\", message: String(error) };\n\nexport default Runtime.handler(\n\tCmd.commands.plugin.commands.list,\n\tEffect.fn(\"CLI.plugin.list\")(function* ({ verbose }) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst shared = yield* Cmd.spec;\n\t\t\tconst { entries, cache } = yield* read(shared);\n\t\t\tif (entries.length === 0) {\n\t\t\t\tyield* writeOut(\"No plugins are configured.\\n\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst rows: Array<{ written: string; file: string; state: string; detail?: string }> = [];\n\t\t\tfor (const entry of entries) {\n\t\t\t\t// Resolve-only: listing what is configured must never install anything.\n\t\t\t\tconst inspected = yield* Plugin.inspect(entry.reference, {\n\t\t\t\t\tcache,\n\t\t\t\t\thostDir: entry.from,\n\t\t\t\t\tfile: entry.file,\n\t\t\t\t\tinstall: Plugin.resolveCached,\n\t\t\t\t}).pipe(Effect.result);\n\t\t\t\trows.push(\n\t\t\t\t\tinspected._tag === \"Success\"\n\t\t\t\t\t\t? { written: entry.written, file: entry.file, state: inspected.success.id }\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\twritten: entry.written,\n\t\t\t\t\t\t\t\tfile: entry.file,\n\t\t\t\t\t\t\t\tstate: reasonOf(inspected.failure).reason,\n\t\t\t\t\t\t\t\tdetail: reasonOf(inspected.failure).message,\n\t\t\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// The left column is the reference exactly as the entry spells it, because that is the\n\t\t\t// string a person will search their settings for.\n\t\t\tconst width = Math.max(...rows.map((row) => row.written.length));\n\t\t\tfor (const row of rows) {\n\t\t\t\tyield* writeOut(`${row.written.padEnd(width)} ${row.state}\\n`);\n\t\t\t\tif (verbose) {\n\t\t\t\t\tif (row.detail !== undefined) yield* writeOut(`${\" \".repeat(width)} ${row.detail}\\n`);\n\t\t\t\t\tyield* writeOut(`${\" \".repeat(width)} declared in: ${row.file}\\n`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAM,gBAAgB,OAAO,GAAG,OAAO,WAAW;AAClD,MAAM,iBAAiB,OAAO,GAAG,OAAO,YAAY;AACpD,MAAM,eAAe,OAAO,GAAG,OAAO,UAAU;AAChD,MAAM,cAAc,OAAO,GAAG,OAAO,SAAS;;AAG9C,MAAM,YAAY,UACjB,cAAc,KAAK,KAAK,eAAe,KAAK,KAAK,aAAa,KAAK,KAAK,YAAY,KAAK,IACtF;CAAE,QAAQ,MAAM;CAAQ,SAAS,MAAM;AAAQ,IAC/C;CAAE,QAAQ;CAAsB,SAAS,OAAO,KAAK;AAAE;AAE3D,IAAA,eAAeA,QACd,IAAI,SAAS,OAAO,SAAS,MAC7B,OAAO,GAAG,iBAAiB,CAAC,CAAC,WAAW,EAAE,WAAW;CA0CpD,OAAO,OAzCS,OAAO,IAAI,aAAa;EACvC,MAAM,SAAS,OAAO,IAAI;EAC1B,MAAM,EAAE,SAAS,UAAU,OAAO,KAAK,MAAM;EAC7C,IAAI,QAAQ,WAAW,GAAG;GACzB,OAAO,SAAS,8BAA8B;GAC9C;EACD;EAEA,MAAM,OAAiF,CAAC;EACxF,KAAK,MAAM,SAAS,SAAS;GAE5B,MAAM,YAAY,OAAO,OAAO,QAAQ,MAAM,WAAW;IACxD;IACA,SAAS,MAAM;IACf,MAAM,MAAM;IACZ,SAAS,OAAO;GACjB,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM;GACrB,KAAK,KACJ,UAAU,SAAS,YAChB;IAAE,SAAS,MAAM;IAAS,MAAM,MAAM;IAAM,OAAO,UAAU,QAAQ;GAAG,IACxE;IACA,SAAS,MAAM;IACf,MAAM,MAAM;IACZ,OAAO,SAAS,UAAU,OAAO,CAAC,CAAC;IACnC,QAAQ,SAAS,UAAU,OAAO,CAAC,CAAC;GACrC,CACH;EACD;EAIA,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,QAAQ,MAAM,CAAC;EAC/D,KAAK,MAAM,OAAO,MAAM;GACvB,OAAO,SAAS,GAAG,IAAI,QAAQ,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,GAAG;GAC9D,IAAI,SAAS;IACZ,IAAI,IAAI,WAAW,KAAA,GAAW,OAAO,SAAS,GAAG,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,OAAO,GAAG;IACrF,OAAO,SAAS,GAAG,IAAI,OAAO,KAAK,EAAE,iBAAiB,IAAI,KAAK,GAAG;GACnE;EACD;CACD,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
@@ -1,6 +1,6 @@
1
- import { i as Cmd, t as handler } from "./runtime-D4zyJPrh.mjs";
2
- import { d as writeOut, i as reportFailure, p as make, t as InvalidInputError, u as writeError } from "./error-C9ACQhhu.mjs";
3
- import { a as oauthProviderLabel, i as makeOps, n as attempt, o as selectProvider, r as localOps, s as withServer, t as assertServerScope } from "./shared-DFB2--6V.mjs";
1
+ import { i as Cmd, t as handler } from "./runtime-CIBm_3RX.mjs";
2
+ import { d as writeOut, i as reportFailure, p as make, t as InvalidInputError, u as writeError } from "./error-CzUxh0Q9.mjs";
3
+ import { a as oauthProviderLabel, i as makeOps, n as attempt, o as selectProvider, r as localOps, s as withServer, t as assertServerScope } from "./shared-DjyUhNsi.mjs";
4
4
  import { Effect, Option } from "effect";
5
5
  import { formatOAuthSummary, oauthLoginIssue, oauthNotice } from "@codeworksh/aikit/oauth/summary";
6
6
  //#region src/cli/cmd/handlers/auth/login.ts
@@ -42,4 +42,4 @@ var login_default = handler(Cmd.commands.auth.commands.login, Effect.fn("CLI.aut
42
42
  //#endregion
43
43
  export { login_default as default };
44
44
 
45
- //# sourceMappingURL=login-CXelgTth.mjs.map
45
+ //# sourceMappingURL=login-DPJbdjAY.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"login-CXelgTth.mjs","names":["Runtime.handler","Client.make"],"sources":["../../src/cli/cmd/handlers/auth/login.ts"],"sourcesContent":["import { formatOAuthSummary, oauthLoginIssue, oauthNotice } from \"@codeworksh/aikit/oauth/summary\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { InvalidInputError, reportFailure } from \"../../../error.ts\";\nimport { writeError, writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport {\n\tassertServerScope,\n\tattempt,\n\tClient,\n\tlocalOps,\n\tmakeOps,\n\toauthProviderLabel,\n\tselectProvider,\n\twithServer,\n\ttype LoginOptions,\n} from \"./shared.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.auth.commands.login,\n\tEffect.fn(\"CLI.auth.login\")(function* ({\n\t\tserver,\n\t\topenaiCodex,\n\t\tgithubCopilot,\n\t\tauthFile,\n\t\tbrowser,\n\t\tdevice,\n\t\tenterprise,\n\t\tenableModels,\n\t\tjson,\n\t}) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst provider = yield* selectProvider({ openaiCodex, githubCopilot });\n\t\t\tconst issue = oauthLoginIssue(provider, {\n\t\t\t\tdevice,\n\t\t\t\tenableModels,\n\t\t\t\t...(Option.isSome(enterprise) && { enterprise: enterprise.value }),\n\t\t\t});\n\t\t\tif (issue !== undefined) return yield* new InvalidInputError({ message: issue });\n\n\t\t\tconst name = oauthProviderLabel(provider);\n\t\t\tconst options: LoginOptions = { browser, device, enterprise, enableModels };\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\t// The browser callback and the device prompt both need this\n\t\t\t\t\t\t// terminal, so the login runs here and only the result travels.\n\t\t\t\t\t\tconst { wire } = yield* attempt(`${name} login failed`, () =>\n\t\t\t\t\t\t\tmakeOps(provider, { persist: false }).login(options),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst info = yield* rpc[\"auth.save\"]({ credentials: wire });\n\t\t\t\t\t\tyield* writeError(`${oauthNotice(\"saved\", provider, \"the server\")}\\n`);\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(`${name} login failed`, () => ops.login(options));\n\t\t\tyield* writeError(`${oauthNotice(\"saved\", provider, ops.path)}\\n`);\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":";;;;;;AAkBA,IAAA,gBAAeA,QACd,IAAI,SAAS,KAAK,SAAS,OAC3B,OAAO,GAAG,gBAAgB,CAAC,CAAC,WAAW,EACtC,QACA,aACA,eACA,UACA,SACA,QACA,YACA,cACA,QACE;CAqCF,OAAO,OApCS,OAAO,IAAI,aAAa;EACvC,MAAM,WAAW,OAAO,eAAe;GAAE;GAAa;EAAc,CAAC;EACrE,MAAM,QAAQ,gBAAgB,UAAU;GACvC;GACA;GACA,GAAI,OAAO,OAAO,UAAU,KAAK,EAAE,YAAY,WAAW,MAAM;EACjE,CAAC;EACD,IAAI,UAAU,KAAA,GAAW,OAAO,OAAO,IAAI,kBAAkB,EAAE,SAAS,MAAM,CAAC;EAE/E,MAAM,OAAO,mBAAmB,QAAQ;EACxC,MAAM,UAAwB;GAAE;GAAS;GAAQ;GAAY;EAAa;EAE1E,IAAI,OAAO,OAAO,MAAM,GAAG;GAC1B,OAAO,kBAAkB,QAAQ;GACjC,OAAO,OAAO,WACb,OAAO,OACP,OAAO,IAAI,aAAa;IACvB,MAAM,MAAM,OAAOC;IAGnB,MAAM,EAAE,SAAS,OAAO,QAAQ,GAAG,KAAK,sBACvC,QAAQ,UAAU,EAAE,SAAS,MAAM,CAAC,CAAC,CAAC,MAAM,OAAO,CACpD;IACA,MAAM,OAAO,OAAO,IAAI,YAAY,CAAC,EAAE,aAAa,KAAK,CAAC;IAC1D,OAAO,WAAW,GAAG,YAAY,SAAS,UAAU,YAAY,EAAE,GAAG;IACrE,OAAO,SAAS,mBAAmB,MAAM,EAAE,KAAK,CAAC,CAAC;GACnD,CAAC,CACF;EACD;EAEA,MAAM,MAAM,OAAO,SAAS,UAAU,QAAQ;EAC9C,MAAM,EAAE,YAAY,OAAO,QAAQ,GAAG,KAAK,sBAAsB,IAAI,MAAM,OAAO,CAAC;EACnF,OAAO,WAAW,GAAG,YAAY,SAAS,UAAU,IAAI,IAAI,EAAE,GAAG;EACjE,OAAO,SAAS,mBAAmB,SAAS,EAAE,KAAK,CAAC,CAAC;CACtD,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
1
+ {"version":3,"file":"login-DPJbdjAY.mjs","names":["Runtime.handler","Client.make"],"sources":["../../src/cli/cmd/handlers/auth/login.ts"],"sourcesContent":["import { formatOAuthSummary, oauthLoginIssue, oauthNotice } from \"@codeworksh/aikit/oauth/summary\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { InvalidInputError, reportFailure } from \"../../../error.ts\";\nimport { writeError, writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport {\n\tassertServerScope,\n\tattempt,\n\tClient,\n\tlocalOps,\n\tmakeOps,\n\toauthProviderLabel,\n\tselectProvider,\n\twithServer,\n\ttype LoginOptions,\n} from \"./shared.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.auth.commands.login,\n\tEffect.fn(\"CLI.auth.login\")(function* ({\n\t\tserver,\n\t\topenaiCodex,\n\t\tgithubCopilot,\n\t\tauthFile,\n\t\tbrowser,\n\t\tdevice,\n\t\tenterprise,\n\t\tenableModels,\n\t\tjson,\n\t}) {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tconst provider = yield* selectProvider({ openaiCodex, githubCopilot });\n\t\t\tconst issue = oauthLoginIssue(provider, {\n\t\t\t\tdevice,\n\t\t\t\tenableModels,\n\t\t\t\t...(Option.isSome(enterprise) && { enterprise: enterprise.value }),\n\t\t\t});\n\t\t\tif (issue !== undefined) return yield* new InvalidInputError({ message: issue });\n\n\t\t\tconst name = oauthProviderLabel(provider);\n\t\t\tconst options: LoginOptions = { browser, device, enterprise, enableModels };\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\t// The browser callback and the device prompt both need this\n\t\t\t\t\t\t// terminal, so the login runs here and only the result travels.\n\t\t\t\t\t\tconst { wire } = yield* attempt(`${name} login failed`, () =>\n\t\t\t\t\t\t\tmakeOps(provider, { persist: false }).login(options),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst info = yield* rpc[\"auth.save\"]({ credentials: wire });\n\t\t\t\t\t\tyield* writeError(`${oauthNotice(\"saved\", provider, \"the server\")}\\n`);\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(`${name} login failed`, () => ops.login(options));\n\t\t\tyield* writeError(`${oauthNotice(\"saved\", provider, ops.path)}\\n`);\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":";;;;;;AAkBA,IAAA,gBAAeA,QACd,IAAI,SAAS,KAAK,SAAS,OAC3B,OAAO,GAAG,gBAAgB,CAAC,CAAC,WAAW,EACtC,QACA,aACA,eACA,UACA,SACA,QACA,YACA,cACA,QACE;CAqCF,OAAO,OApCS,OAAO,IAAI,aAAa;EACvC,MAAM,WAAW,OAAO,eAAe;GAAE;GAAa;EAAc,CAAC;EACrE,MAAM,QAAQ,gBAAgB,UAAU;GACvC;GACA;GACA,GAAI,OAAO,OAAO,UAAU,KAAK,EAAE,YAAY,WAAW,MAAM;EACjE,CAAC;EACD,IAAI,UAAU,KAAA,GAAW,OAAO,OAAO,IAAI,kBAAkB,EAAE,SAAS,MAAM,CAAC;EAE/E,MAAM,OAAO,mBAAmB,QAAQ;EACxC,MAAM,UAAwB;GAAE;GAAS;GAAQ;GAAY;EAAa;EAE1E,IAAI,OAAO,OAAO,MAAM,GAAG;GAC1B,OAAO,kBAAkB,QAAQ;GACjC,OAAO,OAAO,WACb,OAAO,OACP,OAAO,IAAI,aAAa;IACvB,MAAM,MAAM,OAAOC;IAGnB,MAAM,EAAE,SAAS,OAAO,QAAQ,GAAG,KAAK,sBACvC,QAAQ,UAAU,EAAE,SAAS,MAAM,CAAC,CAAC,CAAC,MAAM,OAAO,CACpD;IACA,MAAM,OAAO,OAAO,IAAI,YAAY,CAAC,EAAE,aAAa,KAAK,CAAC;IAC1D,OAAO,WAAW,GAAG,YAAY,SAAS,UAAU,YAAY,EAAE,GAAG;IACrE,OAAO,SAAS,mBAAmB,MAAM,EAAE,KAAK,CAAC,CAAC;GACnD,CAAC,CACF;EACD;EAEA,MAAM,MAAM,OAAO,SAAS,UAAU,QAAQ;EAC9C,MAAM,EAAE,YAAY,OAAO,QAAQ,GAAG,KAAK,sBAAsB,IAAI,MAAM,OAAO,CAAC;EACnF,OAAO,WAAW,GAAG,YAAY,SAAS,UAAU,IAAI,IAAI,EAAE,GAAG;EACjE,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
- import { i as Cmd, t as handler } from "./runtime-D4zyJPrh.mjs";
2
- import { i as reportFailure, p as make, u as writeError } from "./error-C9ACQhhu.mjs";
3
- import { a as oauthProviderLabel, n as attempt, o as selectProvider, r as localOps, s as withServer, t as assertServerScope } from "./shared-DFB2--6V.mjs";
1
+ import { i as Cmd, t as handler } from "./runtime-CIBm_3RX.mjs";
2
+ import { i as reportFailure, p as make, u as writeError } from "./error-CzUxh0Q9.mjs";
3
+ import { a as oauthProviderLabel, n as attempt, o as selectProvider, r as localOps, s as withServer, t as assertServerScope } from "./shared-DjyUhNsi.mjs";
4
4
  import { Effect, Option } from "effect";
5
5
  import { oauthNotice } from "@codeworksh/aikit/oauth/summary";
6
6
  //#region src/cli/cmd/handlers/auth/logout.ts
@@ -26,4 +26,4 @@ var logout_default = handler(Cmd.commands.auth.commands.logout, Effect.fn("CLI.a
26
26
  //#endregion
27
27
  export { logout_default as default };
28
28
 
29
- //# sourceMappingURL=logout-DrQQPxEW.mjs.map
29
+ //# sourceMappingURL=logout-CL5CN_af.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"logout-DrQQPxEW.mjs","names":["Runtime.handler","Client.make"],"sources":["../../src/cli/cmd/handlers/auth/logout.ts"],"sourcesContent":["import { oauthNotice } from \"@codeworksh/aikit/oauth/summary\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeError } 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.logout,\n\tEffect.fn(\"CLI.auth.logout\")(function* ({ server, openaiCodex, githubCopilot, authFile }) {\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\tyield* rpc[\"auth.logout\"]({ provider });\n\t\t\t\t\t\tyield* writeError(`${oauthNotice(\"cleared\", provider, \"the server\")}\\n`);\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\tyield* attempt(`failed to clear ${name} credentials`, () => ops.logout());\n\t\t\tyield* writeError(`${oauthNotice(\"cleared\", provider, ops.path)}\\n`);\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,YAAY;CAsBzF,OAAO,OArBS,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,QAAO,OADYC,KAAAA,CACR,cAAc,CAAC,EAAE,SAAS,CAAC;IACtC,OAAO,WAAW,GAAG,YAAY,WAAW,UAAU,YAAY,EAAE,GAAG;GACxE,CAAC,CACF;EACD;EAEA,MAAM,MAAM,OAAO,SAAS,UAAU,QAAQ;EAC9C,OAAO,QAAQ,mBAAmB,KAAK,qBAAqB,IAAI,OAAO,CAAC;EACxE,OAAO,WAAW,GAAG,YAAY,WAAW,UAAU,IAAI,IAAI,EAAE,GAAG;CACpE,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
1
+ {"version":3,"file":"logout-CL5CN_af.mjs","names":["Runtime.handler","Client.make"],"sources":["../../src/cli/cmd/handlers/auth/logout.ts"],"sourcesContent":["import { oauthNotice } from \"@codeworksh/aikit/oauth/summary\";\nimport { Effect, Option } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeError } 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.logout,\n\tEffect.fn(\"CLI.auth.logout\")(function* ({ server, openaiCodex, githubCopilot, authFile }) {\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\tyield* rpc[\"auth.logout\"]({ provider });\n\t\t\t\t\t\tyield* writeError(`${oauthNotice(\"cleared\", provider, \"the server\")}\\n`);\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\tyield* attempt(`failed to clear ${name} credentials`, () => ops.logout());\n\t\t\tyield* writeError(`${oauthNotice(\"cleared\", provider, ops.path)}\\n`);\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,YAAY;CAsBzF,OAAO,OArBS,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,QAAO,OADYC,KAAAA,CACR,cAAc,CAAC,EAAE,SAAS,CAAC;IACtC,OAAO,WAAW,GAAG,YAAY,WAAW,UAAU,YAAY,EAAE,GAAG;GACxE,CAAC,CACF;EACD;EAEA,MAAM,MAAM,OAAO,SAAS,UAAU,QAAQ;EAC9C,OAAO,QAAQ,mBAAmB,KAAK,qBAAqB,IAAI,OAAO,CAAC;EACxE,OAAO,WAAW,GAAG,YAAY,WAAW,UAAU,IAAI,IAAI,EAAE,GAAG;CACpE,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeworksh/cli",
3
- "version": "0.1.0-canary.29.1.g3f9ed90b",
3
+ "version": "0.1.0-canary.3.1.g84a32a13",
4
4
  "description": "CLI for running CodeWork coding agent harness.",
5
5
  "keywords": [
6
6
  "agent",
@@ -40,8 +40,9 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@agentclientprotocol/sdk": "1.5.1",
43
- "@codeworksh/aikit": "0.10.0-canary.29.1.g3f9ed90b",
44
- "@codeworksh/harness": "0.1.0-canary.29.1.g3f9ed90b",
43
+ "@codeworksh/aikit": "0.10.0-canary.3.1.g84a32a13",
44
+ "@codeworksh/harness": "0.1.0-canary.3.1.g84a32a13",
45
+ "@codeworksh/tui": "0.0.1-canary.3.1.g84a32a13",
45
46
  "@effect/platform-node": "4.0.1",
46
47
  "effect": "4.0.1",
47
48
  "jsonc-parser": "3.3.1",
@@ -1,6 +1,6 @@
1
- import { i as Cmd, t as handler } from "./runtime-D4zyJPrh.mjs";
2
- import { d as writeOut, i as reportFailure } from "./error-C9ACQhhu.mjs";
3
- import { n as synced } from "./catalog-D5BxyTfH.mjs";
1
+ import { i as Cmd, t as handler } from "./runtime-CIBm_3RX.mjs";
2
+ import { d as writeOut, i as reportFailure } from "./error-CzUxh0Q9.mjs";
3
+ import { n as synced } from "./catalog-BDSnGfE_.mjs";
4
4
  import { Effect } from "effect";
5
5
  import { ModelCatalog } from "@codeworksh/harness/effect";
6
6
  //#region src/cli/cmd/handlers/models/providers.ts
@@ -14,4 +14,4 @@ var providers_default = handler(Cmd.commands.models.commands.providers, Effect.f
14
14
  //#endregion
15
15
  export { providers_default as default };
16
16
 
17
- //# sourceMappingURL=providers-DksUoT4Z.mjs.map
17
+ //# sourceMappingURL=providers-Dg8UlU_O.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers-DksUoT4Z.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/models/providers.ts"],"sourcesContent":["import { ModelCatalog } from \"@codeworksh/harness/effect\";\nimport { Effect } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport { synced } from \"./catalog.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.models.commands.providers,\n\tEffect.fn(\"CLI.models.providers\")(function* () {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tyield* synced;\n\t\t\tconst providers = yield* ModelCatalog.providers;\n\t\t\tconst sorted = [...providers].sort((a, b) => a.localeCompare(b));\n\t\t\tyield* writeOut(sorted.map((providerId) => `${providerId}\\n`).join(\"\"));\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;AAQA,IAAA,oBAAeA,QACd,IAAI,SAAS,OAAO,SAAS,WAC7B,OAAO,GAAG,sBAAsB,CAAC,CAAC,aAAa;CAQ9C,OAAO,OAPS,OAAO,IAAI,aAAa;EACvC,OAAO;EAEP,MAAM,SAAS,CAAC,GAAG,OADM,aAAa,SACV,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;EAC/D,OAAO,SAAS,OAAO,KAAK,eAAe,GAAG,WAAW,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;CACvE,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}
1
+ {"version":3,"file":"providers-Dg8UlU_O.mjs","names":["Runtime.handler"],"sources":["../../src/cli/cmd/handlers/models/providers.ts"],"sourcesContent":["import { ModelCatalog } from \"@codeworksh/harness/effect\";\nimport { Effect } from \"effect\";\nimport { Runtime } from \"../../../../framework/runtime.ts\";\nimport { reportFailure } from \"../../../error.ts\";\nimport { writeOut } from \"../../../output.ts\";\nimport { Cmd } from \"../../cmd.ts\";\nimport { synced } from \"./catalog.ts\";\n\nexport default Runtime.handler(\n\tCmd.commands.models.commands.providers,\n\tEffect.fn(\"CLI.models.providers\")(function* () {\n\t\tconst program = Effect.gen(function* () {\n\t\t\tyield* synced;\n\t\t\tconst providers = yield* ModelCatalog.providers;\n\t\t\tconst sorted = [...providers].sort((a, b) => a.localeCompare(b));\n\t\t\tyield* writeOut(sorted.map((providerId) => `${providerId}\\n`).join(\"\"));\n\t\t});\n\n\t\treturn yield* program.pipe(Effect.catch(reportFailure));\n\t}),\n);\n"],"mappings":";;;;;;AAQA,IAAA,oBAAeA,QACd,IAAI,SAAS,OAAO,SAAS,WAC7B,OAAO,GAAG,sBAAsB,CAAC,CAAC,aAAa;CAQ9C,OAAO,OAPS,OAAO,IAAI,aAAa;EACvC,OAAO;EAEP,MAAM,SAAS,CAAC,GAAG,OADM,aAAa,SACV,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;EAC/D,OAAO,SAAS,OAAO,KAAK,eAAe,GAAG,WAAW,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;CACvE,CAEoB,CAAC,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC;AACvD,CAAC,CACF"}