@andreroggeri/adapter-pi-local-serialized 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +75 -0
  3. package/dist/cli/format-event.d.ts +2 -0
  4. package/dist/cli/format-event.d.ts.map +1 -0
  5. package/dist/cli/format-event.js +99 -0
  6. package/dist/cli/format-event.js.map +1 -0
  7. package/dist/cli/index.d.ts +2 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +2 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/index.d.ts +11 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +49 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/server/concurrency.d.ts +2 -0
  16. package/dist/server/concurrency.d.ts.map +1 -0
  17. package/dist/server/concurrency.js +25 -0
  18. package/dist/server/concurrency.js.map +1 -0
  19. package/dist/server/execute.d.ts +3 -0
  20. package/dist/server/execute.d.ts.map +1 -0
  21. package/dist/server/execute.js +675 -0
  22. package/dist/server/execute.js.map +1 -0
  23. package/dist/server/execute.remote.test.d.ts +2 -0
  24. package/dist/server/execute.remote.test.d.ts.map +1 -0
  25. package/dist/server/execute.remote.test.js +466 -0
  26. package/dist/server/execute.remote.test.js.map +1 -0
  27. package/dist/server/index.d.ts +8 -0
  28. package/dist/server/index.d.ts.map +1 -0
  29. package/dist/server/index.js +51 -0
  30. package/dist/server/index.js.map +1 -0
  31. package/dist/server/models.d.ts +20 -0
  32. package/dist/server/models.d.ts.map +1 -0
  33. package/dist/server/models.js +163 -0
  34. package/dist/server/models.js.map +1 -0
  35. package/dist/server/models.test.d.ts +2 -0
  36. package/dist/server/models.test.d.ts.map +1 -0
  37. package/dist/server/models.test.js +22 -0
  38. package/dist/server/models.test.js.map +1 -0
  39. package/dist/server/parse.d.ts +23 -0
  40. package/dist/server/parse.d.ts.map +1 -0
  41. package/dist/server/parse.js +195 -0
  42. package/dist/server/parse.js.map +1 -0
  43. package/dist/server/parse.test.d.ts +2 -0
  44. package/dist/server/parse.test.d.ts.map +1 -0
  45. package/dist/server/parse.test.js +249 -0
  46. package/dist/server/parse.test.js.map +1 -0
  47. package/dist/server/skills.d.ts +8 -0
  48. package/dist/server/skills.d.ts.map +1 -0
  49. package/dist/server/skills.js +69 -0
  50. package/dist/server/skills.js.map +1 -0
  51. package/dist/server/test.d.ts +3 -0
  52. package/dist/server/test.d.ts.map +1 -0
  53. package/dist/server/test.js +309 -0
  54. package/dist/server/test.js.map +1 -0
  55. package/dist/ui/build-config.d.ts +3 -0
  56. package/dist/ui/build-config.d.ts.map +1 -0
  57. package/dist/ui/build-config.js +78 -0
  58. package/dist/ui/build-config.js.map +1 -0
  59. package/dist/ui/index.d.ts +3 -0
  60. package/dist/ui/index.d.ts.map +1 -0
  61. package/dist/ui/index.js +3 -0
  62. package/dist/ui/index.js.map +1 -0
  63. package/dist/ui/parse-stdout.d.ts +4 -0
  64. package/dist/ui/parse-stdout.d.ts.map +1 -0
  65. package/dist/ui/parse-stdout.js +271 -0
  66. package/dist/ui/parse-stdout.js.map +1 -0
  67. package/package.json +54 -0
