@bf-meishijian/aip 0.0.22 → 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.
Files changed (79) hide show
  1. package/README.md +10 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +3 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/coding-run-manager.d.ts.map +1 -1
  6. package/dist/coding-run-manager.js +4 -0
  7. package/dist/coding-run-manager.js.map +1 -1
  8. package/dist/daemon.d.ts.map +1 -1
  9. package/dist/daemon.js +36 -4
  10. package/dist/daemon.js.map +1 -1
  11. package/dist/delivery-files.d.ts.map +1 -1
  12. package/dist/delivery-files.js +1 -3
  13. package/dist/delivery-files.js.map +1 -1
  14. package/dist/diagnostics.d.ts.map +1 -1
  15. package/dist/general-run-client.d.ts +92 -0
  16. package/dist/general-run-client.d.ts.map +1 -0
  17. package/dist/general-run-client.js +38 -0
  18. package/dist/general-run-client.js.map +1 -0
  19. package/dist/general-run-manager.d.ts +20 -0
  20. package/dist/general-run-manager.d.ts.map +1 -0
  21. package/dist/general-run-manager.js +356 -0
  22. package/dist/general-run-manager.js.map +1 -0
  23. package/dist/general-run-tools.d.ts +24 -0
  24. package/dist/general-run-tools.d.ts.map +1 -0
  25. package/dist/general-run-tools.js +144 -0
  26. package/dist/general-run-tools.js.map +1 -0
  27. package/dist/host-status.d.ts.map +1 -1
  28. package/dist/host-status.js +1 -0
  29. package/dist/host-status.js.map +1 -1
  30. package/dist/host-update.d.ts.map +1 -1
  31. package/dist/host-update.js +11 -1
  32. package/dist/host-update.js.map +1 -1
  33. package/dist/installer.d.ts.map +1 -1
  34. package/dist/installer.js +13 -1
  35. package/dist/installer.js.map +1 -1
  36. package/dist/local-handoff-workspace.d.ts.map +1 -1
  37. package/dist/local-handoff-workspace.js +5 -8
  38. package/dist/local-handoff-workspace.js.map +1 -1
  39. package/dist/pi-model-service.d.ts +12 -2
  40. package/dist/pi-model-service.d.ts.map +1 -1
  41. package/dist/pi-model-service.js +15 -2
  42. package/dist/pi-model-service.js.map +1 -1
  43. package/dist/platform-client.d.ts +19 -0
  44. package/dist/platform-client.d.ts.map +1 -1
  45. package/dist/platform-client.js +10 -1
  46. package/dist/platform-client.js.map +1 -1
  47. package/dist/project-facts.d.ts.map +1 -1
  48. package/dist/project-facts.js +2 -4
  49. package/dist/project-facts.js.map +1 -1
  50. package/dist/qa-session-manager.d.ts.map +1 -1
  51. package/dist/qa-session-manager.js +6 -0
  52. package/dist/qa-session-manager.js.map +1 -1
  53. package/dist/runtime-cleanup.d.ts +5 -0
  54. package/dist/runtime-cleanup.d.ts.map +1 -0
  55. package/dist/runtime-cleanup.js +187 -0
  56. package/dist/runtime-cleanup.js.map +1 -0
  57. package/dist/state.d.ts +2 -2
  58. package/dist/state.js +2 -2
  59. package/dist/storage-maintenance.d.ts +13 -0
  60. package/dist/storage-maintenance.d.ts.map +1 -0
  61. package/dist/storage-maintenance.js +62 -0
  62. package/dist/storage-maintenance.js.map +1 -0
  63. package/dist/workspace-gc.d.ts +25 -0
  64. package/dist/workspace-gc.d.ts.map +1 -0
  65. package/dist/workspace-gc.js +320 -0
  66. package/dist/workspace-gc.js.map +1 -0
  67. package/package.json +6 -6
  68. package/dist/agent-harness/index.d.ts +0 -4
  69. package/dist/agent-harness/index.d.ts.map +0 -1
  70. package/dist/agent-harness/index.js +0 -4
  71. package/dist/agent-harness/index.js.map +0 -1
  72. package/dist/agent-harness/pi-chat-model.d.ts +0 -35
  73. package/dist/agent-harness/pi-chat-model.d.ts.map +0 -1
  74. package/dist/agent-harness/pi-chat-model.js +0 -285
  75. package/dist/agent-harness/pi-chat-model.js.map +0 -1
  76. package/dist/review-report.d.ts +0 -9
  77. package/dist/review-report.d.ts.map +0 -1
  78. package/dist/review-report.js +0 -61
  79. 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.22",
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.22",
42
- "@bf-meishijian/aip-runtime-darwin-x64": "0.0.22",
43
- "@bf-meishijian/aip-runtime-linux-arm64": "0.0.22",
44
- "@bf-meishijian/aip-runtime-linux-x64": "0.0.22",
45
- "@bf-meishijian/aip-runtime-win32-x64": "0.0.22"
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,4 +0,0 @@
1
- /** One standard employee harness for platform workers and the local Host. */
2
- export { createDeepAgent as createEmployeeAgent } from "deepagents";
3
- export { PiChatModel, messageText, piContext } from "./pi-chat-model.js";
4
- //# sourceMappingURL=index.d.ts.map
@@ -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,4 +0,0 @@
1
- /** One standard employee harness for platform workers and the local Host. */
2
- export { createDeepAgent as createEmployeeAgent } from "deepagents";
3
- export { PiChatModel, messageText, piContext } from "./pi-chat-model.js";
4
- //# sourceMappingURL=index.js.map
@@ -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"}