clanka 0.2.71 → 0.3.0

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 (57) hide show
  1. package/dist/Acp.d.ts +88 -0
  2. package/dist/Acp.d.ts.map +1 -0
  3. package/dist/Acp.js +387 -0
  4. package/dist/Acp.js.map +1 -0
  5. package/dist/Acp.test.d.ts +2 -0
  6. package/dist/Acp.test.d.ts.map +1 -0
  7. package/dist/Acp.test.js +179 -0
  8. package/dist/Acp.test.js.map +1 -0
  9. package/dist/AgentExecutor.d.ts +36 -36
  10. package/dist/AgentExecutor.d.ts.map +1 -1
  11. package/dist/AgentExecutor.js +5 -5
  12. package/dist/AgentExecutor.js.map +1 -1
  13. package/dist/AgentOutput.js +1 -1
  14. package/dist/AgentOutput.js.map +1 -1
  15. package/dist/ChunkRepo.js +1 -1
  16. package/dist/ChunkRepo.js.map +1 -1
  17. package/dist/CodeChunker.js +1 -1
  18. package/dist/CodeChunker.js.map +1 -1
  19. package/dist/CodexAuth.js +1 -1
  20. package/dist/CodexAuth.js.map +1 -1
  21. package/dist/CopilotAuth.js +1 -1
  22. package/dist/CopilotAuth.js.map +1 -1
  23. package/dist/DeviceCodeHandler.d.ts +2 -1
  24. package/dist/DeviceCodeHandler.d.ts.map +1 -1
  25. package/dist/DeviceCodeHandler.js +4 -0
  26. package/dist/DeviceCodeHandler.js.map +1 -1
  27. package/dist/ExaSearch.js +1 -1
  28. package/dist/ExaSearch.js.map +1 -1
  29. package/dist/McpClient.js +1 -1
  30. package/dist/McpClient.js.map +1 -1
  31. package/dist/SemanticSearch.d.ts +2 -2
  32. package/dist/SemanticSearch.d.ts.map +1 -1
  33. package/dist/SemanticSearch.js.map +1 -1
  34. package/dist/TypeBuilder.js +1 -1
  35. package/dist/TypeBuilder.js.map +1 -1
  36. package/dist/cli.js +40 -29
  37. package/dist/cli.js.map +1 -1
  38. package/dist/index.d.ts +4 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +4 -0
  41. package/dist/index.js.map +1 -1
  42. package/package.json +21 -21
  43. package/src/Acp.test.ts +288 -0
  44. package/src/Acp.ts +596 -0
  45. package/src/AgentExecutor.ts +18 -24
  46. package/src/AgentOutput.ts +1 -1
  47. package/src/ChunkRepo.ts +1 -1
  48. package/src/CodeChunker.ts +1 -1
  49. package/src/CodexAuth.ts +1 -1
  50. package/src/CopilotAuth.ts +1 -1
  51. package/src/DeviceCodeHandler.ts +8 -1
  52. package/src/ExaSearch.ts +1 -1
  53. package/src/McpClient.ts +1 -1
  54. package/src/SemanticSearch.ts +2 -2
  55. package/src/TypeBuilder.ts +1 -1
  56. package/src/cli.ts +100 -46
  57. package/src/index.ts +5 -0
