@chiwanpark/pi-squared-agent 0.1.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/README.md +13 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +144 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/auth-store.d.ts +36 -0
- package/dist/runtime/auth-store.d.ts.map +1 -0
- package/dist/runtime/auth-store.js +131 -0
- package/dist/runtime/auth-store.js.map +1 -0
- package/dist/runtime/config-store.d.ts +44 -0
- package/dist/runtime/config-store.d.ts.map +1 -0
- package/dist/runtime/config-store.js +138 -0
- package/dist/runtime/config-store.js.map +1 -0
- package/dist/runtime/messages.d.ts +12 -0
- package/dist/runtime/messages.d.ts.map +1 -0
- package/dist/runtime/messages.js +101 -0
- package/dist/runtime/messages.js.map +1 -0
- package/dist/runtime/model-resolver.d.ts +52 -0
- package/dist/runtime/model-resolver.d.ts.map +1 -0
- package/dist/runtime/model-resolver.js +175 -0
- package/dist/runtime/model-resolver.js.map +1 -0
- package/dist/runtime/pi-agent.d.ts +83 -0
- package/dist/runtime/pi-agent.d.ts.map +1 -0
- package/dist/runtime/pi-agent.js +405 -0
- package/dist/runtime/pi-agent.js.map +1 -0
- package/dist/runtime/status-store.d.ts +50 -0
- package/dist/runtime/status-store.d.ts.map +1 -0
- package/dist/runtime/status-store.js +65 -0
- package/dist/runtime/status-store.js.map +1 -0
- package/dist/runtime/system-prompt.d.ts +11 -0
- package/dist/runtime/system-prompt.d.ts.map +1 -0
- package/dist/runtime/system-prompt.js +43 -0
- package/dist/runtime/system-prompt.js.map +1 -0
- package/dist/runtime/tools/bash.d.ts +23 -0
- package/dist/runtime/tools/bash.d.ts.map +1 -0
- package/dist/runtime/tools/bash.js +206 -0
- package/dist/runtime/tools/bash.js.map +1 -0
- package/dist/runtime/tools/child-process.d.ts +13 -0
- package/dist/runtime/tools/child-process.d.ts.map +1 -0
- package/dist/runtime/tools/child-process.js +75 -0
- package/dist/runtime/tools/child-process.js.map +1 -0
- package/dist/runtime/tools/output-accumulator.d.ts +52 -0
- package/dist/runtime/tools/output-accumulator.d.ts.map +1 -0
- package/dist/runtime/tools/output-accumulator.js +160 -0
- package/dist/runtime/tools/output-accumulator.js.map +1 -0
- package/dist/runtime/tools/shell.d.ts +26 -0
- package/dist/runtime/tools/shell.d.ts.map +1 -0
- package/dist/runtime/tools/shell.js +116 -0
- package/dist/runtime/tools/shell.js.map +1 -0
- package/dist/runtime/tools/truncate.d.ts +38 -0
- package/dist/runtime/tools/truncate.d.ts.map +1 -0
- package/dist/runtime/tools/truncate.js +98 -0
- package/dist/runtime/tools/truncate.js.map +1 -0
- package/dist/tools/bash/child-process.d.ts +13 -0
- package/dist/tools/bash/child-process.d.ts.map +1 -0
- package/dist/tools/bash/child-process.js +79 -0
- package/dist/tools/bash/child-process.js.map +1 -0
- package/dist/tools/bash/output-accumulator.d.ts +54 -0
- package/dist/tools/bash/output-accumulator.d.ts.map +1 -0
- package/dist/tools/bash/output-accumulator.js +171 -0
- package/dist/tools/bash/output-accumulator.js.map +1 -0
- package/dist/tools/bash/shell.d.ts +26 -0
- package/dist/tools/bash/shell.d.ts.map +1 -0
- package/dist/tools/bash/shell.js +129 -0
- package/dist/tools/bash/shell.js.map +1 -0
- package/dist/tools/bash/tool.d.ts +23 -0
- package/dist/tools/bash/tool.d.ts.map +1 -0
- package/dist/tools/bash/tool.js +219 -0
- package/dist/tools/bash/tool.js.map +1 -0
- package/dist/tools/bash/truncate.d.ts +50 -0
- package/dist/tools/bash/truncate.d.ts.map +1 -0
- package/dist/tools/bash/truncate.js +184 -0
- package/dist/tools/bash/truncate.js.map +1 -0
- package/dist/tools/external-tool.d.ts +2 -0
- package/dist/tools/external-tool.d.ts.map +1 -0
- package/dist/tools/external-tool.js +15 -0
- package/dist/tools/external-tool.js.map +1 -0
- package/dist/tools/file/edit-diff.d.ts +27 -0
- package/dist/tools/file/edit-diff.d.ts.map +1 -0
- package/dist/tools/file/edit-diff.js +196 -0
- package/dist/tools/file/edit-diff.js.map +1 -0
- package/dist/tools/file/edit.d.ts +26 -0
- package/dist/tools/file/edit.d.ts.map +1 -0
- package/dist/tools/file/edit.js +106 -0
- package/dist/tools/file/edit.js.map +1 -0
- package/dist/tools/file/find.d.ts +27 -0
- package/dist/tools/file/find.d.ts.map +1 -0
- package/dist/tools/file/find.js +150 -0
- package/dist/tools/file/find.js.map +1 -0
- package/dist/tools/file/glob.d.ts +6 -0
- package/dist/tools/file/glob.d.ts.map +1 -0
- package/dist/tools/file/glob.js +50 -0
- package/dist/tools/file/glob.js.map +1 -0
- package/dist/tools/file/grep.d.ts +29 -0
- package/dist/tools/file/grep.d.ts.map +1 -0
- package/dist/tools/file/grep.js +220 -0
- package/dist/tools/file/grep.js.map +1 -0
- package/dist/tools/file/index.d.ts +7 -0
- package/dist/tools/file/index.d.ts.map +1 -0
- package/dist/tools/file/index.js +7 -0
- package/dist/tools/file/index.js.map +1 -0
- package/dist/tools/file/ls.d.ts +27 -0
- package/dist/tools/file/ls.d.ts.map +1 -0
- package/dist/tools/file/ls.js +82 -0
- package/dist/tools/file/ls.js.map +1 -0
- package/dist/tools/file/read.d.ts +23 -0
- package/dist/tools/file/read.d.ts.map +1 -0
- package/dist/tools/file/read.js +98 -0
- package/dist/tools/file/read.js.map +1 -0
- package/dist/tools/file/write.d.ts +17 -0
- package/dist/tools/file/write.d.ts.map +1 -0
- package/dist/tools/file/write.js +45 -0
- package/dist/tools/file/write.js.map +1 -0
- package/dist/tools/file-mutation-queue.d.ts +3 -0
- package/dist/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/tools/file-mutation-queue.js +47 -0
- package/dist/tools/file-mutation-queue.js.map +1 -0
- package/dist/tools/path-utils.d.ts +5 -0
- package/dist/tools/path-utils.d.ts.map +1 -0
- package/dist/tools/path-utils.js +79 -0
- package/dist/tools/path-utils.js.map +1 -0
- package/dist/tools/web/index.d.ts +2 -0
- package/dist/tools/web/index.d.ts.map +1 -0
- package/dist/tools/web/index.js +2 -0
- package/dist/tools/web/index.js.map +1 -0
- package/dist/tools/web/search.d.ts +44 -0
- package/dist/tools/web/search.d.ts.map +1 -0
- package/dist/tools/web/search.js +209 -0
- package/dist/tools/web/search.js.map +1 -0
- package/dist/tui/box.d.ts +11 -0
- package/dist/tui/box.d.ts.map +1 -0
- package/dist/tui/box.js +24 -0
- package/dist/tui/box.js.map +1 -0
- package/dist/tui/chat-screen.d.ts +29 -0
- package/dist/tui/chat-screen.d.ts.map +1 -0
- package/dist/tui/chat-screen.js +475 -0
- package/dist/tui/chat-screen.js.map +1 -0
- package/dist/tui/commands.d.ts +34 -0
- package/dist/tui/commands.d.ts.map +1 -0
- package/dist/tui/commands.js +691 -0
- package/dist/tui/commands.js.map +1 -0
- package/dist/tui/interactive.d.ts +9 -0
- package/dist/tui/interactive.d.ts.map +1 -0
- package/dist/tui/interactive.js +88 -0
- package/dist/tui/interactive.js.map +1 -0
- package/dist/tui/overlays.d.ts +39 -0
- package/dist/tui/overlays.d.ts.map +1 -0
- package/dist/tui/overlays.js +157 -0
- package/dist/tui/overlays.js.map +1 -0
- package/dist/tui/theme.d.ts +40 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +120 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/welcome.d.ts +3 -0
- package/dist/tui/welcome.d.ts.map +1 -0
- package/dist/tui/welcome.js +37 -0
- package/dist/tui/welcome.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return typeof value === "object" && value !== null;
|
|
3
|
+
}
|
|
4
|
+
function contentBlockToText(block, options) {
|
|
5
|
+
if (!isRecord(block))
|
|
6
|
+
return "";
|
|
7
|
+
switch (block.type) {
|
|
8
|
+
case "text":
|
|
9
|
+
return typeof block.text === "string" ? block.text : "";
|
|
10
|
+
case "thinking":
|
|
11
|
+
if (typeof block.thinking !== "string")
|
|
12
|
+
return "";
|
|
13
|
+
return options?.includeThinkingTags ? `<thinking>\n${block.thinking}\n</thinking>` : block.thinking;
|
|
14
|
+
case "image":
|
|
15
|
+
return typeof block.mimeType === "string" ? `[image: ${block.mimeType}]` : "[image]";
|
|
16
|
+
case "toolCall":
|
|
17
|
+
return "";
|
|
18
|
+
default:
|
|
19
|
+
return "";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function createUserMessage(text) {
|
|
23
|
+
return {
|
|
24
|
+
role: "user",
|
|
25
|
+
content: [{ type: "text", text }],
|
|
26
|
+
timestamp: Date.now(),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function contentToText(content) {
|
|
30
|
+
if (typeof content === "string")
|
|
31
|
+
return content;
|
|
32
|
+
if (!Array.isArray(content))
|
|
33
|
+
return "";
|
|
34
|
+
return content
|
|
35
|
+
.map((block) => contentBlockToText(block, { includeThinkingTags: true }))
|
|
36
|
+
.filter(Boolean)
|
|
37
|
+
.join("\n");
|
|
38
|
+
}
|
|
39
|
+
export function messageRole(message) {
|
|
40
|
+
return isRecord(message) && typeof message.role === "string" ? message.role : "custom";
|
|
41
|
+
}
|
|
42
|
+
export function messageToText(message) {
|
|
43
|
+
if (!isRecord(message))
|
|
44
|
+
return "";
|
|
45
|
+
switch (message.role) {
|
|
46
|
+
case "user":
|
|
47
|
+
case "toolResult":
|
|
48
|
+
return contentToText(message.content);
|
|
49
|
+
case "assistant": {
|
|
50
|
+
const text = contentToText(message.content);
|
|
51
|
+
if (typeof message.errorMessage === "string" && message.errorMessage.length > 0) {
|
|
52
|
+
return text.length > 0 ? `${text}\n\nError: ${message.errorMessage}` : `Error: ${message.errorMessage}`;
|
|
53
|
+
}
|
|
54
|
+
return text;
|
|
55
|
+
}
|
|
56
|
+
default:
|
|
57
|
+
if (typeof message.content === "string" || Array.isArray(message.content)) {
|
|
58
|
+
return contentToText(message.content);
|
|
59
|
+
}
|
|
60
|
+
return JSON.stringify(message);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function messageToMarkdownBlocks(message) {
|
|
64
|
+
if (!isRecord(message))
|
|
65
|
+
return [{ kind: "message", text: "" }];
|
|
66
|
+
if (message.role !== "assistant") {
|
|
67
|
+
return [{ kind: "message", text: messageToText(message) }];
|
|
68
|
+
}
|
|
69
|
+
const thinking = [];
|
|
70
|
+
const body = [];
|
|
71
|
+
if (Array.isArray(message.content)) {
|
|
72
|
+
for (const block of message.content) {
|
|
73
|
+
if (!isRecord(block))
|
|
74
|
+
continue;
|
|
75
|
+
const text = contentBlockToText(block);
|
|
76
|
+
if (!text)
|
|
77
|
+
continue;
|
|
78
|
+
if (block.type === "thinking")
|
|
79
|
+
thinking.push(text);
|
|
80
|
+
else
|
|
81
|
+
body.push(text);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else if (typeof message.content === "string") {
|
|
85
|
+
body.push(message.content);
|
|
86
|
+
}
|
|
87
|
+
if (typeof message.errorMessage === "string" && message.errorMessage.length > 0) {
|
|
88
|
+
body.push(`Error: ${message.errorMessage}`);
|
|
89
|
+
}
|
|
90
|
+
return [
|
|
91
|
+
...(thinking.length > 0 ? [{ kind: "thinking", text: thinking.join("\n\n") }] : []),
|
|
92
|
+
...(body.length > 0 ? [{ kind: "message", text: body.join("\n\n") }] : []),
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
export function isAssistantError(message) {
|
|
96
|
+
return (isRecord(message) &&
|
|
97
|
+
message.role === "assistant" &&
|
|
98
|
+
typeof message.errorMessage === "string" &&
|
|
99
|
+
message.errorMessage.length > 0);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/runtime/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type KnownProvider, type Model } from "@earendil-works/pi-ai";
|
|
2
|
+
import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
|
|
3
|
+
import type { AuthStore } from "./auth-store.js";
|
|
4
|
+
export interface ResolveModelOptions {
|
|
5
|
+
provider?: string;
|
|
6
|
+
model?: string;
|
|
7
|
+
/** Optional auth store used to detect OAuth-backed providers. */
|
|
8
|
+
authStore?: AuthStore;
|
|
9
|
+
}
|
|
10
|
+
export interface ResolvedModel {
|
|
11
|
+
model: Model<any>;
|
|
12
|
+
providerWasInferred: boolean;
|
|
13
|
+
modelWasInferred: boolean;
|
|
14
|
+
apiKeyAvailable: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface ProviderListEntry {
|
|
17
|
+
id: KnownProvider;
|
|
18
|
+
available: boolean;
|
|
19
|
+
via: "env" | "oauth" | "stored-key" | "none";
|
|
20
|
+
supportsOAuth: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface ApiKeyProviderEntry {
|
|
23
|
+
id: KnownProvider;
|
|
24
|
+
name: string;
|
|
25
|
+
hasKey: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface ModelListEntry {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
provider: KnownProvider;
|
|
31
|
+
reasoning: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface OAuthProviderEntry {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
loggedIn: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface ParsedModelReference {
|
|
39
|
+
provider: string;
|
|
40
|
+
model: string;
|
|
41
|
+
}
|
|
42
|
+
export declare function parseModelReference(options: ResolveModelOptions): ParsedModelReference;
|
|
43
|
+
export declare function resolveModel(options: ResolveModelOptions): ResolvedModel;
|
|
44
|
+
export declare function normalizeThinkingLevel(model: Model<any>, requested: ThinkingLevel): ThinkingLevel;
|
|
45
|
+
export declare function listKnownProviders(): string[];
|
|
46
|
+
export declare function listProvidersForSelection(authStore?: AuthStore): ProviderListEntry[];
|
|
47
|
+
export declare function listApiKeyProviders(authStore?: AuthStore): ApiKeyProviderEntry[];
|
|
48
|
+
export declare function listModelsForProvider(provider: string): ModelListEntry[];
|
|
49
|
+
export declare function listOAuthProviders(authStore?: AuthStore): OAuthProviderEntry[];
|
|
50
|
+
export declare function getDefaultModelForProvider(provider: string): Model<any>;
|
|
51
|
+
export declare function findModelByReference(provider: string, modelId: string): Model<any>;
|
|
52
|
+
//# sourceMappingURL=model-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/runtime/model-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA6BjD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,aAAa,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,KAAK,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,CAAC;IAC7C,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,aAAa,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,oBAAoB,CAWtF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa,CAiBxE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,GAAG,aAAa,CAIjG;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,yBAAyB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,iBAAiB,EAAE,CAkBpF;AAED,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,mBAAmB,EAAE,CAQhF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAQxE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,kBAAkB,EAAE,CAO9E;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAGvE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAGlF"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { getEnvApiKey, getModels, getProviders, getSupportedThinkingLevels, } from "@earendil-works/pi-ai";
|
|
2
|
+
import { getOAuthProvider, getOAuthProviders } from "@earendil-works/pi-ai/oauth";
|
|
3
|
+
const PROVIDER_PREFERENCE = [
|
|
4
|
+
"anthropic",
|
|
5
|
+
"openai",
|
|
6
|
+
"google",
|
|
7
|
+
"mistral",
|
|
8
|
+
"openrouter",
|
|
9
|
+
"groq",
|
|
10
|
+
"xai",
|
|
11
|
+
"deepseek",
|
|
12
|
+
"zai",
|
|
13
|
+
"together",
|
|
14
|
+
"fireworks",
|
|
15
|
+
"huggingface",
|
|
16
|
+
];
|
|
17
|
+
const DEFAULT_MODEL_IDS = {
|
|
18
|
+
anthropic: "claude-sonnet-4-5",
|
|
19
|
+
openai: "gpt-5.1",
|
|
20
|
+
google: "gemini-2.5-pro",
|
|
21
|
+
mistral: "magistral-medium-latest",
|
|
22
|
+
openrouter: "anthropic/claude-sonnet-4.5",
|
|
23
|
+
groq: "openai/gpt-oss-120b",
|
|
24
|
+
xai: "grok-4",
|
|
25
|
+
deepseek: "deepseek-chat",
|
|
26
|
+
zai: "glm-4.6",
|
|
27
|
+
};
|
|
28
|
+
export function parseModelReference(options) {
|
|
29
|
+
let provider = options.provider ?? "";
|
|
30
|
+
let model = options.model ?? "";
|
|
31
|
+
const slash = model.indexOf("/");
|
|
32
|
+
if (!provider && slash > 0) {
|
|
33
|
+
provider = model.slice(0, slash);
|
|
34
|
+
model = model.slice(slash + 1);
|
|
35
|
+
}
|
|
36
|
+
return { provider, model };
|
|
37
|
+
}
|
|
38
|
+
export function resolveModel(options) {
|
|
39
|
+
const parsed = parseModelReference(options);
|
|
40
|
+
const providerWasInferred = parsed.provider.length === 0;
|
|
41
|
+
const provider = providerWasInferred ? inferProvider(options.authStore) : parsed.provider;
|
|
42
|
+
const knownProvider = toKnownProvider(provider);
|
|
43
|
+
const models = getModels(knownProvider);
|
|
44
|
+
const modelWasInferred = parsed.model.length === 0;
|
|
45
|
+
const model = modelWasInferred
|
|
46
|
+
? pickDefaultModel(knownProvider, models)
|
|
47
|
+
: findModel(knownProvider, models, parsed.model);
|
|
48
|
+
return {
|
|
49
|
+
model,
|
|
50
|
+
providerWasInferred,
|
|
51
|
+
modelWasInferred,
|
|
52
|
+
apiKeyAvailable: isProviderCredentialed(model.provider, options.authStore),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function normalizeThinkingLevel(model, requested) {
|
|
56
|
+
if (requested === "off")
|
|
57
|
+
return "off";
|
|
58
|
+
const supported = getSupportedThinkingLevels(model);
|
|
59
|
+
return supported.includes(requested) ? requested : "off";
|
|
60
|
+
}
|
|
61
|
+
export function listKnownProviders() {
|
|
62
|
+
return [...getProviders()];
|
|
63
|
+
}
|
|
64
|
+
export function listProvidersForSelection(authStore) {
|
|
65
|
+
const oauthCreds = authStore?.getAllOAuth() ?? {};
|
|
66
|
+
const storedKeys = new Set(authStore?.listApiKeyProviderIds() ?? []);
|
|
67
|
+
const providers = getProviders();
|
|
68
|
+
const ordered = [
|
|
69
|
+
...PROVIDER_PREFERENCE.filter((entry) => providers.includes(entry)),
|
|
70
|
+
...providers.filter((entry) => !PROVIDER_PREFERENCE.includes(entry)),
|
|
71
|
+
];
|
|
72
|
+
return ordered
|
|
73
|
+
.map((id) => {
|
|
74
|
+
const supportsOAuth = getOAuthProvider(id) !== undefined;
|
|
75
|
+
const hasOAuth = oauthCreds[id] !== undefined;
|
|
76
|
+
const hasStoredKey = storedKeys.has(id);
|
|
77
|
+
const hasEnv = getEnvApiKey(id) !== undefined;
|
|
78
|
+
const via = hasOAuth ? "oauth" : hasStoredKey ? "stored-key" : hasEnv ? "env" : "none";
|
|
79
|
+
return { id, supportsOAuth, available: via !== "none", via };
|
|
80
|
+
})
|
|
81
|
+
.filter((entry) => entry.available);
|
|
82
|
+
}
|
|
83
|
+
export function listApiKeyProviders(authStore) {
|
|
84
|
+
const storedKeys = new Set(authStore?.listApiKeyProviderIds() ?? []);
|
|
85
|
+
const providers = getProviders();
|
|
86
|
+
const ordered = [
|
|
87
|
+
...PROVIDER_PREFERENCE.filter((entry) => providers.includes(entry)),
|
|
88
|
+
...providers.filter((entry) => !PROVIDER_PREFERENCE.includes(entry)),
|
|
89
|
+
];
|
|
90
|
+
return ordered.map((id) => ({ id, name: id, hasKey: storedKeys.has(id) }));
|
|
91
|
+
}
|
|
92
|
+
export function listModelsForProvider(provider) {
|
|
93
|
+
const known = toKnownProvider(provider);
|
|
94
|
+
return getModels(known).map((model) => ({
|
|
95
|
+
id: model.id,
|
|
96
|
+
name: model.name,
|
|
97
|
+
provider: known,
|
|
98
|
+
reasoning: model.reasoning,
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
export function listOAuthProviders(authStore) {
|
|
102
|
+
const loggedIn = new Set(authStore?.listOAuthProviderIds() ?? []);
|
|
103
|
+
return getOAuthProviders().map((provider) => ({
|
|
104
|
+
id: provider.id,
|
|
105
|
+
name: provider.name,
|
|
106
|
+
loggedIn: loggedIn.has(provider.id),
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
export function getDefaultModelForProvider(provider) {
|
|
110
|
+
const known = toKnownProvider(provider);
|
|
111
|
+
return pickDefaultModel(known, getModels(known));
|
|
112
|
+
}
|
|
113
|
+
export function findModelByReference(provider, modelId) {
|
|
114
|
+
const known = toKnownProvider(provider);
|
|
115
|
+
return findModel(known, getModels(known), modelId);
|
|
116
|
+
}
|
|
117
|
+
function isProviderCredentialed(provider, authStore) {
|
|
118
|
+
if (authStore && authStore.getOAuth(provider))
|
|
119
|
+
return true;
|
|
120
|
+
if (authStore && authStore.getApiKey(provider))
|
|
121
|
+
return true;
|
|
122
|
+
return getEnvApiKey(provider) !== undefined;
|
|
123
|
+
}
|
|
124
|
+
function inferProvider(authStore) {
|
|
125
|
+
if (authStore) {
|
|
126
|
+
for (const provider of PROVIDER_PREFERENCE) {
|
|
127
|
+
if (authStore.getOAuth(provider))
|
|
128
|
+
return provider;
|
|
129
|
+
}
|
|
130
|
+
for (const provider of PROVIDER_PREFERENCE) {
|
|
131
|
+
if (authStore.getApiKey(provider))
|
|
132
|
+
return provider;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
for (const provider of PROVIDER_PREFERENCE) {
|
|
136
|
+
if (getEnvApiKey(provider))
|
|
137
|
+
return provider;
|
|
138
|
+
}
|
|
139
|
+
return "anthropic";
|
|
140
|
+
}
|
|
141
|
+
function toKnownProvider(provider) {
|
|
142
|
+
const knownProvider = getProviders().find((candidate) => candidate === provider);
|
|
143
|
+
if (!knownProvider) {
|
|
144
|
+
throw new Error(`Unknown provider '${provider}'. Known providers: ${getProviders().join(", ")}`);
|
|
145
|
+
}
|
|
146
|
+
return knownProvider;
|
|
147
|
+
}
|
|
148
|
+
function pickDefaultModel(provider, models) {
|
|
149
|
+
const preferredId = DEFAULT_MODEL_IDS[provider];
|
|
150
|
+
const preferred = preferredId ? models.find((candidate) => candidate.id === preferredId) : undefined;
|
|
151
|
+
if (preferred)
|
|
152
|
+
return preferred;
|
|
153
|
+
const firstTextModel = models.find((candidate) => candidate.input.includes("text"));
|
|
154
|
+
if (firstTextModel)
|
|
155
|
+
return firstTextModel;
|
|
156
|
+
const first = models[0];
|
|
157
|
+
if (!first)
|
|
158
|
+
throw new Error(`Provider '${provider}' has no known models.`);
|
|
159
|
+
return first;
|
|
160
|
+
}
|
|
161
|
+
function findModel(provider, models, modelId) {
|
|
162
|
+
const exact = models.find((candidate) => candidate.id === modelId);
|
|
163
|
+
if (exact)
|
|
164
|
+
return exact;
|
|
165
|
+
const lower = modelId.toLowerCase();
|
|
166
|
+
const byName = models.find((candidate) => candidate.name.toLowerCase() === lower);
|
|
167
|
+
if (byName)
|
|
168
|
+
return byName;
|
|
169
|
+
const sample = models
|
|
170
|
+
.slice(0, 12)
|
|
171
|
+
.map((candidate) => candidate.id)
|
|
172
|
+
.join(", ");
|
|
173
|
+
throw new Error(`Unknown model '${modelId}' for provider '${provider}'. Examples: ${sample}`);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=model-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../src/runtime/model-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Agent, type AgentMessage, type ThinkingLevel } from "@earendil-works/pi-agent-core";
|
|
2
|
+
import { type Model, type Transport } from "@earendil-works/pi-ai";
|
|
3
|
+
import { type SearchWebToolConfig } from "../tools/web/index.js";
|
|
4
|
+
import { AuthStore } from "./auth-store.js";
|
|
5
|
+
import { AgentStatusStore, type NoticeLevel } from "./status-store.js";
|
|
6
|
+
export interface PiSquaredAgentRuntimeOptions {
|
|
7
|
+
model: Model<any>;
|
|
8
|
+
apiKey?: string;
|
|
9
|
+
systemPrompt?: string | undefined;
|
|
10
|
+
thinkingLevel?: ThinkingLevel;
|
|
11
|
+
transport?: Transport;
|
|
12
|
+
sessionId?: string;
|
|
13
|
+
authStore?: AuthStore;
|
|
14
|
+
/** Working directory for tool execution. Defaults to process.cwd(). */
|
|
15
|
+
cwd?: string;
|
|
16
|
+
/** Custom guidelines for the system prompt. */
|
|
17
|
+
guidelines?: string[] | undefined;
|
|
18
|
+
/** Extra context file paths (relative to cwd) to inject into the system prompt. */
|
|
19
|
+
extraContextFiles?: string[] | undefined;
|
|
20
|
+
/** Configuration for the search_web tool. */
|
|
21
|
+
webSearch?: SearchWebToolConfig | undefined;
|
|
22
|
+
}
|
|
23
|
+
export declare class PiSquaredAgentRuntime {
|
|
24
|
+
readonly agent: Agent;
|
|
25
|
+
readonly status: AgentStatusStore;
|
|
26
|
+
readonly authStore: AuthStore;
|
|
27
|
+
private model;
|
|
28
|
+
private apiKey;
|
|
29
|
+
private sessionId;
|
|
30
|
+
private readonly transportOverride;
|
|
31
|
+
private readonly tools;
|
|
32
|
+
private webSearchConfig;
|
|
33
|
+
private readonly cwd;
|
|
34
|
+
private readonly guidelines;
|
|
35
|
+
private readonly extraContextFiles;
|
|
36
|
+
private systemPromptOverride;
|
|
37
|
+
constructor(options: PiSquaredAgentRuntimeOptions);
|
|
38
|
+
get isBusy(): boolean;
|
|
39
|
+
getCwd(): string;
|
|
40
|
+
get messages(): AgentMessage[];
|
|
41
|
+
prompt(text: string): Promise<void>;
|
|
42
|
+
continueLast(): Promise<void>;
|
|
43
|
+
abort(): void;
|
|
44
|
+
waitForIdle(): Promise<void>;
|
|
45
|
+
newSession(): string;
|
|
46
|
+
setMessages(messages: AgentMessage[]): void;
|
|
47
|
+
setModel(model: Model<any>): void;
|
|
48
|
+
/**
|
|
49
|
+
* Re-apply OAuth model transformations (e.g. github-copilot baseUrl rewrite)
|
|
50
|
+
* after credentials change.
|
|
51
|
+
*/
|
|
52
|
+
refreshModelFromAuth(): void;
|
|
53
|
+
setApiKey(apiKey: string | undefined): void;
|
|
54
|
+
setThinkingLevel(thinkingLevel: ThinkingLevel): void;
|
|
55
|
+
setSystemPrompt(systemPrompt: string): void;
|
|
56
|
+
getWebSearchConfig(): SearchWebToolConfig;
|
|
57
|
+
setWebSearchConfig(config: SearchWebToolConfig): void;
|
|
58
|
+
setLastError(error: string | undefined): void;
|
|
59
|
+
setNotice(message: string, level?: NoticeLevel): void;
|
|
60
|
+
clearNotice(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Resolve an API key for a provider, preferring OAuth credentials from the
|
|
63
|
+
* auth store (refreshing if expired), then the runtime override, then env.
|
|
64
|
+
*/
|
|
65
|
+
resolveApiKey(provider: string): Promise<string | undefined>;
|
|
66
|
+
private createSearchWebRuntimeTool;
|
|
67
|
+
/** Resolve ChatGPT/Codex OAuth credentials used by the search_web tool. */
|
|
68
|
+
private resolveSearchWebAuth;
|
|
69
|
+
private resolveTransportForModel;
|
|
70
|
+
/**
|
|
71
|
+
* Apply OAuth-driven model transformations (e.g. github-copilot baseUrl).
|
|
72
|
+
*/
|
|
73
|
+
private applyOAuthModelTransforms;
|
|
74
|
+
/**
|
|
75
|
+
* Copy externally mutable status fields back into the core Agent before a run.
|
|
76
|
+
* A future HTTP server can update the status store, then call this method to
|
|
77
|
+
* make the next turn use the modified transcript and prompt state.
|
|
78
|
+
*/
|
|
79
|
+
applyStatusToAgent(): Promise<void>;
|
|
80
|
+
private handleAgentEvent;
|
|
81
|
+
private syncFromAgent;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=pi-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-agent.d.ts","sourceRoot":"","sources":["../../src/runtime/pi-agent.ts"],"names":[],"mappings":"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"}
|