@agent-harness-experimental/adapter-pi 0.0.0 → 0.0.1
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/LICENSE +1 -0
- package/README.md +101 -2
- package/dist/adapter.d.ts +18 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +143 -0
- package/dist/adapter.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/model-resolver.d.mts +31 -0
- package/dist/model-resolver.d.mts.map +1 -0
- package/dist/model-resolver.mjs +42 -0
- package/dist/model-resolver.mjs.map +1 -0
- package/dist/model-resolver.mts +76 -0
- package/dist/prepare-step-extension.d.ts +31 -0
- package/dist/prepare-step-extension.d.ts.map +1 -0
- package/dist/prepare-step-extension.js +48 -0
- package/dist/prepare-step-extension.js.map +1 -0
- package/dist/remote-ops.d.ts +40 -0
- package/dist/remote-ops.d.ts.map +1 -0
- package/dist/remote-ops.js +217 -0
- package/dist/remote-ops.js.map +1 -0
- package/dist/setup.d.ts +6 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +56 -0
- package/dist/setup.js.map +1 -0
- package/dist/shared.d.ts +7 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +41 -0
- package/dist/shared.js.map +1 -0
- package/dist/split-runtime-support.d.ts +92 -0
- package/dist/split-runtime-support.d.ts.map +1 -0
- package/dist/split-runtime-support.js +429 -0
- package/dist/split-runtime-support.js.map +1 -0
- package/dist/split-runtime.d.ts +63 -0
- package/dist/split-runtime.d.ts.map +1 -0
- package/dist/split-runtime.js +894 -0
- package/dist/split-runtime.js.map +1 -0
- package/dist/workspace-mirror.d.ts +8 -0
- package/dist/workspace-mirror.d.ts.map +1 -0
- package/dist/workspace-mirror.js +150 -0
- package/dist/workspace-mirror.js.map +1 -0
- package/dist/workspace-vfs.d.ts +8 -0
- package/dist/workspace-vfs.d.ts.map +1 -0
- package/dist/workspace-vfs.js +300 -0
- package/dist/workspace-vfs.js.map +1 -0
- package/package.json +59 -3
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { realpathSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
function shellQuote(value) {
|
|
4
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
5
|
+
}
|
|
6
|
+
function isInsidePath(parent, candidate) {
|
|
7
|
+
const relative = path.relative(parent, candidate);
|
|
8
|
+
return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
|
|
9
|
+
}
|
|
10
|
+
function isInsidePosixPath(parent, candidate) {
|
|
11
|
+
const relative = path.posix.relative(parent, candidate);
|
|
12
|
+
return relative === '' || (!relative.startsWith('..') && !path.posix.isAbsolute(relative));
|
|
13
|
+
}
|
|
14
|
+
function canonicalizeForContainment(inputPath) {
|
|
15
|
+
try {
|
|
16
|
+
return realpathSync.native(inputPath);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
const parent = path.dirname(inputPath);
|
|
20
|
+
if (parent === inputPath) {
|
|
21
|
+
return inputPath;
|
|
22
|
+
}
|
|
23
|
+
return path.join(/*turbopackIgnore: true*/ canonicalizeForContainment(parent), path.basename(inputPath));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function createSplitPathMapper(localWorkDir, remoteWorkDir) {
|
|
27
|
+
const normalizedLocal = path.resolve(/*turbopackIgnore: true*/ localWorkDir);
|
|
28
|
+
const normalizedRemote = path.posix.normalize(remoteWorkDir);
|
|
29
|
+
const canonicalLocal = canonicalizeForContainment(normalizedLocal);
|
|
30
|
+
return {
|
|
31
|
+
localWorkDir: normalizedLocal,
|
|
32
|
+
remoteWorkDir: normalizedRemote,
|
|
33
|
+
toRemotePath(inputPath) {
|
|
34
|
+
if (path.posix.isAbsolute(inputPath)) {
|
|
35
|
+
const normalizedInput = path.posix.normalize(inputPath);
|
|
36
|
+
if (isInsidePosixPath(normalizedRemote, normalizedInput)) {
|
|
37
|
+
return normalizedInput;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const resolvedLocal = path.isAbsolute(inputPath)
|
|
41
|
+
? path.resolve(/*turbopackIgnore: true*/ inputPath)
|
|
42
|
+
: path.resolve(/*turbopackIgnore: true*/ normalizedLocal, inputPath);
|
|
43
|
+
const canonicalResolvedLocal = canonicalizeForContainment(resolvedLocal);
|
|
44
|
+
if (!isInsidePath(normalizedLocal, resolvedLocal) || !isInsidePath(canonicalLocal, canonicalResolvedLocal)) {
|
|
45
|
+
throw new Error(`Split Pi path escapes the workspace: ${inputPath}`);
|
|
46
|
+
}
|
|
47
|
+
const relative = path.relative(normalizedLocal, resolvedLocal).split(path.sep).join('/');
|
|
48
|
+
return relative ? path.posix.join(normalizedRemote, relative) : normalizedRemote;
|
|
49
|
+
},
|
|
50
|
+
toRelativePath(inputPath) {
|
|
51
|
+
const remotePath = path.posix.isAbsolute(inputPath)
|
|
52
|
+
? path.posix.normalize(inputPath)
|
|
53
|
+
: path.posix.join(normalizedRemote, inputPath.split(path.sep).join('/'));
|
|
54
|
+
const relative = path.posix.relative(normalizedRemote, remotePath);
|
|
55
|
+
return relative || '.';
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function createRemoteOperations(options) {
|
|
60
|
+
const runShell = async (command, input = {}) => {
|
|
61
|
+
const result = await options.sandbox.exec({
|
|
62
|
+
cmd: 'bash',
|
|
63
|
+
args: ['-lc', command],
|
|
64
|
+
...(input.cwd ? { cwd: options.paths.toRemotePath(input.cwd) } : {}),
|
|
65
|
+
...(options.env ? { env: options.env } : {}),
|
|
66
|
+
...(input.signal ? { signal: input.signal } : {}),
|
|
67
|
+
});
|
|
68
|
+
const combined = `${result.stdout}${result.stderr}`;
|
|
69
|
+
if (combined.length > 0) {
|
|
70
|
+
input.onData?.(Buffer.from(combined));
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
exitCode: result.exitCode,
|
|
74
|
+
output: Buffer.from(combined),
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
const readBuffer = async (inputPath) => {
|
|
78
|
+
const buffer = await options.sandbox.readFileToBuffer({
|
|
79
|
+
path: options.paths.toRemotePath(inputPath),
|
|
80
|
+
});
|
|
81
|
+
if (!buffer) {
|
|
82
|
+
throw new Error(`Path not found: ${inputPath}`);
|
|
83
|
+
}
|
|
84
|
+
return buffer;
|
|
85
|
+
};
|
|
86
|
+
const writeFile = async (inputPath, content) => {
|
|
87
|
+
const remotePath = options.paths.toRemotePath(inputPath);
|
|
88
|
+
const previous = await options.sandbox.readFileToBuffer({ path: remotePath });
|
|
89
|
+
await runShell(`mkdir -p ${shellQuote(path.posix.dirname(remotePath))}`);
|
|
90
|
+
await options.sandbox.writeFiles([
|
|
91
|
+
{
|
|
92
|
+
path: remotePath,
|
|
93
|
+
content,
|
|
94
|
+
},
|
|
95
|
+
]);
|
|
96
|
+
options.onFileChange?.(previous ? 'modify' : 'create', options.paths.toRelativePath(remotePath), Buffer.from(content));
|
|
97
|
+
};
|
|
98
|
+
const editFile = async (inputPath, oldText, newText) => {
|
|
99
|
+
const current = (await readBuffer(inputPath)).toString('utf8');
|
|
100
|
+
const index = current.indexOf(oldText);
|
|
101
|
+
if (index === -1) {
|
|
102
|
+
throw new Error(`Text to replace was not found in ${inputPath}`);
|
|
103
|
+
}
|
|
104
|
+
const updated = `${current.slice(0, index)}${newText}${current.slice(index + oldText.length)}`;
|
|
105
|
+
await writeFile(inputPath, updated);
|
|
106
|
+
return updated;
|
|
107
|
+
};
|
|
108
|
+
const listDirectory = async (inputPath = '.', limit = 500) => {
|
|
109
|
+
const remotePath = options.paths.toRemotePath(inputPath);
|
|
110
|
+
const result = await runShell([
|
|
111
|
+
`if [ ! -e ${shellQuote(remotePath)} ]; then echo "__PI_SPLIT_LS_NOT_FOUND__"; exit 2; fi`,
|
|
112
|
+
`if [ ! -d ${shellQuote(remotePath)} ]; then echo "__PI_SPLIT_LS_NOT_DIR__"; exit 3; fi`,
|
|
113
|
+
`cd ${shellQuote(remotePath)}`,
|
|
114
|
+
'ls -1Ap',
|
|
115
|
+
].join('; '));
|
|
116
|
+
const output = result.output.toString('utf8').trim();
|
|
117
|
+
if (output.includes('__PI_SPLIT_LS_NOT_FOUND__')) {
|
|
118
|
+
throw new Error(`Path not found: ${inputPath}`);
|
|
119
|
+
}
|
|
120
|
+
if (output.includes('__PI_SPLIT_LS_NOT_DIR__')) {
|
|
121
|
+
throw new Error(`Not a directory: ${inputPath}`);
|
|
122
|
+
}
|
|
123
|
+
return output
|
|
124
|
+
.split('\n')
|
|
125
|
+
.filter(Boolean)
|
|
126
|
+
.map((line) => line.replace(/[*=@|]$/, ''))
|
|
127
|
+
.sort((left, right) => left.toLowerCase().localeCompare(right.toLowerCase()))
|
|
128
|
+
.slice(0, limit);
|
|
129
|
+
};
|
|
130
|
+
const findFiles = async (pattern, inputPath = '.', limit = 1_000) => {
|
|
131
|
+
const remotePath = options.paths.toRemotePath(inputPath);
|
|
132
|
+
const result = await runShell([
|
|
133
|
+
`if [ ! -e ${shellQuote(remotePath)} ]; then echo "__PI_SPLIT_FIND_NOT_FOUND__"; exit 2; fi`,
|
|
134
|
+
`if [ -d ${shellQuote(remotePath)} ]; then find ${shellQuote(remotePath)} -type f -print; else printf '%s\\n' ${shellQuote(remotePath)}; fi`,
|
|
135
|
+
].join('; '));
|
|
136
|
+
const output = result.output.toString('utf8').trim();
|
|
137
|
+
if (output.includes('__PI_SPLIT_FIND_NOT_FOUND__')) {
|
|
138
|
+
throw new Error(`Path not found: ${inputPath}`);
|
|
139
|
+
}
|
|
140
|
+
const searchRoot = remotePath;
|
|
141
|
+
return output
|
|
142
|
+
.split('\n')
|
|
143
|
+
.filter(Boolean)
|
|
144
|
+
.map((absolutePath) => {
|
|
145
|
+
if (absolutePath === searchRoot) {
|
|
146
|
+
return path.posix.basename(absolutePath);
|
|
147
|
+
}
|
|
148
|
+
return path.posix.relative(searchRoot, absolutePath);
|
|
149
|
+
})
|
|
150
|
+
.filter((candidate) => candidate.length > 0 && path.matchesGlob(candidate, pattern))
|
|
151
|
+
.sort((left, right) => left.toLowerCase().localeCompare(right.toLowerCase()))
|
|
152
|
+
.slice(0, limit);
|
|
153
|
+
};
|
|
154
|
+
const grepFiles = async (pattern, input) => {
|
|
155
|
+
const remotePath = options.paths.toRemotePath(input.path ?? '.');
|
|
156
|
+
const relativeTarget = options.paths.toRelativePath(remotePath);
|
|
157
|
+
const flags = [
|
|
158
|
+
'-R',
|
|
159
|
+
'-n',
|
|
160
|
+
'--binary-files=without-match',
|
|
161
|
+
...(input.ignoreCase ? ['-i'] : []),
|
|
162
|
+
...(input.literal ? ['-F'] : []),
|
|
163
|
+
...(typeof input.context === 'number' && input.context > 0 ? ['-C', String(input.context)] : []),
|
|
164
|
+
...(input.glob ? ['--include', input.glob] : []),
|
|
165
|
+
];
|
|
166
|
+
const limit = Math.max(1, input.limit ?? 100);
|
|
167
|
+
const result = await runShell([
|
|
168
|
+
`if [ ! -e ${shellQuote(remotePath)} ]; then echo "__PI_SPLIT_GREP_NOT_FOUND__"; exit 2; fi`,
|
|
169
|
+
`cd ${shellQuote(options.paths.remoteWorkDir)}`,
|
|
170
|
+
`grep ${flags.map(shellQuote).join(' ')} -- ${shellQuote(pattern)} ${shellQuote(relativeTarget)} 2>/dev/null | head -n ${limit}`,
|
|
171
|
+
].join('; '));
|
|
172
|
+
const output = result.output.toString('utf8').trim();
|
|
173
|
+
if (output.includes('__PI_SPLIT_GREP_NOT_FOUND__')) {
|
|
174
|
+
throw new Error(`Path not found: ${input.path ?? '.'}`);
|
|
175
|
+
}
|
|
176
|
+
return output || 'No matches found';
|
|
177
|
+
};
|
|
178
|
+
return {
|
|
179
|
+
paths: options.paths,
|
|
180
|
+
readBuffer,
|
|
181
|
+
writeFile,
|
|
182
|
+
editFile,
|
|
183
|
+
listDirectory,
|
|
184
|
+
findFiles,
|
|
185
|
+
grepFiles,
|
|
186
|
+
async access(inputPath) {
|
|
187
|
+
await readBuffer(inputPath);
|
|
188
|
+
},
|
|
189
|
+
async exec(command, cwd, input) {
|
|
190
|
+
const controller = new AbortController();
|
|
191
|
+
const timeoutId = typeof input.timeout === 'number' && input.timeout > 0
|
|
192
|
+
? setTimeout(() => {
|
|
193
|
+
controller.abort();
|
|
194
|
+
}, input.timeout)
|
|
195
|
+
: undefined;
|
|
196
|
+
const forwardedSignal = input.signal;
|
|
197
|
+
const onAbort = () => {
|
|
198
|
+
controller.abort();
|
|
199
|
+
};
|
|
200
|
+
forwardedSignal?.addEventListener('abort', onAbort, { once: true });
|
|
201
|
+
try {
|
|
202
|
+
return await runShell(command, {
|
|
203
|
+
cwd,
|
|
204
|
+
signal: controller.signal,
|
|
205
|
+
onData: input.onData,
|
|
206
|
+
}).then((result) => ({ exitCode: result.exitCode }));
|
|
207
|
+
}
|
|
208
|
+
finally {
|
|
209
|
+
forwardedSignal?.removeEventListener('abort', onAbort);
|
|
210
|
+
if (timeoutId) {
|
|
211
|
+
clearTimeout(timeoutId);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=remote-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-ops.js","sourceRoot":"","sources":["../src/remote-ops.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAgB7B,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,SAAiB;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClD,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,SAAiB;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxD,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,0BAA0B,CAAC,SAAiB;IACnD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3G,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,YAAoB,EAAE,aAAqB;IAC/E,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,0BAA0B,CAAC,eAAe,CAAC,CAAC;IAEnE,OAAO;QACL,YAAY,EAAE,eAAe;QAC7B,aAAa,EAAE,gBAAgB;QAC/B,YAAY,CAAC,SAAiB;YAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACxD,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,eAAe,CAAC,EAAE,CAAC;oBACzD,OAAO,eAAe,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC9C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,SAAS,CAAC;gBACnD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;YACvE,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,aAAa,CAAC,CAAC;YACzE,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,sBAAsB,CAAC,EAAE,CAAC;gBAC3G,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzF,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACnF,CAAC;QACD,cAAc,CAAC,SAAiB;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;gBACjD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;gBACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;YACnE,OAAO,QAAQ,IAAI,GAAG,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAyB;IAC9D,MAAM,QAAQ,GAAG,KAAK,EACpB,OAAe,EACf,QAII,EAAE,EACgD,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACxC,GAAG,EAAE,MAAM;YACX,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;YACtB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC9B,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,EAAE,SAAiB,EAAmB,EAAE;QAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACpD,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EAAE,SAAiB,EAAE,OAAe,EAAiB,EAAE;QAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9E,MAAM,QAAQ,CAAC,YAAY,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;QACzE,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;YAC/B;gBACE,IAAI,EAAE,UAAU;gBAChB,OAAO;aACR;SACF,CAAC,CAAC;QACH,OAAO,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,SAAiB,EAAE,OAAe,EAAE,OAAe,EAAmB,EAAE;QAC9F,MAAM,OAAO,GAAG,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/F,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,SAAS,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,EAAqB,EAAE;QAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B;YACE,aAAa,UAAU,CAAC,UAAU,CAAC,uDAAuD;YAC1F,aAAa,UAAU,CAAC,UAAU,CAAC,qDAAqD;YACxF,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE;YAC9B,SAAS;SACV,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;aAC1C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;aAC5E,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EAAE,OAAe,EAAE,SAAS,GAAG,GAAG,EAAE,KAAK,GAAG,KAAK,EAAqB,EAAE;QAC7F,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B;YACE,aAAa,UAAU,CAAC,UAAU,CAAC,yDAAyD;YAC5F,WAAW,UAAU,CAAC,UAAU,CAAC,iBAAiB,UAAU,CAAC,UAAU,CAAC,wCAAwC,UAAU,CAAC,UAAU,CAAC,MAAM;SAC7I,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,CAAC;QAC9B,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;YACpB,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;aACnF,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;aAC5E,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EACrB,OAAe,EACf,KAOC,EACgB,EAAE;QACnB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG;YACZ,IAAI;YACJ,IAAI;YACJ,8BAA8B;YAC9B,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACjD,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B;YACE,aAAa,UAAU,CAAC,UAAU,CAAC,yDAAyD;YAC5F,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;YAC/C,QAAQ,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,0BAA0B,KAAK,EAAE;SACjI,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,MAAM,IAAI,kBAAkB,CAAC;IACtC,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU;QACV,SAAS;QACT,QAAQ;QACR,aAAa;QACb,SAAS;QACT,SAAS;QACT,KAAK,CAAC,MAAM,CAAC,SAAiB;YAC5B,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,GAAW,EAAE,KAAiF;YACxH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GACb,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC;gBACpD,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;oBACd,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;gBACnB,CAAC,CAAC,SAAS,CAAC;YAEhB,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC;YACrC,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC,CAAC;YACF,eAAe,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAEpE,IAAI,CAAC;gBACH,OAAO,MAAM,QAAQ,CAAC,OAAO,EAAE;oBAC7B,GAAG;oBACH,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;oBAAS,CAAC;gBACT,eAAe,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACvD,IAAI,SAAS,EAAE,CAAC;oBACd,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AdapterSandboxSetup, AdapterSupportMatrixRow } from 'agent-harness-experimental';
|
|
2
|
+
export declare const PI_SANDBOX_SETUP: AdapterSandboxSetup;
|
|
3
|
+
export declare const PI_DEFAULT_CONTEXT_WINDOW = 200000;
|
|
4
|
+
export declare const PI_SUPPORT_MATRIX_ROW: AdapterSupportMatrixRow;
|
|
5
|
+
export declare function getPiSandboxSetup(): AdapterSandboxSetup;
|
|
6
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAG1H,eAAO,MAAM,gBAAgB,EAAE,mBAoB9B,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAAU,CAAC;AAEjD,eAAO,MAAM,qBAAqB,EAAE,uBA8BnC,CAAC;AAEF,wBAAgB,iBAAiB,IAAI,mBAAmB,CAEvD"}
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { renderPiAgentFile, renderPiSkillFile } from './shared.js';
|
|
2
|
+
export const PI_SANDBOX_SETUP = {
|
|
3
|
+
deps: [],
|
|
4
|
+
getBridgeFiles() {
|
|
5
|
+
return [];
|
|
6
|
+
},
|
|
7
|
+
getSandboxFiles({ workDir, skills, agents }) {
|
|
8
|
+
const files = (skills ?? []).map((skill) => ({
|
|
9
|
+
path: `${workDir}/.pi/skills/${skill.name}/SKILL.md`,
|
|
10
|
+
content: renderPiSkillFile(skill),
|
|
11
|
+
}));
|
|
12
|
+
for (const [name, definition] of Object.entries(agents ?? {})) {
|
|
13
|
+
files.push({
|
|
14
|
+
path: `${workDir}/.pi/agents/${name}.md`,
|
|
15
|
+
content: renderPiAgentFile(name, definition),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return files;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export const PI_DEFAULT_CONTEXT_WINDOW = 200_000;
|
|
22
|
+
export const PI_SUPPORT_MATRIX_ROW = {
|
|
23
|
+
key: 'pi',
|
|
24
|
+
readmeName: 'Pi',
|
|
25
|
+
skills: '`.pi/skills/{name}/SKILL.md`',
|
|
26
|
+
subagents: 'Host-side `delegate_task` tool with `.pi/agents/{name}.md` materialization',
|
|
27
|
+
prepareStep: '`continuation`',
|
|
28
|
+
mcp: 'AI SDK tools via `@ai-sdk/mcp`',
|
|
29
|
+
capabilities: {
|
|
30
|
+
customTools: { status: 'supported' },
|
|
31
|
+
toolFiltering: { status: 'supported' },
|
|
32
|
+
postToolUseHooks: { status: 'supported' },
|
|
33
|
+
toolInterception: { status: 'supported' },
|
|
34
|
+
usage: { status: 'partial', note: 'Cost is available in replay, but token accounting is not complete enough for strict assertions.' },
|
|
35
|
+
cost: { status: 'partial', note: 'Cost is surfaced where the host runtime reports it.' },
|
|
36
|
+
httpMocking: { status: 'supported' },
|
|
37
|
+
prepareStep: { status: 'partial', normalized: true, note: 'Normalized at continuation boundaries.' },
|
|
38
|
+
subagents: { status: 'supported', normalized: true, note: 'Host-side subagents emit normalized start/finish events.' },
|
|
39
|
+
toolApprovals: { status: 'supported', normalized: true },
|
|
40
|
+
streamingApprovals: { status: 'unsupported', note: 'Approval continuation is not normalized for stream mode yet.' },
|
|
41
|
+
sameAgentResume: { status: 'supported' },
|
|
42
|
+
conversationResume: {
|
|
43
|
+
status: 'partial',
|
|
44
|
+
note: 'Same-agent resume preserves conversation context; core-history import/export is not a separate contract yet.',
|
|
45
|
+
},
|
|
46
|
+
hostNetworkApproval: { status: 'supported', normalized: true },
|
|
47
|
+
persistence: { status: 'supported' },
|
|
48
|
+
streaming: { status: 'supported' },
|
|
49
|
+
tokenStreaming: { status: 'supported' },
|
|
50
|
+
interactiveTerminal: { status: 'partial', note: 'Host-owned tools support shell operations; PTY parity is still adapter-specific.' },
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
export function getPiSandboxSetup() {
|
|
54
|
+
return PI_SANDBOX_SETUP;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAwB;IACnD,IAAI,EAAE,EAAE;IACR,cAAc;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAA6B;QACpE,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,EAAE,GAAG,OAAO,eAAe,KAAK,CAAC,IAAI,WAAW;YACpD,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,GAAG,OAAO,eAAe,IAAI,KAAK;gBACxC,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAA4B;IAC5D,GAAG,EAAE,IAAI;IACT,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,8BAA8B;IACtC,SAAS,EAAE,4EAA4E;IACvF,WAAW,EAAE,gBAAgB;IAC7B,GAAG,EAAE,gCAAgC;IACrC,YAAY,EAAE;QACZ,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QACpC,aAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QACtC,gBAAgB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QACzC,gBAAgB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QACzC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iGAAiG,EAAE;QACrI,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,qDAAqD,EAAE;QACxF,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QACpC,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,wCAAwC,EAAE;QACpG,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,0DAA0D,EAAE;QACtH,aAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE;QACxD,kBAAkB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,8DAA8D,EAAE;QACnH,eAAe,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QACxC,kBAAkB,EAAE;YAClB,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,8GAA8G;SACrH;QACD,mBAAmB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE;QAC9D,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QACpC,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QAClC,cAAc,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QACvC,mBAAmB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,kFAAkF,EAAE;KACrI;CACF,CAAC;AAEF,MAAM,UAAU,iBAAiB;IAC/B,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|
package/dist/shared.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentDefinition, SkillDefinition } from 'agent-harness-experimental';
|
|
2
|
+
export declare function renderPiSkillFile(skill: SkillDefinition): string;
|
|
3
|
+
export declare function renderPiAgentFile(name: string, definition: AgentDefinition): string;
|
|
4
|
+
export declare function createSubagentPrompt(name: string, definition: AgentDefinition, allowedTools?: string[]): string;
|
|
5
|
+
export declare function createDelegateToolDescription(agents: Record<string, AgentDefinition>): string;
|
|
6
|
+
export declare function filterAgentToolNames(toolNames: string[], allowedTools?: string[]): string[];
|
|
7
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAMnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAEhE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,MAAM,CAWnF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,UAQtG;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,UAKpF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,YAOhF"}
|
package/dist/shared.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
function withFrontmatter(name, description, content) {
|
|
2
|
+
return `---\nname: ${name}\ndescription: ${description}\n---\n\n${content}`;
|
|
3
|
+
}
|
|
4
|
+
export function renderPiSkillFile(skill) {
|
|
5
|
+
return withFrontmatter(skill.name, skill.description, skill.content);
|
|
6
|
+
}
|
|
7
|
+
export function renderPiAgentFile(name, definition) {
|
|
8
|
+
return [
|
|
9
|
+
'---',
|
|
10
|
+
`name: ${name}`,
|
|
11
|
+
`description: ${definition.description}`,
|
|
12
|
+
...(definition.model ? [`model: ${definition.model}`] : []),
|
|
13
|
+
...(definition.tools?.length ? [`tools: ${definition.tools.join(',')}`] : []),
|
|
14
|
+
'---',
|
|
15
|
+
'',
|
|
16
|
+
definition.prompt,
|
|
17
|
+
].join('\n');
|
|
18
|
+
}
|
|
19
|
+
export function createSubagentPrompt(name, definition, allowedTools) {
|
|
20
|
+
return [
|
|
21
|
+
`You are the subagent "${name}".`,
|
|
22
|
+
definition.prompt,
|
|
23
|
+
allowedTools?.length ? `Only use these tools for this delegated task: ${allowedTools.join(', ')}.` : '',
|
|
24
|
+
]
|
|
25
|
+
.filter(Boolean)
|
|
26
|
+
.join('\n\n');
|
|
27
|
+
}
|
|
28
|
+
export function createDelegateToolDescription(agents) {
|
|
29
|
+
return [
|
|
30
|
+
'Delegate a focused task to a specialized subagent in the same workspace.',
|
|
31
|
+
...Object.entries(agents).map(([name, definition]) => `- ${name}: ${definition.description}`),
|
|
32
|
+
].join('\n');
|
|
33
|
+
}
|
|
34
|
+
export function filterAgentToolNames(toolNames, allowedTools) {
|
|
35
|
+
if (!allowedTools?.length) {
|
|
36
|
+
return toolNames;
|
|
37
|
+
}
|
|
38
|
+
const allowed = new Set(allowedTools);
|
|
39
|
+
return toolNames.filter((toolName) => allowed.has(toolName));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAEA,SAAS,eAAe,CAAC,IAAY,EAAE,WAAmB,EAAE,OAAe;IACzE,OAAO,cAAc,IAAI,kBAAkB,WAAW,YAAY,OAAO,EAAE,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,UAA2B;IACzE,OAAO;QACL,KAAK;QACL,SAAS,IAAI,EAAE;QACf,gBAAgB,UAAU,CAAC,WAAW,EAAE;QACxC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,KAAK;QACL,EAAE;QACF,UAAU,CAAC,MAAM;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,UAA2B,EAAE,YAAuB;IACrG,OAAO;QACL,yBAAyB,IAAI,IAAI;QACjC,UAAU,CAAC,MAAM;QACjB,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,iDAAiD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;KACxG;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAuC;IACnF,OAAO;QACL,0EAA0E;QAC1E,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;KAC9F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAmB,EAAE,YAAuB;IAC/E,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { AdapterContext, SandboxFileEntry } from 'agent-harness-experimental';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import type { PiAdapterOptions } from './adapter.js';
|
|
4
|
+
export type PiSessionStats = {
|
|
5
|
+
promptTokens?: number;
|
|
6
|
+
completionTokens?: number;
|
|
7
|
+
inputTokens?: number;
|
|
8
|
+
outputTokens?: number;
|
|
9
|
+
cost?: number;
|
|
10
|
+
};
|
|
11
|
+
export type PiSessionEvent = {
|
|
12
|
+
type: string;
|
|
13
|
+
assistantMessageEvent?: {
|
|
14
|
+
type?: string;
|
|
15
|
+
delta?: string;
|
|
16
|
+
};
|
|
17
|
+
toolCallId?: string;
|
|
18
|
+
toolName?: string;
|
|
19
|
+
input?: unknown;
|
|
20
|
+
content?: unknown;
|
|
21
|
+
isError?: boolean;
|
|
22
|
+
error?: string | {
|
|
23
|
+
errorMessage?: string;
|
|
24
|
+
stopReason?: string;
|
|
25
|
+
};
|
|
26
|
+
message?: {
|
|
27
|
+
role?: string;
|
|
28
|
+
content?: unknown;
|
|
29
|
+
stopReason?: string;
|
|
30
|
+
errorMessage?: string;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export type PiCodingAgentModule = typeof import('@mariozechner/pi-coding-agent');
|
|
34
|
+
export type PiCreateAgentSession = PiCodingAgentModule['createAgentSession'];
|
|
35
|
+
export type PiSession = Awaited<ReturnType<PiCreateAgentSession>>['session'];
|
|
36
|
+
export type PiAuthStorage = ReturnType<PiCodingAgentModule['AuthStorage']['create']>;
|
|
37
|
+
export type PiModelRegistry = ReturnType<PiCodingAgentModule['ModelRegistry']['create']>;
|
|
38
|
+
export type PiResourceLoader = InstanceType<PiCodingAgentModule['DefaultResourceLoader']>;
|
|
39
|
+
export type PiToolDefinition = ReturnType<PiCodingAgentModule['defineTool']>;
|
|
40
|
+
export type PiSettingsManager = ReturnType<PiCodingAgentModule['SettingsManager']['inMemory']>;
|
|
41
|
+
export type PiThinkingLevel = NonNullable<NonNullable<Parameters<PiCreateAgentSession>[0]>['thinkingLevel']>;
|
|
42
|
+
export type PiModelOption = NonNullable<NonNullable<Parameters<PiCreateAgentSession>[0]>['model']>;
|
|
43
|
+
type PiCodingAgentModuleLoader = () => Promise<PiCodingAgentModule>;
|
|
44
|
+
export type PiModel = {
|
|
45
|
+
id?: string;
|
|
46
|
+
name?: string;
|
|
47
|
+
provider?: string;
|
|
48
|
+
baseUrl?: string;
|
|
49
|
+
};
|
|
50
|
+
export declare const splitPiAdapterStateSchema: z.ZodObject<{
|
|
51
|
+
sessionFile: z.ZodOptional<z.ZodString>;
|
|
52
|
+
localRoot: z.ZodOptional<z.ZodString>;
|
|
53
|
+
}, z.core.$strip>;
|
|
54
|
+
export type SplitPiAdapterState = z.infer<typeof splitPiAdapterStateSchema>;
|
|
55
|
+
export declare function parseSplitPiAdapterState(state: unknown): SplitPiAdapterState | undefined;
|
|
56
|
+
export type ToolDecision = {
|
|
57
|
+
approved: boolean;
|
|
58
|
+
reason?: string;
|
|
59
|
+
};
|
|
60
|
+
type HttpHandler = NonNullable<NonNullable<AdapterContext['sandboxConfig']>['httpHandler']>;
|
|
61
|
+
export type ReplayProxyServer = {
|
|
62
|
+
provider: string;
|
|
63
|
+
targetBaseURL: string;
|
|
64
|
+
baseURL: string;
|
|
65
|
+
close(): Promise<void>;
|
|
66
|
+
};
|
|
67
|
+
type ReplayProxyTarget = {
|
|
68
|
+
provider: string;
|
|
69
|
+
targetBaseURL: string;
|
|
70
|
+
};
|
|
71
|
+
type ProviderBaseURLOverrides = Partial<Record<string, string>>;
|
|
72
|
+
export declare const PI_SPLIT_BUILTIN_NAMES: readonly ["read", "write", "edit", "bash", "grep", "find", "ls"];
|
|
73
|
+
export declare const REQUEST_HOST_ACCESS_TOOL_NAME = "RequestHostAccess";
|
|
74
|
+
export declare const PI_VFS_ROOT: string;
|
|
75
|
+
export declare function __setPiCodingAgentModuleLoaderForTests(loader: PiCodingAgentModuleLoader | undefined): void;
|
|
76
|
+
export declare function loadPiCodingAgent(): Promise<PiCodingAgentModule>;
|
|
77
|
+
export declare function getErrorText(error: unknown): string;
|
|
78
|
+
export declare function createReplayProxies(handler: HttpHandler, targets: ReplayProxyTarget[]): Promise<ReplayProxyServer[]>;
|
|
79
|
+
export declare function getPiTerminalError(event: PiSessionEvent): string | undefined;
|
|
80
|
+
export declare function serializeToolOutput(output: unknown): string;
|
|
81
|
+
export declare function extractAssistantText(message: PiSessionEvent['message']): string;
|
|
82
|
+
export declare function resolveReplayProxyTargets(options: PiAdapterOptions | undefined, env: NodeJS.ProcessEnv): ReplayProxyTarget[];
|
|
83
|
+
export declare function configureAuth(options: PiAdapterOptions | undefined, authStorage: PiAuthStorage, modelRegistry: PiModelRegistry, env: NodeJS.ProcessEnv, baseURLOverrides?: ProviderBaseURLOverrides): {
|
|
84
|
+
AI_GATEWAY_API_KEY: string;
|
|
85
|
+
AI_GATEWAY_BASE_URL: string;
|
|
86
|
+
} | {
|
|
87
|
+
AI_GATEWAY_API_KEY?: undefined;
|
|
88
|
+
AI_GATEWAY_BASE_URL?: undefined;
|
|
89
|
+
};
|
|
90
|
+
export declare function buildRemotePiMetadata(ctx: AdapterContext, workDir: string): SandboxFileEntry[];
|
|
91
|
+
export {};
|
|
92
|
+
//# sourceMappingURL=split-runtime-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-runtime-support.d.ts","sourceRoot":"","sources":["../src/split-runtime-support.ts"],"names":[],"mappings":"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"}
|