package/dist/Acp.d.ts ADDED
@@ -0,0 +1,88 @@
1
+ import * as Cause from "effect/Cause";
2
+ import * as Effect from "effect/Effect";
3
+ import type * as Layer from "effect/Layer";
4
+ import * as Option from "effect/Option";
5
+ import type * as PlatformError from "effect/PlatformError";
6
+ import * as Schema from "effect/Schema";
7
+ import * as Scope from "effect/Scope";
8
+ import * as Stdio from "effect/Stdio";
9
+ import type * as LanguageModel from "effect/unstable/ai/LanguageModel";
10
+ import type * as Model from "effect/unstable/ai/Model";
11
+ import * as Prompt from "effect/unstable/ai/Prompt";
12
+ import * as KeyValueStore from "effect/unstable/persistence/KeyValueStore";
13
+ import type * as Agent from "./Agent.ts";
14
+ /**
15
+ * @since 1.0.0
16
+ * @category Models
17
+ */
18
+ export type ModelServices = LanguageModel.LanguageModel | Model.ProviderName | Model.ModelName | Agent.SubagentModel;
19
+ /**
20
+ * @since 1.0.0
21
+ * @category Models
22
+ */
23
+ export interface Options<RAgent, RModel> {
24
+ readonly version: string;
25
+ /**
26
+ * Model id used when a client does not select one. Model ids are opaque to
27
+ * the server and resolved with `makeModel`.
28
+ */
29
+ readonly defaultModel: string;
30
+ /**
31
+ * Write one JSON-RPC message to the client.
32
+ */
33
+ readonly send: (message: object) => Effect.Effect<void>;
34
+ /**
35
+ * Create the Agent backing a session rooted at `cwd`.
36
+ */
37
+ readonly makeAgent: (cwd: string) => Effect.Effect<Agent.Agent, never, Scope.Scope | RAgent>;
38
+ /**
39
+ * Resolve a model id to the services an Agent needs. `None` rejects the id.
40
+ */
41
+ readonly makeModel: (modelId: string) => Option.Option<Layer.Layer<ModelServices, never, RModel>>;
42
+ }
43
+ /**
44
+ * @since 1.0.0
45
+ * @category Models
46
+ */
47
+ export interface Server<R = never> {
48
+ /**
49
+ * Handle one line of JSON-RPC input. Completes once the message has been
50
+ * fully processed, including any responses sent.
51
+ */
52
+ readonly handle: (line: string) => Effect.Effect<void, never, R>;
53
+ }
54
+ declare const SessionRecord_base: Schema.Class<SessionRecord, Schema.Struct<{
55
+ readonly cwd: Schema.String;
56
+ readonly model: Schema.String;
57
+ readonly history: Schema.Codec<Prompt.Prompt, Prompt.PromptEncoded, never, never>;
58
+ }>, {}>;
59
+ /**
60
+ * @since 1.0.0
61
+ * @category Models
62
+ */
63
+ export declare class SessionRecord extends SessionRecord_base {
64
+ }
65
+ declare const RpcError_base: Schema.Class<RpcError, Schema.TaggedStruct<"AcpRpcError", {
66
+ readonly code: Schema.Number;
67
+ readonly message: Schema.String;
68
+ }>, Cause.YieldableError>;
69
+ /**
70
+ * @since 1.0.0
71
+ * @category Errors
72
+ */
73
+ export declare class RpcError extends RpcError_base {
74
+ }
75
+ /**
76
+ * @since 1.0.0
77
+ * @category Constructors
78
+ */
79
+ export declare const make: <RAgent, RModel>(options: Options<RAgent, RModel>) => Effect.Effect<Server<RAgent | RModel>, never, KeyValueStore.KeyValueStore | Scope.Scope>;
80
+ /**
81
+ * Run the ACP server over the process stdio.
82
+ *
83
+ * @since 1.0.0
84
+ * @category Constructors
85
+ */
86
+ export declare const runStdio: <RAgent, RModel>(options: Omit<Options<RAgent, RModel>, "send">) => Effect.Effect<void, PlatformError.PlatformError, Stdio.Stdio | KeyValueStore.KeyValueStore | RAgent | RModel>;
87
+ export {};
88
+ //# sourceMappingURL=Acp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Acp.d.ts","sourceRoot":"","sources":["../src/Acp.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,aAAa,MAAM,sBAAsB,CAAA;AAE1D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,KAAK,aAAa,MAAM,kCAAkC,CAAA;AACtE,OAAO,KAAK,KAAK,KAAK,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAA;AACnD,OAAO,KAAK,aAAa,MAAM,2CAA2C,CAAA;AAC1E,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAGxC;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,aAAa,CAAC,aAAa,GAC3B,KAAK,CAAC,YAAY,GAClB,KAAK,CAAC,SAAS,GACf,KAAK,CAAC,aAAa,CAAA;AAEvB;;;GAGG;AACH,MAAM,WAAW,OAAO,CAAC,MAAM,EAAE,MAAM;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvD;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,CAClB,GAAG,EAAE,MAAM,KACR,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAA;IAC5D;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,CAClB,OAAO,EAAE,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;CAC9D;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,KAAK;IAC/B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;CACjE;;;;;;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,kBAMjC;CAAG;;;;;AAEL;;;GAGG;AACH,qBAAa,QAAS,SAAQ,aAG5B;CAAG;AAyHL;;;GAGG;AACH,eAAO,MAAM,IAAI,GAAgC,MAAM,EAAE,MAAM,+HA8U7D,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,EAAE,MAAM,WAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAC7C,MAAM,CAAC,MAAM,CACd,IAAI,EACJ,aAAa,CAAC,aAAa,EAC3B,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,aAAa,GAAG,MAAM,GAAG,MAAM,CAsBrC,CAAA"}
package/dist/Acp.js ADDED
@@ -0,0 +1,387 @@
1
+ /** @effect-diagnostics schemaNumber:off */
2
+ /**
3
+ * Agent Client Protocol (ACP) server for clanka.
4
+ *
5
+ * Speaks JSON-RPC 2.0 over stdio so ACP clients (Zed, Multica, ...) can drive
6
+ * an Agent. Sessions are persisted to the KeyValueStore so `session/load`
7
+ * works across processes.
8
+ *
9
+ * @since 1.0.0
10
+ */
11
+ import { randomUUID } from "node:crypto";
12
+ import * as Cause from "effect/Cause";
13
+ import * as Effect from "effect/Effect";
14
+ import * as Exit from "effect/Exit";
15
+ import * as Fiber from "effect/Fiber";
16
+ import * as MutableRef from "effect/MutableRef";
17
+ import * as Option from "effect/Option";
18
+ import * as Queue from "effect/Queue";
19
+ import * as Schema from "effect/Schema";
20
+ import * as Scope from "effect/Scope";
21
+ import * as Stdio from "effect/Stdio";
22
+ import * as Stream from "effect/Stream";
23
+ import * as Prompt from "effect/unstable/ai/Prompt";
24
+ import * as KeyValueStore from "effect/unstable/persistence/KeyValueStore";
25
+ /**
26
+ * @since 1.0.0
27
+ * @category Models
28
+ */
29
+ export class SessionRecord extends Schema.Class("clanka/Acp/SessionRecord")({
30
+ cwd: Schema.String,
31
+ model: Schema.String,
32
+ history: Prompt.Prompt,
33
+ }) {
34
+ }
35
+ /**
36
+ * @since 1.0.0
37
+ * @category Errors
38
+ */
39
+ export class RpcError extends Schema.TaggedError()("AcpRpcError", {
40
+ code: Schema.Number,
41
+ message: Schema.String,
42
+ }) {
43
+ }
44
+ const RequestId = Schema.Union([Schema.Number, Schema.String]);
45
+ const IncomingMessage = Schema.Struct({
46
+ id: Schema.optionalKey(RequestId),
47
+ method: Schema.optionalKey(Schema.String),
48
+ params: Schema.optionalKey(Schema.Unknown),
49
+ });
50
+ const decodeIncoming = Schema.decodeEffect(Schema.fromJsonString(IncomingMessage));
51
+ const NewSessionParams = Schema.Struct({
52
+ cwd: Schema.String,
53
+ model: Schema.optionalKey(Schema.String),
54
+ });
55
+ const LoadSessionParams = Schema.Struct({
56
+ sessionId: Schema.String,
57
+ cwd: Schema.optionalKey(Schema.String),
58
+ model: Schema.optionalKey(Schema.String),
59
+ });
60
+ const SessionIdParams = Schema.Struct({
61
+ sessionId: Schema.String,
62
+ });
63
+ const SetModelParams = Schema.Struct({
64
+ sessionId: Schema.String,
65
+ modelId: Schema.String,
66
+ });
67
+ const TextBlock = Schema.Struct({
68
+ type: Schema.Literal("text"),
69
+ text: Schema.String,
70
+ });
71
+ const ResourceLinkBlock = Schema.Struct({
72
+ type: Schema.Literal("resource_link"),
73
+ uri: Schema.String,
74
+ name: Schema.optionalKey(Schema.String),
75
+ });
76
+ const ResourceBlock = Schema.Struct({
77
+ type: Schema.Literal("resource"),
78
+ resource: Schema.Struct({
79
+ uri: Schema.String,
80
+ text: Schema.optionalKey(Schema.String),
81
+ }),
82
+ });
83
+ const ContentBlock = Schema.Union([TextBlock, ResourceLinkBlock, ResourceBlock]);
84
+ const PromptParams = Schema.Struct({
85
+ sessionId: Schema.String,
86
+ prompt: Schema.Array(ContentBlock),
87
+ });
88
+ const decodeParams = (schema, params) => Schema.decodeUnknownEffect(schema)(params).pipe(Effect.mapError((error) => new RpcError({ code: -32602, message: error.message })));
89
+ const sessionNotFound = (sessionId) => new RpcError({ code: -32602, message: `Session not found: ${sessionId}` });
90
+ const toRpcError = (cause) => {
91
+ const error = Cause.squash(cause);
92
+ return error instanceof RpcError
93
+ ? error
94
+ : new RpcError({ code: -32603, message: Cause.pretty(cause) });
95
+ };
96
+ const renderPrompt = (blocks) => blocks
97
+ .map((block) => {
98
+ switch (block.type) {
99
+ case "text":
100
+ return block.text;
101
+ case "resource_link":
102
+ return `[${block.name ?? block.uri}](${block.uri})`;
103
+ case "resource":
104
+ return block.resource.text === undefined
105
+ ? `[${block.resource.uri}](${block.resource.uri})`
106
+ : `<resource uri="${block.resource.uri}">\n${block.resource.text}\n</resource>`;
107
+ }
108
+ })
109
+ .join("\n\n");
110
+ const textContent = (text) => ({ type: "text", text });
111
+ const historyUpdates = (history) => {
112
+ const updates = [];
113
+ for (const message of history.content) {
114
+ if (message.role !== "user" && message.role !== "assistant")
115
+ continue;
116
+ const sessionUpdate = message.role === "user" ? "user_message_chunk" : "agent_message_chunk";
117
+ for (const part of message.content) {
118
+ if (part.type === "text") {
119
+ updates.push({ sessionUpdate, content: textContent(part.text) });
120
+ }
121
+ }
122
+ }
123
+ return updates;
124
+ };
125
+ /**
126
+ * @since 1.0.0
127
+ * @category Constructors
128
+ */
129
+ export const make = Effect.fnUntraced(function* (options) {
130
+ const kvs = yield* KeyValueStore.KeyValueStore;
131
+ const store = KeyValueStore.toSchemaStore(KeyValueStore.prefix(kvs, "session-"), SessionRecord);
132
+ const scope = yield* Effect.scope;
133
+ const sessions = new Map();
134
+ const notify = (method, params) => options.send({ jsonrpc: "2.0", method, params });
135
+ const update = (sessionId, update) => notify("session/update", { sessionId, update });
136
+ const getSession = (sessionId) => Effect.fromOption(Option.fromNullishOr(sessions.get(sessionId)), () => sessionNotFound(sessionId));
137
+ const requireModel = (modelId) => Effect.fromOption(options.makeModel(modelId), () => new RpcError({ code: -32602, message: `Unknown model: ${modelId}` }));
138
+ const modelsInfo = (session) => ({
139
+ availableModels: [...new Set([session.model, options.defaultModel])].map((modelId) => ({ modelId, name: modelId })),
140
+ currentModelId: session.model,
141
+ });
142
+ const persist = (session) => store
143
+ .set(session.id, new SessionRecord({
144
+ cwd: session.cwd,
145
+ model: session.model,
146
+ history: session.agent.history.current,
147
+ }))
148
+ .pipe(Effect.catch((error) => Effect.logWarning("Failed to persist session", error)));
149
+ const openSession = Effect.fnUntraced(function* (id, record) {
150
+ const agent = yield* Scope.provide(options.makeAgent(record.cwd), scope);
151
+ MutableRef.set(agent.history, record.history);
152
+ const session = {
153
+ id,
154
+ cwd: record.cwd,
155
+ model: record.model,
156
+ agent,
157
+ running: undefined,
158
+ toolCalls: 0,
159
+ };
160
+ sessions.set(id, session);
161
+ return session;
162
+ });
163
+ const replayHistory = (session) => Effect.forEach(historyUpdates(session.agent.history.current), (sessionUpdate) => update(session.id, sessionUpdate), { discard: true });
164
+ const runTurn = Effect.fnUntraced(function* (session, prompt) {
165
+ const stream = yield* session.agent.send({ prompt });
166
+ let script = "";
167
+ let toolCallId = "";
168
+ const emit = (part) => {
169
+ switch (part._tag) {
170
+ case "ReasoningDelta":
171
+ return update(session.id, {
172
+ sessionUpdate: "agent_thought_chunk",
173
+ content: textContent(part.delta),
174
+ });
175
+ case "ScriptStart":
176
+ script = "";
177
+ return Effect.void;
178
+ case "ScriptDelta":
179
+ script += part.delta;
180
+ return Effect.void;
181
+ case "ScriptEnd":
182
+ toolCallId = `execute-${++session.toolCalls}`;
183
+ return update(session.id, {
184
+ sessionUpdate: "tool_call",
185
+ toolCallId,
186
+ title: "execute",
187
+ kind: "execute",
188
+ status: "in_progress",
189
+ rawInput: { script },
190
+ content: [{ type: "content", content: textContent(script) }],
191
+ });
192
+ case "ScriptOutput":
193
+ return update(session.id, {
194
+ sessionUpdate: "tool_call_update",
195
+ toolCallId,
196
+ status: "completed",
197
+ rawOutput: { output: part.output },
198
+ content: [{ type: "content", content: textContent(part.output) }],
199
+ });
200
+ case "Usage":
201
+ return update(session.id, {
202
+ sessionUpdate: "usage_update",
203
+ usage: {
204
+ inputTokens: part.inputTokens,
205
+ outputTokens: part.outputTokens,
206
+ },
207
+ });
208
+ case "ErrorRetry":
209
+ return update(session.id, {
210
+ sessionUpdate: "agent_thought_chunk",
211
+ content: textContent(`Retrying after error: ${part.error.message}\n`),
212
+ });
213
+ case "SubagentStart":
214
+ return update(session.id, {
215
+ sessionUpdate: "tool_call",
216
+ toolCallId: `subagent-${part.id}`,
217
+ title: "subagent",
218
+ kind: "think",
219
+ status: "in_progress",
220
+ rawInput: { prompt: part.prompt },
221
+ });
222
+ case "SubagentComplete":
223
+ return update(session.id, {
224
+ sessionUpdate: "tool_call_update",
225
+ toolCallId: `subagent-${part.id}`,
226
+ status: "completed",
227
+ rawOutput: { summary: part.summary },
228
+ content: [{ type: "content", content: textContent(part.summary) }],
229
+ });
230
+ default:
231
+ return Effect.void;
232
+ }
233
+ };
234
+ yield* stream.pipe(Stream.runForEach(emit), Effect.catchTag("AgentFinished", (finished) => update(session.id, {
235
+ sessionUpdate: "agent_message_chunk",
236
+ content: textContent(finished.summary),
237
+ })));
238
+ });
239
+ const initialize = Effect.succeed({
240
+ protocolVersion: 1,
241
+ agentCapabilities: {
242
+ loadSession: true,
243
+ promptCapabilities: { image: false, audio: false, embeddedContext: true },
244
+ mcpCapabilities: { http: false, sse: false },
245
+ },
246
+ authMethods: [],
247
+ agentInfo: { name: "clanka", version: options.version },
248
+ });
249
+ const newSession = Effect.fnUntraced(function* (params) {
250
+ const { cwd, model } = yield* decodeParams(NewSessionParams, params);
251
+ const modelId = model ?? options.defaultModel;
252
+ yield* requireModel(modelId);
253
+ const session = yield* openSession(randomUUID(), new SessionRecord({ cwd, model: modelId, history: Prompt.empty }));
254
+ yield* persist(session);
255
+ return { sessionId: session.id, models: modelsInfo(session) };
256
+ });
257
+ const loadSession = Effect.fnUntraced(function* (params, replay) {
258
+ const { sessionId, cwd, model } = yield* decodeParams(LoadSessionParams, params);
259
+ const existing = sessions.get(sessionId);
260
+ if (existing !== undefined) {
261
+ return { models: modelsInfo(existing) };
262
+ }
263
+ const record = yield* store
264
+ .get(sessionId)
265
+ .pipe(Effect.mapError((error) => new RpcError({ code: -32603, message: error.message })));
266
+ if (Option.isNone(record)) {
267
+ return yield* sessionNotFound(sessionId);
268
+ }
269
+ const modelId = model ?? record.value.model;
270
+ yield* requireModel(modelId);
271
+ const session = yield* openSession(sessionId, new SessionRecord({
272
+ cwd: cwd ?? record.value.cwd,
273
+ model: modelId,
274
+ history: record.value.history,
275
+ }));
276
+ if (replay) {
277
+ yield* replayHistory(session);
278
+ }
279
+ return { models: modelsInfo(session) };
280
+ });
281
+ const setModel = Effect.fnUntraced(function* (params) {
282
+ const { sessionId, modelId } = yield* decodeParams(SetModelParams, params);
283
+ const session = yield* getSession(sessionId);
284
+ yield* requireModel(modelId);
285
+ session.model = modelId;
286
+ yield* persist(session);
287
+ return {};
288
+ });
289
+ const prompt = Effect.fnUntraced(function* (params) {
290
+ const { sessionId, prompt } = yield* decodeParams(PromptParams, params);
291
+ const session = yield* getSession(sessionId);
292
+ if (session.running !== undefined) {
293
+ return yield* new RpcError({
294
+ code: -32000,
295
+ message: `Session ${sessionId} already has a prompt in progress`,
296
+ });
297
+ }
298
+ const model = yield* requireModel(session.model);
299
+ session.running = yield* runTurn(session, renderPrompt(prompt)).pipe(Effect.provide(model), Effect.scoped, Effect.forkChild);
300
+ const exit = yield* Effect.exit(Fiber.join(session.running));
301
+ session.running = undefined;
302
+ yield* persist(session);
303
+ if (Exit.isSuccess(exit))
304
+ return { stopReason: "end_turn" };
305
+ if (Cause.hasInterruptsOnly(exit.cause))
306
+ return { stopReason: "cancelled" };
307
+ return yield* toRpcError(exit.cause);
308
+ });
309
+ const cancel = Effect.fnUntraced(function* (params) {
310
+ const { sessionId } = yield* decodeParams(SessionIdParams, params);
311
+ const running = sessions.get(sessionId)?.running;
312
+ if (running !== undefined) {
313
+ yield* Fiber.interrupt(running);
314
+ }
315
+ });
316
+ const dispatch = (method, params) => {
317
+ switch (method) {
318
+ case "initialize":
319
+ return initialize;
320
+ case "authenticate":
321
+ case "session/set_mode":
322
+ case "session/set_config_option":
323
+ return Effect.succeed({});
324
+ case "session/new":
325
+ return newSession(params);
326
+ case "session/load":
327
+ return loadSession(params, true);
328
+ case "session/resume":
329
+ return loadSession(params, false);
330
+ case "session/set_model":
331
+ return setModel(params);
332
+ case "session/prompt":
333
+ return prompt(params);
334
+ default:
335
+ return Effect.fail(new RpcError({
336
+ code: -32601,
337
+ message: `Method not found: ${method}`,
338
+ }));
339
+ }
340
+ };
341
+ const handle = Effect.fnUntraced(function* (line) {
342
+ if (line.trim() === "")
343
+ return;
344
+ const message = yield* decodeIncoming(line);
345
+ // Responses to requests are ignored: the server never sends requests
346
+ if (message.method === undefined)
347
+ return;
348
+ if (message.id === undefined) {
349
+ if (message.method === "session/cancel") {
350
+ yield* cancel(message.params);
351
+ }
352
+ return;
353
+ }
354
+ const id = message.id;
355
+ yield* dispatch(message.method, message.params).pipe(Effect.matchCauseEffect({
356
+ onSuccess: (result) => options.send({ jsonrpc: "2.0", id, result }),
357
+ onFailure: (cause) => {
358
+ const error = toRpcError(cause);
359
+ return options.send({
360
+ jsonrpc: "2.0",
361
+ id,
362
+ error: { code: error.code, message: error.message },
363
+ });
364
+ },
365
+ }));
366
+ }, Effect.catch((error) => Effect.logWarning("Ignoring invalid JSON-RPC message", error)));
367
+ return { handle };
368
+ });
369
+ /**
370
+ * Run the ACP server over the process stdio.
371
+ *
372
+ * @since 1.0.0
373
+ * @category Constructors
374
+ */
375
+ export const runStdio = (options) => Effect.gen(function* () {
376
+ const stdio = yield* Stdio.Stdio;
377
+ const output = yield* Queue.make();
378
+ const writer = yield* Stream.fromQueue(output).pipe(Stream.map((line) => `${line}\n`), Stream.run(stdio.stdout()), Effect.forkScoped);
379
+ const server = yield* make({
380
+ ...options,
381
+ send: (message) => Queue.offer(output, JSON.stringify(message)).pipe(Effect.asVoid),
382
+ });
383
+ yield* stdio.stdin.pipe(Stream.decodeText, Stream.splitLines, Stream.runForEach((line) => Effect.forkScoped(server.handle(line))));
384
+ yield* Queue.end(output);
385
+ yield* Fiber.join(writer);
386
+ }).pipe(Effect.scoped);
387
+ //# sourceMappingURL=Acp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Acp.js","sourceRoot":"","sources":["../src/Acp.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAA;AACnD,OAAO,KAAK,aAAa,MAAM,2CAA2C,CAAA;AAuD1E;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,KAAK,CAC7C,0BAA0B,CAC3B,CAAC;IACA,GAAG,EAAE,MAAM,CAAC,MAAM;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,WAAW,EAAY,CAAC,aAAa,EAAE;IAC1E,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AAE9D,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;CAC3C,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CACxC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CACvC,CAAA;AAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC,MAAM;IAClB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CACzC,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CACzC,CAAC,CAAA;AAEF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM;CACpB,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC,MAAM;IAClB,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CACxC,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC,MAAM;QAClB,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;KACxC,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAA;AAEhF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;CACnC,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,CAAuB,MAAS,EAAE,MAAe,EAAE,EAAE,CACxE,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAC7C,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAClE,CACF,CAAA;AAEH,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAE,EAAE,CAC5C,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC,CAAA;AAE5E,MAAM,UAAU,GAAG,CAAC,KAA2B,EAAE,EAAE;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACjC,OAAO,KAAK,YAAY,QAAQ;QAC9B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AAClE,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CACnB,MAA+C,EACvC,EAAE,CACV,MAAM;KACH,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IACb,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,IAAI,CAAA;QACnB,KAAK,eAAe;YAClB,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,CAAA;QACrD,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;gBACtC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAG;gBAClD,CAAC,CAAC,kBAAkB,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAA;IACrF,CAAC;AACH,CAAC,CAAC;KACD,IAAI,CAAC,MAAM,CAAC,CAAA;AAEjB,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;AAE9D,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAE,EAAE;IAChD,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,SAAQ;QACrE,MAAM,aAAa,GACjB,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,qBAAqB,CAAA;QACxE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAWD;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC7C,OAAgC;IAMhC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,aAAa,CAAA;IAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,aAAa,CACvC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,EACrC,aAAa,CACd,CAAA;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAA;IAE3C,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE,CAChD,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAElD,MAAM,MAAM,GAAG,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE,CACnD,MAAM,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;IAEjD,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAE,EAAE,CACvC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CACpE,eAAe,CAAC,SAAS,CAAC,CAC3B,CAAA;IAEH,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,EAAE,CACvC,MAAM,CAAC,UAAU,CACf,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAC1B,GAAG,EAAE,CACH,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,OAAO,EAAE,EAAE,CAAC,CACvE,CAAA;IAEH,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC;QACxC,eAAe,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CACtE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAC1C;QACD,cAAc,EAAE,OAAO,CAAC,KAAK;KAC9B,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,EAAE,CACnC,KAAK;SACF,GAAG,CACF,OAAO,CAAC,EAAE,EACV,IAAI,aAAa,CAAC;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO;KACvC,CAAC,CACH;SACA,IAAI,CACH,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,MAAM,CAAC,UAAU,CAAC,2BAA2B,EAAE,KAAK,CAAC,CACtD,CACF,CAAA;IAEL,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC7C,EAAU,EACV,MAAqB;QAErB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;QACxE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7C,MAAM,OAAO,GAAY;YACvB,EAAE;YACF,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK;YACL,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,CAAC;SACb,CAAA;QACD,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QACzB,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,EAAE,CACzC,MAAM,CAAC,OAAO,CACZ,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAC7C,CAAC,aAAa,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,EACpD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAA;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EACzC,OAAgB,EAChB,MAAc;QAEd,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACpD,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,UAAU,GAAG,EAAE,CAAA;QAEnB,MAAM,IAAI,GAAG,CAAC,IAAwB,EAAuB,EAAE;YAC7D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,gBAAgB;oBACnB,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE;wBACxB,aAAa,EAAE,qBAAqB;wBACpC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;qBACjC,CAAC,CAAA;gBACJ,KAAK,aAAa;oBAChB,MAAM,GAAG,EAAE,CAAA;oBACX,OAAO,MAAM,CAAC,IAAI,CAAA;gBACpB,KAAK,aAAa;oBAChB,MAAM,IAAI,IAAI,CAAC,KAAK,CAAA;oBACpB,OAAO,MAAM,CAAC,IAAI,CAAA;gBACpB,KAAK,WAAW;oBACd,UAAU,GAAG,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,CAAA;oBAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE;wBACxB,aAAa,EAAE,WAAW;wBAC1B,UAAU;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,SAAS;wBACf,MAAM,EAAE,aAAa;wBACrB,QAAQ,EAAE,EAAE,MAAM,EAAE;wBACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;qBAC7D,CAAC,CAAA;gBACJ,KAAK,cAAc;oBACjB,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE;wBACxB,aAAa,EAAE,kBAAkB;wBACjC,UAAU;wBACV,MAAM,EAAE,WAAW;wBACnB,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;wBAClC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;qBAClE,CAAC,CAAA;gBACJ,KAAK,OAAO;oBACV,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE;wBACxB,aAAa,EAAE,cAAc;wBAC7B,KAAK,EAAE;4BACL,WAAW,EAAE,IAAI,CAAC,WAAW;4BAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;yBAChC;qBACF,CAAC,CAAA;gBACJ,KAAK,YAAY;oBACf,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE;wBACxB,aAAa,EAAE,qBAAqB;wBACpC,OAAO,EAAE,WAAW,CAClB,yBAAyB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAChD;qBACF,CAAC,CAAA;gBACJ,KAAK,eAAe;oBAClB,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE;wBACxB,aAAa,EAAE,WAAW;wBAC1B,UAAU,EAAE,YAAY,IAAI,CAAC,EAAE,EAAE;wBACjC,KAAK,EAAE,UAAU;wBACjB,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,aAAa;wBACrB,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;qBAClC,CAAC,CAAA;gBACJ,KAAK,kBAAkB;oBACrB,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE;wBACxB,aAAa,EAAE,kBAAkB;wBACjC,UAAU,EAAE,YAAY,IAAI,CAAC,EAAE,EAAE;wBACjC,MAAM,EAAE,WAAW;wBACnB,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;wBACpC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;qBACnE,CAAC,CAAA;gBACJ;oBACE,OAAO,MAAM,CAAC,IAAI,CAAA;YACtB,CAAC;QACH,CAAC,CAAA;QAED,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EACvB,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5C,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE;YACjB,aAAa,EAAE,qBAAqB;YACpC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;SACvC,CAAC,CACH,CACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;QAChC,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE;YACjB,WAAW,EAAE,IAAI;YACjB,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE;YACzE,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;SAC7C;QACD,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;KACxD,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAe;QAC7D,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,YAAY,CAAA;QAC7C,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,CAChC,UAAU,EAAE,EACZ,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAClE,CAAA;QACD,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACvB,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;IAC/D,CAAC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC7C,MAAe,EACf,MAAe;QAEf,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CACnD,iBAAiB,EACjB,MAAM,CACP,CAAA;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACxC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAA;QACzC,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK;aACxB,GAAG,CAAC,SAAS,CAAC;aACd,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAClE,CACF,CAAA;QACH,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QAC1C,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAA;QAC3C,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,CAChC,SAAS,EACT,IAAI,aAAa,CAAC;YAChB,GAAG,EAAE,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG;YAC5B,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;SAC9B,CAAC,CACH,CAAA;QACD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAe;QAC3D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;QAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAC5C,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC5B,OAAO,CAAC,KAAK,GAAG,OAAO,CAAA;QACvB,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACvB,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAe;QACzD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAC5C,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC;gBACzB,IAAI,EAAE,CAAC,KAAK;gBACZ,OAAO,EAAE,WAAW,SAAS,mCAAmC;aACjE,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAChD,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAClE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EACrB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,CACjB,CAAA;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;QAC5D,OAAO,CAAC,OAAO,GAAG,SAAS,CAAA;QAC3B,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACvB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;QAC3D,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;QAC3E,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAe;QACzD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;QAChD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACjC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,CACf,MAAc,EACd,MAAe,EACmC,EAAE;QACpD,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,YAAY;gBACf,OAAO,UAAU,CAAA;YACnB,KAAK,cAAc,CAAC;YACpB,KAAK,kBAAkB,CAAC;YACxB,KAAK,2BAA2B;gBAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAC3B,KAAK,aAAa;gBAChB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;YAC3B,KAAK,cAAc;gBACjB,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAClC,KAAK,gBAAgB;gBACnB,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YACnC,KAAK,mBAAmB;gBACtB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA;YACzB,KAAK,gBAAgB;gBACnB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;YACvB;gBACE,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,QAAQ,CAAC;oBACX,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,qBAAqB,MAAM,EAAE;iBACvC,CAAC,CACH,CAAA;QACL,CAAC;IACH,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAC9B,QAAQ,CAAC,EAAE,IAAY;QACrB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAM;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC3C,qEAAqE;QACrE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,OAAM;QACxC,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;gBACxC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YAC/B,CAAC;YACD,OAAM;QACR,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAA;QACrB,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAClD,MAAM,CAAC,gBAAgB,CAAC;YACtB,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;YACnE,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;gBAC/B,OAAO,OAAO,CAAC,IAAI,CAAC;oBAClB,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;iBACpD,CAAC,CAAA;YACJ,CAAC;SACF,CAAC,CACH,CAAA;IACH,CAAC,EACD,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,MAAM,CAAC,UAAU,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAC9D,CACF,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAA8C,EAK9C,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAsB,CAAA;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CACjD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,EACjC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAC1B,MAAM,CAAC,UAAU,CAClB,CAAA;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC;QACzB,GAAG,OAAO;QACV,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAChB,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;KACnE,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CACrB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CACpE,CAAA;IACD,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACxB,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Acp.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Acp.test.d.ts","sourceRoot":"","sources":["../src/Acp.test.ts"],"names":[],"mappings":""}