@bf-meishijian/aip 0.0.23 → 0.0.24
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 +10 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -2
- package/dist/cli.js.map +1 -1
- package/dist/coding-run-manager.d.ts.map +1 -1
- package/dist/coding-run-manager.js +4 -0
- package/dist/coding-run-manager.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +17 -2
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-files.d.ts.map +1 -1
- package/dist/delivery-files.js +1 -3
- package/dist/delivery-files.js.map +1 -1
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/general-run-client.d.ts.map +1 -1
- package/dist/host-status.d.ts.map +1 -1
- package/dist/host-update.d.ts.map +1 -1
- package/dist/host-update.js +11 -1
- package/dist/host-update.js.map +1 -1
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +13 -1
- package/dist/installer.js.map +1 -1
- package/dist/local-handoff-workspace.d.ts.map +1 -1
- package/dist/local-handoff-workspace.js +5 -8
- package/dist/local-handoff-workspace.js.map +1 -1
- package/dist/pi-model-service.d.ts.map +1 -1
- package/dist/platform-client.d.ts +13 -0
- package/dist/platform-client.d.ts.map +1 -1
- package/dist/platform-client.js +3 -0
- package/dist/platform-client.js.map +1 -1
- package/dist/project-facts.d.ts.map +1 -1
- package/dist/project-facts.js +2 -4
- package/dist/project-facts.js.map +1 -1
- package/dist/qa-session-manager.d.ts.map +1 -1
- package/dist/qa-session-manager.js +6 -0
- package/dist/qa-session-manager.js.map +1 -1
- package/dist/runtime-cleanup.d.ts +5 -0
- package/dist/runtime-cleanup.d.ts.map +1 -0
- package/dist/runtime-cleanup.js +187 -0
- package/dist/runtime-cleanup.js.map +1 -0
- package/dist/state.d.ts +2 -2
- package/dist/state.js +2 -2
- package/dist/storage-maintenance.d.ts +13 -0
- package/dist/storage-maintenance.d.ts.map +1 -0
- package/dist/storage-maintenance.js +62 -0
- package/dist/storage-maintenance.js.map +1 -0
- package/dist/workspace-gc.d.ts +25 -0
- package/dist/workspace-gc.d.ts.map +1 -0
- package/dist/workspace-gc.js +320 -0
- package/dist/workspace-gc.js.map +1 -0
- package/package.json +6 -6
- package/dist/agent-harness/index.d.ts +0 -4
- package/dist/agent-harness/index.d.ts.map +0 -1
- package/dist/agent-harness/index.js +0 -4
- package/dist/agent-harness/index.js.map +0 -1
- package/dist/agent-harness/pi-chat-model.d.ts +0 -35
- package/dist/agent-harness/pi-chat-model.d.ts.map +0 -1
- package/dist/agent-harness/pi-chat-model.js +0 -285
- package/dist/agent-harness/pi-chat-model.js.map +0 -1
- package/dist/review-report.d.ts +0 -9
- package/dist/review-report.d.ts.map +0 -1
- package/dist/review-report.js +0 -61
- package/dist/review-report.js.map +0 -1
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { lstat, readdir, readFile, realpath, rm } from "node:fs/promises";
|
|
3
|
+
import { dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { logHostEvent, redactHostText } from "./host-log.js";
|
|
6
|
+
import { activeProfile, paths } from "./paths.js";
|
|
7
|
+
import { readJson, writeSecureJson } from "./secure-json.js";
|
|
8
|
+
const git = promisify(execFile);
|
|
9
|
+
const hour = 60 * 60 * 1000;
|
|
10
|
+
export const workspaceRetention = {
|
|
11
|
+
completed: 24 * hour,
|
|
12
|
+
artifacts: 12 * hour,
|
|
13
|
+
orphan: 72 * hour,
|
|
14
|
+
repository: 30 * 24 * hour,
|
|
15
|
+
};
|
|
16
|
+
const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu;
|
|
17
|
+
const artifactNames = new Set(["node_modules", ".next", ".turbo"]);
|
|
18
|
+
const completionFile = ".aip-gc.json";
|
|
19
|
+
/** Called only under the Host execution and workspace-maintenance locks, while all managers are idle. */
|
|
20
|
+
export async function collectWorkspaceGarbage(client, host, options = {}) {
|
|
21
|
+
const now = options.now ?? Date.now();
|
|
22
|
+
const local = paths();
|
|
23
|
+
const stats = { directories: 0, artifacts: 0, repositories: 0, estimatedBytes: 0, failed: 0 };
|
|
24
|
+
if (!(await plainDirectory(local.workspaceRoot)))
|
|
25
|
+
return stats;
|
|
26
|
+
const root = await realpath(local.workspaceRoot);
|
|
27
|
+
// A profile's workspace root must not redirect into another profile or a user's checkout.
|
|
28
|
+
if (!(await plainDirectory(local.root)) ||
|
|
29
|
+
!(await plainDirectory(dirname(local.root))) ||
|
|
30
|
+
root !== join(await realpath(local.root), "workspaces"))
|
|
31
|
+
return stats;
|
|
32
|
+
const candidates = [];
|
|
33
|
+
for (const category of ["runs", "deployments"]) {
|
|
34
|
+
for (const name of await directories(join(root, category))) {
|
|
35
|
+
if (uuid.test(name))
|
|
36
|
+
candidates.push({ directory: join(root, category, name), kind: "run", id: name });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
for (const workspace of await directories(join(root, "qa"))) {
|
|
40
|
+
if (!uuid.test(workspace) && !/^[a-f0-9]{8}$/u.test(workspace))
|
|
41
|
+
continue;
|
|
42
|
+
for (const name of await directories(join(root, "qa", workspace))) {
|
|
43
|
+
const directory = join(root, "qa", workspace, name);
|
|
44
|
+
if (uuid.test(workspace) && uuid.test(name)) {
|
|
45
|
+
candidates.push({ directory, kind: "workItem", id: name });
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (!/^[a-f0-9]{8}$/u.test(workspace) || !/^[a-z0-9_-]+$/iu.test(name))
|
|
49
|
+
continue;
|
|
50
|
+
const ownerFile = `${directory}.owner.json`;
|
|
51
|
+
const owner = await readOwnedJson(ownerFile);
|
|
52
|
+
if (owner?.workItemId && uuid.test(owner.workItemId))
|
|
53
|
+
candidates.push({ directory, kind: "workItem", id: owner.workItemId, ownerFile });
|
|
54
|
+
else if (/^[a-z][a-z0-9_]*-\d+$/iu.test(name))
|
|
55
|
+
candidates.push({ directory, kind: "orphan", ownerFile });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const repoRoot = join(root, "repos");
|
|
59
|
+
const repos = (await directories(repoRoot)).filter((name) => name.endsWith(".git") && uuid.test(name.slice(0, -4)));
|
|
60
|
+
const runIds = [...new Set(candidates.flatMap((c) => (c.kind === "run" && c.id ? [c.id] : [])))];
|
|
61
|
+
const workItemIds = [
|
|
62
|
+
...new Set(candidates.flatMap((c) => (c.kind === "workItem" && c.id ? [c.id] : []))),
|
|
63
|
+
];
|
|
64
|
+
const projectIds = repos.map((name) => name.slice(0, -4));
|
|
65
|
+
const facts = new Map();
|
|
66
|
+
const references = new Map();
|
|
67
|
+
const count = Math.max(runIds.length, workItemIds.length, projectIds.length);
|
|
68
|
+
for (let offset = 0; offset < count; offset += 200) {
|
|
69
|
+
try {
|
|
70
|
+
const result = await client.storageGcCheck({
|
|
71
|
+
hostId: host.hostId,
|
|
72
|
+
generation: host.generation,
|
|
73
|
+
runIds: runIds.slice(offset, offset + 200),
|
|
74
|
+
workItemIds: workItemIds.slice(offset, offset + 200),
|
|
75
|
+
projectIds: projectIds.slice(offset, offset + 200),
|
|
76
|
+
});
|
|
77
|
+
for (const fact of result.runs)
|
|
78
|
+
facts.set(`run:${fact.runId}`, {
|
|
79
|
+
accessible: fact.accessible,
|
|
80
|
+
status: fact.workItemStatus,
|
|
81
|
+
updatedAt: fact.workItemUpdatedAt,
|
|
82
|
+
completedAt: fact.completedAt,
|
|
83
|
+
});
|
|
84
|
+
for (const fact of result.workItems)
|
|
85
|
+
facts.set(`workItem:${fact.workItemId}`, { ...fact, completedAt: null });
|
|
86
|
+
for (const fact of result.projects)
|
|
87
|
+
references.set(fact.projectId, fact.referenced);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
logHostEvent("workspace_gc_check_failed", {
|
|
91
|
+
profile: activeProfile(),
|
|
92
|
+
error: redactHostText(String(error)),
|
|
93
|
+
});
|
|
94
|
+
// An unavailable platform is never evidence that a known task was deleted.
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const recordFailure = (directory, error) => {
|
|
98
|
+
stats.failed++;
|
|
99
|
+
logHostEvent("workspace_gc_failed", {
|
|
100
|
+
profile: activeProfile(),
|
|
101
|
+
directory: relative(root, directory),
|
|
102
|
+
error: redactHostText(String(error)),
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
for (const candidate of candidates) {
|
|
106
|
+
try {
|
|
107
|
+
const fact = candidate.kind === "orphan" ? undefined : facts.get(`${candidate.kind}:${candidate.id}`);
|
|
108
|
+
if (candidate.kind !== "orphan" && !fact)
|
|
109
|
+
continue;
|
|
110
|
+
let reason;
|
|
111
|
+
let referenceAt;
|
|
112
|
+
if (fact?.accessible &&
|
|
113
|
+
fact.updatedAt &&
|
|
114
|
+
["COMPLETED", "CANCELLED"].includes(fact.status ?? "") &&
|
|
115
|
+
older(fact.updatedAt, now, workspaceRetention.completed)) {
|
|
116
|
+
reason = "work_item_terminal";
|
|
117
|
+
referenceAt = Date.parse(fact.updatedAt);
|
|
118
|
+
}
|
|
119
|
+
else if (candidate.kind === "orphan" || fact?.accessible === false) {
|
|
120
|
+
referenceAt = (await treeFacts(candidate.directory)).latest;
|
|
121
|
+
if (now - referenceAt > workspaceRetention.orphan)
|
|
122
|
+
reason = "orphan";
|
|
123
|
+
}
|
|
124
|
+
if (reason && referenceAt !== undefined) {
|
|
125
|
+
const bytes = (await treeFacts(candidate.directory)).bytes;
|
|
126
|
+
await removeTaskDirectory(candidate.directory, repoRoot);
|
|
127
|
+
if (candidate.ownerFile)
|
|
128
|
+
await rm(candidate.ownerFile, { force: true });
|
|
129
|
+
stats.directories++;
|
|
130
|
+
stats.estimatedBytes += bytes;
|
|
131
|
+
logHostEvent("workspace_gc_removed", {
|
|
132
|
+
profile: activeProfile(),
|
|
133
|
+
directory: relative(root, candidate.directory),
|
|
134
|
+
reason,
|
|
135
|
+
referenceAt: new Date(referenceAt).toISOString(),
|
|
136
|
+
estimatedBytes: bytes,
|
|
137
|
+
});
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (!fact?.accessible)
|
|
141
|
+
continue;
|
|
142
|
+
const completed = candidate.kind === "run"
|
|
143
|
+
? fact.completedAt
|
|
144
|
+
: (await readOwnedJson(join(candidate.directory, completionFile)))?.completedAt;
|
|
145
|
+
if (!older(completed, now, workspaceRetention.artifacts))
|
|
146
|
+
continue;
|
|
147
|
+
for (const directory of await artifactDirectories(candidate.directory)) {
|
|
148
|
+
try {
|
|
149
|
+
const bytes = (await treeFacts(directory)).bytes;
|
|
150
|
+
await rm(directory, { recursive: true, force: true });
|
|
151
|
+
stats.artifacts++;
|
|
152
|
+
stats.estimatedBytes += bytes;
|
|
153
|
+
logHostEvent("workspace_gc_removed", {
|
|
154
|
+
profile: activeProfile(),
|
|
155
|
+
directory: relative(root, directory),
|
|
156
|
+
reason: "completed_artifacts",
|
|
157
|
+
referenceAt: completed,
|
|
158
|
+
estimatedBytes: bytes,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
recordFailure(directory, error);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
recordFailure(candidate.directory, error);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
for (const name of repos) {
|
|
171
|
+
const directory = join(repoRoot, name);
|
|
172
|
+
try {
|
|
173
|
+
const marker = await readOwnedJson(join(directory, ".aip-last-checkout.json"));
|
|
174
|
+
const referenceAt = marker?.usedAt
|
|
175
|
+
? Date.parse(marker.usedAt)
|
|
176
|
+
: (await treeFacts(directory)).latest;
|
|
177
|
+
await git("git", ["--git-dir", directory, "worktree", "prune"], { timeout: 30_000 });
|
|
178
|
+
if (references.get(name.slice(0, -4)) !== false)
|
|
179
|
+
continue;
|
|
180
|
+
const list = await git("git", ["--git-dir", directory, "worktree", "list", "--porcelain"], {
|
|
181
|
+
timeout: 30_000,
|
|
182
|
+
});
|
|
183
|
+
if (list.stdout
|
|
184
|
+
.split("\n\n")
|
|
185
|
+
.some((entry) => entry.trim() && !entry.split("\n").includes("bare")))
|
|
186
|
+
continue;
|
|
187
|
+
if (!Number.isFinite(referenceAt) || now - referenceAt <= workspaceRetention.repository)
|
|
188
|
+
continue;
|
|
189
|
+
const bytes = (await treeFacts(directory)).bytes;
|
|
190
|
+
await rm(directory, { recursive: true, force: true });
|
|
191
|
+
stats.repositories++;
|
|
192
|
+
stats.estimatedBytes += bytes;
|
|
193
|
+
logHostEvent("workspace_gc_removed", {
|
|
194
|
+
profile: activeProfile(),
|
|
195
|
+
directory: relative(root, directory),
|
|
196
|
+
reason: "unused_repository",
|
|
197
|
+
referenceAt: new Date(referenceAt).toISOString(),
|
|
198
|
+
estimatedBytes: bytes,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
recordFailure(directory, error);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return stats;
|
|
206
|
+
}
|
|
207
|
+
export async function recordQaWorkspaceActivity(directory, completed) {
|
|
208
|
+
try {
|
|
209
|
+
await writeSecureJson(join(directory, completionFile), completed ? { completedAt: new Date().toISOString() } : {});
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
logHostEvent("workspace_gc_metadata_failed", {
|
|
213
|
+
profile: activeProfile(),
|
|
214
|
+
error: redactHostText(String(error)),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function older(value, now, ttl) {
|
|
219
|
+
return Boolean(value && Number.isFinite(Date.parse(value)) && now - Date.parse(value) > ttl);
|
|
220
|
+
}
|
|
221
|
+
async function plainDirectory(directory) {
|
|
222
|
+
const info = await lstat(directory).catch((error) => {
|
|
223
|
+
if (error.code === "ENOENT")
|
|
224
|
+
return null;
|
|
225
|
+
throw error;
|
|
226
|
+
});
|
|
227
|
+
return Boolean(info?.isDirectory() && !info.isSymbolicLink());
|
|
228
|
+
}
|
|
229
|
+
async function directories(parent) {
|
|
230
|
+
if (!(await plainDirectory(parent)))
|
|
231
|
+
return [];
|
|
232
|
+
const result = [];
|
|
233
|
+
for (const entry of await readdir(parent, { withFileTypes: true }))
|
|
234
|
+
if (entry.isDirectory() &&
|
|
235
|
+
!entry.isSymbolicLink() &&
|
|
236
|
+
(await plainDirectory(join(parent, entry.name))))
|
|
237
|
+
result.push(entry.name);
|
|
238
|
+
return result;
|
|
239
|
+
}
|
|
240
|
+
async function readOwnedJson(file) {
|
|
241
|
+
const info = await lstat(file).catch((error) => {
|
|
242
|
+
if (error.code === "ENOENT")
|
|
243
|
+
return null;
|
|
244
|
+
throw error;
|
|
245
|
+
});
|
|
246
|
+
if (!info?.isFile() || info.isSymbolicLink())
|
|
247
|
+
return null;
|
|
248
|
+
return readJson(file).catch((error) => {
|
|
249
|
+
if (error instanceof SyntaxError)
|
|
250
|
+
return null;
|
|
251
|
+
throw error;
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
async function treeFacts(directory) {
|
|
255
|
+
const info = await lstat(directory);
|
|
256
|
+
let bytes = info.size, latest = info.mtimeMs;
|
|
257
|
+
if (info.isDirectory() && !info.isSymbolicLink())
|
|
258
|
+
for (const entry of await readdir(directory)) {
|
|
259
|
+
const child = await treeFacts(join(directory, entry));
|
|
260
|
+
bytes += child.bytes;
|
|
261
|
+
latest = Math.max(latest, child.latest);
|
|
262
|
+
}
|
|
263
|
+
return { bytes, latest };
|
|
264
|
+
}
|
|
265
|
+
async function artifactDirectories(root) {
|
|
266
|
+
const found = [];
|
|
267
|
+
for (const name of await directories(root)) {
|
|
268
|
+
if (name === ".git")
|
|
269
|
+
continue;
|
|
270
|
+
const directory = join(root, name);
|
|
271
|
+
if (artifactNames.has(name))
|
|
272
|
+
found.push(directory);
|
|
273
|
+
else
|
|
274
|
+
found.push(...(await artifactDirectories(directory)));
|
|
275
|
+
}
|
|
276
|
+
return found;
|
|
277
|
+
}
|
|
278
|
+
async function removeTaskDirectory(directory, repoRoot) {
|
|
279
|
+
const worktrees = [];
|
|
280
|
+
const visit = async (target) => {
|
|
281
|
+
const dotGit = join(target, ".git");
|
|
282
|
+
const info = await lstat(dotGit).catch((error) => {
|
|
283
|
+
if (error.code === "ENOENT")
|
|
284
|
+
return null;
|
|
285
|
+
throw error;
|
|
286
|
+
});
|
|
287
|
+
if (info?.isSymbolicLink())
|
|
288
|
+
throw new Error("WORKSPACE_GIT_BOUNDARY_INVALID");
|
|
289
|
+
if (info?.isFile()) {
|
|
290
|
+
const content = (await readFile(dotGit, "utf8")).trim();
|
|
291
|
+
if (!content.startsWith("gitdir: "))
|
|
292
|
+
throw new Error("WORKSPACE_GIT_METADATA_INVALID");
|
|
293
|
+
const metadata = await realpath(resolve(target, content.slice(8)));
|
|
294
|
+
if (!(await plainDirectory(repoRoot)))
|
|
295
|
+
throw new Error("WORKSPACE_GIT_BOUNDARY_INVALID");
|
|
296
|
+
const cache = await realpath(repoRoot);
|
|
297
|
+
if (cache !== resolve(repoRoot))
|
|
298
|
+
throw new Error("WORKSPACE_GIT_BOUNDARY_INVALID");
|
|
299
|
+
const rel = relative(cache, metadata);
|
|
300
|
+
if (isAbsolute(rel) ||
|
|
301
|
+
rel.startsWith("..") ||
|
|
302
|
+
!/^[0-9a-f-]{36}\.git[\\/]worktrees[\\/][^\\/]+$/iu.test(rel))
|
|
303
|
+
throw new Error("WORKSPACE_GIT_BOUNDARY_INVALID");
|
|
304
|
+
const common = dirname(dirname(metadata));
|
|
305
|
+
worktrees.push({ directory: target, common });
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
if (info?.isDirectory())
|
|
309
|
+
return;
|
|
310
|
+
for (const child of await directories(target))
|
|
311
|
+
if (!artifactNames.has(child) && child !== "target")
|
|
312
|
+
await visit(join(target, child));
|
|
313
|
+
};
|
|
314
|
+
await visit(directory);
|
|
315
|
+
// Validate all worktree boundaries before performing any deletion.
|
|
316
|
+
for (const worktree of worktrees)
|
|
317
|
+
await git("git", ["--git-dir", worktree.common, "worktree", "remove", "--force", worktree.directory], { timeout: 30_000 });
|
|
318
|
+
await rm(directory, { recursive: true, force: true });
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=workspace-gc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-gc.js","sourceRoot":"","sources":["../src/workspace-gc.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bf-meishijian/aip",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.24",
|
|
4
4
|
"description": "AI Platform Local Coding Host",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
},
|
|
39
39
|
"license": "UNLICENSED",
|
|
40
40
|
"optionalDependencies": {
|
|
41
|
-
"@bf-meishijian/aip-runtime-darwin-arm64": "0.0.
|
|
42
|
-
"@bf-meishijian/aip-runtime-darwin-x64": "0.0.
|
|
43
|
-
"@bf-meishijian/aip-runtime-linux-arm64": "0.0.
|
|
44
|
-
"@bf-meishijian/aip-runtime-linux-x64": "0.0.
|
|
45
|
-
"@bf-meishijian/aip-runtime-win32-x64": "0.0.
|
|
41
|
+
"@bf-meishijian/aip-runtime-darwin-arm64": "0.0.24",
|
|
42
|
+
"@bf-meishijian/aip-runtime-darwin-x64": "0.0.24",
|
|
43
|
+
"@bf-meishijian/aip-runtime-linux-arm64": "0.0.24",
|
|
44
|
+
"@bf-meishijian/aip-runtime-linux-x64": "0.0.24",
|
|
45
|
+
"@bf-meishijian/aip-runtime-win32-x64": "0.0.24"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "tsc -p tsconfig.build.json && node scripts/bundle-stage-delivery.mjs",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { BaseChatModel, type BaseChatModelCallOptions } from "@langchain/core/language_models/chat_models";
|
|
2
|
-
import { AIMessageChunk, type BaseMessage } from "@langchain/core/messages";
|
|
3
|
-
import type { ChatModelStreamEvent } from "@langchain/core/language_models/event";
|
|
4
|
-
import { ChatGenerationChunk, type ChatResult } from "@langchain/core/outputs";
|
|
5
|
-
import { convertToOpenAITool } from "@langchain/core/utils/function_calling";
|
|
6
|
-
import type { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
|
|
7
|
-
import type { BindToolsInput } from "@langchain/core/language_models/chat_models";
|
|
8
|
-
import type { Api, Context, Model, Models, ModelThinkingLevel } from "@earendil-works/pi-ai";
|
|
9
|
-
interface CallOptions extends BaseChatModelCallOptions {
|
|
10
|
-
tools?: ReturnType<typeof convertToOpenAITool>[];
|
|
11
|
-
}
|
|
12
|
-
export declare function messageText(content: unknown): string;
|
|
13
|
-
/** Preserve provider response metadata in checkpoints for native tool/thinking continuation. */
|
|
14
|
-
export declare function piContext(messages: BaseMessage[], model: Model<Api>, tools?: CallOptions["tools"]): Context;
|
|
15
|
-
/** Model protocol adapter only. Agent loops and persistence remain Deep Agents/LangGraph. */
|
|
16
|
-
export declare class PiChatModel extends BaseChatModel<CallOptions> {
|
|
17
|
-
readonly models: Models;
|
|
18
|
-
readonly nativeModel: Model<Api>;
|
|
19
|
-
readonly reasoning: ModelThinkingLevel;
|
|
20
|
-
constructor(models: Models, nativeModel: Model<Api>, reasoning?: ModelThinkingLevel);
|
|
21
|
-
get profile(): {
|
|
22
|
-
maxInputTokens: number;
|
|
23
|
-
maxOutputTokens: number;
|
|
24
|
-
imageInputs: boolean;
|
|
25
|
-
imageUrlInputs: boolean;
|
|
26
|
-
toolCalling: boolean;
|
|
27
|
-
};
|
|
28
|
-
_llmType(): string;
|
|
29
|
-
bindTools(tools: BindToolsInput[], options?: Partial<CallOptions>): import("@langchain/core/runnables").Runnable<import("@langchain/core/language_models/base").BaseLanguageModelInput, AIMessageChunk<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>, CallOptions>;
|
|
30
|
-
_generate(messages: BaseMessage[], options: this["ParsedCallOptions"]): Promise<ChatResult>;
|
|
31
|
-
_streamResponseChunks(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk, void, unknown>;
|
|
32
|
-
_streamChatModelEvents(messages: BaseMessage[], options: this["ParsedCallOptions"]): AsyncGenerator<ChatModelStreamEvent>;
|
|
33
|
-
}
|
|
34
|
-
export {};
|
|
35
|
-
//# sourceMappingURL=pi-chat-model.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pi-chat-model.d.ts","sourceRoot":"","sources":["../src/pi-chat-model.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,wBAAwB,EAC9B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAEL,cAAc,EAId,KAAK,WAAW,EACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,KAAK,EACV,GAAG,EAEH,OAAO,EACP,KAAK,EACL,MAAM,EACN,kBAAkB,EAGnB,MAAM,uBAAuB,CAAC;AAE/B,UAAU,WAAY,SAAQ,wBAAwB;IACpD,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAAE,CAAC;CAClD;AAUD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAQpD;AA6BD,gGAAgG;AAChG,wBAAgB,SAAS,CACvB,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,GAC3B,OAAO,CA+DT;AAmBD,6FAA6F;AAC7F,qBAAa,WAAY,SAAQ,aAAa,CAAC,WAAW,CAAC;IAEvD,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,kBAAkB;gBAF7B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,EACvB,SAAS,GAAE,kBAA0B;IAIhD,IAAa,OAAO;;;;;;MAQnB;IACD,QAAQ;IAGC,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAGpE,SAAS,CACb,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC;IA0Bf,qBAAqB,CAC1B,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAClC,UAAU,CAAC,EAAE,wBAAwB;IA4FvB,sBAAsB,CACpC,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,GACjC,cAAc,CAAC,oBAAoB,CAAC;CAoCxC"}
|