@zauso-ai/capstan-agent 0.3.0 → 0.4.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.
package/dist/index.d.ts CHANGED
@@ -12,6 +12,6 @@ export type { McpTestResult } from "./testing.js";
12
12
  export { toLangChainTools, toLangChainToolSpecs } from "./langchain.js";
13
13
  export type { LangChainToolDefinition, ToLangChainOptions } from "./langchain.js";
14
14
  export type { AgentManifest, RouteRegistryEntry, AgentConfig } from "./types.js";
15
- export { openaiProvider, anthropicProvider } from "./llm.js";
16
- export type { LLMProvider, LLMMessage, LLMResponse, LLMStreamChunk, LLMOptions, } from "./llm.js";
15
+ export { openaiProvider, anthropicProvider, responsesProvider } from "./llm.js";
16
+ export type { LLMProvider, LLMMessage, LLMContentPart, LLMResponse, LLMStreamChunk, LLMOptions, LLMToolSpec, } from "./llm.js";
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAClF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7D,YAAY,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,cAAc,EACd,UAAU,GACX,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAClF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAChF,YAAY,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,GACZ,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -7,5 +7,5 @@ export { withSpan } from "./telemetry.js";
7
7
  export { createMcpClient } from "./mcp-client.js";
8
8
  export { McpTestHarness, McpHttpTestClient } from "./testing.js";
9
9
  export { toLangChainTools, toLangChainToolSpecs } from "./langchain.js";