@@ -0,0 +1,20 @@
1
+ import type { AdapterModel } from "@paperclipai/adapter-utils";
2
+ export declare function discoverPiModels(input?: {
3
+ command?: unknown;
4
+ cwd?: unknown;
5
+ env?: unknown;
6
+ }): Promise<AdapterModel[]>;
7
+ export declare function discoverPiModelsCached(input?: {
8
+ command?: unknown;
9
+ cwd?: unknown;
10
+ env?: unknown;
11
+ }): Promise<AdapterModel[]>;
12
+ export declare function ensurePiModelConfiguredAndAvailable(input: {
13
+ model?: unknown;
14
+ command?: unknown;
15
+ cwd?: unknown;
16
+ env?: unknown;
17
+ }): Promise<AdapterModel[]>;
18
+ export declare function listPiModels(): Promise<AdapterModel[]>;
19
+ export declare function resetPiModelsCacheForTests(): void;
20
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/server/models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAqG/D,wBAAsB,gBAAgB,CAAC,KAAK,GAAE;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACV,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA8B/B;AAaD,wBAAsB,sBAAsB,CAAC,KAAK,GAAE;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACV,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAa/B;AAED,wBAAsB,mCAAmC,CAAC,KAAK,EAAE;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAwB1B;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAM5D;AAED,wBAAgB,0BAA0B,SAEzC"}
@@ -0,0 +1,163 @@
1
+ import { createHash } from "node:crypto";
2
+ import { asString, runChildProcess } from "@paperclipai/adapter-utils/server-utils";
3
+ const MODELS_CACHE_TTL_MS = 60_000;
4
+ function firstNonEmptyLine(text) {
5
+ return (text
6
+ .split(/\r?\n/)
7
+ .map((line) => line.trim())
8
+ .find(Boolean) ?? "");
9
+ }
10
+ function parseModelsOutput(stdout) {
11
+ const parsed = [];
12
+ const lines = stdout.split(/\r?\n/);
13
+ // Skip header line if present
14
+ let startIndex = 0;
15
+ if (lines.length > 0 && (lines[0].includes("provider") || lines[0].includes("model"))) {
16
+ startIndex = 1;
17
+ }
18
+ for (let i = startIndex; i < lines.length; i++) {
19
+ const line = lines[i].trim();
20
+ if (!line)
21
+ continue;
22
+ // Parse format: "provider model context max-out thinking images"
23
+ // Split by 2+ spaces to handle the columnar format
24
+ const parts = line.split(/\s{2,}/);
25
+ if (parts.length < 2)
26
+ continue;
27
+ const provider = parts[0].trim();
28
+ const model = parts[1].trim();
29
+ if (!provider || !model)
30
+ continue;
31
+ if (provider === "provider" && model === "model")
32
+ continue; // Skip header
33
+ const id = `${provider}/${model}`;
34
+ parsed.push({ id, label: id });
35
+ }
36
+ return parsed;
37
+ }
38
+ function dedupeModels(models) {
39
+ const seen = new Set();
40
+ const deduped = [];
41
+ for (const model of models) {
42
+ const id = model.id.trim();
43
+ if (!id || seen.has(id))
44
+ continue;
45
+ seen.add(id);
46
+ deduped.push({ id, label: model.label.trim() || id });
47
+ }
48
+ return deduped;
49
+ }
50
+ function sortModels(models) {
51
+ return [...models].sort((a, b) => a.id.localeCompare(b.id, "en", { numeric: true, sensitivity: "base" }));
52
+ }
53
+ function resolvePiCommand(input) {
54
+ const envOverride = typeof process.env.PAPERCLIP_PI_COMMAND === "string" &&
55
+ process.env.PAPERCLIP_PI_COMMAND.trim().length > 0
56
+ ? process.env.PAPERCLIP_PI_COMMAND.trim()
57
+ : "pi";
58
+ return asString(input, envOverride);
59
+ }
60
+ const discoveryCache = new Map();
61
+ const VOLATILE_ENV_KEY_PREFIXES = ["PAPERCLIP_", "npm_", "NPM_"];
62
+ const VOLATILE_ENV_KEY_EXACT = new Set(["PWD", "OLDPWD", "SHLVL", "_", "TERM_SESSION_ID"]);
63
+ function isVolatileEnvKey(key) {
64
+ if (VOLATILE_ENV_KEY_EXACT.has(key))
65
+ return true;
66
+ return VOLATILE_ENV_KEY_PREFIXES.some((prefix) => key.startsWith(prefix));
67
+ }
68
+ function hashValue(value) {
69
+ return createHash("sha256").update(value).digest("hex");
70
+ }
71
+ function discoveryCacheKey(command, cwd, env) {
72
+ const envKey = Object.entries(env)
73
+ .filter(([key]) => !isVolatileEnvKey(key))
74
+ .sort(([a], [b]) => a.localeCompare(b))
75
+ .map(([key, value]) => `${key}=${hashValue(value)}`)
76
+ .join("\n");
77
+ return `${command}\n${cwd}\n${envKey}`;
78
+ }
79
+ function pruneExpiredDiscoveryCache(now) {
80
+ for (const [key, value] of discoveryCache.entries()) {
81
+ if (value.expiresAt <= now)
82
+ discoveryCache.delete(key);
83
+ }
84
+ }
85
+ export async function discoverPiModels(input = {}) {
86
+ const command = resolvePiCommand(input.command);
87
+ const cwd = asString(input.cwd, process.cwd());
88
+ const env = normalizeEnv(input.env);
89
+ const runtimeEnv = normalizeEnv({ ...process.env, ...env });
90
+ const result = await runChildProcess(`pi-models-${Date.now()}-${Math.random().toString(16).slice(2)}`, command, ["--list-models"], {
91
+ cwd,
92
+ env: runtimeEnv,
93
+ timeoutSec: 20,
94
+ graceSec: 3,
95
+ onLog: async () => { },
96
+ });
97
+ if (result.timedOut) {
98
+ throw new Error("`pi --list-models` timed out.");
99
+ }
100
+ if ((result.exitCode ?? 1) !== 0) {
101
+ const detail = firstNonEmptyLine(result.stderr) || firstNonEmptyLine(result.stdout);
102
+ throw new Error(detail ? `\`pi --list-models\` failed: ${detail}` : "`pi --list-models` failed.");
103
+ }
104
+ // Pi outputs model list to stderr, but fall back to stdout for older versions
105
+ const output = result.stderr || result.stdout;
106
+ return sortModels(dedupeModels(parseModelsOutput(output)));
107
+ }
108
+ function normalizeEnv(input) {
109
+ const envInput = typeof input === "object" && input !== null && !Array.isArray(input)
110
+ ? input
111
+ : {};
112
+ const env = {};
113
+ for (const [key, value] of Object.entries(envInput)) {
114
+ if (typeof value === "string")
115
+ env[key] = value;
116
+ }
117
+ return env;
118
+ }
119
+ export async function discoverPiModelsCached(input = {}) {
120
+ const command = resolvePiCommand(input.command);
121
+ const cwd = asString(input.cwd, process.cwd());
122
+ const env = normalizeEnv(input.env);
123
+ const key = discoveryCacheKey(command, cwd, env);
124
+ const now = Date.now();
125
+ pruneExpiredDiscoveryCache(now);
126
+ const cached = discoveryCache.get(key);
127
+ if (cached && cached.expiresAt > now)
128
+ return cached.models;
129
+ const models = await discoverPiModels({ command, cwd, env });
130
+ discoveryCache.set(key, { expiresAt: now + MODELS_CACHE_TTL_MS, models });
131
+ return models;
132
+ }
133
+ export async function ensurePiModelConfiguredAndAvailable(input) {
134
+ const model = asString(input.model, "").trim();
135
+ if (!model) {
136
+ throw new Error("Pi requires `adapterConfig.model` in provider/model format.");
137
+ }
138
+ const models = await discoverPiModelsCached({
139
+ command: input.command,
140
+ cwd: input.cwd,
141
+ env: input.env,
142
+ });
143
+ if (models.length === 0) {
144
+ throw new Error("Pi returned no models. Run `pi --list-models` and verify provider auth.");
145
+ }
146
+ if (!models.some((entry) => entry.id === model)) {
147
+ const sample = models.slice(0, 12).map((entry) => entry.id).join(", ");
148
+ throw new Error(`Configured Pi model is unavailable: ${model}. Available models: ${sample}${models.length > 12 ? ", ..." : ""}`);
149
+ }
150
+ return models;
151
+ }
152
+ export async function listPiModels() {
153
+ try {
154
+ return await discoverPiModelsCached();
155
+ }
156
+ catch {
157
+ return [];
158
+ }
159
+ }
160
+ export function resetPiModelsCacheForTests() {
161
+ discoveryCache.clear();
162
+ }
163
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/server/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAEpF,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,CACL,IAAI;SACD,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CACvB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEpC,8BAA8B;IAC9B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACtF,UAAU,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,wEAAwE;QACxE,mDAAmD;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAE/B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK;YAAE,SAAS;QAClC,IAAI,QAAQ,KAAK,UAAU,IAAI,KAAK,KAAK,OAAO;YAAE,SAAS,CAAC,cAAc;QAE1E,MAAM,EAAE,GAAG,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAAsB;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,MAAsB;IACxC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CACvE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,WAAW,GACf,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,QAAQ;QACpD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAChD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE;QACzC,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyD,CAAC;AACxF,MAAM,yBAAyB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAC1E,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAE3F,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,GAAW,EAAE,GAA2B;IAClF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;SACzC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;SACnD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,GAAG,OAAO,KAAK,GAAG,KAAK,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAW;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG;YAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAInC,EAAE;IACJ,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,aAAa,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAChE,OAAO,EACP,CAAC,eAAe,CAAC,EACjB;QACE,GAAG;QACH,GAAG,EAAE,UAAU;QACf,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KACtB,CACF,CAAC;IAEF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpF,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;IACpG,CAAC;IAED,8EAA8E;IAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;IAC9C,OAAO,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACnF,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAIzC,EAAE;IACJ,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,GAAG;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAE3D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7D,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,GAAG,mBAAmB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CAAC,KAKzD;IACC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC1C,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,uCAAuC,KAAK,uBAAuB,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAChH,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,OAAO,MAAM,sBAAsB,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,cAAc,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=models.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.test.d.ts","sourceRoot":"","sources":["../../src/server/models.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { afterEach, describe, expect, it } from "vitest";
2
+ import { ensurePiModelConfiguredAndAvailable, listPiModels, resetPiModelsCacheForTests, } from "./models.js";
3
+ describe("pi models", () => {
4
+ afterEach(() => {
5
+ delete process.env.PAPERCLIP_PI_COMMAND;
6
+ resetPiModelsCacheForTests();
7
+ });
8
+ it("returns an empty list when discovery command is unavailable", async () => {
9
+ process.env.PAPERCLIP_PI_COMMAND = "__paperclip_missing_pi_command__";
10
+ await expect(listPiModels()).resolves.toEqual([]);
11
+ });
12
+ it("rejects when model is missing", async () => {
13
+ await expect(ensurePiModelConfiguredAndAvailable({ model: "" })).rejects.toThrow("Pi requires `adapterConfig.model`");
14
+ });
15
+ it("rejects when discovery cannot run for configured model", async () => {
16
+ process.env.PAPERCLIP_PI_COMMAND = "__paperclip_missing_pi_command__";
17
+ await expect(ensurePiModelConfiguredAndAvailable({
18
+ model: "xai/grok-4",
19
+ })).rejects.toThrow();
20
+ });
21
+ });
22
+ //# sourceMappingURL=models.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.test.js","sourceRoot":"","sources":["../../src/server/models.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EACL,mCAAmC,EACnC,YAAY,EACZ,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAErB,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACxC,0BAA0B,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,kCAAkC,CAAC;QACtE,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,CACV,mCAAmC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACnD,CAAC,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,kCAAkC,CAAC;QACtE,MAAM,MAAM,CACV,mCAAmC,CAAC;YAClC,KAAK,EAAE,YAAY;SACpB,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ interface ParsedPiOutput {
2
+ sessionId: string | null;
3
+ messages: string[];
4
+ errors: string[];
5
+ usage: {
6
+ inputTokens: number;
7
+ outputTokens: number;
8
+ cachedInputTokens: number;
9
+ costUsd: number;
10
+ };
11
+ finalMessage: string | null;
12
+ toolCalls: Array<{
13
+ toolCallId: string;
14
+ toolName: string;
15
+ args: unknown;
16
+ result: string | null;
17
+ isError: boolean;
18
+ }>;
19
+ }
20
+ export declare function parsePiJsonl(stdout: string): ParsedPiOutput;
21
+ export declare function isPiUnknownSessionError(stdout: string, stderr: string): boolean;
22
+ export {};
23
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpH;AAgBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CA2L3D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQ/E"}
@@ -0,0 +1,195 @@
1
+ import { asNumber, asString, parseJson } from "@paperclipai/adapter-utils/server-utils";
2
+ function asRecord(value) {
3
+ if (typeof value !== "object" || value === null || Array.isArray(value))
4
+ return null;
5
+ return value;
6
+ }
7
+ function extractTextContent(content) {
8
+ if (typeof content === "string")
9
+ return content;
10
+ if (!Array.isArray(content))
11
+ return "";
12
+ return content
13
+ .filter((c) => c.type === "text" && c.text)
14
+ .map((c) => c.text)
15
+ .join("");
16
+ }
17
+ export function parsePiJsonl(stdout) {
18
+ const result = {
19
+ sessionId: null,
20
+ messages: [],
21
+ errors: [],
22
+ usage: {
23
+ inputTokens: 0,
24
+ outputTokens: 0,
25
+ cachedInputTokens: 0,
26
+ costUsd: 0,
27
+ },
28
+ finalMessage: null,
29
+ toolCalls: [],
30
+ };
31
+ let currentToolCall = null;
32
+ for (const rawLine of stdout.split(/\r?\n/)) {
33
+ const line = rawLine.trim();
34
+ if (!line)
35
+ continue;
36
+ const event = parseJson(line);
37
+ if (!event)
38
+ continue;
39
+ const eventType = asString(event.type, "");
40
+ // RPC protocol messages - skip these (internal implementation detail)
41
+ if (eventType === "response" || eventType === "extension_ui_request" || eventType === "extension_ui_response" || eventType === "extension_error") {
42
+ continue;
43
+ }
44
+ // Agent lifecycle
45
+ if (eventType === "agent_start") {
46
+ continue;
47
+ }
48
+ if (eventType === "agent_end") {
49
+ const messages = event.messages;
50
+ if (messages && messages.length > 0) {
51
+ const lastMessage = messages[messages.length - 1];
52
+ if (lastMessage?.role === "assistant") {
53
+ const content = lastMessage.content;
54
+ result.finalMessage = extractTextContent(content);
55
+ }
56
+ }
57
+ continue;
58
+ }
59
+ if (eventType === "auto_retry_end") {
60
+ const succeeded = event.success === true;
61
+ if (!succeeded) {
62
+ const finalError = asString(event.finalError, "").trim();
63
+ result.errors.push(finalError || "Pi exhausted automatic retries without producing a response.");
64
+ }
65
+ continue;
66
+ }
67
+ // Turn lifecycle
68
+ if (eventType === "turn_start") {
69
+ continue;
70
+ }
71
+ if (eventType === "turn_end") {
72
+ const message = asRecord(event.message);
73
+ if (message) {
74
+ const content = message.content;
75
+ const text = extractTextContent(content);
76
+ if (text) {
77
+ result.finalMessage = text;
78
+ result.messages.push(text);
79
+ }
80
+ // Extract usage and cost from assistant message
81
+ const usage = asRecord(message.usage);
82
+ if (usage) {
83
+ result.usage.inputTokens += asNumber(usage.input, 0);
84
+ result.usage.outputTokens += asNumber(usage.output, 0);
85
+ result.usage.cachedInputTokens += asNumber(usage.cacheRead, 0);
86
+ // Pi stores cost in usage.cost.total (and broken down in usage.cost.input, etc.)
87
+ const cost = asRecord(usage.cost);
88
+ if (cost) {
89
+ result.usage.costUsd += asNumber(cost.total, 0);
90
+ }
91
+ }
92
+ }
93
+ // Tool results are in toolResults array
94
+ const toolResults = event.toolResults;
95
+ if (toolResults) {
96
+ for (const tr of toolResults) {
97
+ const toolCallId = asString(tr.toolCallId, "");
98
+ const content = tr.content;
99
+ const isError = tr.isError === true;
100
+ // Find matching tool call by toolCallId
101
+ const existingCall = result.toolCalls.find((tc) => tc.toolCallId === toolCallId);
102
+ if (existingCall) {
103
+ existingCall.result = typeof content === "string" ? content : JSON.stringify(content);
104
+ existingCall.isError = isError;
105
+ }
106
+ }
107
+ }
108
+ continue;
109
+ }
110
+ // Message updates (streaming)
111
+ if (eventType === "message_update") {
112
+ const assistantEvent = asRecord(event.assistantMessageEvent);
113
+ if (assistantEvent) {
114
+ const msgType = asString(assistantEvent.type, "");
115
+ if (msgType === "text_delta") {
116
+ const delta = asString(assistantEvent.delta, "");
117
+ if (delta) {
118
+ // Append to last message or create new
119
+ if (result.messages.length === 0) {
120
+ result.messages.push(delta);
121
+ }
122
+ else {
123
+ result.messages[result.messages.length - 1] += delta;
124
+ }
125
+ }
126
+ }
127
+ }
128
+ continue;
129
+ }
130
+ if (eventType === "error") {
131
+ const message = asString(event.message, "").trim();
132
+ if (message) {
133
+ result.errors.push(message);
134
+ }
135
+ continue;
136
+ }
137
+ // Tool execution
138
+ if (eventType === "tool_execution_start") {
139
+ const toolCallId = asString(event.toolCallId, "");
140
+ const toolName = asString(event.toolName, "");
141
+ const args = event.args;
142
+ currentToolCall = { toolCallId, toolName, args };
143
+ result.toolCalls.push({
144
+ toolCallId,
145
+ toolName,
146
+ args,
147
+ result: null,
148
+ isError: false,
149
+ });
150
+ continue;
151
+ }
152
+ if (eventType === "tool_execution_end") {
153
+ const toolCallId = asString(event.toolCallId, "");
154
+ const toolName = asString(event.toolName, "");
155
+ const toolResult = event.result;
156
+ const isError = event.isError === true;
157
+ // Find the tool call by toolCallId (not toolName, to handle multiple calls to same tool)
158
+ const existingCall = result.toolCalls.find((tc) => tc.toolCallId === toolCallId);
159
+ if (existingCall) {
160
+ existingCall.result = typeof toolResult === "string" ? toolResult : JSON.stringify(toolResult);
161
+ existingCall.isError = isError;
162
+ }
163
+ currentToolCall = null;
164
+ continue;
165
+ }
166
+ // Usage tracking if available in the event (fallback for standalone usage events)
167
+ if (eventType === "usage" || event.usage) {
168
+ const usage = asRecord(event.usage);
169
+ if (usage) {
170
+ // Support both Pi format (input/output/cacheRead) and generic format (inputTokens/outputTokens/cachedInputTokens)
171
+ result.usage.inputTokens += asNumber(usage.inputTokens ?? usage.input, 0);
172
+ result.usage.outputTokens += asNumber(usage.outputTokens ?? usage.output, 0);
173
+ result.usage.cachedInputTokens += asNumber(usage.cachedInputTokens ?? usage.cacheRead, 0);
174
+ // Cost may be in usage.costUsd (direct) or usage.cost.total (Pi format)
175
+ const cost = asRecord(usage.cost);
176
+ if (cost) {
177
+ result.usage.costUsd += asNumber(cost.total ?? usage.costUsd, 0);
178
+ }
179
+ else {
180
+ result.usage.costUsd += asNumber(usage.costUsd, 0);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ return result;
186
+ }
187
+ export function isPiUnknownSessionError(stdout, stderr) {
188
+ const haystack = `${stdout}\n${stderr}`
189
+ .split(/\r?\n/)
190
+ .map((line) => line.trim())
191
+ .filter(Boolean)
192
+ .join("\n");
193
+ return /unknown\s+session|session\s+not\s+found|session\s+.*\s+not\s+found|no\s+session/i.test(haystack);
194
+ }
195
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parse.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.test.d.ts","sourceRoot":"","sources":["../../src/server/parse.test.ts"],"names":[],"mappings":""}