@a5c-ai/agent-mux-adapters 0.2.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/amp-adapter.d.ts +31 -0
- package/dist/amp-adapter.d.ts.map +1 -0
- package/dist/amp-adapter.js +336 -0
- package/dist/amp-adapter.js.map +1 -0
- package/dist/auth-config.d.ts +36 -5
- package/dist/auth-config.d.ts.map +1 -1
- package/dist/auth-config.js +127 -12
- package/dist/auth-config.js.map +1 -1
- package/dist/base-adapter-helpers.d.ts +8 -0
- package/dist/base-adapter-helpers.d.ts.map +1 -0
- package/dist/base-adapter-helpers.js +68 -0
- package/dist/base-adapter-helpers.js.map +1 -0
- package/dist/base-adapter.d.ts +14 -9
- package/dist/base-adapter.d.ts.map +1 -1
- package/dist/base-adapter.js +23 -66
- package/dist/base-adapter.js.map +1 -1
- package/dist/claude-adapter.d.ts.map +1 -1
- package/dist/claude-adapter.js +5 -2
- package/dist/claude-adapter.js.map +1 -1
- package/dist/claude-agent-sdk-adapter.d.ts +53 -0
- package/dist/claude-agent-sdk-adapter.d.ts.map +1 -0
- package/dist/claude-agent-sdk-adapter.js +607 -0
- package/dist/claude-agent-sdk-adapter.js.map +1 -0
- package/dist/codex-adapter.d.ts.map +1 -1
- package/dist/codex-adapter.js +100 -12
- package/dist/codex-adapter.js.map +1 -1
- package/dist/codex-sdk-adapter.d.ts +32 -0
- package/dist/codex-sdk-adapter.d.ts.map +1 -0
- package/dist/codex-sdk-adapter.js +384 -0
- package/dist/codex-sdk-adapter.js.map +1 -0
- package/dist/codex-sdk-mocks.d.ts +51 -0
- package/dist/codex-sdk-mocks.d.ts.map +1 -0
- package/dist/codex-sdk-mocks.js +97 -0
- package/dist/codex-sdk-mocks.js.map +1 -0
- package/dist/codex-websocket-adapter.d.ts +41 -0
- package/dist/codex-websocket-adapter.d.ts.map +1 -0
- package/dist/codex-websocket-adapter.js +289 -0
- package/dist/codex-websocket-adapter.js.map +1 -0
- package/dist/codex-websocket-connection.d.ts +58 -0
- package/dist/codex-websocket-connection.d.ts.map +1 -0
- package/dist/codex-websocket-connection.js +244 -0
- package/dist/codex-websocket-connection.js.map +1 -0
- package/dist/copilot-adapter.d.ts.map +1 -1
- package/dist/copilot-adapter.js +7 -3
- package/dist/copilot-adapter.js.map +1 -1
- package/dist/cursor-adapter.d.ts.map +1 -1
- package/dist/cursor-adapter.js +11 -4
- package/dist/cursor-adapter.js.map +1 -1
- package/dist/droid-adapter.d.ts +30 -0
- package/dist/droid-adapter.d.ts.map +1 -0
- package/dist/droid-adapter.js +377 -0
- package/dist/droid-adapter.js.map +1 -0
- package/dist/gemini-adapter.d.ts.map +1 -1
- package/dist/gemini-adapter.js +6 -3
- package/dist/gemini-adapter.js.map +1 -1
- package/dist/hermes-adapter.d.ts.map +1 -1
- package/dist/hermes-adapter.js +6 -2
- package/dist/hermes-adapter.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/mocks/index.d.ts +60 -0
- package/dist/mocks/index.d.ts.map +1 -0
- package/dist/mocks/index.js +203 -0
- package/dist/mocks/index.js.map +1 -0
- package/dist/mocks/mock-types.d.ts +260 -0
- package/dist/mocks/mock-types.d.ts.map +1 -0
- package/dist/mocks/mock-types.js +12 -0
- package/dist/mocks/mock-types.js.map +1 -0
- package/dist/mocks/programmatic-mocks.d.ts +50 -0
- package/dist/mocks/programmatic-mocks.d.ts.map +1 -0
- package/dist/mocks/programmatic-mocks.js +330 -0
- package/dist/mocks/programmatic-mocks.js.map +1 -0
- package/dist/mocks/remote-mocks.d.ts +52 -0
- package/dist/mocks/remote-mocks.d.ts.map +1 -0
- package/dist/mocks/remote-mocks.js +436 -0
- package/dist/mocks/remote-mocks.js.map +1 -0
- package/dist/omp-adapter.d.ts.map +1 -1
- package/dist/omp-adapter.js +6 -3
- package/dist/omp-adapter.js.map +1 -1
- package/dist/openclaw-adapter.d.ts.map +1 -1
- package/dist/openclaw-adapter.js +6 -3
- package/dist/openclaw-adapter.js.map +1 -1
- package/dist/opencode-adapter.d.ts +2 -2
- package/dist/opencode-adapter.d.ts.map +1 -1
- package/dist/opencode-adapter.js +173 -61
- package/dist/opencode-adapter.js.map +1 -1
- package/dist/opencode-http-adapter.d.ts +41 -0
- package/dist/opencode-http-adapter.d.ts.map +1 -0
- package/dist/opencode-http-adapter.js +370 -0
- package/dist/opencode-http-adapter.js.map +1 -0
- package/dist/opencode-http-connection.d.ts +33 -0
- package/dist/opencode-http-connection.d.ts.map +1 -0
- package/dist/opencode-http-connection.js +198 -0
- package/dist/opencode-http-connection.js.map +1 -0
- package/dist/pi-adapter.d.ts.map +1 -1
- package/dist/pi-adapter.js +5 -2
- package/dist/pi-adapter.js.map +1 -1
- package/dist/pi-sdk-adapter.d.ts +46 -0
- package/dist/pi-sdk-adapter.d.ts.map +1 -0
- package/dist/pi-sdk-adapter.js +549 -0
- package/dist/pi-sdk-adapter.js.map +1 -0
- package/dist/programmatic-adapter-base.d.ts +88 -0
- package/dist/programmatic-adapter-base.d.ts.map +1 -0
- package/dist/programmatic-adapter-base.js +169 -0
- package/dist/programmatic-adapter-base.js.map +1 -0
- package/dist/qwen-adapter.d.ts.map +1 -1
- package/dist/qwen-adapter.js +5 -2
- package/dist/qwen-adapter.js.map +1 -1
- package/dist/remote-adapter-base.d.ts +85 -0
- package/dist/remote-adapter-base.d.ts.map +1 -0
- package/dist/remote-adapter-base.js +102 -0
- package/dist/remote-adapter-base.js.map +1 -0
- package/package.json +2 -2
package/dist/pi-adapter.js
CHANGED
|
@@ -93,14 +93,17 @@ export class PiAdapter extends BaseAgentAdapter {
|
|
|
93
93
|
if (options.model) {
|
|
94
94
|
args.push('--model', options.model);
|
|
95
95
|
}
|
|
96
|
-
const prompt =
|
|
97
|
-
|
|
96
|
+
const { prompt, stdin } = this.buildPromptTransport(options);
|
|
97
|
+
if (stdin === undefined) {
|
|
98
|
+
args.push('--prompt', prompt);
|
|
99
|
+
}
|
|
98
100
|
return {
|
|
99
101
|
command: this.cliCommand,
|
|
100
102
|
args,
|
|
101
103
|
env: this.buildEnvFromOptions(options),
|
|
102
104
|
cwd: options.cwd ?? process.cwd(),
|
|
103
105
|
usePty: false,
|
|
106
|
+
stdin,
|
|
104
107
|
timeout: options.timeout,
|
|
105
108
|
inactivityTimeout: options.inactivityTimeout,
|
|
106
109
|
};
|
package/dist/pi-adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-adapter.js","sourceRoot":"","sources":["../src/pi-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pi-adapter.js","sourceRoot":"","sources":["../src/pi-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PiSdkAdapter — Enhanced programmatic Pi agent integration.
|
|
3
|
+
*
|
|
4
|
+
* Provides a programmatic interface to Pi agent capabilities with enhanced
|
|
5
|
+
* features, better streaming, improved tool calling, and extensibility for
|
|
6
|
+
* future Pi platform enhancements.
|
|
7
|
+
*/
|
|
8
|
+
import type { AgentCapabilities, ModelCapabilities, AgentConfigSchema, AuthState, AuthSetupGuidance, Session, RunOptions, AgentEvent, AgentConfig } from '@a5c-ai/agent-mux-core';
|
|
9
|
+
import { BaseProgrammaticAdapter } from './programmatic-adapter-base.js';
|
|
10
|
+
export declare class PiSdkAdapter extends BaseProgrammaticAdapter {
|
|
11
|
+
readonly agent: "pi-sdk";
|
|
12
|
+
readonly displayName = "Pi (SDK)";
|
|
13
|
+
readonly minVersion = "0.1.0";
|
|
14
|
+
readonly hostEnvSignals: readonly ["PI_API_KEY", "ANTHROPIC_API_KEY", "OPENAI_API_KEY"];
|
|
15
|
+
readonly capabilities: AgentCapabilities;
|
|
16
|
+
readonly models: ModelCapabilities[];
|
|
17
|
+
readonly defaultModelId = "pi-default";
|
|
18
|
+
readonly configSchema: AgentConfigSchema;
|
|
19
|
+
execute(options: RunOptions): AsyncIterableIterator<AgentEvent>;
|
|
20
|
+
detectAuth(): Promise<AuthState>;
|
|
21
|
+
getAuthGuidance(): AuthSetupGuidance;
|
|
22
|
+
sessionDir(_cwd?: string): string;
|
|
23
|
+
parseSessionFile(filePath: string): Promise<Session>;
|
|
24
|
+
listSessionFiles(_cwd?: string): Promise<string[]>;
|
|
25
|
+
readConfig(_cwd?: string): Promise<AgentConfig>;
|
|
26
|
+
writeConfig(config: Partial<AgentConfig>, _cwd?: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Create Pi SDK client (mock implementation).
|
|
29
|
+
* In real implementation, this would return an actual Pi SDK client.
|
|
30
|
+
*/
|
|
31
|
+
private createPiClient;
|
|
32
|
+
/**
|
|
33
|
+
* Create Pi stream (mock implementation).
|
|
34
|
+
* In real implementation, this would use the Pi SDK.
|
|
35
|
+
*/
|
|
36
|
+
private createPiStream;
|
|
37
|
+
/**
|
|
38
|
+
* Execute mock tool calls.
|
|
39
|
+
*/
|
|
40
|
+
private executeMockTool;
|
|
41
|
+
/**
|
|
42
|
+
* Extract cost information from Pi usage object.
|
|
43
|
+
*/
|
|
44
|
+
private extractCostFromUsage;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=pi-sdk-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-sdk-adapter.d.ts","sourceRoot":"","sources":["../src/pi-sdk-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,UAAU,EACV,UAAU,EACV,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AA0CzE,qBAAa,YAAa,SAAQ,uBAAuB;IACvD,QAAQ,CAAC,KAAK,EAAG,QAAQ,CAAU;IACnC,QAAQ,CAAC,WAAW,cAAc;IAClC,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,cAAc,iEAAkE;IAEzF,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CA4CtC;IAEF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAqDlC;IAEF,QAAQ,CAAC,cAAc,gBAAgB;IAEvC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAQtC;IAEK,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC;IA6OhE,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAkDtC,eAAe,IAAI,iBAAiB;IA+BpC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAI3B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpD,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIlD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAO/C,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7E;;;OAGG;IACH,OAAO,CAAC,cAAc;IAMtB;;;OAGG;YACW,cAAc;IA8E5B;;OAEG;YACW,eAAe;IAyB7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAwB7B"}
|
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PiSdkAdapter — Enhanced programmatic Pi agent integration.
|
|
3
|
+
*
|
|
4
|
+
* Provides a programmatic interface to Pi agent capabilities with enhanced
|
|
5
|
+
* features, better streaming, improved tool calling, and extensibility for
|
|
6
|
+
* future Pi platform enhancements.
|
|
7
|
+
*/
|
|
8
|
+
import * as os from 'node:os';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import { BaseProgrammaticAdapter } from './programmatic-adapter-base.js';
|
|
11
|
+
import { listJsonlFiles, parseJsonlSessionFile, readJsonFile, writeJsonFileAtomic, } from './session-fs.js';
|
|
12
|
+
export class PiSdkAdapter extends BaseProgrammaticAdapter {
|
|
13
|
+
agent = 'pi-sdk';
|
|
14
|
+
displayName = 'Pi (SDK)';
|
|
15
|
+
minVersion = '0.1.0';
|
|
16
|
+
hostEnvSignals = ['PI_API_KEY', 'ANTHROPIC_API_KEY', 'OPENAI_API_KEY'];
|
|
17
|
+
capabilities = {
|
|
18
|
+
agent: 'pi-sdk',
|
|
19
|
+
canResume: true,
|
|
20
|
+
canFork: true,
|
|
21
|
+
supportsMultiTurn: true,
|
|
22
|
+
sessionPersistence: 'file',
|
|
23
|
+
supportsTextStreaming: true,
|
|
24
|
+
supportsToolCallStreaming: true,
|
|
25
|
+
supportsThinkingStreaming: false,
|
|
26
|
+
supportsNativeTools: true,
|
|
27
|
+
supportsMCP: false,
|
|
28
|
+
supportsParallelToolCalls: true,
|
|
29
|
+
requiresToolApproval: true,
|
|
30
|
+
approvalModes: ['yolo', 'prompt', 'deny'],
|
|
31
|
+
supportsThinking: false,
|
|
32
|
+
thinkingEffortLevels: [],
|
|
33
|
+
supportsThinkingBudgetTokens: false,
|
|
34
|
+
supportsJsonMode: true,
|
|
35
|
+
supportsStructuredOutput: true,
|
|
36
|
+
supportsSkills: true,
|
|
37
|
+
supportsAgentsMd: true,
|
|
38
|
+
skillsFormat: 'file',
|
|
39
|
+
supportsSubagentDispatch: true,
|
|
40
|
+
supportsParallelExecution: true,
|
|
41
|
+
maxParallelTasks: 5,
|
|
42
|
+
supportsInteractiveMode: true,
|
|
43
|
+
supportsStdinInjection: true,
|
|
44
|
+
supportsImageInput: false,
|
|
45
|
+
supportsImageOutput: false,
|
|
46
|
+
supportsFileAttachments: true,
|
|
47
|
+
supportsPlugins: false,
|
|
48
|
+
pluginFormats: [],
|
|
49
|
+
pluginRegistries: [],
|
|
50
|
+
supportedPlatforms: ['darwin', 'linux', 'win32'],
|
|
51
|
+
requiresGitRepo: false,
|
|
52
|
+
requiresPty: false,
|
|
53
|
+
authMethods: [
|
|
54
|
+
{ type: 'api_key', name: 'Provider API Key', description: 'Provider-specific API key environment variables' },
|
|
55
|
+
{ type: 'oauth', name: 'OAuth', description: 'OAuth-based authentication' },
|
|
56
|
+
],
|
|
57
|
+
authFiles: ['.pi/agent/settings.json'],
|
|
58
|
+
installMethods: [
|
|
59
|
+
{ platform: 'all', type: 'npm', command: 'npm install -g @pi-ai/sdk' },
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
models = [
|
|
63
|
+
{
|
|
64
|
+
agent: 'pi-sdk',
|
|
65
|
+
modelId: 'pi-default',
|
|
66
|
+
displayName: 'Pi Default (SDK)',
|
|
67
|
+
deprecated: false,
|
|
68
|
+
contextWindow: 128000,
|
|
69
|
+
maxOutputTokens: 8192,
|
|
70
|
+
inputPricePerMillion: 1,
|
|
71
|
+
outputPricePerMillion: 3,
|
|
72
|
+
cachedInputPricePerMillion: 0.1,
|
|
73
|
+
supportsThinking: false,
|
|
74
|
+
supportsToolCalling: true,
|
|
75
|
+
supportsParallelToolCalls: true,
|
|
76
|
+
supportsToolCallStreaming: true,
|
|
77
|
+
supportsJsonMode: true,
|
|
78
|
+
supportsStructuredOutput: true,
|
|
79
|
+
supportsTextStreaming: true,
|
|
80
|
+
supportsThinkingStreaming: false,
|
|
81
|
+
supportsImageInput: false,
|
|
82
|
+
supportsImageOutput: false,
|
|
83
|
+
supportsFileInput: true,
|
|
84
|
+
cliArgKey: 'model',
|
|
85
|
+
cliArgValue: 'pi-default',
|
|
86
|
+
lastUpdated: '2026-04-01',
|
|
87
|
+
source: 'bundled',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
agent: 'pi-sdk',
|
|
91
|
+
modelId: 'pi-enhanced',
|
|
92
|
+
displayName: 'Pi Enhanced (SDK)',
|
|
93
|
+
deprecated: false,
|
|
94
|
+
contextWindow: 200000,
|
|
95
|
+
maxOutputTokens: 16384,
|
|
96
|
+
inputPricePerMillion: 2,
|
|
97
|
+
outputPricePerMillion: 6,
|
|
98
|
+
cachedInputPricePerMillion: 0.2,
|
|
99
|
+
supportsThinking: false,
|
|
100
|
+
supportsToolCalling: true,
|
|
101
|
+
supportsParallelToolCalls: true,
|
|
102
|
+
supportsToolCallStreaming: true,
|
|
103
|
+
supportsJsonMode: true,
|
|
104
|
+
supportsStructuredOutput: true,
|
|
105
|
+
supportsTextStreaming: true,
|
|
106
|
+
supportsThinkingStreaming: false,
|
|
107
|
+
supportsImageInput: false,
|
|
108
|
+
supportsImageOutput: false,
|
|
109
|
+
supportsFileInput: true,
|
|
110
|
+
cliArgKey: 'model',
|
|
111
|
+
cliArgValue: 'pi-enhanced',
|
|
112
|
+
lastUpdated: '2026-04-01',
|
|
113
|
+
source: 'bundled',
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
defaultModelId = 'pi-default';
|
|
117
|
+
configSchema = {
|
|
118
|
+
agent: 'pi-sdk',
|
|
119
|
+
version: 1,
|
|
120
|
+
fields: [],
|
|
121
|
+
configFilePaths: [path.join(os.homedir(), '.pi', 'agent', 'settings.json')],
|
|
122
|
+
projectConfigFilePaths: ['.pi/agent/settings.json'],
|
|
123
|
+
configFormat: 'json',
|
|
124
|
+
supportsProjectConfig: true,
|
|
125
|
+
};
|
|
126
|
+
async *execute(options) {
|
|
127
|
+
this.validateRunOptions(options);
|
|
128
|
+
const runId = this.generateRunId();
|
|
129
|
+
const modelId = this.resolveModel(options);
|
|
130
|
+
const prompt = this.normalizePrompt(options.prompt);
|
|
131
|
+
// Check authentication
|
|
132
|
+
const authState = await this.detectAuth();
|
|
133
|
+
if (authState.status !== 'authenticated') {
|
|
134
|
+
yield this.createErrorEvent(runId, 'AUTH_MISSING', 'No API key found for Pi SDK', false);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
// Emit session start
|
|
139
|
+
yield {
|
|
140
|
+
...this.createBaseEvent('session_start', runId),
|
|
141
|
+
type: 'session_start',
|
|
142
|
+
sessionId: options.sessionId || runId,
|
|
143
|
+
resumed: Boolean(options.sessionId),
|
|
144
|
+
};
|
|
145
|
+
// Create Pi SDK client (in real implementation)
|
|
146
|
+
const client = this.createPiClient();
|
|
147
|
+
// Build messages array
|
|
148
|
+
const messages = [
|
|
149
|
+
{
|
|
150
|
+
role: 'user',
|
|
151
|
+
content: prompt,
|
|
152
|
+
},
|
|
153
|
+
];
|
|
154
|
+
// Add system prompt if provided
|
|
155
|
+
if (options.systemPrompt) {
|
|
156
|
+
messages.unshift({
|
|
157
|
+
role: 'system',
|
|
158
|
+
content: options.systemPrompt,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// Define available tools for Pi capabilities
|
|
162
|
+
const tools = [
|
|
163
|
+
{
|
|
164
|
+
name: 'search_web',
|
|
165
|
+
description: 'Search the web for current information',
|
|
166
|
+
parameters: {
|
|
167
|
+
type: 'object',
|
|
168
|
+
properties: {
|
|
169
|
+
query: {
|
|
170
|
+
type: 'string',
|
|
171
|
+
description: 'Search query',
|
|
172
|
+
},
|
|
173
|
+
max_results: {
|
|
174
|
+
type: 'integer',
|
|
175
|
+
description: 'Maximum number of results to return',
|
|
176
|
+
default: 5,
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
required: ['query'],
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: 'read_file',
|
|
184
|
+
description: 'Read the contents of a file',
|
|
185
|
+
parameters: {
|
|
186
|
+
type: 'object',
|
|
187
|
+
properties: {
|
|
188
|
+
path: {
|
|
189
|
+
type: 'string',
|
|
190
|
+
description: 'Path to the file to read',
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
required: ['path'],
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: 'write_file',
|
|
198
|
+
description: 'Write content to a file',
|
|
199
|
+
parameters: {
|
|
200
|
+
type: 'object',
|
|
201
|
+
properties: {
|
|
202
|
+
path: {
|
|
203
|
+
type: 'string',
|
|
204
|
+
description: 'Path to the file to write',
|
|
205
|
+
},
|
|
206
|
+
content: {
|
|
207
|
+
type: 'string',
|
|
208
|
+
description: 'Content to write to the file',
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
required: ['path', 'content'],
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: 'spawn_subagent',
|
|
216
|
+
description: 'Spawn a subagent to handle a specific task',
|
|
217
|
+
parameters: {
|
|
218
|
+
type: 'object',
|
|
219
|
+
properties: {
|
|
220
|
+
task: {
|
|
221
|
+
type: 'string',
|
|
222
|
+
description: 'Task description for the subagent',
|
|
223
|
+
},
|
|
224
|
+
agent_type: {
|
|
225
|
+
type: 'string',
|
|
226
|
+
description: 'Type of agent to spawn',
|
|
227
|
+
enum: ['pi', 'claude', 'opencode'],
|
|
228
|
+
default: 'pi',
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
required: ['task'],
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
];
|
|
235
|
+
// Make streaming API call
|
|
236
|
+
const stream = await this.createPiStream({
|
|
237
|
+
model: modelId,
|
|
238
|
+
messages,
|
|
239
|
+
tools,
|
|
240
|
+
max_tokens: options.maxTokens || 8192,
|
|
241
|
+
temperature: 0.3,
|
|
242
|
+
stream: true,
|
|
243
|
+
});
|
|
244
|
+
let textAccumulated = '';
|
|
245
|
+
let currentToolCall = null;
|
|
246
|
+
for await (const chunk of stream) {
|
|
247
|
+
switch (chunk.type) {
|
|
248
|
+
case 'message_start':
|
|
249
|
+
// Message started
|
|
250
|
+
break;
|
|
251
|
+
case 'content_delta':
|
|
252
|
+
if (chunk.data?.text) {
|
|
253
|
+
textAccumulated += chunk.data.text;
|
|
254
|
+
yield this.createTextDeltaEvent(runId, chunk.data.text, chunk.data.accumulated || textAccumulated);
|
|
255
|
+
}
|
|
256
|
+
break;
|
|
257
|
+
case 'tool_call_start':
|
|
258
|
+
if (chunk.data?.tool_name && chunk.data?.tool_id) {
|
|
259
|
+
currentToolCall = {
|
|
260
|
+
id: chunk.data.tool_id,
|
|
261
|
+
name: chunk.data.tool_name,
|
|
262
|
+
input: '',
|
|
263
|
+
};
|
|
264
|
+
yield this.createToolCallStartEvent(runId, currentToolCall.id, currentToolCall.name, '');
|
|
265
|
+
}
|
|
266
|
+
break;
|
|
267
|
+
case 'tool_call_delta':
|
|
268
|
+
if (currentToolCall && chunk.data?.tool_input) {
|
|
269
|
+
currentToolCall.input += chunk.data.tool_input;
|
|
270
|
+
yield {
|
|
271
|
+
...this.createBaseEvent('tool_input_delta', runId),
|
|
272
|
+
type: 'tool_input_delta',
|
|
273
|
+
toolCallId: currentToolCall.id,
|
|
274
|
+
delta: chunk.data.tool_input,
|
|
275
|
+
inputAccumulated: currentToolCall.input,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
break;
|
|
279
|
+
case 'tool_call_ready':
|
|
280
|
+
if (currentToolCall) {
|
|
281
|
+
yield {
|
|
282
|
+
...this.createBaseEvent('tool_call_ready', runId),
|
|
283
|
+
type: 'tool_call_ready',
|
|
284
|
+
toolCallId: currentToolCall.id,
|
|
285
|
+
toolName: currentToolCall.name,
|
|
286
|
+
input: currentToolCall.input,
|
|
287
|
+
};
|
|
288
|
+
// Execute the tool (mock execution)
|
|
289
|
+
const toolResult = await this.executeMockTool(currentToolCall.name, currentToolCall.input);
|
|
290
|
+
yield this.createToolResultEvent(runId, currentToolCall.id, currentToolCall.name, toolResult, 200 // mock duration
|
|
291
|
+
);
|
|
292
|
+
currentToolCall = null;
|
|
293
|
+
}
|
|
294
|
+
break;
|
|
295
|
+
case 'tool_result':
|
|
296
|
+
// Tool result is handled in tool_call_ready
|
|
297
|
+
break;
|
|
298
|
+
case 'message_stop':
|
|
299
|
+
if (chunk.data?.usage) {
|
|
300
|
+
const cost = this.extractCostFromUsage(chunk.data.usage, modelId);
|
|
301
|
+
if (cost) {
|
|
302
|
+
yield this.createCostEvent(runId, cost);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
yield this.createMessageStopEvent(runId, textAccumulated);
|
|
306
|
+
break;
|
|
307
|
+
case 'error':
|
|
308
|
+
yield this.createErrorEvent(runId, 'INTERNAL', chunk.data?.error_message || 'Unknown error', false);
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
315
|
+
yield this.createErrorEvent(runId, 'INTERNAL', `SDK error: ${message}`, false);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
async detectAuth() {
|
|
319
|
+
// Check Pi-specific API key first
|
|
320
|
+
const piKey = process.env['PI_API_KEY'];
|
|
321
|
+
if (piKey) {
|
|
322
|
+
return {
|
|
323
|
+
status: 'authenticated',
|
|
324
|
+
method: 'api_key',
|
|
325
|
+
identity: `pi:...${piKey.slice(-4)}`,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
// Check common provider keys that Pi might support
|
|
329
|
+
const anthropicKey = process.env['ANTHROPIC_API_KEY'];
|
|
330
|
+
if (anthropicKey) {
|
|
331
|
+
return {
|
|
332
|
+
status: 'authenticated',
|
|
333
|
+
method: 'api_key',
|
|
334
|
+
identity: `anthropic:...${anthropicKey.slice(-4)}`,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
const openaiKey = process.env['OPENAI_API_KEY'];
|
|
338
|
+
if (openaiKey) {
|
|
339
|
+
return {
|
|
340
|
+
status: 'authenticated',
|
|
341
|
+
method: 'api_key',
|
|
342
|
+
identity: `openai:...${openaiKey.slice(-4)}`,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
// Check Pi settings file
|
|
346
|
+
const piHome = path.join(os.homedir(), '.pi', 'agent');
|
|
347
|
+
const settingsPath = path.join(piHome, 'settings.json');
|
|
348
|
+
try {
|
|
349
|
+
const settings = await readJsonFile(settingsPath);
|
|
350
|
+
if (settings?.user?.id) {
|
|
351
|
+
return {
|
|
352
|
+
status: 'authenticated',
|
|
353
|
+
method: 'oauth',
|
|
354
|
+
identity: `pi:${settings.user.id}`,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
// Settings file not found or invalid
|
|
360
|
+
}
|
|
361
|
+
return { status: 'unauthenticated' };
|
|
362
|
+
}
|
|
363
|
+
getAuthGuidance() {
|
|
364
|
+
return {
|
|
365
|
+
agent: 'pi-sdk',
|
|
366
|
+
providerName: 'Pi',
|
|
367
|
+
steps: [
|
|
368
|
+
{
|
|
369
|
+
step: 1,
|
|
370
|
+
description: 'Get a Pi API key from the Pi platform',
|
|
371
|
+
url: 'https://pi.ai/api-keys'
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
step: 2,
|
|
375
|
+
description: 'Set the PI_API_KEY environment variable',
|
|
376
|
+
command: 'export PI_API_KEY=pi-...'
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
step: 3,
|
|
380
|
+
description: 'Alternatively, set a provider API key (Anthropic, OpenAI)',
|
|
381
|
+
command: 'export ANTHROPIC_API_KEY=sk-ant-...'
|
|
382
|
+
},
|
|
383
|
+
],
|
|
384
|
+
envVars: [
|
|
385
|
+
{ name: 'PI_API_KEY', description: 'Pi platform API key', required: false, exampleFormat: 'pi-...' },
|
|
386
|
+
{ name: 'ANTHROPIC_API_KEY', description: 'Anthropic API key', required: false, exampleFormat: 'sk-ant-...' },
|
|
387
|
+
{ name: 'OPENAI_API_KEY', description: 'OpenAI API key', required: false, exampleFormat: 'sk-...' },
|
|
388
|
+
],
|
|
389
|
+
documentationUrls: ['https://pi.ai/docs/api'],
|
|
390
|
+
verifyCommand: 'pi --version',
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
sessionDir(_cwd) {
|
|
394
|
+
return path.join(os.homedir(), '.pi', 'agent', 'sessions');
|
|
395
|
+
}
|
|
396
|
+
async parseSessionFile(filePath) {
|
|
397
|
+
const parsed = await parseJsonlSessionFile(filePath, 'pi-sdk');
|
|
398
|
+
return { ...parsed, agent: 'pi-sdk' };
|
|
399
|
+
}
|
|
400
|
+
async listSessionFiles(_cwd) {
|
|
401
|
+
return listJsonlFiles(this.sessionDir());
|
|
402
|
+
}
|
|
403
|
+
async readConfig(_cwd) {
|
|
404
|
+
const filePath = this.configSchema.configFilePaths?.[0];
|
|
405
|
+
if (!filePath)
|
|
406
|
+
return { agent: 'pi-sdk', source: 'global' };
|
|
407
|
+
const data = (await readJsonFile(filePath)) ?? {};
|
|
408
|
+
return { agent: 'pi-sdk', source: 'global', filePaths: [filePath], ...data };
|
|
409
|
+
}
|
|
410
|
+
async writeConfig(config, _cwd) {
|
|
411
|
+
const filePath = this.configSchema.configFilePaths?.[0];
|
|
412
|
+
if (!filePath)
|
|
413
|
+
return;
|
|
414
|
+
const existing = (await readJsonFile(filePath)) ?? {};
|
|
415
|
+
const { agent: _a, source: _s, filePaths: _fp, ...rest } = config;
|
|
416
|
+
void _a;
|
|
417
|
+
void _s;
|
|
418
|
+
void _fp;
|
|
419
|
+
await writeJsonFileAtomic(filePath, { ...existing, ...rest });
|
|
420
|
+
}
|
|
421
|
+
// ── Private implementation methods ─────────────────────────────────
|
|
422
|
+
/**
|
|
423
|
+
* Create Pi SDK client (mock implementation).
|
|
424
|
+
* In real implementation, this would return an actual Pi SDK client.
|
|
425
|
+
*/
|
|
426
|
+
createPiClient() {
|
|
427
|
+
// Mock client - in real implementation, this would be:
|
|
428
|
+
// return new PiClient({ apiKey: process.env.PI_API_KEY });
|
|
429
|
+
return {};
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Create Pi stream (mock implementation).
|
|
433
|
+
* In real implementation, this would use the Pi SDK.
|
|
434
|
+
*/
|
|
435
|
+
async createPiStream(params) {
|
|
436
|
+
// Mock streaming response
|
|
437
|
+
const mockChunks = [
|
|
438
|
+
{
|
|
439
|
+
type: 'message_start',
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
type: 'content_delta',
|
|
443
|
+
data: {
|
|
444
|
+
text: 'I\'ll help you with that task. ',
|
|
445
|
+
accumulated: 'I\'ll help you with that task. ',
|
|
446
|
+
},
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
type: 'content_delta',
|
|
450
|
+
data: {
|
|
451
|
+
text: 'Let me search for current information first.',
|
|
452
|
+
accumulated: 'I\'ll help you with that task. Let me search for current information first.',
|
|
453
|
+
},
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
type: 'tool_call_start',
|
|
457
|
+
data: {
|
|
458
|
+
tool_id: 'call_123',
|
|
459
|
+
tool_name: 'search_web',
|
|
460
|
+
},
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
type: 'tool_call_delta',
|
|
464
|
+
data: {
|
|
465
|
+
tool_input: '{"query": "latest information about ',
|
|
466
|
+
},
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
type: 'tool_call_delta',
|
|
470
|
+
data: {
|
|
471
|
+
tool_input: 'your topic"}',
|
|
472
|
+
},
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
type: 'tool_call_ready',
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
type: 'content_delta',
|
|
479
|
+
data: {
|
|
480
|
+
text: '\n\nBased on my search, here\'s what I found...',
|
|
481
|
+
accumulated: 'I\'ll help you with that task. Let me search for current information first.\n\nBased on my search, here\'s what I found...',
|
|
482
|
+
},
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
type: 'message_stop',
|
|
486
|
+
data: {
|
|
487
|
+
usage: {
|
|
488
|
+
input_tokens: 120,
|
|
489
|
+
output_tokens: 80,
|
|
490
|
+
total_tokens: 200,
|
|
491
|
+
},
|
|
492
|
+
},
|
|
493
|
+
},
|
|
494
|
+
];
|
|
495
|
+
return {
|
|
496
|
+
async *[Symbol.asyncIterator]() {
|
|
497
|
+
for (const chunk of mockChunks) {
|
|
498
|
+
await new Promise(resolve => setTimeout(resolve, 150)); // Simulate streaming delay
|
|
499
|
+
yield chunk;
|
|
500
|
+
}
|
|
501
|
+
},
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Execute mock tool calls.
|
|
506
|
+
*/
|
|
507
|
+
async executeMockTool(name, inputJson) {
|
|
508
|
+
try {
|
|
509
|
+
const input = JSON.parse(inputJson);
|
|
510
|
+
switch (name) {
|
|
511
|
+
case 'search_web':
|
|
512
|
+
return `Found ${input.max_results || 5} results for "${input.query}":\n1. Sample result 1\n2. Sample result 2\n3. Sample result 3`;
|
|
513
|
+
case 'read_file':
|
|
514
|
+
return `Mock file contents for: ${input.path}`;
|
|
515
|
+
case 'write_file':
|
|
516
|
+
return `Successfully wrote ${input.content.length} characters to ${input.path}`;
|
|
517
|
+
case 'spawn_subagent':
|
|
518
|
+
return `Spawned ${input.agent_type || 'pi'} subagent for task: ${input.task}`;
|
|
519
|
+
default:
|
|
520
|
+
return `Unknown tool: ${name}`;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
catch (error) {
|
|
524
|
+
return `Error executing tool ${name}: ${error}`;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Extract cost information from Pi usage object.
|
|
529
|
+
*/
|
|
530
|
+
extractCostFromUsage(usage, modelId) {
|
|
531
|
+
const model = this.models.find(m => m.modelId === modelId);
|
|
532
|
+
if (!model) {
|
|
533
|
+
return {
|
|
534
|
+
totalUsd: 0,
|
|
535
|
+
inputTokens: usage.input_tokens,
|
|
536
|
+
outputTokens: usage.output_tokens,
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
const inputCost = (usage.input_tokens / 1_000_000) * model.inputPricePerMillion;
|
|
540
|
+
const outputCost = (usage.output_tokens / 1_000_000) * model.outputPricePerMillion;
|
|
541
|
+
const totalCost = inputCost + outputCost;
|
|
542
|
+
return {
|
|
543
|
+
totalUsd: totalCost,
|
|
544
|
+
inputTokens: usage.input_tokens,
|
|
545
|
+
outputTokens: usage.output_tokens,
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
//# sourceMappingURL=pi-sdk-adapter.js.map
|