10
- export { openaiProvider, anthropicProvider } from "./llm.js";
10
+ export { openaiProvider, anthropicProvider, responsesProvider } from "./llm.js";
11
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
package/dist/llm.d.ts CHANGED
@@ -1,6 +1,39 @@
1
- export interface LLMMessage {
2
- role: "system" | "user" | "assistant";
1
+ /**
2
+ * Multimodal content part. Inline base64 is preferred for images so the
3
+ * downstream provider has no separate fetch. A `tool_result` part carries the
4
+ * textual result of a prior tool call, linked by `toolUseId`.
5
+ *
6
+ * NOTE: this is a structural mirror of `@zauso-ai/capstan-ai`'s
7
+ * `LLMContentPart`. The agent package intentionally does NOT import from the
8
+ * ai package; the mirror is kept one-directionally assignable (ai → agent for
9
+ * inputs, agent → ai for outputs) so a provider built here satisfies
10
+ * `ai.LLMProvider`.
11
+ */
12
+ export type LLMContentPart = {
13
+ type: "text";
14
+ text: string;
15
+ } | {
16
+ type: "image";
17
+ mediaType: string;
18
+ data: string;
19
+ } | {
20
+ type: "tool_result";
21
+ toolUseId: string;
3
22
  content: string;
23
+ };
24
+ /**
25
+ * A single conversation message. Content can be a plain string (legacy /
26
+ * cheap path) or an array of multimodal parts (text + image + tool_result).
27
+ *
28
+ * The `role` union is intentionally WIDER than the ai package's: providers
29
+ * accept a `tool`-role input message (mapped to a provider tool-result message)
30
+ * even though the v1 loop never emits one. `toolCallId` links a `tool`-role
31
+ * message to the assistant tool call it answers.
32
+ */
33
+ export interface LLMMessage {
34
+ role: "system" | "user" | "assistant" | "tool";
35
+ content: string | LLMContentPart[];
36
+ toolCallId?: string | undefined;
4
37
  }
5
38
  export interface LLMResponse {
6
39
  content: string;
@@ -11,10 +44,34 @@ export interface LLMResponse {
11
44
  totalTokens: number;
12
45
  } | undefined;
13
46
  finishReason?: string | undefined;
47
+ /** Native tool calls parsed from the provider response. Present (possibly
48
+ * `[]`) ONLY when tools were advertised this turn; UNDEFINED otherwise. */
49
+ toolCalls?: {
50
+ id: string;
51
+ name: string;
52
+ args: Record<string, unknown>;
53
+ }[] | undefined;
14
54
  }
15
55
  export interface LLMStreamChunk {
16
56
  content: string;
17
57
  done: boolean;
58
+ finishReason?: string | undefined;
59
+ /** Terminal-only: native tool calls accumulated across the stream. Present
60
+ * (possibly `[]`) on the terminal chunk ONLY when tools were advertised;
61
+ * UNDEFINED otherwise. Non-terminal chunks MUST omit this. */
62
+ toolCalls?: {
63
+ id: string;
64
+ name: string;
65
+ args: Record<string, unknown>;
66
+ }[] | undefined;
67
+ }
68
+ /** Tool spec passed to the LLM provider. The provider can use this to
69
+ * advertise native function calling (OpenAI / Anthropic) so the model
70
+ * picks tool names from the canonical list instead of hallucinating. */
71
+ export interface LLMToolSpec {
72
+ name: string;
73
+ description: string;
74
+ parameters?: Record<string, unknown> | undefined;
18
75
  }
19
76
  export interface LLMOptions {
20
77
  model?: string;
@@ -22,11 +79,19 @@ export interface LLMOptions {
22
79
  maxTokens?: number;
23
80
  systemPrompt?: string;
24
81
  responseFormat?: Record<string, unknown>;
82
+ signal?: AbortSignal | undefined;
83
+ /** Tools available this turn. Native-function-call providers will present
84
+ * them; text-only providers may ignore. */
85
+ tools?: LLMToolSpec[] | undefined;
25
86
  }
26
87
  export interface LLMProvider {
27
88
  name: string;
28
89
  chat(messages: LLMMessage[], options?: LLMOptions): Promise<LLMResponse>;
29
90
  stream?(messages: LLMMessage[], options?: LLMOptions): AsyncIterable<LLMStreamChunk>;
91
+ /** See @zauso-ai/capstan-ai LLMProvider: `"terminal"` means native tool calls
92
+ * are surfaced on the terminal stream chunk / chat LLMResponse, so the loop
93
+ * defers dispatch to stream-end for this provider. */
94
+ nativeToolCalls?: "terminal" | undefined;
30
95
  }
31
96
  export declare function openaiProvider(config: {
32
97
  apiKey: string;
@@ -38,4 +103,16 @@ export declare function anthropicProvider(config: {
38
103
  model?: string;
39
104
  baseUrl?: string;
40
105
  }): LLMProvider;
106
+ /** Extract assistant text from a Responses payload (plain JSON or SSE). */
107
+ export declare function parseResponsesPayload(raw: string, fallbackModel: string): {
108
+ content: string;
109
+ model: string;
110
+ };
111
+ export declare function responsesProvider(config: {
112
+ apiKey: string;
113
+ baseUrl?: string;
114
+ model?: string;
115
+ /** Reasoning effort for reasoning models (e.g. gpt-5.x). Only sent when set. */
116
+ reasoningEffort?: string;
117
+ }): LLMProvider;
41
118
  //# sourceMappingURL=llm.d.ts.map
package/dist/llm.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,SAAS,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACzE,MAAM,CAAC,CACL,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE,UAAU,GACnB,aAAa,CAAC,cAAc,CAAC,CAAC;CAClC;AAMD,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,WAAW,CA8Gd;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,WAAW,CAyDd"}
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
package/dist/llm.js CHANGED
@@ -1,34 +1,133 @@
1
1
  // ---------------------------------------------------------------------------
2
2
  // LLM provider adapter interface and built-in implementations
3
3
  // ---------------------------------------------------------------------------
4
+ /** Parse an accumulated JSON-arguments string into an object. Bad/empty JSON
5
+ * yields `{}` (never throws) per locked decision A-OA-01. */
6
+ function parseToolArgs(raw) {
7
+ if (!raw)
8
+ return {};
9
+ try {
10
+ const parsed = JSON.parse(raw);
11
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed)
12
+ ? parsed
13
+ : {};
14
+ }
15
+ catch {
16
+ return {};
17
+ }
18
+ }
19
+ /** Materialize accumulated tool-call deltas into the terminal shape, ordered
20
+ * by their numeric index, dropping any with empty/missing name. */
21
+ function finalizeAccumulatedToolCalls(acc) {
22
+ return [...acc.entries()]
23
+ .sort((a, b) => a[0] - b[0])
24
+ .map(([, v]) => v)
25
+ .filter((v) => v.name)
26
+ .map((v) => ({ id: v.id, name: v.name, args: parseToolArgs(v.argsBuf) }));
27
+ }
4
28
  // ---------------------------------------------------------------------------
5
29
  // OpenAI-compatible provider
6
30
  // ---------------------------------------------------------------------------
31
+ /** Serialize agent messages into OpenAI `/chat/completions` message objects.
32
+ * - string content → unchanged (backward compat).
33
+ * - `tool`-role message → `{role:"tool",tool_call_id,content}`.
34
+ * - part[] → text parts unchanged; image parts → `image_url` data URLs;
35
+ * `tool_result` parts are hoisted into their OWN top-level `role:"tool"`
36
+ * messages (OpenAI tool results are messages, not content parts). */
37
+ function serializeOpenAIMessages(messages) {
38
+ const out = [];
39
+ for (const m of messages) {
40
+ if (m.role === "tool") {
41
+ // A tool-role message: content is the (string) result for toolCallId.
42
+ out.push({
43
+ role: "tool",
44
+ tool_call_id: m.toolCallId,
45
+ content: typeof m.content === "string" ? m.content : "",
46
+ });
47
+ continue;
48
+ }
49
+ if (typeof m.content === "string") {
50
+ out.push({ role: m.role, content: m.content });
51
+ continue;
52
+ }
53
+ // Multimodal array: image/text stay as parts; tool_result becomes its own
54
+ // top-level tool message.
55
+ const parts = [];
56
+ for (const part of m.content) {
57
+ if (part.type === "text") {
58
+ parts.push({ type: "text", text: part.text });
59
+ }
60
+ else if (part.type === "image") {
61
+ parts.push({
62
+ type: "image_url",
63
+ image_url: {
64
+ url: `data:${part.mediaType};base64,${part.data}`,
65
+ },
66
+ });
67
+ }
68
+ else {
69
+ // tool_result → top-level tool message
70
+ out.push({
71
+ role: "tool",
72
+ tool_call_id: part.toolUseId,
73
+ content: part.content,
74
+ });
75
+ }
76
+ }
77
+ if (parts.length > 0)
78
+ out.push({ role: m.role, content: parts });
79
+ }
80
+ return out;
81
+ }
82
+ /** Map advertised tool specs into OpenAI request `tools[]`. */
83
+ function openAIToolsBody(tools) {
84
+ return tools.map((t) => ({
85
+ type: "function",
86
+ function: {
87
+ name: t.name,
88
+ description: t.description,
89
+ parameters: t.parameters,
90
+ },
91
+ }));
92
+ }
7
93
  export function openaiProvider(config) {
8
94
  const baseUrl = config.baseUrl ?? "https://api.openai.com/v1";
9
95
  const defaultModel = config.model ?? "gpt-4o";
96
+ /** Build the shared request body for chat() and stream(). */
97
+ function buildBody(messages, options, streaming) {
98
+ const baseMessages = options?.systemPrompt
99
+ ? [{ role: "system", content: options.systemPrompt }, ...messages]
100
+ : messages;
101
+ const body = {
102
+ model: options?.model ?? defaultModel,
103
+ messages: serializeOpenAIMessages(baseMessages),
104
+ };
105
+ if (streaming)
106
+ body["stream"] = true;
107
+ if (options?.temperature !== undefined)
108
+ body["temperature"] = options.temperature;
109
+ if (options?.maxTokens !== undefined)
110
+ body["max_tokens"] = options.maxTokens;
111
+ if (options?.responseFormat)
112
+ body["response_format"] = {
113
+ type: "json_schema",
114
+ json_schema: {
115
+ schema: options.responseFormat,
116
+ name: "response",
117
+ strict: true,
118
+ },
119
+ };
120
+ if (options?.tools?.length) {
121
+ body["tools"] = openAIToolsBody(options.tools);
122
+ body["tool_choice"] = "auto";
123
+ }
124
+ return body;
125
+ }
10
126
  return {
11
127
  name: "openai",
128
+ nativeToolCalls: "terminal",
12
129
  async chat(messages, options) {
13
- const body = {
14
- model: options?.model ?? defaultModel,
15
- messages: options?.systemPrompt
16
- ? [{ role: "system", content: options.systemPrompt }, ...messages]
17
- : messages,
18
- };
19
- if (options?.temperature !== undefined)
20
- body["temperature"] = options.temperature;
21
- if (options?.maxTokens !== undefined)
22
- body["max_tokens"] = options.maxTokens;
23
- if (options?.responseFormat)
24
- body["response_format"] = {
25
- type: "json_schema",
26
- json_schema: {
27
- schema: options.responseFormat,
28
- name: "response",
29
- strict: true,
30
- },
31
- };
130
+ const body = buildBody(messages, options, false);
32
131
  const res = await fetch(`${baseUrl}/chat/completions`, {
33
132
  method: "POST",
34
133
  headers: {
@@ -36,13 +135,31 @@ export function openaiProvider(config) {
36
135
  "Content-Type": "application/json",
37
136
  },
38
137
  body: JSON.stringify(body),
138
+ ...(options?.signal ? { signal: options.signal } : {}),
39
139
  });
40
140
  if (!res.ok)
41
141
  throw new Error(`LLM error ${res.status}: ${await res.text()}`);
42
142
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
43
143
  const data = (await res.json());
144
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
145
+ const message = data.choices?.[0]?.message;
146
+ const toolsAdvertised = !!options?.tools?.length;
147
+ let toolCalls;
148
+ if (toolsAdvertised) {
149
+ const rawCalls = Array.isArray(message?.tool_calls)
150
+ ? message.tool_calls
151
+ : [];
152
+ toolCalls = rawCalls
153
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
154
+ .map((c) => ({
155
+ id: c?.id ?? "",
156
+ name: c?.function?.name ?? "",
157
+ args: parseToolArgs(c?.function?.arguments ?? ""),
158
+ }))
159
+ .filter((c) => c.name);
160
+ }
44
161
  return {
45
- content: data.choices?.[0]?.message?.content ?? "",
162
+ content: message?.content ?? "",
46
163
  model: data.model ?? defaultModel,
47
164
  usage: data.usage
48
165
  ? {
@@ -52,20 +169,11 @@ export function openaiProvider(config) {
52
169
  }
53
170
  : undefined,
54
171
  finishReason: data.choices?.[0]?.finish_reason,
172
+ ...(toolCalls !== undefined ? { toolCalls } : {}),
55
173
  };
56
174
  },
57
175
  async *stream(messages, options) {
58
- const body = {
59
- model: options?.model ?? defaultModel,
60
- messages: options?.systemPrompt
61
- ? [{ role: "system", content: options.systemPrompt }, ...messages]
62
- : messages,
63
- stream: true,
64
- };
65
- if (options?.temperature !== undefined)
66
- body["temperature"] = options.temperature;
67
- if (options?.maxTokens !== undefined)
68
- body["max_tokens"] = options.maxTokens;
176
+ const body = buildBody(messages, options, true);
69
177
  const res = await fetch(`${baseUrl}/chat/completions`, {
70
178
  method: "POST",
71
179
  headers: {
@@ -73,80 +181,235 @@ export function openaiProvider(config) {
73
181
  "Content-Type": "application/json",
74
182
  },
75
183
  body: JSON.stringify(body),
184
+ ...(options?.signal ? { signal: options.signal } : {}),
76
185
  });
77
186
  if (!res.ok)
78
187
  throw new Error(`LLM error ${res.status}`);
79
188
  if (!res.body)
80
189
  throw new Error("No body");
190
+ const toolsAdvertised = !!options?.tools?.length;
191
+ const acc = new Map();
192
+ let finishReason;
81
193
  const reader = res.body.getReader();
82
194
  const decoder = new TextDecoder();
83
195
  let buf = "";
196
+ let terminated = false;
197
+ const finalChunk = () => ({
198
+ content: "",
199
+ done: true,
200
+ ...(finishReason !== undefined ? { finishReason } : {}),
201
+ ...(toolsAdvertised
202
+ ? { toolCalls: finalizeAccumulatedToolCalls(acc) }
203
+ : {}),
204
+ });
205
+ // Process one SSE line: yield content chunks, accumulate tool-call
206
+ // deltas by index, set `terminated` on [DONE]. Shared by the streaming
207
+ // loop and the EOF residual flush so a final newline-less frame is not
208
+ // dropped (real servers may close right after the last `data:` frame).
209
+ const handleLine = function* (line) {
210
+ if (!line.startsWith("data:"))
211
+ return;
212
+ const d = line.slice(line.indexOf(":") + 1).trim();
213
+ if (!d)
214
+ return;
215
+ if (d === "[DONE]") {
216
+ terminated = true;
217
+ return;
218
+ }
219
+ try {
220
+ const p = JSON.parse(d);
221
+ const choice = p.choices?.[0];
222
+ const delta = choice?.delta;
223
+ const c = delta?.content ?? "";
224
+ if (c)
225
+ yield { content: c, done: false };
226
+ // Accumulate streamed tool-call deltas by index.
227
+ const deltaToolCalls = delta?.tool_calls;
228
+ if (Array.isArray(deltaToolCalls)) {
229
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
230
+ for (const tc of deltaToolCalls) {
231
+ const idx = typeof tc?.index === "number" ? tc.index : 0;
232
+ let entry = acc.get(idx);
233
+ if (!entry) {
234
+ entry = { id: "", name: "", argsBuf: "" };
235
+ acc.set(idx, entry);
236
+ }
237
+ // id + name come from the first delta that carries them.
238
+ if (tc?.id && !entry.id)
239
+ entry.id = tc.id;
240
+ if (tc?.function?.name && !entry.name)
241
+ entry.name = tc.function.name;
242
+ if (typeof tc?.function?.arguments === "string")
243
+ entry.argsBuf += tc.function.arguments;
244
+ }
245
+ }
246
+ if (choice?.finish_reason)
247
+ finishReason = choice.finish_reason;
248
+ }
249
+ catch {
250
+ // skip malformed chunks
251
+ }
252
+ };
84
253
  while (true) {
85
254
  const { done, value } = await reader.read();
86
255
  if (done)
87
256
  break;
88
257
  buf += decoder.decode(value, { stream: true });
89
- const lines = buf.split("\n");
90
- buf = lines.pop() ?? "";
91
- for (const line of lines) {
92
- if (!line.startsWith("data: "))
93
- continue;
94
- const d = line.slice(6).trim();
95
- if (d === "[DONE]") {
96
- yield { content: "", done: true };
258
+ let nl;
259
+ while ((nl = buf.indexOf("\n")) >= 0) {
260
+ const line = buf.slice(0, nl).replace(/\r$/, "");
261
+ buf = buf.slice(nl + 1);
262
+ for (const ch of handleLine(line))
263
+ yield ch;
264
+ if (terminated) {
265
+ yield finalChunk();
97
266
  return;
98
267
  }
99
- try {
100
- const p = JSON.parse(d);
101
- const c = p.choices?.[0]?.delta?.content ?? "";
102
- if (c)
103
- yield { content: c, done: false };
104
- }
105
- catch {
106
- // skip malformed chunks
107
- }
108
268
  }
109
269
  }
110
- yield { content: "", done: true };
270
+ // Flush any residual line that arrived without a trailing newline.
271
+ buf += decoder.decode();
272
+ const tail = buf.replace(/\r$/, "").trim();
273
+ if (tail) {
274
+ for (const ch of handleLine(tail))
275
+ yield ch;
276
+ }
277
+ yield finalChunk();
111
278
  },
112
279
  };
113
280
  }
114
281
  // ---------------------------------------------------------------------------
115
282
  // Anthropic provider
116
283
  // ---------------------------------------------------------------------------
284
+ /** Serialize a single message's content into Anthropic content parts. String
285
+ * content stays a string (backward compat); arrays map text/image/tool_result
286
+ * into Anthropic's content-part shapes. A `tool`-role message becomes a
287
+ * `user`-role message carrying a single `tool_result` part. */
288
+ function serializeAnthropicContent(content) {
289
+ if (typeof content === "string")
290
+ return content;
291
+ return content.map((part) => {
292
+ if (part.type === "text") {
293
+ return { type: "text", text: part.text };
294
+ }
295
+ if (part.type === "image") {
296
+ return {
297
+ type: "image",
298
+ source: {
299
+ type: "base64",
300
+ media_type: part.mediaType,
301
+ data: part.data,
302
+ },
303
+ };
304
+ }
305
+ // tool_result
306
+ return {
307
+ type: "tool_result",
308
+ tool_use_id: part.toolUseId,
309
+ content: part.content,
310
+ };
311
+ });
312
+ }
313
+ /** Map non-system messages into Anthropic request `messages[]`, translating a
314
+ * `tool`-role message into a `user` message with a `tool_result` part. */
315
+ function serializeAnthropicMessages(messages) {
316
+ const out = [];
317
+ for (const m of messages) {
318
+ if (m.role === "system")
319
+ continue;
320
+ if (m.role === "tool") {
321
+ out.push({
322
+ role: "user",
323
+ content: [
324
+ {
325
+ type: "tool_result",
326
+ tool_use_id: m.toolCallId,
327
+ content: typeof m.content === "string" ? m.content : "",
328
+ },
329
+ ],
330
+ });
331
+ continue;
332
+ }
333
+ out.push({ role: m.role, content: serializeAnthropicContent(m.content) });
334
+ }
335
+ return out;
336
+ }
337
+ /** Map advertised tool specs into Anthropic request `tools[]`, defaulting an
338
+ * empty object schema when `parameters` is absent. */
339
+ function anthropicToolsBody(tools) {
340
+ return tools.map((t) => ({
341
+ name: t.name,
342
+ description: t.description,
343
+ input_schema: t.parameters ?? { type: "object", properties: {} },
344
+ }));
345
+ }
117
346
  export function anthropicProvider(config) {
118
347
  const baseUrl = config.baseUrl ?? "https://api.anthropic.com/v1";
119
348
  const defaultModel = config.model ?? "claude-sonnet-4-20250514";
349
+ function buildBody(messages, options, streaming) {
350
+ const sys = options?.systemPrompt ??
351
+ (() => {
352
+ const sysMsg = messages.find((m) => m.role === "system");
353
+ return typeof sysMsg?.content === "string"
354
+ ? sysMsg.content
355
+ : undefined;
356
+ })();
357
+ const body = {
358
+ model: options?.model ?? defaultModel,
359
+ messages: serializeAnthropicMessages(messages),
360
+ max_tokens: options?.maxTokens ?? 4096,
361
+ };
362
+ if (streaming)
363
+ body["stream"] = true;
364
+ if (sys)
365
+ body["system"] = sys;
366
+ if (options?.temperature !== undefined)
367
+ body["temperature"] = options.temperature;
368
+ if (options?.tools?.length)
369
+ body["tools"] = anthropicToolsBody(options.tools);
370
+ return body;
371
+ }
372
+ const headers = {
373
+ "x-api-key": config.apiKey,
374
+ "anthropic-version": "2023-06-01",
375
+ "Content-Type": "application/json",
376
+ };
120
377
  return {
121
378
  name: "anthropic",
379
+ nativeToolCalls: "terminal",
122
380
  async chat(messages, options) {
123
- const sys = options?.systemPrompt ??
124
- messages.find((m) => m.role === "system")?.content;
125
- const msgs = messages.filter((m) => m.role !== "system");
126
- const body = {
127
- model: options?.model ?? defaultModel,
128
- messages: msgs,
129
- max_tokens: options?.maxTokens ?? 4096,
130
- };
131
- if (sys)
132
- body["system"] = sys;
133
- if (options?.temperature !== undefined)
134
- body["temperature"] = options.temperature;
381
+ const body = buildBody(messages, options, false);
135
382
  const res = await fetch(`${baseUrl}/messages`, {
136
383
  method: "POST",
137
- headers: {
138
- "x-api-key": config.apiKey,
139
- "anthropic-version": "2023-06-01",
140
- "Content-Type": "application/json",
141
- },
384
+ headers,
142
385
  body: JSON.stringify(body),
386
+ ...(options?.signal ? { signal: options.signal } : {}),
143
387
  });
144
388
  if (!res.ok)
145
389
  throw new Error(`Anthropic error ${res.status}: ${await res.text()}`);
146
390
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
147
391
  const data = (await res.json());
148
392
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
- const text = data.content?.find((b) => b.type === "text")?.text ?? "";
393
+ const blocks = Array.isArray(data.content) ? data.content : [];
394
+ const text =
395
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
396
+ blocks.find((b) => b.type === "text")?.text ?? "";
397
+ const toolsAdvertised = !!options?.tools?.length;
398
+ let toolCalls;
399
+ if (toolsAdvertised) {
400
+ toolCalls = blocks
401
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
402
+ .filter((b) => b.type === "tool_use")
403
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
404
+ .map((b) => ({
405
+ id: b?.id ?? "",
406
+ name: b?.name ?? "",
407
+ args: b?.input && typeof b.input === "object" && !Array.isArray(b.input)
408
+ ? b.input
409
+ : {},
410
+ }))
411
+ .filter((b) => b.name);
412
+ }
150
413
  return {
151
414
  content: text,
152
415
  model: data.model ?? defaultModel,
@@ -159,8 +422,264 @@ export function anthropicProvider(config) {
159
422
  }
160
423
  : undefined,
161
424
  finishReason: data.stop_reason,
425
+ ...(toolCalls !== undefined ? { toolCalls } : {}),
162
426
  };
163
427
  },
428
+ async *stream(messages, options) {
429
+ const body = buildBody(messages, options, true);
430
+ const res = await fetch(`${baseUrl}/messages`, {
431
+ method: "POST",
432
+ headers,
433
+ body: JSON.stringify(body),
434
+ ...(options?.signal ? { signal: options.signal } : {}),
435
+ });
436
+ if (!res.ok)
437
+ throw new Error(`Anthropic error ${res.status}`);
438
+ if (!res.body)
439
+ throw new Error("No body");
440
+ const toolsAdvertised = !!options?.tools?.length;
441
+ const acc = new Map();
442
+ let finishReason;
443
+ const reader = res.body.getReader();
444
+ const decoder = new TextDecoder();
445
+ let buf = "";
446
+ let terminated = false;
447
+ const finalChunk = () => ({
448
+ content: "",
449
+ done: true,
450
+ ...(finishReason !== undefined ? { finishReason } : {}),
451
+ ...(toolsAdvertised
452
+ ? { toolCalls: finalizeAccumulatedToolCalls(acc) }
453
+ : {}),
454
+ });
455
+ // SSE frames are blank-line-separated `event:`/`data:` line groups. We
456
+ // only need the JSON `data:` payload; its top-level `type` field tells
457
+ // us how to interpret it, so the `event:` line is informational.
458
+ const handleData = function* (raw) {
459
+ let evt;
460
+ try {
461
+ evt = JSON.parse(raw);
462
+ }
463
+ catch {
464
+ return;
465
+ }
466
+ const type = evt?.type;
467
+ switch (type) {
468
+ case "content_block_start": {
469
+ const block = evt.content_block;
470
+ if (block?.type === "tool_use") {
471
+ const idx = typeof evt.index === "number" ? evt.index : 0;
472
+ acc.set(idx, {
473
+ id: block.id ?? "",
474
+ name: block.name ?? "",
475
+ argsBuf: "",
476
+ });
477
+ }
478
+ return;
479
+ }
480
+ case "content_block_delta": {
481
+ const delta = evt.delta;
482
+ if (delta?.type === "text_delta") {
483
+ const text = delta.text ?? "";
484
+ if (text)
485
+ yield { content: text, done: false };
486
+ }
487
+ else if (delta?.type === "input_json_delta") {
488
+ const idx = typeof evt.index === "number" ? evt.index : 0;
489
+ const entry = acc.get(idx);
490
+ if (entry && typeof delta.partial_json === "string")
491
+ entry.argsBuf += delta.partial_json;
492
+ }
493
+ return;
494
+ }
495
+ case "message_delta": {
496
+ if (evt.delta?.stop_reason)
497
+ finishReason = evt.delta.stop_reason;
498
+ return;
499
+ }
500
+ case "message_stop": {
501
+ terminated = true;
502
+ yield finalChunk();
503
+ return;
504
+ }
505
+ // message_start / content_block_stop / ping / unknown → ignore
506
+ default:
507
+ return;
508
+ }
509
+ };
510
+ while (true) {
511
+ const { done, value } = await reader.read();
512
+ if (done)
513
+ break;
514
+ buf += decoder.decode(value, { stream: true });
515
+ // Split off complete frames (blank-line delimited). Keep the trailing
516
+ // partial in `buf` so frames split across reads are reassembled.
517
+ // Match either \n\n or \r\n\r\n at the earliest position.
518
+ for (let sep = nextFrameBoundary(buf); sep !== -1; sep = nextFrameBoundary(buf)) {
519
+ const frame = buf.slice(0, sep);
520
+ buf = buf.slice(sep + frameBoundaryLen(buf, sep));
521
+ for (const dataLine of extractDataPayloads(frame)) {
522
+ yield* handleData(dataLine);
523
+ if (terminated)
524
+ return;
525
+ }
526
+ }
527
+ }
528
+ // Flush any final buffered frame without a trailing blank line.
529
+ if (!terminated && buf.length > 0) {
530
+ for (const dataLine of extractDataPayloads(buf)) {
531
+ yield* handleData(dataLine);
532
+ if (terminated)
533
+ return;
534
+ }
535
+ }
536
+ if (!terminated)
537
+ yield finalChunk();
538
+ },
539
+ };
540
+ }
541
+ // ---------------------------------------------------------------------------
542
+ // Anthropic SSE frame helpers
543
+ // ---------------------------------------------------------------------------
544
+ /** Index of the earliest frame boundary (`\n\n` or `\r\n\r\n`) in `buf`, or
545
+ * -1 if none is fully present yet. */
546
+ function nextFrameBoundary(buf) {
547
+ const lf = buf.indexOf("\n\n");
548
+ const crlf = buf.indexOf("\r\n\r\n");
549
+ if (lf === -1)
550
+ return crlf;
551
+ if (crlf === -1)
552
+ return lf;
553
+ return Math.min(lf, crlf);
554
+ }
555
+ /** Length of the boundary delimiter found at position `at`. */
556
+ function frameBoundaryLen(buf, at) {
557
+ return buf.startsWith("\r\n\r\n", at) ? 4 : 2;
558
+ }
559
+ /** Concatenate the `data:` lines of an SSE frame into their JSON payloads.
560
+ * Each frame yields at most one logical payload, but multi-line `data:` fields
561
+ * are concatenated per the SSE spec. */
562
+ function extractDataPayloads(frame) {
563
+ const dataParts = [];
564
+ for (const rawLine of frame.split("\n")) {
565
+ const line = rawLine.replace(/\r$/, "");
566
+ if (line.startsWith("data:")) {
567
+ // Strip the single optional leading space after the colon.
568
+ dataParts.push(line.slice(5).replace(/^ /, ""));
569
+ }
570
+ }
571
+ if (dataParts.length === 0)
572
+ return [];
573
+ return [dataParts.join("\n")];
574
+ }
575
+ // ---------------------------------------------------------------------------
576
+ // OpenAI Responses-API provider
577
+ // ---------------------------------------------------------------------------
578
+ // Talks the OpenAI Responses API (POST /v1/responses with `input` +
579
+ // `instructions`), so it works with OpenAI and Responses-compatible proxies
580
+ // (e.g. cocode for gpt-5.x). Text-based tool calling (the loop parses tool
581
+ // JSON from the model text), so it deliberately does NOT set nativeToolCalls.
582
+ // Handles both plain-JSON and SSE responses (reasoning models often stream).
583
+ /** Plain-text view of message content for the Responses `input_text` block. */
584
+ function responsesContentText(content) {
585
+ if (typeof content === "string")
586
+ return content;
587
+ return content.map((p) => (p.type === "text" ? p.text : "")).join("");
588
+ }
589
+ /** Extract assistant text from a Responses payload (plain JSON or SSE). */
590
+ export function parseResponsesPayload(raw, fallbackModel) {
591
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
592
+ const fromOutput = (d) => d?.output_text ??
593
+ (Array.isArray(d?.output)
594
+ ? d.output
595
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
596
+ .filter((o) => o?.type === "message")
597
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
598
+ .flatMap((o) => o?.content ?? [])
599
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
600
+ .filter((c) => c?.type === "output_text")
601
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
602
+ .map((c) => c.text)
603
+ .join("")
604
+ : "");
605
+ if (raw.startsWith("event:")) {
606
+ let want = false;
607
+ for (const line of raw.split("\n")) {
608
+ if (line.startsWith("event: response.completed")) {
609
+ want = true;
610
+ continue;
611
+ }
612
+ if (want && line.startsWith("data: ")) {
613
+ try {
614
+ const d = JSON.parse(line.slice(6));
615
+ return { content: fromOutput(d.response ?? d), model: d.response?.model ?? fallbackModel };
616
+ }
617
+ catch {
618
+ break;
619
+ }
620
+ }
621
+ }
622
+ // Fallback: accumulate output_text deltas if no completed event was seen.
623
+ const acc = raw
624
+ .split("\n")
625
+ .filter((l) => l.startsWith("data: "))
626
+ .map((l) => { try {
627
+ return JSON.parse(l.slice(6)).delta ?? "";
628
+ }
629
+ catch {
630
+ return "";
631
+ } })
632
+ .join("");
633
+ return { content: acc, model: fallbackModel };
634
+ }
635
+ try {
636
+ const d = JSON.parse(raw);
637
+ return { content: fromOutput(d), model: d.model ?? fallbackModel };
638
+ }
639
+ catch {
640
+ return { content: "", model: fallbackModel };
641
+ }
642
+ }
643
+ export function responsesProvider(config) {
644
+ const root = (config.baseUrl ?? "https://api.openai.com/v1").replace(/\/+$/, "");
645
+ const url = root.endsWith("/v1") ? `${root}/responses` : `${root}/v1/responses`;
646
+ const defaultModel = config.model ?? "gpt-5.5";
647
+ return {
648
+ name: "openai-responses",
649
+ async chat(messages, options) {
650
+ const sys = messages
651
+ .filter((m) => m.role === "system")
652
+ .map((m) => responsesContentText(m.content))
653
+ .join("\n\n");
654
+ const input = messages
655
+ .filter((m) => m.role !== "system")
656
+ .map((m) => ({
657
+ role: m.role,
658
+ content: [{ type: m.role === "assistant" ? "output_text" : "input_text", text: responsesContentText(m.content) }],
659
+ }));
660
+ const body = {
661
+ model: options?.model ?? defaultModel,
662
+ input: input.length ? input : [{ role: "user", content: [{ type: "input_text", text: "(continue)" }] }],
663
+ instructions: sys || "You are a helpful assistant.",
664
+ store: false,
665
+ stream: false,
666
+ };
667
+ if (config.reasoningEffort)
668
+ body["reasoning"] = { effort: config.reasoningEffort };
669
+ // Responses reasoning models reject `temperature`; only forward token cap.
670
+ if (options?.maxTokens !== undefined)
671
+ body["max_output_tokens"] = options.maxTokens;
672
+ const res = await fetch(url, {
673
+ method: "POST",
674
+ headers: { Authorization: `Bearer ${config.apiKey}`, "Content-Type": "application/json" },
675
+ body: JSON.stringify(body),
676
+ ...(options?.signal ? { signal: options.signal } : {}),
677
+ });
678
+ const raw = await res.text();
679
+ if (!res.ok)
680
+ throw new Error(`Responses API error ${res.status}: ${raw.slice(0, 500)}`);
681
+ return parseResponsesPayload(raw, options?.model ?? defaultModel);
682
+ },
164
683
  };
165
684
  }
166
685
  //# sourceMappingURL=llm.js.map
package/dist/llm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAwC9E,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,MAAM,UAAU,cAAc,CAAC,MAI9B;IACC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,2BAA2B,CAAC;IAC9D,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC;IAE9C,OAAO;QACL,IAAI,EAAE,QAAQ;QAEd,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;YAC1B,MAAM,IAAI,GAA4B;gBACpC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,YAAY;gBACrC,QAAQ,EAAE,OAAO,EAAE,YAAY;oBAC7B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,GAAG,QAAQ,CAAC;oBAClE,CAAC,CAAC,QAAQ;aACb,CAAC;YACF,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS;gBACpC,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;YAC5C,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;gBAClC,IAAI,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;YACzC,IAAI,OAAO,EAAE,cAAc;gBACzB,IAAI,CAAC,iBAAiB,CAAC,GAAG;oBACxB,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE;wBACX,MAAM,EAAE,OAAO,CAAC,cAAc;wBAC9B,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,IAAI;qBACb;iBACF,CAAC;YAEJ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,mBAAmB,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;oBACxC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAElE,8DAA8D;YAC9D,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAQ,CAAC;YACvC,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;gBAClD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,YAAY;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;oBACf,CAAC,CAAC;wBACE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;wBACtC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;wBAC9C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;qBACrC;oBACH,CAAC,CAAC,SAAS;gBACb,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa;aAC/C,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO;YAC7B,MAAM,IAAI,GAA4B;gBACpC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,YAAY;gBACrC,QAAQ,EAAE,OAAO,EAAE,YAAY;oBAC7B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,GAAG,QAAQ,CAAC;oBAClE,CAAC,CAAC,QAAQ;gBACZ,MAAM,EAAE,IAAI;aACb,CAAC;YACF,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS;gBACpC,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;YAC5C,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;gBAClC,IAAI,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;YAEzC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,mBAAmB,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;oBACxC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,GAAG,GAAG,EAAE,CAAC;YAEb,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC/B,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;wBACnB,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;wBAClC,OAAO;oBACT,CAAC;oBACD,IAAI,CAAC;wBACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACxB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;wBAC/C,IAAI,CAAC;4BAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;oBAC3C,CAAC;oBAAC,MAAM,CAAC;wBACP,wBAAwB;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,UAAU,iBAAiB,CAAC,MAIjC;IACC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,8BAA8B,CAAC;IACjE,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAC;IAEhE,OAAO;QACL,IAAI,EAAE,WAAW;QAEjB,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;YAC1B,MAAM,GAAG,GACP,OAAO,EAAE,YAAY;gBACrB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,OAAO,CAAC;YACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACzD,MAAM,IAAI,GAA4B;gBACpC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,YAAY;gBACrC,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;aACvC,CAAC;YACF,IAAI,GAAG;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;YAC9B,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS;gBACpC,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;YAE5C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,WAAW,EAAE;gBAC7C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,WAAW,EAAE,MAAM,CAAC,MAAM;oBAC1B,mBAAmB,EAAE,YAAY;oBACjC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CACrD,CAAC;YAEJ,8DAA8D;YAC9D,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAQ,CAAC;YACvC,8DAA8D;YAC9D,MAAM,IAAI,GACR,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAChE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,YAAY;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;oBACf,CAAC,CAAC;wBACE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;wBACrC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;wBAC1C,WAAW,EACT,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;4BAC9B,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;qBAClC;oBACH,CAAC,CAAC,SAAS;gBACb,YAAY,EAAE,IAAI,CAAC,WAAW;aAC/B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
package/dist/openapi.js CHANGED
@@ -195,7 +195,7 @@ export function generateOpenApiSpec(config, routes) {
195
195
  ...(config.description !== undefined
196
196
  ? { description: config.description }
197
197
  : {}),
198
- version: "0.1.0",
198
+ version: "0.3.0",
199
199
  },
200
200
  ...(config.baseUrl !== undefined
201
201
  ? { servers: [{ url: config.baseUrl }] }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zauso-ai/capstan-agent",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -23,7 +23,9 @@
23
23
  "@opentelemetry/api": "^1.0.0"
24
24
  },
25
25
  "peerDependenciesMeta": {
26
- "@opentelemetry/api": { "optional": true }
26
+ "@opentelemetry/api": {
27
+ "optional": true
28
+ }
27
29
  },
28
30
  "description": "Multi-protocol agent surface for Capstan — MCP server, A2A adapter, OpenAPI, manifest",
29
31
  "files": [