@zauso-ai/capstan-agent 0.3.1 → 0.5.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 +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts +83 -2
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +628 -67
- package/dist/llm.js.map +1 -1
- package/package.json +1 -1
- package/dist/commerce.d.ts +0 -62
- package/dist/commerce.d.ts.map +0 -1
- package/dist/commerce.js +0 -39
- package/dist/commerce.js.map +0 -1
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
2
|
-
|
|
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,20 @@ export declare function anthropicProvider(config: {
|
|
|
38
103
|
model?: string;
|
|
39
104
|
baseUrl?: string;
|
|
40
105
|
}): LLMProvider;
|
|
106
|
+
export declare function parseResponsesPayload(raw: string, fallbackModel: string): {
|
|
107
|
+
content: string;
|
|
108
|
+
model: string;
|
|
109
|
+
toolCalls?: {
|
|
110
|
+
id: string;
|
|
111
|
+
name: string;
|
|
112
|
+
args: Record<string, unknown>;
|
|
113
|
+
}[] | undefined;
|
|
114
|
+
};
|
|
115
|
+
export declare function responsesProvider(config: {
|
|
116
|
+
apiKey: string;
|
|
117
|
+
baseUrl?: string;
|
|
118
|
+
model?: string;
|
|
119
|
+
/** Reasoning effort for reasoning models (e.g. gpt-5.x). Only sent when set. */
|
|
120
|
+
reasoningEffort?: string;
|
|
121
|
+
}): LLMProvider;
|
|
41
122
|
//# 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;
|
|
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:
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (
|
|
96
|
-
yield
|
|
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
|
-
|
|
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
|
|
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
|
|
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,6 +422,304 @@ export function anthropicProvider(config) {
|
|
|
159
422
|
}
|
|
160
423
|
: undefined,
|
|
161
424
|
finishReason: data.stop_reason,
|
|
425
|
+
...(toolCalls !== undefined ? { toolCalls } : {}),
|
|
426
|
+
};
|
|
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
|
+
/** 从 Responses 输出数组里提取原生 function_call(工具调用)。 */
|
|
591
|
+
function extractResponsesToolCalls(d) {
|
|
592
|
+
const out = d?.output;
|
|
593
|
+
if (!Array.isArray(out))
|
|
594
|
+
return undefined;
|
|
595
|
+
const calls = out
|
|
596
|
+
.filter((o) => !!o && typeof o === "object" && o.type === "function_call")
|
|
597
|
+
.map((o) => {
|
|
598
|
+
let args = {};
|
|
599
|
+
try {
|
|
600
|
+
args = o.arguments ? JSON.parse(String(o.arguments)) : {};
|
|
601
|
+
}
|
|
602
|
+
catch {
|
|
603
|
+
args = {};
|
|
604
|
+
}
|
|
605
|
+
return { id: String(o.call_id ?? o.id ?? o.name), name: String(o.name), args };
|
|
606
|
+
});
|
|
607
|
+
return calls.length ? calls : undefined;
|
|
608
|
+
}
|
|
609
|
+
export function parseResponsesPayload(raw, fallbackModel) {
|
|
610
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
611
|
+
const fromOutput = (d) => d?.output_text ??
|
|
612
|
+
(Array.isArray(d?.output)
|
|
613
|
+
? d.output
|
|
614
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
615
|
+
.filter((o) => o?.type === "message")
|
|
616
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
617
|
+
.flatMap((o) => o?.content ?? [])
|
|
618
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
619
|
+
.filter((c) => c?.type === "output_text")
|
|
620
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
621
|
+
.map((c) => c.text)
|
|
622
|
+
.join("")
|
|
623
|
+
: "");
|
|
624
|
+
if (raw.startsWith("event:")) {
|
|
625
|
+
let want = false;
|
|
626
|
+
for (const line of raw.split("\n")) {
|
|
627
|
+
if (line.startsWith("event: response.completed")) {
|
|
628
|
+
want = true;
|
|
629
|
+
continue;
|
|
630
|
+
}
|
|
631
|
+
if (want && line.startsWith("data: ")) {
|
|
632
|
+
try {
|
|
633
|
+
const d = JSON.parse(line.slice(6));
|
|
634
|
+
const rr = d.response ?? d;
|
|
635
|
+
return { content: fromOutput(rr), model: rr?.model ?? fallbackModel, toolCalls: extractResponsesToolCalls(rr) };
|
|
636
|
+
}
|
|
637
|
+
catch {
|
|
638
|
+
break;
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
// Fallback: accumulate output_text deltas if no completed event was seen.
|
|
643
|
+
const acc = raw
|
|
644
|
+
.split("\n")
|
|
645
|
+
.filter((l) => l.startsWith("data: "))
|
|
646
|
+
.map((l) => { try {
|
|
647
|
+
return JSON.parse(l.slice(6)).delta ?? "";
|
|
648
|
+
}
|
|
649
|
+
catch {
|
|
650
|
+
return "";
|
|
651
|
+
} })
|
|
652
|
+
.join("");
|
|
653
|
+
return { content: acc, model: fallbackModel };
|
|
654
|
+
}
|
|
655
|
+
try {
|
|
656
|
+
const d = JSON.parse(raw);
|
|
657
|
+
return { content: fromOutput(d), model: d.model ?? fallbackModel, toolCalls: extractResponsesToolCalls(d) };
|
|
658
|
+
}
|
|
659
|
+
catch {
|
|
660
|
+
return { content: "", model: fallbackModel };
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
export function responsesProvider(config) {
|
|
664
|
+
const root = (config.baseUrl ?? "https://api.openai.com/v1").replace(/\/+$/, "");
|
|
665
|
+
const url = root.endsWith("/v1") ? `${root}/responses` : `${root}/v1/responses`;
|
|
666
|
+
const defaultModel = config.model ?? "gpt-5.5";
|
|
667
|
+
return {
|
|
668
|
+
name: "openai-responses",
|
|
669
|
+
// Responses API 原生支持 function tools;工具调用在终态响应里返回,
|
|
670
|
+
// 交给 smart-agent loop 在 stream-end 统一派发。
|
|
671
|
+
nativeToolCalls: "terminal",
|
|
672
|
+
async chat(messages, options) {
|
|
673
|
+
const sys = messages
|
|
674
|
+
.filter((m) => m.role === "system")
|
|
675
|
+
.map((m) => responsesContentText(m.content))
|
|
676
|
+
.join("\n\n");
|
|
677
|
+
const input = messages
|
|
678
|
+
.filter((m) => m.role !== "system")
|
|
679
|
+
.map((m) => ({
|
|
680
|
+
role: m.role,
|
|
681
|
+
content: [{ type: m.role === "assistant" ? "output_text" : "input_text", text: responsesContentText(m.content) }],
|
|
682
|
+
}));
|
|
683
|
+
const body = {
|
|
684
|
+
model: options?.model ?? defaultModel,
|
|
685
|
+
input: input.length ? input : [{ role: "user", content: [{ type: "input_text", text: "(continue)" }] }],
|
|
686
|
+
instructions: sys || "You are a helpful assistant.",
|
|
687
|
+
store: false,
|
|
688
|
+
stream: false,
|
|
689
|
+
};
|
|
690
|
+
if (config.reasoningEffort)
|
|
691
|
+
body["reasoning"] = { effort: config.reasoningEffort };
|
|
692
|
+
// Responses reasoning models reject `temperature`; only forward token cap.
|
|
693
|
+
if (options?.maxTokens !== undefined)
|
|
694
|
+
body["max_output_tokens"] = options.maxTokens;
|
|
695
|
+
// 原生 function tools(Responses API 的扁平 function 形态)。
|
|
696
|
+
if (options?.tools && options.tools.length > 0) {
|
|
697
|
+
body["tools"] = options.tools.map((t) => ({
|
|
698
|
+
type: "function",
|
|
699
|
+
name: t.name,
|
|
700
|
+
description: t.description,
|
|
701
|
+
parameters: t.parameters ?? { type: "object", properties: {} },
|
|
702
|
+
}));
|
|
703
|
+
}
|
|
704
|
+
const res = await fetch(url, {
|
|
705
|
+
method: "POST",
|
|
706
|
+
headers: { Authorization: `Bearer ${config.apiKey}`, "Content-Type": "application/json" },
|
|
707
|
+
body: JSON.stringify(body),
|
|
708
|
+
...(options?.signal ? { signal: options.signal } : {}),
|
|
709
|
+
});
|
|
710
|
+
const raw = await res.text();
|
|
711
|
+
if (!res.ok)
|
|
712
|
+
throw new Error(`Responses API error ${res.status}: ${raw.slice(0, 500)}`);
|
|
713
|
+
const parsed = parseResponsesPayload(raw, options?.model ?? defaultModel);
|
|
714
|
+
// Honour the toolCalls contract: present (possibly []) only when tools
|
|
715
|
+
// were advertised this turn, undefined otherwise — this drives the smart
|
|
716
|
+
// loop's defer-gating (undefined => text-parse fallback, [] => no call).
|
|
717
|
+
const toolsAdvertised = !!options?.tools?.length;
|
|
718
|
+
const toolCalls = toolsAdvertised ? (parsed.toolCalls ?? []) : undefined;
|
|
719
|
+
return {
|
|
720
|
+
content: parsed.content,
|
|
721
|
+
model: parsed.model,
|
|
722
|
+
...(toolCalls !== undefined ? { toolCalls } : {}),
|
|
162
723
|
};
|
|
163
724
|
},
|
|
164
725
|
};
|
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/package.json
CHANGED
package/dist/commerce.d.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
export interface PaymentMandate {
|
|
2
|
-
/** Unique mandate ID */
|
|
3
|
-
id: string;
|
|
4
|
-
/** Maximum amount authorized */
|
|
5
|
-
maxAmount: number;
|
|
6
|
-
/** Currency code (ISO 4217) */
|
|
7
|
-
currency: string;
|
|
8
|
-
/** Mandate expiry (ISO 8601) */
|
|
9
|
-
expiresAt: string;
|
|
10
|
-
/** User who authorized this mandate */
|
|
11
|
-
authorizedBy: string;
|
|
12
|
-
/** Cryptographic signature of the mandate */
|
|
13
|
-
signature?: string;
|
|
14
|
-
}
|
|
15
|
-
export interface TransactionConfig {
|
|
16
|
-
/** Transaction name for discovery */
|
|
17
|
-
name: string;
|
|
18
|
-
/** Amount calculator */
|
|
19
|
-
amount: (input: unknown) => number;
|
|
20
|
-
/** Currency (default: USD) */
|
|
21
|
-
currency?: string;
|
|
22
|
-
/** Maximum amount per transaction */
|
|
23
|
-
maxAmount?: number;
|
|
24
|
-
}
|
|
25
|
-
export interface TransactionResult {
|
|
26
|
-
transactionId: string;
|
|
27
|
-
amount: number;
|
|
28
|
-
currency: string;
|
|
29
|
-
status: "completed" | "pending" | "failed";
|
|
30
|
-
mandateId?: string;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Define a transactable API endpoint.
|
|
34
|
-
* When an agent calls this, it must present a valid payment mandate.
|
|
35
|
-
*/
|
|
36
|
-
export declare function defineTransaction(config: TransactionConfig): TransactionConfig;
|
|
37
|
-
/**
|
|
38
|
-
* Validate a payment mandate.
|
|
39
|
-
*/
|
|
40
|
-
export declare function validateMandate(mandate: PaymentMandate): {
|
|
41
|
-
valid: boolean;
|
|
42
|
-
reason?: string;
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Create a metered usage tracker for API calls.
|
|
46
|
-
*/
|
|
47
|
-
export declare class UsageMeter {
|
|
48
|
-
private usage;
|
|
49
|
-
record(agentId: string, amount: number): void;
|
|
50
|
-
getUsage(agentId: string): {
|
|
51
|
-
calls: number;
|
|
52
|
-
totalAmount: number;
|
|
53
|
-
};
|
|
54
|
-
getAllUsage(): {
|
|
55
|
-
[k: string]: {
|
|
56
|
-
calls: number;
|
|
57
|
-
totalAmount: number;
|
|
58
|
-
};
|
|
59
|
-
};
|
|
60
|
-
reset(): void;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=commerce.d.ts.map
|
package/dist/commerce.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commerce.d.ts","sourceRoot":"","sources":["../src/commerce.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACnC,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAE9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAO5F;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAA6D;IAE1E,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAO7C,QAAQ,CAAC,OAAO,EAAE,MAAM;eATiB,MAAM;qBAAe,MAAM;;IAUpE,WAAW;;mBAV8B,MAAM;yBAAe,MAAM;;;IAWpE,KAAK;CACN"}
|
package/dist/commerce.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Define a transactable API endpoint.
|
|
3
|
-
* When an agent calls this, it must present a valid payment mandate.
|
|
4
|
-
*/
|
|
5
|
-
export function defineTransaction(config) {
|
|
6
|
-
return config;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Validate a payment mandate.
|
|
10
|
-
*/
|
|
11
|
-
export function validateMandate(mandate) {
|
|
12
|
-
if (!mandate.id)
|
|
13
|
-
return { valid: false, reason: "Missing mandate ID" };
|
|
14
|
-
if (!mandate.maxAmount || mandate.maxAmount <= 0)
|
|
15
|
-
return { valid: false, reason: "Invalid amount" };
|
|
16
|
-
if (!mandate.currency)
|
|
17
|
-
return { valid: false, reason: "Missing currency" };
|
|
18
|
-
if (new Date(mandate.expiresAt) < new Date())
|
|
19
|
-
return { valid: false, reason: "Mandate expired" };
|
|
20
|
-
if (!mandate.authorizedBy)
|
|
21
|
-
return { valid: false, reason: "Missing authorization" };
|
|
22
|
-
return { valid: true };
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Create a metered usage tracker for API calls.
|
|
26
|
-
*/
|
|
27
|
-
export class UsageMeter {
|
|
28
|
-
usage = new Map();
|
|
29
|
-
record(agentId, amount) {
|
|
30
|
-
const current = this.usage.get(agentId) ?? { calls: 0, totalAmount: 0 };
|
|
31
|
-
current.calls++;
|
|
32
|
-
current.totalAmount += amount;
|
|
33
|
-
this.usage.set(agentId, current);
|
|
34
|
-
}
|
|
35
|
-
getUsage(agentId) { return this.usage.get(agentId) ?? { calls: 0, totalAmount: 0 }; }
|
|
36
|
-
getAllUsage() { return Object.fromEntries(this.usage); }
|
|
37
|
-
reset() { this.usage.clear(); }
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=commerce.js.map
|
package/dist/commerce.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commerce.js","sourceRoot":"","sources":["../src/commerce.ts"],"names":[],"mappings":"AAkCA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACvE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACpG,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC3E,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACjG,IAAI,CAAC,OAAO,CAAC,YAAY;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IACpF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,UAAU;IACb,KAAK,GAAG,IAAI,GAAG,EAAkD,CAAC;IAE1E,MAAM,CAAC,OAAe,EAAE,MAAc;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,QAAQ,CAAC,OAAe,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,WAAW,KAAK,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAChC"}
|