@tickernelz/paperclip-pro-adapter-pi-local 2026.925.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/dist/cli/format-event.d.ts +2 -0
- package/dist/cli/format-event.d.ts.map +1 -0
- package/dist/cli/format-event.js +99 -0
- package/dist/cli/format-event.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/server/execute.d.ts +3 -0
- package/dist/server/execute.d.ts.map +1 -0
- package/dist/server/execute.js +725 -0
- package/dist/server/execute.js.map +1 -0
- package/dist/server/execute.remote.test.d.ts +2 -0
- package/dist/server/execute.remote.test.d.ts.map +1 -0
- package/dist/server/execute.remote.test.js +533 -0
- package/dist/server/execute.remote.test.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +51 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/models.d.ts +20 -0
- package/dist/server/models.d.ts.map +1 -0
- package/dist/server/models.js +163 -0
- package/dist/server/models.js.map +1 -0
- package/dist/server/models.test.d.ts +2 -0
- package/dist/server/models.test.d.ts.map +1 -0
- package/dist/server/models.test.js +22 -0
- package/dist/server/models.test.js.map +1 -0
- package/dist/server/parse.d.ts +23 -0
- package/dist/server/parse.d.ts.map +1 -0
- package/dist/server/parse.js +210 -0
- package/dist/server/parse.js.map +1 -0
- package/dist/server/parse.test.d.ts +2 -0
- package/dist/server/parse.test.d.ts.map +1 -0
- package/dist/server/parse.test.js +264 -0
- package/dist/server/parse.test.js.map +1 -0
- package/dist/server/runtime-config.d.ts +12 -0
- package/dist/server/runtime-config.d.ts.map +1 -0
- package/dist/server/runtime-config.js +126 -0
- package/dist/server/runtime-config.js.map +1 -0
- package/dist/server/runtime-config.test.d.ts +2 -0
- package/dist/server/runtime-config.test.d.ts.map +1 -0
- package/dist/server/runtime-config.test.js +197 -0
- package/dist/server/runtime-config.test.js.map +1 -0
- package/dist/server/skills.d.ts +7 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +69 -0
- package/dist/server/skills.js.map +1 -0
- package/dist/server/test.d.ts +3 -0
- package/dist/server/test.d.ts.map +1 -0
- package/dist/server/test.js +309 -0
- package/dist/server/test.js.map +1 -0
- package/dist/ui/build-config.d.ts +3 -0
- package/dist/ui/build-config.d.ts.map +1 -0
- package/dist/ui/build-config.js +26 -0
- package/dist/ui/build-config.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/parse-stdout.d.ts +4 -0
- package/dist/ui/parse-stdout.d.ts.map +1 -0
- package/dist/ui/parse-stdout.js +271 -0
- package/dist/ui/parse-stdout.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AdapterSkillContext, AdapterSkillSnapshot } from "@tickernelz/paperclip-pro-adapter-utils";
|
|
2
|
+
export declare function listPiSkills(ctx: AdapterSkillContext): Promise<AdapterSkillSnapshot>;
|
|
3
|
+
export declare function syncPiSkills(ctx: AdapterSkillContext, desiredSkills: string[]): Promise<AdapterSkillSnapshot>;
|
|
4
|
+
export declare function resolvePiDesiredSkillNames(config: Record<string, unknown>, availableEntries: Array<{
|
|
5
|
+
key: string;
|
|
6
|
+
}>): string[];
|
|
7
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/server/skills.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,yCAAyC,CAAC;AA2CjD,wBAAsB,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAE1F;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,mBAAmB,EACxB,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,oBAAoB,CAAC,CA0B/B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,gBAAgB,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,YAGzC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { buildPersistentSkillSnapshot, ensurePaperclipSkillSymlink, readPaperclipRuntimeSkillEntries, readInstalledSkillTargets, resolveLegacyPaperclipDesiredSkillNames, } from "@tickernelz/paperclip-pro-adapter-utils/server-utils";
|
|
6
|
+
const __moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
function asString(value) {
|
|
8
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
9
|
+
}
|
|
10
|
+
function resolvePiSkillsHome(config) {
|
|
11
|
+
const env = typeof config.env === "object" && config.env !== null && !Array.isArray(config.env)
|
|
12
|
+
? config.env
|
|
13
|
+
: {};
|
|
14
|
+
const configuredHome = asString(env.HOME);
|
|
15
|
+
const home = configuredHome ? path.resolve(configuredHome) : os.homedir();
|
|
16
|
+
return path.join(home, ".pi", "agent", "skills");
|
|
17
|
+
}
|
|
18
|
+
async function buildPiSkillSnapshot(config) {
|
|
19
|
+
const availableEntries = await readPaperclipRuntimeSkillEntries(config, __moduleDir);
|
|
20
|
+
const desiredSkills = resolveLegacyPaperclipDesiredSkillNames(config, availableEntries);
|
|
21
|
+
const skillsHome = resolvePiSkillsHome(config);
|
|
22
|
+
const installed = await readInstalledSkillTargets(skillsHome);
|
|
23
|
+
return buildPersistentSkillSnapshot({
|
|
24
|
+
adapterType: "pi_local",
|
|
25
|
+
availableEntries,
|
|
26
|
+
desiredSkills,
|
|
27
|
+
installed,
|
|
28
|
+
skillsHome,
|
|
29
|
+
locationLabel: "~/.pi/agent/skills",
|
|
30
|
+
missingDetail: "Configured but not currently linked into the Pi skills home.",
|
|
31
|
+
externalConflictDetail: "Skill name is occupied by an external installation.",
|
|
32
|
+
externalDetail: "Installed outside Paperclip management.",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export async function listPiSkills(ctx) {
|
|
36
|
+
return buildPiSkillSnapshot(ctx.config);
|
|
37
|
+
}
|
|
38
|
+
export async function syncPiSkills(ctx, desiredSkills) {
|
|
39
|
+
const availableEntries = await readPaperclipRuntimeSkillEntries(ctx.config, __moduleDir);
|
|
40
|
+
const desiredSet = new Set([
|
|
41
|
+
...resolveLegacyPaperclipDesiredSkillNames({}, availableEntries),
|
|
42
|
+
...desiredSkills,
|
|
43
|
+
]);
|
|
44
|
+
const skillsHome = resolvePiSkillsHome(ctx.config);
|
|
45
|
+
await fs.mkdir(skillsHome, { recursive: true });
|
|
46
|
+
const installed = await readInstalledSkillTargets(skillsHome);
|
|
47
|
+
const availableByRuntimeName = new Map(availableEntries.map((entry) => [entry.runtimeName, entry]));
|
|
48
|
+
for (const available of availableEntries) {
|
|
49
|
+
if (!desiredSet.has(available.key))
|
|
50
|
+
continue;
|
|
51
|
+
const target = path.join(skillsHome, available.runtimeName);
|
|
52
|
+
await ensurePaperclipSkillSymlink(available.source, target);
|
|
53
|
+
}
|
|
54
|
+
for (const [name, installedEntry] of installed.entries()) {
|
|
55
|
+
const available = availableByRuntimeName.get(name);
|
|
56
|
+
if (!available)
|
|
57
|
+
continue;
|
|
58
|
+
if (desiredSet.has(available.key))
|
|
59
|
+
continue;
|
|
60
|
+
if (installedEntry.targetPath !== available.source)
|
|
61
|
+
continue;
|
|
62
|
+
await fs.unlink(path.join(skillsHome, name)).catch(() => { });
|
|
63
|
+
}
|
|
64
|
+
return buildPiSkillSnapshot(ctx.config);
|
|
65
|
+
}
|
|
66
|
+
export function resolvePiDesiredSkillNames(config, availableEntries) {
|
|
67
|
+
return resolveLegacyPaperclipDesiredSkillNames(config, availableEntries);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/server/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { AdapterEnvironmentTestContext, AdapterEnvironmentTestResult } from "@tickernelz/paperclip-pro-adapter-utils";
|
|
2
|
+
export declare function testEnvironment(ctx: AdapterEnvironmentTestContext): Promise<AdapterEnvironmentTestResult>;
|
|
3
|
+
//# sourceMappingURL=test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,yCAAyC,CAAC;AA4EjD,wBAAsB,eAAe,CACnC,GAAG,EAAE,6BAA6B,GACjC,OAAO,CAAC,4BAA4B,CAAC,CA+PvC"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { asString, parseObject, ensurePathInEnv, } from "@tickernelz/paperclip-pro-adapter-utils/server-utils";
|
|
2
|
+
import { asStringArray, } from "@tickernelz/paperclip-pro-adapter-utils/server-utils";
|
|
3
|
+
import { ensureAdapterExecutionTargetCommandResolvable, maybeRunSandboxInstallCommand, ensureAdapterExecutionTargetDirectory, runAdapterExecutionTargetProcess, describeAdapterExecutionTarget, resolveAdapterExecutionTargetCwd, } from "@tickernelz/paperclip-pro-adapter-utils/execution-target";
|
|
4
|
+
import { discoverPiModelsCached } from "./models.js";
|
|
5
|
+
import { parsePiJsonl } from "./parse.js";
|
|
6
|
+
import { SANDBOX_INSTALL_COMMAND } from "../index.js";
|
|
7
|
+
function summarizeStatus(checks) {
|
|
8
|
+
if (checks.some((check) => check.level === "error"))
|
|
9
|
+
return "fail";
|
|
10
|
+
if (checks.some((check) => check.level === "warn"))
|
|
11
|
+
return "warn";
|
|
12
|
+
return "pass";
|
|
13
|
+
}
|
|
14
|
+
function firstNonEmptyLine(text) {
|
|
15
|
+
return (text
|
|
16
|
+
.split(/\r?\n/)
|
|
17
|
+
.map((line) => line.trim())
|
|
18
|
+
.find(Boolean) ?? "");
|
|
19
|
+
}
|
|
20
|
+
function summarizeProbeDetail(stdout, stderr, parsedError) {
|
|
21
|
+
const raw = parsedError?.trim() || firstNonEmptyLine(stderr) || firstNonEmptyLine(stdout);
|
|
22
|
+
if (!raw)
|
|
23
|
+
return null;
|
|
24
|
+
const clean = raw.replace(/\s+/g, " ").trim();
|
|
25
|
+
const max = 240;
|
|
26
|
+
return clean.length > max ? `${clean.slice(0, max - 1)}...` : clean;
|
|
27
|
+
}
|
|
28
|
+
function normalizeEnv(input) {
|
|
29
|
+
if (typeof input !== "object" || input === null || Array.isArray(input))
|
|
30
|
+
return {};
|
|
31
|
+
const env = {};
|
|
32
|
+
for (const [key, value] of Object.entries(input)) {
|
|
33
|
+
if (typeof value === "string")
|
|
34
|
+
env[key] = value;
|
|
35
|
+
}
|
|
36
|
+
return env;
|
|
37
|
+
}
|
|
38
|
+
const PI_AUTH_REQUIRED_RE = /(?:auth(?:entication)?\s+required|api\s*key|invalid\s*api\s*key|not\s+logged\s+in|free\s+usage\s+exceeded)/i;
|
|
39
|
+
const PI_STALE_PACKAGE_RE = /pi-driver|npm:\s*pi-driver/i;
|
|
40
|
+
function buildPiModelDiscoveryFailureCheck(message) {
|
|
41
|
+
if (PI_STALE_PACKAGE_RE.test(message)) {
|
|
42
|
+
return {
|
|
43
|
+
code: "pi_package_install_failed",
|
|
44
|
+
level: "warn",
|
|
45
|
+
message: "Pi startup failed while installing configured package `npm:pi-driver`.",
|
|
46
|
+
detail: message,
|
|
47
|
+
hint: "Remove `npm:pi-driver` from ~/.pi/agent/settings.json or set adapter env HOME to a clean Pi profile, then retry `pi --list-models`.",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
code: "pi_models_discovery_failed",
|
|
52
|
+
level: "warn",
|
|
53
|
+
message,
|
|
54
|
+
hint: "Run `pi --list-models` manually to verify provider auth and config.",
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export async function testEnvironment(ctx) {
|
|
58
|
+
const checks = [];
|
|
59
|
+
const config = parseObject(ctx.config);
|
|
60
|
+
const command = asString(config.command, "pi");
|
|
61
|
+
const target = ctx.executionTarget ?? null;
|
|
62
|
+
const targetIsRemote = target?.kind === "remote";
|
|
63
|
+
const cwd = resolveAdapterExecutionTargetCwd(target, asString(config.cwd, ""), process.cwd());
|
|
64
|
+
const targetLabel = targetIsRemote
|
|
65
|
+
? ctx.environmentName ?? describeAdapterExecutionTarget(target)
|
|
66
|
+
: null;
|
|
67
|
+
const runId = `pi-envtest-${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
68
|
+
if (targetLabel) {
|
|
69
|
+
checks.push({
|
|
70
|
+
code: "pi_environment_target",
|
|
71
|
+
level: "info",
|
|
72
|
+
message: `Probing inside environment: ${targetLabel}`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
await ensureAdapterExecutionTargetDirectory(runId, target, cwd, {
|
|
77
|
+
cwd,
|
|
78
|
+
env: {},
|
|
79
|
+
createIfMissing: false,
|
|
80
|
+
});
|
|
81
|
+
checks.push({
|
|
82
|
+
code: "pi_cwd_valid",
|
|
83
|
+
level: "info",
|
|
84
|
+
message: `Working directory is valid: ${cwd}`,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
checks.push({
|
|
89
|
+
code: "pi_cwd_invalid",
|
|
90
|
+
level: "error",
|
|
91
|
+
message: err instanceof Error ? err.message : "Invalid working directory",
|
|
92
|
+
detail: cwd,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const envConfig = parseObject(config.env);
|
|
96
|
+
const env = {};
|
|
97
|
+
for (const [key, value] of Object.entries(envConfig)) {
|
|
98
|
+
if (typeof value === "string")
|
|
99
|
+
env[key] = value;
|
|
100
|
+
}
|
|
101
|
+
const runtimeEnv = normalizeEnv(ensurePathInEnv({ ...process.env, ...env }));
|
|
102
|
+
const cwdInvalid = checks.some((check) => check.code === "pi_cwd_invalid");
|
|
103
|
+
if (cwdInvalid) {
|
|
104
|
+
checks.push({
|
|
105
|
+
code: "pi_command_skipped",
|
|
106
|
+
level: "warn",
|
|
107
|
+
message: "Skipped command check because working directory validation failed.",
|
|
108
|
+
detail: command,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const installCheck = await maybeRunSandboxInstallCommand({
|
|
113
|
+
runId,
|
|
114
|
+
target,
|
|
115
|
+
adapterKey: "pi",
|
|
116
|
+
installCommand: SANDBOX_INSTALL_COMMAND,
|
|
117
|
+
detectCommand: command,
|
|
118
|
+
env,
|
|
119
|
+
});
|
|
120
|
+
if (installCheck)
|
|
121
|
+
checks.push(installCheck);
|
|
122
|
+
try {
|
|
123
|
+
await ensureAdapterExecutionTargetCommandResolvable(command, target, cwd, runtimeEnv);
|
|
124
|
+
checks.push({
|
|
125
|
+
code: "pi_command_resolvable",
|
|
126
|
+
level: "info",
|
|
127
|
+
message: `Command is executable: ${command}`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
checks.push({
|
|
132
|
+
code: "pi_command_unresolvable",
|
|
133
|
+
level: "error",
|
|
134
|
+
message: err instanceof Error ? err.message : "Command is not executable",
|
|
135
|
+
detail: command,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const canRunProbe = checks.every((check) => check.code !== "pi_cwd_invalid" && check.code !== "pi_command_unresolvable");
|
|
140
|
+
// Pi model discovery shells out to `pi --list-models` locally; when probing a
|
|
141
|
+
// remote target we skip discovery and let the remote hello probe surface
|
|
142
|
+
// model/auth issues directly.
|
|
143
|
+
if (!targetIsRemote && canRunProbe) {
|
|
144
|
+
try {
|
|
145
|
+
const discovered = await discoverPiModelsCached({ command, cwd, env: runtimeEnv });
|
|
146
|
+
if (discovered.length > 0) {
|
|
147
|
+
checks.push({
|
|
148
|
+
code: "pi_models_discovered",
|
|
149
|
+
level: "info",
|
|
150
|
+
message: `Discovered ${discovered.length} model(s) from Pi.`,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
checks.push({
|
|
155
|
+
code: "pi_models_empty",
|
|
156
|
+
level: "warn",
|
|
157
|
+
message: "Pi returned no models.",
|
|
158
|
+
hint: "Run `pi --list-models` and verify provider authentication.",
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
checks.push(buildPiModelDiscoveryFailureCheck(err instanceof Error ? err.message : "Pi model discovery failed."));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const configuredModel = asString(config.model, "").trim();
|
|
167
|
+
if (!configuredModel) {
|
|
168
|
+
checks.push({
|
|
169
|
+
code: "pi_model_required",
|
|
170
|
+
level: "error",
|
|
171
|
+
message: "Pi requires a configured model in provider/model format.",
|
|
172
|
+
hint: "Set adapterConfig.model using an ID from `pi --list-models`.",
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
else if (targetIsRemote) {
|
|
176
|
+
checks.push({
|
|
177
|
+
code: "pi_model_validation_skipped_remote",
|
|
178
|
+
level: "info",
|
|
179
|
+
message: `Skipped local model validation; will be validated by the hello probe inside ${targetLabel}.`,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
else if (canRunProbe) {
|
|
183
|
+
// Verify model is in the list
|
|
184
|
+
try {
|
|
185
|
+
const discovered = await discoverPiModelsCached({ command, cwd, env: runtimeEnv });
|
|
186
|
+
const modelExists = discovered.some((m) => m.id === configuredModel);
|
|
187
|
+
if (modelExists) {
|
|
188
|
+
checks.push({
|
|
189
|
+
code: "pi_model_configured",
|
|
190
|
+
level: "info",
|
|
191
|
+
message: `Configured model: ${configuredModel}`,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
checks.push({
|
|
196
|
+
code: "pi_model_not_found",
|
|
197
|
+
level: "warn",
|
|
198
|
+
message: `Configured model "${configuredModel}" not found in available models.`,
|
|
199
|
+
hint: "Run `pi --list-models` and choose a currently available provider/model ID.",
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// If we can't verify, just note it
|
|
205
|
+
checks.push({
|
|
206
|
+
code: "pi_model_configured",
|
|
207
|
+
level: "info",
|
|
208
|
+
message: `Configured model: ${configuredModel}`,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (canRunProbe && configuredModel) {
|
|
213
|
+
// Parse model for probe
|
|
214
|
+
const provider = configuredModel.includes("/")
|
|
215
|
+
? configuredModel.slice(0, configuredModel.indexOf("/"))
|
|
216
|
+
: "";
|
|
217
|
+
const modelId = configuredModel.includes("/")
|
|
218
|
+
? configuredModel.slice(configuredModel.indexOf("/") + 1)
|
|
219
|
+
: configuredModel;
|
|
220
|
+
const thinking = asString(config.thinking, "").trim();
|
|
221
|
+
const extraArgs = (() => {
|
|
222
|
+
const fromExtraArgs = asStringArray(config.extraArgs);
|
|
223
|
+
if (fromExtraArgs.length > 0)
|
|
224
|
+
return fromExtraArgs;
|
|
225
|
+
return asStringArray(config.args);
|
|
226
|
+
})();
|
|
227
|
+
const args = ["-p", "Respond with hello.", "--mode", "json"];
|
|
228
|
+
if (provider)
|
|
229
|
+
args.push("--provider", provider);
|
|
230
|
+
if (modelId)
|
|
231
|
+
args.push("--model", modelId);
|
|
232
|
+
if (thinking)
|
|
233
|
+
args.push("--thinking", thinking);
|
|
234
|
+
args.push("--tools", "read");
|
|
235
|
+
if (extraArgs.length > 0)
|
|
236
|
+
args.push(...extraArgs);
|
|
237
|
+
try {
|
|
238
|
+
const probe = await runAdapterExecutionTargetProcess(runId, target, command, args, {
|
|
239
|
+
cwd,
|
|
240
|
+
env: runtimeEnv,
|
|
241
|
+
timeoutSec: 60,
|
|
242
|
+
graceSec: 5,
|
|
243
|
+
onLog: async () => { },
|
|
244
|
+
});
|
|
245
|
+
const parsed = parsePiJsonl(probe.stdout);
|
|
246
|
+
const detail = summarizeProbeDetail(probe.stdout, probe.stderr, parsed.errors[0] ?? null);
|
|
247
|
+
const authEvidence = `${parsed.errors.join("\n")}\n${probe.stdout}\n${probe.stderr}`.trim();
|
|
248
|
+
if (probe.timedOut) {
|
|
249
|
+
checks.push({
|
|
250
|
+
code: "pi_hello_probe_timed_out",
|
|
251
|
+
level: "warn",
|
|
252
|
+
message: "Pi hello probe timed out.",
|
|
253
|
+
hint: "Retry the probe. If this persists, run Pi manually in this working directory.",
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
else if ((probe.exitCode ?? 1) === 0 && parsed.errors.length === 0) {
|
|
257
|
+
const summary = (parsed.finalMessage || parsed.messages.join(" ")).trim();
|
|
258
|
+
const hasHello = /\bhello\b/i.test(summary);
|
|
259
|
+
checks.push({
|
|
260
|
+
code: hasHello ? "pi_hello_probe_passed" : "pi_hello_probe_unexpected_output",
|
|
261
|
+
level: hasHello ? "info" : "warn",
|
|
262
|
+
message: hasHello
|
|
263
|
+
? "Pi hello probe succeeded."
|
|
264
|
+
: "Pi probe ran but did not return `hello` as expected.",
|
|
265
|
+
...(summary ? { detail: summary.replace(/\s+/g, " ").trim().slice(0, 240) } : {}),
|
|
266
|
+
...(hasHello
|
|
267
|
+
? {}
|
|
268
|
+
: {
|
|
269
|
+
hint: "Run `pi --mode json` manually and prompt `Respond with hello` to inspect output.",
|
|
270
|
+
}),
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
else if (PI_AUTH_REQUIRED_RE.test(authEvidence)) {
|
|
274
|
+
checks.push({
|
|
275
|
+
code: "pi_hello_probe_auth_required",
|
|
276
|
+
level: "warn",
|
|
277
|
+
message: "Pi is installed, but provider authentication is not ready.",
|
|
278
|
+
...(detail ? { detail } : {}),
|
|
279
|
+
hint: "Set provider API key environment variable (e.g., ANTHROPIC_API_KEY, XAI_API_KEY) and retry.",
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
checks.push({
|
|
284
|
+
code: "pi_hello_probe_failed",
|
|
285
|
+
level: "error",
|
|
286
|
+
message: "Pi hello probe failed.",
|
|
287
|
+
...(detail ? { detail } : {}),
|
|
288
|
+
hint: "Run `pi --mode json` manually in this working directory to debug.",
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch (err) {
|
|
293
|
+
checks.push({
|
|
294
|
+
code: "pi_hello_probe_failed",
|
|
295
|
+
level: "error",
|
|
296
|
+
message: "Pi hello probe failed.",
|
|
297
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
298
|
+
hint: "Run `pi --mode json` manually in this working directory to debug.",
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
adapterType: ctx.adapterType,
|
|
304
|
+
status: summarizeStatus(checks),
|
|
305
|
+
checks,
|
|
306
|
+
testedAt: new Date().toISOString(),
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../../src/ui/build-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAEzG,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBjF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { buildAdapterEnvConfig } from "@tickernelz/paperclip-pro-adapter-utils";
|
|
2
|
+
export function buildPiLocalConfig(v) {
|
|
3
|
+
const ac = {};
|
|
4
|
+
if (v.cwd)
|
|
5
|
+
ac.cwd = v.cwd;
|
|
6
|
+
if (v.instructionsFilePath)
|
|
7
|
+
ac.instructionsFilePath = v.instructionsFilePath;
|
|
8
|
+
if (v.model)
|
|
9
|
+
ac.model = v.model;
|
|
10
|
+
if (v.thinkingEffort)
|
|
11
|
+
ac.thinking = v.thinkingEffort;
|
|
12
|
+
// Pi sessions can run until the CLI exits naturally; keep timeout disabled (0)
|
|
13
|
+
ac.timeoutSec = 0;
|
|
14
|
+
ac.graceSec = 20;
|
|
15
|
+
const env = buildAdapterEnvConfig(v.envBindings, v.envVars);
|
|
16
|
+
if (Object.keys(env).length > 0)
|
|
17
|
+
ac.env = env;
|
|
18
|
+
if (v.command)
|
|
19
|
+
ac.command = v.command;
|
|
20
|
+
if (v.extraArgs)
|
|
21
|
+
ac.extraArgs = v.extraArgs;
|
|
22
|
+
if (v.args)
|
|
23
|
+
ac.args = v.args;
|
|
24
|
+
return ac;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=build-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-config.js","sourceRoot":"","sources":["../../src/ui/build-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA2B,MAAM,yCAAyC,CAAC;AAEzG,MAAM,UAAU,kBAAkB,CAAC,CAAqB;IACtD,MAAM,EAAE,GAA4B,EAAE,CAAC;IACvC,IAAI,CAAC,CAAC,GAAG;QAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IAC1B,IAAI,CAAC,CAAC,oBAAoB;QAAE,EAAE,CAAC,oBAAoB,GAAG,CAAC,CAAC,oBAAoB,CAAC;IAC7E,IAAI,CAAC,CAAC,KAAK;QAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,CAAC,cAAc;QAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC;IAErD,+EAA+E;IAC/E,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC;IAClB,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;IAEjB,MAAM,GAAG,GAAG,qBAAqB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;IAC9C,IAAI,CAAC,CAAC,OAAO;QAAE,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IACtC,IAAI,CAAC,CAAC,SAAS;QAAE,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;IAC5C,IAAI,CAAC,CAAC,IAAI;QAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IAE7B,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/ui/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-stdout.d.ts","sourceRoot":"","sources":["../../src/ui/parse-stdout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAyC/E,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,EAAE,CAyQ7E"}
|