@pasko70/pibo 1.7.0 → 1.7.2
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/context/codex-base-prompt.md +0 -0
- package/context/compute-worker.md +0 -0
- package/context/pibo-compaction-prompt.md +0 -0
- package/context/pibo-native-tooling.md +0 -0
- package/context/pibo-system-prompt.md +0 -0
- package/dist/apps/chat/web-app.js +4 -3
- package/dist/apps/chat-ui/assets/{dist-DD6PyrDV.js → dist-8eLx-6HY.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-C3CzqW75.js → dist-BXT6rjJn.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BFmfAHTa.js → dist-CCHtiwhr.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DbMhwIF-.js → dist-CCt9U3Or.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BHS5hqHn.js → dist-Cfyo-Bgw.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-Dp3T6E_K.js → dist-CxWQqjbA.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BKWZVzkX.js → dist-Ddn6n4ge.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BgiyRvMc.js → dist-DjmyW251.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-v8XQydKe.js → dist-Jc0njXt3.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DYHLT66j.js → dist-cyStkSiF.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-C1irMXX8.js → dist-eRtG3vUM.js} +1 -1
- package/dist/apps/chat-ui/assets/index-COp5Hme0.js +166 -0
- package/dist/apps/chat-ui/assets/{index-D8itqvK_.css → index-Dz6asKNQ.css} +1 -1
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-144x144.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-192x192.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-48x48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-512x512.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-72x72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-96x96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/1024.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/114.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/120.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/128.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/144.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/152.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/167.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/180.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/192.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/29.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/50.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/512.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/57.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/58.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/76.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/87.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-24.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-30.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-36.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-44.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-24.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-30.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-36.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-44.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-24.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-30.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-36.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-44.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-400.png +0 -0
- package/dist/apps/chat-ui/index.html +2 -2
- package/dist/apps/chat-ui/manifest.webmanifest +0 -0
- package/dist/apps/chat-ui/sw.js +7 -1
- package/dist/apps/chat-vscode-web/assets/index-CfeNUaRh.js +41 -0
- package/dist/apps/chat-vscode-web/index.html +1 -1
- package/dist/bin/pibo.js +0 -0
- package/dist/bin/rg.js +0 -0
- package/dist/cli.js +4 -1
- package/dist/compute/docker.js +16 -8
- package/dist/gateway/cli.js +108 -6
- package/dist/gateway/web.js +5 -12
- package/dist/plugins/dev-auth.js +28 -2
- package/package.json +93 -93
- package/skills/builtin/graphify/SKILL.md +0 -0
- package/skills/builtin/pi-agent-harness/SKILL.md +0 -0
- package/skills/builtin/pi-agent-harness/agents/openai.yaml +0 -0
- package/skills/builtin/pibo-docker-system/SKILL.md +0 -0
- package/skills/builtin/pibo-spec-writing/SKILL.md +0 -0
- package/skills/builtin/prd/SKILL.md +0 -0
- package/skills/builtin/ralph-loop/SKILL.md +0 -0
- package/skills/builtin/ralph-prd-json/SKILL.md +0 -0
- package/skills/builtin/skill-creator/LICENSE.txt +0 -0
- package/skills/builtin/skill-creator/SKILL.md +0 -0
- package/skills/builtin/skill-creator/agents/analyzer.md +0 -0
- package/skills/builtin/skill-creator/agents/comparator.md +0 -0
- package/skills/builtin/skill-creator/agents/grader.md +0 -0
- package/skills/builtin/skill-creator/assets/eval_review.html +0 -0
- package/skills/builtin/skill-creator/eval-viewer/generate_review.py +0 -0
- package/skills/builtin/skill-creator/eval-viewer/viewer.html +0 -0
- package/skills/builtin/skill-creator/references/schemas.md +0 -0
- package/skills/builtin/skill-creator/scripts/__init__.py +0 -0
- package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +0 -0
- package/skills/builtin/skill-creator/scripts/generate_report.py +0 -0
- package/skills/builtin/skill-creator/scripts/improve_description.py +0 -0
- package/skills/builtin/skill-creator/scripts/package_skill.py +0 -0
- package/skills/builtin/skill-creator/scripts/quick_validate.py +0 -0
- package/skills/builtin/skill-creator/scripts/run_eval.py +0 -0
- package/skills/builtin/skill-creator/scripts/run_loop.py +0 -0
- package/skills/builtin/skill-creator/scripts/utils.py +0 -0
- package/skills/builtin/web-annotations/SKILL.md +0 -0
- package/src/mcp/LICENSE.mcp-cli +0 -0
- package/README.md +0 -183
- package/dist/apps/chat-ui/assets/index-DZdXJmcO.js +0 -166
- package/dist/apps/chat-vscode-web/assets/index-KKfk8l1P.js +0 -41
- package/dist/apps/vscode-artifacts/latest.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.7.0.vsix +0 -0
- package/docs/README.md +0 -23
- package/docs/ops/install-developer-host.md +0 -112
- package/docs/ops/install-user-host.md +0 -96
- package/docs/ops/upgrade-user-to-developer-host.md +0 -69
- package/docs/ops/vscode-extension-release.md +0 -160
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta name="theme-color" content="#101d22" />
|
|
7
7
|
<title>Pibo</title>
|
|
8
|
-
<script type="module" crossorigin src="/apps/chat-vscode/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/apps/chat-vscode/assets/index-CfeNUaRh.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/apps/chat-vscode/assets/index-B5QK07zO.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/dist/bin/pibo.js
CHANGED
|
File without changes
|
package/dist/bin/rg.js
CHANGED
|
File without changes
|
package/dist/cli.js
CHANGED
|
@@ -52,6 +52,9 @@ function isLoopbackBindForCli(host) {
|
|
|
52
52
|
const normalized = host.startsWith("[") && host.endsWith("]") ? host.slice(1, -1) : host;
|
|
53
53
|
return normalized === "127.0.0.1" || normalized === "::1" || normalized === "localhost";
|
|
54
54
|
}
|
|
55
|
+
function isComputeWorkerRuntimeForCli() {
|
|
56
|
+
return process.env.PIBO_COMPUTE_WORKER === "1";
|
|
57
|
+
}
|
|
55
58
|
export async function runPiboCli(argv = process.argv) {
|
|
56
59
|
if (argv[2] === "--help" || argv[2] === "-h") {
|
|
57
60
|
printRootDiscovery();
|
|
@@ -371,7 +374,7 @@ export async function runPiboCli(argv = process.argv) {
|
|
|
371
374
|
if (authMode !== undefined && authMode !== "better-auth" && authMode !== "local") {
|
|
372
375
|
throw new Error(`--auth must be 'better-auth' or 'local', got '${authMode}'`);
|
|
373
376
|
}
|
|
374
|
-
if (authMode === "local" && options.webHost !== undefined && !isLoopbackBindForCli(options.webHost)) {
|
|
377
|
+
if (authMode === "local" && options.webHost !== undefined && !isLoopbackBindForCli(options.webHost) && !isComputeWorkerRuntimeForCli()) {
|
|
375
378
|
throw new Error(`--auth=local requires a loopback bind (127.0.0.1, ::1, or localhost). Got --web-host='${options.webHost}'. ` +
|
|
376
379
|
"Either drop --web-host or pick --auth=better-auth for a public bind.");
|
|
377
380
|
}
|
package/dist/compute/docker.js
CHANGED
|
@@ -200,16 +200,20 @@ export function buildDevWorkerDockerRunArgs(options) {
|
|
|
200
200
|
"--name",
|
|
201
201
|
options.id,
|
|
202
202
|
...buildDockerResourcePolicyArgs(policy),
|
|
203
|
+
"-e",
|
|
204
|
+
"PIBO_COMPUTE_WORKER=1",
|
|
205
|
+
"-e",
|
|
206
|
+
"PIBO_COMPUTE_WORKER_ROLE=dev",
|
|
203
207
|
"-p",
|
|
204
|
-
|
|
208
|
+
`127.0.0.1:${options.gatewayPort}:4789`,
|
|
205
209
|
"-p",
|
|
206
|
-
|
|
210
|
+
`127.0.0.1:${options.cdpPort}:56663`,
|
|
207
211
|
"-p",
|
|
208
|
-
|
|
212
|
+
`127.0.0.1:${options.webPort}:4788`,
|
|
209
213
|
"-p",
|
|
210
|
-
|
|
214
|
+
`127.0.0.1:${options.webUIPortChat}:4790`,
|
|
211
215
|
"-p",
|
|
212
|
-
|
|
216
|
+
`127.0.0.1:${options.webUIPortContext}:4791`,
|
|
213
217
|
"-v",
|
|
214
218
|
`${options.worktreePath}:/workspace`,
|
|
215
219
|
...(options.hostNodeModules ? ["-v", `${options.hostNodeModules}:/workspace/node_modules`] : []),
|
|
@@ -307,12 +311,16 @@ export function buildWorkerDockerRunArgs(options) {
|
|
|
307
311
|
"--name",
|
|
308
312
|
options.id,
|
|
309
313
|
...buildDockerResourcePolicyArgs(policy),
|
|
314
|
+
"-e",
|
|
315
|
+
"PIBO_COMPUTE_WORKER=1",
|
|
316
|
+
"-e",
|
|
317
|
+
"PIBO_COMPUTE_WORKER_ROLE=worker",
|
|
310
318
|
"-p",
|
|
311
|
-
"4789",
|
|
319
|
+
"127.0.0.1::4789",
|
|
312
320
|
"-p",
|
|
313
|
-
"56663",
|
|
321
|
+
"127.0.0.1::56663",
|
|
314
322
|
"-p",
|
|
315
|
-
"4788",
|
|
323
|
+
"127.0.0.1::4788",
|
|
316
324
|
...buildComputeWorkerMetadataLabels({
|
|
317
325
|
role: "worker",
|
|
318
326
|
createdAt: options.createdAt,
|
package/dist/gateway/cli.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { spawn, execFile } from "node:child_process";
|
|
2
|
+
import { existsSync, mkdirSync, openSync, readFileSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
2
5
|
import { promisify } from "node:util";
|
|
3
6
|
import { createConnection } from "node:net";
|
|
4
7
|
import { DEFAULT_GATEWAY_HOST, DEFAULT_GATEWAY_PORT } from "./protocol.js";
|
|
@@ -54,6 +57,97 @@ function gatewayServiceName(target) {
|
|
|
54
57
|
function gatewayManagerCommand() {
|
|
55
58
|
return process.env.PIBO_GATEWAY_MANAGER_COMMAND || "systemctl";
|
|
56
59
|
}
|
|
60
|
+
function shouldUseWindowsGatewayManager() {
|
|
61
|
+
return process.platform === "win32" && !process.env.PIBO_GATEWAY_MANAGER_COMMAND;
|
|
62
|
+
}
|
|
63
|
+
function managedGatewayHome(target) {
|
|
64
|
+
const fromEnv = target === "web" ? process.env.PIBO_GATEWAY_WEB_HOME : process.env.PIBO_GATEWAY_DEV_HOME;
|
|
65
|
+
return fromEnv || join(homedir(), target === "web" ? ".pibo" : ".pibo-dev");
|
|
66
|
+
}
|
|
67
|
+
function targetGatewayPort(target) {
|
|
68
|
+
const fromEnv = target === "web" ? process.env.PIBO_GATEWAY_WEB_AGENT_PORT : process.env.PIBO_GATEWAY_DEV_AGENT_PORT;
|
|
69
|
+
const parsed = fromEnv ? Number(fromEnv) : NaN;
|
|
70
|
+
if (Number.isInteger(parsed) && parsed > 0 && parsed <= 65535)
|
|
71
|
+
return parsed;
|
|
72
|
+
return target === "web" ? 4789 : 4809;
|
|
73
|
+
}
|
|
74
|
+
function resolveGatewayWebCommand(argv, target) {
|
|
75
|
+
const entry = argv[1] ?? "";
|
|
76
|
+
const args = [
|
|
77
|
+
entry,
|
|
78
|
+
"gateway:web",
|
|
79
|
+
"--auth",
|
|
80
|
+
"local",
|
|
81
|
+
"--web-host",
|
|
82
|
+
"127.0.0.1",
|
|
83
|
+
"--web-port",
|
|
84
|
+
String(targetPort(target)),
|
|
85
|
+
"--gateway-port",
|
|
86
|
+
String(targetGatewayPort(target)),
|
|
87
|
+
];
|
|
88
|
+
return { command: process.execPath, args };
|
|
89
|
+
}
|
|
90
|
+
function managedGatewayPidPath(target) {
|
|
91
|
+
return join(managedGatewayHome(target), "gateway.pid");
|
|
92
|
+
}
|
|
93
|
+
function readManagedGatewayPid(target) {
|
|
94
|
+
try {
|
|
95
|
+
const path = managedGatewayPidPath(target);
|
|
96
|
+
if (!existsSync(path))
|
|
97
|
+
return undefined;
|
|
98
|
+
const pid = Number(readFileSync(path, "utf-8").trim());
|
|
99
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
100
|
+
return undefined;
|
|
101
|
+
try {
|
|
102
|
+
process.kill(pid, 0);
|
|
103
|
+
return pid;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function waitForTargetGatewayDown(target, maxRetries = 40, intervalMs = 250) {
|
|
114
|
+
const port = targetPort(target);
|
|
115
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
116
|
+
if (!(await isPortReachable("127.0.0.1", port, 1000)))
|
|
117
|
+
return true;
|
|
118
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
119
|
+
}
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
async function runWindowsGatewayManager(action, target, argv) {
|
|
123
|
+
const home = managedGatewayHome(target);
|
|
124
|
+
mkdirSync(home, { recursive: true });
|
|
125
|
+
if (action === "restart") {
|
|
126
|
+
const pid = readManagedGatewayPid(target);
|
|
127
|
+
if (pid !== undefined) {
|
|
128
|
+
try {
|
|
129
|
+
process.kill(pid, "SIGTERM");
|
|
130
|
+
}
|
|
131
|
+
catch { }
|
|
132
|
+
}
|
|
133
|
+
const down = await waitForTargetGatewayDown(target);
|
|
134
|
+
if (!down)
|
|
135
|
+
throw new Error(`Gateway on port ${targetPort(target)} did not stop in time.`);
|
|
136
|
+
}
|
|
137
|
+
const { command, args } = resolveGatewayWebCommand(argv, target);
|
|
138
|
+
const stdout = openSync(join(home, `gateway-${target}-stdout.log`), "a");
|
|
139
|
+
const stderr = openSync(join(home, `gateway-${target}-stderr.log`), "a");
|
|
140
|
+
const child = spawn(command, args, {
|
|
141
|
+
detached: true,
|
|
142
|
+
stdio: ["ignore", stdout, stderr],
|
|
143
|
+
env: {
|
|
144
|
+
...process.env,
|
|
145
|
+
PIBO_HOME: home,
|
|
146
|
+
PIBO_GATEWAY_MODE: expectedMode(target),
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
child.unref();
|
|
150
|
+
}
|
|
57
151
|
async function fetchJson(url) {
|
|
58
152
|
const response = await fetch(url, { signal: AbortSignal.timeout(3000) });
|
|
59
153
|
if (!response.ok)
|
|
@@ -175,8 +269,16 @@ function printSafetyStatus(target, status) {
|
|
|
175
269
|
for (const run of status.activeRuns)
|
|
176
270
|
console.log(` ${run.runId ?? "unknown"}: ${run.status ?? "active"}${run.toolName ? ` (${run.toolName})` : ""}`);
|
|
177
271
|
}
|
|
178
|
-
|
|
179
|
-
|
|
272
|
+
function managerRequiresShell(command) {
|
|
273
|
+
return process.platform === "win32" && /\.(?:cmd|bat)$/i.test(command);
|
|
274
|
+
}
|
|
275
|
+
async function runGatewayManager(action, target, argv = process.argv) {
|
|
276
|
+
if (shouldUseWindowsGatewayManager()) {
|
|
277
|
+
await runWindowsGatewayManager(action, target, argv);
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
const command = gatewayManagerCommand();
|
|
281
|
+
await execFileAsync(command, [action, gatewayServiceName(target)], { timeout: 60000, shell: managerRequiresShell(command) });
|
|
180
282
|
}
|
|
181
283
|
async function waitForManagedGatewayHealth(target) {
|
|
182
284
|
const retries = Number(process.env.PIBO_GATEWAY_HEALTH_RETRIES ?? 30);
|
|
@@ -189,7 +291,7 @@ async function waitForManagedGatewayHealth(target) {
|
|
|
189
291
|
}
|
|
190
292
|
return undefined;
|
|
191
293
|
}
|
|
192
|
-
async function runManagedGatewayCommand(target, command, args) {
|
|
294
|
+
async function runManagedGatewayCommand(target, command, args, argv = process.argv) {
|
|
193
295
|
if (command === "status" || command === "doctor") {
|
|
194
296
|
const status = await readGatewaySafetyStatus(target);
|
|
195
297
|
printSafetyStatus(target, status);
|
|
@@ -222,7 +324,7 @@ async function runManagedGatewayCommand(target, command, args) {
|
|
|
222
324
|
}
|
|
223
325
|
console.error(`Starting ${target === "web" ? "production" : "dev"} gateway...`);
|
|
224
326
|
try {
|
|
225
|
-
await runGatewayManager("start", target);
|
|
327
|
+
await runGatewayManager("start", target, argv);
|
|
226
328
|
}
|
|
227
329
|
catch (error) {
|
|
228
330
|
console.error(error instanceof Error ? error.message : String(error));
|
|
@@ -262,7 +364,7 @@ async function runManagedGatewayCommand(target, command, args) {
|
|
|
262
364
|
}
|
|
263
365
|
console.error(`Restarting ${target === "web" ? "production" : "dev"} gateway...`);
|
|
264
366
|
try {
|
|
265
|
-
await runGatewayManager("restart", target);
|
|
367
|
+
await runGatewayManager("restart", target, argv);
|
|
266
368
|
}
|
|
267
369
|
catch (error) {
|
|
268
370
|
console.error(error instanceof Error ? error.message : String(error));
|
|
@@ -286,7 +388,7 @@ export async function runGatewayCli(argv = process.argv) {
|
|
|
286
388
|
const subcommand = args[1];
|
|
287
389
|
const hasForceFlag = args.includes("--force");
|
|
288
390
|
if (subcommand === "web" || subcommand === "dev") {
|
|
289
|
-
const handled = await runManagedGatewayCommand(subcommand, args[2], args.slice(3));
|
|
391
|
+
const handled = await runManagedGatewayCommand(subcommand, args[2], args.slice(3), argv);
|
|
290
392
|
if (!handled) {
|
|
291
393
|
console.error(`Unknown gateway ${subcommand} subcommand: ${args[2] ?? ""}`);
|
|
292
394
|
printGatewayHelp();
|
package/dist/gateway/web.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
1
|
import { createDefaultPiboPlugins } from "../plugins/builtin.js";
|
|
3
2
|
import { createPiboBetterAuthPlugin } from "../plugins/better-auth.js";
|
|
4
3
|
import { createPiboChatWebPlugin } from "../plugins/chat-web.js";
|
|
@@ -15,16 +14,8 @@ import { PiboGatewayServer } from "./server.js";
|
|
|
15
14
|
import { clearFallbackPidFile, clearPidFile, writeFallbackGatewayPid, writeGatewayPid } from "./pidfile.js";
|
|
16
15
|
const PUBLIC_WEB_CHANNEL_HOST = "0.0.0.0";
|
|
17
16
|
const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "::1", "[::1]"]);
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
return true;
|
|
21
|
-
try {
|
|
22
|
-
const cgroup = readFileSync("/proc/1/cgroup", "utf-8");
|
|
23
|
-
return /docker|kubepods|containerd/.test(cgroup);
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
17
|
+
function isComputeWorkerRuntime() {
|
|
18
|
+
return process.env.PIBO_COMPUTE_WORKER === "1";
|
|
28
19
|
}
|
|
29
20
|
export function isLoopbackHost(value) {
|
|
30
21
|
if (!value)
|
|
@@ -39,7 +30,7 @@ function requireLocalAuthBind(options) {
|
|
|
39
30
|
const host = bindHost(options);
|
|
40
31
|
if (isLoopbackHost(host))
|
|
41
32
|
return;
|
|
42
|
-
if (
|
|
33
|
+
if (isComputeWorkerRuntime()) {
|
|
43
34
|
console.error(`[pibo] WARNING: local auth is active in a Docker worker with bind ${host}. ` +
|
|
44
35
|
"The Docker network is the security boundary; ensure the host port mapping is loopback-only.");
|
|
45
36
|
return;
|
|
@@ -102,6 +93,8 @@ export function resolveWebGatewayServerOptions(options = {}) {
|
|
|
102
93
|
};
|
|
103
94
|
}
|
|
104
95
|
function webGatewayMode(options, useDevAuth) {
|
|
96
|
+
if (process.env.PIBO_GATEWAY_MODE === "dev" || process.env.PIBO_GATEWAY_MODE === "prod")
|
|
97
|
+
return process.env.PIBO_GATEWAY_MODE;
|
|
105
98
|
if (useDevAuth)
|
|
106
99
|
return "dev";
|
|
107
100
|
if (options.web?.port === 4808)
|
package/dist/plugins/dev-auth.js
CHANGED
|
@@ -40,6 +40,26 @@ function isLoopbackSocketAddress(value) {
|
|
|
40
40
|
const normalized = value.startsWith("::ffff:") ? value.slice("::ffff:".length) : value;
|
|
41
41
|
return normalized === "::1" || normalized === "127.0.0.1" || normalized.startsWith("127.");
|
|
42
42
|
}
|
|
43
|
+
function isPrivateDockerBridgeSocketAddress(value) {
|
|
44
|
+
if (!value)
|
|
45
|
+
return false;
|
|
46
|
+
const normalized = value.startsWith("::ffff:") ? value.slice("::ffff:".length) : value;
|
|
47
|
+
if (normalized.startsWith("10."))
|
|
48
|
+
return true;
|
|
49
|
+
if (normalized.startsWith("192.168."))
|
|
50
|
+
return true;
|
|
51
|
+
const match = normalized.match(/^172\.(\d{1,2})\./);
|
|
52
|
+
if (!match)
|
|
53
|
+
return false;
|
|
54
|
+
const secondOctet = Number(match[1]);
|
|
55
|
+
return secondOctet >= 16 && secondOctet <= 31;
|
|
56
|
+
}
|
|
57
|
+
function isComputeWorkerRuntime(env = process.env) {
|
|
58
|
+
return env.PIBO_COMPUTE_WORKER === "1";
|
|
59
|
+
}
|
|
60
|
+
function isTrustedLocalSocketAddress(value) {
|
|
61
|
+
return isLoopbackSocketAddress(value) || (isComputeWorkerRuntime() && isPrivateDockerBridgeSocketAddress(value));
|
|
62
|
+
}
|
|
43
63
|
/**
|
|
44
64
|
* Read the TCP socket peer address attached to the request by the web host
|
|
45
65
|
* channel via the `x-pibo-socket-peer` header. The header is internal and
|
|
@@ -77,6 +97,12 @@ export function isLoopbackDevAuthHeaders(headers) {
|
|
|
77
97
|
export function isLoopbackSocketPeerForDevAuthHeaders(headers) {
|
|
78
98
|
return isLoopbackSocketAddress(firstHeaderValue(headers.get(SOCKET_PEER_HEADER)));
|
|
79
99
|
}
|
|
100
|
+
export function isTrustedLocalSocketPeerForDevAuth(request) {
|
|
101
|
+
return isTrustedLocalSocketAddress(getSocketPeerForDevAuth(request));
|
|
102
|
+
}
|
|
103
|
+
export function isTrustedLocalSocketPeerForDevAuthHeaders(headers) {
|
|
104
|
+
return isTrustedLocalSocketAddress(firstHeaderValue(headers.get(SOCKET_PEER_HEADER)));
|
|
105
|
+
}
|
|
80
106
|
export function createDevAuthService() {
|
|
81
107
|
const containerToken = generateToken();
|
|
82
108
|
const debugSession = {
|
|
@@ -104,7 +130,7 @@ export function createDevAuthService() {
|
|
|
104
130
|
// there is no cookie jar to share. Headless clients (VS Code
|
|
105
131
|
// extension, CLI scripts) can use the same dev identity as the
|
|
106
132
|
// browser without needing the HttpOnly session cookie.
|
|
107
|
-
if (isLoopbackDevAuthHeaders(headers) &&
|
|
133
|
+
if (isLoopbackDevAuthHeaders(headers) && isTrustedLocalSocketPeerForDevAuthHeaders(headers)) {
|
|
108
134
|
return debugSession;
|
|
109
135
|
}
|
|
110
136
|
const token = getCookieValue(headers);
|
|
@@ -125,7 +151,7 @@ export function createDevAuthService() {
|
|
|
125
151
|
if (!isLoopbackDevAuthRequest(request)) {
|
|
126
152
|
return Response.json({ error: "Dev auth only accepts loopback requests" }, { status: 403 });
|
|
127
153
|
}
|
|
128
|
-
if (!
|
|
154
|
+
if (!isTrustedLocalSocketPeerForDevAuth(request)) {
|
|
129
155
|
return Response.json({ error: "Dev auth only accepts loopback socket peers" }, { status: 403 });
|
|
130
156
|
}
|
|
131
157
|
const url = new URL(request.url);
|
package/package.json
CHANGED
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@pasko70/pibo",
|
|
3
|
-
"version": "1.7.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"imports": {
|
|
6
|
-
"vscode": "./src/apps/chat-vscode/extension/src/vscode-shim.js"
|
|
7
|
-
},
|
|
8
|
-
"description": "Minimal TypeScript wrapper around Pi Coding Agent.",
|
|
9
|
-
"files": [
|
|
10
|
-
"dist",
|
|
11
|
-
"context",
|
|
12
|
-
"skills/builtin/**",
|
|
13
|
-
"docs/ops/**",
|
|
14
|
-
"README.md",
|
|
15
|
-
"src/mcp/LICENSE.mcp-cli"
|
|
16
|
-
],
|
|
17
|
-
"bin": {
|
|
18
|
-
"pibo": "dist/bin/pibo.js",
|
|
19
|
-
"rg": "dist/bin/rg.js"
|
|
20
|
-
},
|
|
21
|
-
"engines": {
|
|
22
|
-
"node": ">=24"
|
|
23
|
-
},
|
|
24
|
-
"scripts": {
|
|
25
|
-
"dev": "tsx src/bin/pibo.ts",
|
|
26
|
-
"profile": "tsx src/bin/pibo.ts profile",
|
|
27
|
-
"tui": "tsx src/bin/pibo.ts tui",
|
|
28
|
-
"tui:routed": "tsx src/bin/pibo.ts tui:routed",
|
|
29
|
-
"tui:gateway": "tsx src/bin/pibo.ts tui gateway-producer",
|
|
30
|
-
"gateway": "tsx src/bin/pibo.ts gateway",
|
|
31
|
-
"gateway:web": "npm run web-ui:build && tsx src/bin/pibo.ts gateway:web",
|
|
32
|
-
"client": "tsx src/bin/pibo.ts client",
|
|
33
|
-
"chat-ui:build": "vite build --config src/apps/chat-ui/vite.config.ts",
|
|
34
|
-
"chat-ui:typecheck": "tsc -p src/apps/chat-ui/tsconfig.json --noEmit",
|
|
35
|
-
"context-files-ui:build": "vite build --config src/apps/context-files-ui/vite.config.ts",
|
|
36
|
-
"context-files-ui:typecheck": "tsc -p src/apps/context-files-ui/tsconfig.json --noEmit",
|
|
37
|
-
"web-ui:build": "npm run chat-ui:build && npm run context-files-ui:build",
|
|
38
|
-
"vscode:typecheck": "tsc -p src/apps/chat-vscode/extension/tsconfig.json --noEmit && tsc -p src/apps/chat-vscode/extension/webview/tsconfig.json --noEmit",
|
|
39
|
-
"vscode:webview:build": "vite build --config src/apps/chat-vscode/extension/webview/vite.config.ts",
|
|
40
|
-
"vscode:extension:build": "esbuild src/apps/chat-vscode/extension/src/extension.ts --bundle --platform=node --target=node24 --format=cjs --outfile=src/apps/chat-vscode/dist/extension/extension.cjs --external:vscode --sourcemap=inline",
|
|
41
|
-
"vscode:package": "node scripts/vscode-package.mjs",
|
|
42
|
-
"release": "node scripts/release.mjs",
|
|
43
|
-
"release:github": "node scripts/create-github-release.mjs",
|
|
44
|
-
"build": "tsc -p tsconfig.json && npm run web-ui:build && npm run vscode:webview:build && node scripts/ensure-bin-executable.mjs",
|
|
45
|
-
"start": "node dist/bin/pibo.js",
|
|
46
|
-
"test": "npm run build && node --test test/*.test.mjs test/chat-vscode/*.test.mjs",
|
|
47
|
-
"check:product-vocab": "node scripts/legacy-product-vocabulary-gate.mjs",
|
|
48
|
-
"validate:ink-web-derived": "node scripts/ink-cli-web-derived-parity-validate.mjs",
|
|
49
|
-
"compute:limited-worker-smoke": "node scripts/compute-limited-worker-smoke.mjs",
|
|
50
|
-
"typecheck": "tsc -p tsconfig.json --noEmit && npm run chat-ui:typecheck && npm run context-files-ui:typecheck && npm run vscode:typecheck",
|
|
51
|
-
"clean": "node -e \"fs.rmSync('dist', { recursive: true, force: true })\"",
|
|
52
|
-
"prepack": "npm run build"
|
|
53
|
-
},
|
|
54
|
-
"dependencies": {
|
|
55
|
-
"@mariozechner/pi-ai": "^0.73.1",
|
|
56
|
-
"@mariozechner/pi-coding-agent": "^0.73.1",
|
|
57
|
-
"@mdxeditor/editor": "^3.55.0",
|
|
58
|
-
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
59
|
-
"@tailwindcss/vite": "^4.2.4",
|
|
60
|
-
"@tanstack/react-query": "^5.100.7",
|
|
61
|
-
"@tanstack/react-router": "^1.168.25",
|
|
62
|
-
"@tanstack/react-start": "^1.167.50",
|
|
63
|
-
"@uiw/react-json-view": "^2.0.0-alpha.41",
|
|
64
|
-
"@vscode/ripgrep": "^1.18.0",
|
|
65
|
-
"@xyflow/react": "12.10.2",
|
|
66
|
-
"better-auth": "^1.6.9",
|
|
67
|
-
"commander": "^14.0.3",
|
|
68
|
-
"ink": "^7.0.3",
|
|
69
|
-
"lexical": "^0.35.0",
|
|
70
|
-
"lucide-react": "^0.545.0",
|
|
71
|
-
"prismjs": "^1.30.0",
|
|
72
|
-
"react": "^19.2.5",
|
|
73
|
-
"react-dom": "^19.2.5",
|
|
74
|
-
"react-markdown": "^10.1.0",
|
|
75
|
-
"react-virtuoso": "^4.18.6",
|
|
76
|
-
"remark-gfm": "^4.0.1",
|
|
77
|
-
"tailwindcss": "^4.2.4"
|
|
78
|
-
},
|
|
79
|
-
"devDependencies": {
|
|
80
|
-
"@tanstack/router-plugin": "^1.167.28",
|
|
81
|
-
"@types/node": "^25.6.0",
|
|
82
|
-
"@types/prismjs": "^1.26.6",
|
|
83
|
-
"@types/react": "^19.2.14",
|
|
84
|
-
"@types/react-dom": "^19.2.3",
|
|
85
|
-
"@vitejs/plugin-react": "^6.0.1",
|
|
86
|
-
"@vscode/vsce": "^3.6.0",
|
|
87
|
-
"esbuild": "^0.27.7",
|
|
88
|
-
"tsx": "^4.21.0",
|
|
89
|
-
"typescript": "^6.0.3",
|
|
90
|
-
"vite": "^8.0.10",
|
|
91
|
-
"vite-tsconfig-paths": "^5.1.4"
|
|
92
|
-
}
|
|
93
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@pasko70/pibo",
|
|
3
|
+
"version": "1.7.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"imports": {
|
|
6
|
+
"vscode": "./src/apps/chat-vscode/extension/src/vscode-shim.js"
|
|
7
|
+
},
|
|
8
|
+
"description": "Minimal TypeScript wrapper around Pi Coding Agent.",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"context",
|
|
12
|
+
"skills/builtin/**",
|
|
13
|
+
"docs/ops/**",
|
|
14
|
+
"README.md",
|
|
15
|
+
"src/mcp/LICENSE.mcp-cli"
|
|
16
|
+
],
|
|
17
|
+
"bin": {
|
|
18
|
+
"pibo": "dist/bin/pibo.js",
|
|
19
|
+
"rg": "dist/bin/rg.js"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=24"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"dev": "tsx src/bin/pibo.ts",
|
|
26
|
+
"profile": "tsx src/bin/pibo.ts profile",
|
|
27
|
+
"tui": "tsx src/bin/pibo.ts tui",
|
|
28
|
+
"tui:routed": "tsx src/bin/pibo.ts tui:routed",
|
|
29
|
+
"tui:gateway": "tsx src/bin/pibo.ts tui gateway-producer",
|
|
30
|
+
"gateway": "tsx src/bin/pibo.ts gateway",
|
|
31
|
+
"gateway:web": "npm run web-ui:build && tsx src/bin/pibo.ts gateway:web",
|
|
32
|
+
"client": "tsx src/bin/pibo.ts client",
|
|
33
|
+
"chat-ui:build": "vite build --config src/apps/chat-ui/vite.config.ts",
|
|
34
|
+
"chat-ui:typecheck": "tsc -p src/apps/chat-ui/tsconfig.json --noEmit",
|
|
35
|
+
"context-files-ui:build": "vite build --config src/apps/context-files-ui/vite.config.ts",
|
|
36
|
+
"context-files-ui:typecheck": "tsc -p src/apps/context-files-ui/tsconfig.json --noEmit",
|
|
37
|
+
"web-ui:build": "npm run chat-ui:build && npm run context-files-ui:build",
|
|
38
|
+
"vscode:typecheck": "tsc -p src/apps/chat-vscode/extension/tsconfig.json --noEmit && tsc -p src/apps/chat-vscode/extension/webview/tsconfig.json --noEmit",
|
|
39
|
+
"vscode:webview:build": "vite build --config src/apps/chat-vscode/extension/webview/vite.config.ts",
|
|
40
|
+
"vscode:extension:build": "esbuild src/apps/chat-vscode/extension/src/extension.ts --bundle --platform=node --target=node24 --format=cjs --outfile=src/apps/chat-vscode/dist/extension/extension.cjs --external:vscode --sourcemap=inline",
|
|
41
|
+
"vscode:package": "node scripts/vscode-package.mjs",
|
|
42
|
+
"release": "node scripts/release.mjs",
|
|
43
|
+
"release:github": "node scripts/create-github-release.mjs",
|
|
44
|
+
"build": "tsc -p tsconfig.json && npm run web-ui:build && npm run vscode:webview:build && node scripts/ensure-bin-executable.mjs",
|
|
45
|
+
"start": "node dist/bin/pibo.js",
|
|
46
|
+
"test": "npm run build && node --test test/*.test.mjs test/chat-vscode/*.test.mjs",
|
|
47
|
+
"check:product-vocab": "node scripts/legacy-product-vocabulary-gate.mjs",
|
|
48
|
+
"validate:ink-web-derived": "node scripts/ink-cli-web-derived-parity-validate.mjs",
|
|
49
|
+
"compute:limited-worker-smoke": "node scripts/compute-limited-worker-smoke.mjs",
|
|
50
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && npm run chat-ui:typecheck && npm run context-files-ui:typecheck && npm run vscode:typecheck",
|
|
51
|
+
"clean": "node -e \"fs.rmSync('dist', { recursive: true, force: true })\"",
|
|
52
|
+
"prepack": "npm run build"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@mariozechner/pi-ai": "^0.73.1",
|
|
56
|
+
"@mariozechner/pi-coding-agent": "^0.73.1",
|
|
57
|
+
"@mdxeditor/editor": "^3.55.0",
|
|
58
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
59
|
+
"@tailwindcss/vite": "^4.2.4",
|
|
60
|
+
"@tanstack/react-query": "^5.100.7",
|
|
61
|
+
"@tanstack/react-router": "^1.168.25",
|
|
62
|
+
"@tanstack/react-start": "^1.167.50",
|
|
63
|
+
"@uiw/react-json-view": "^2.0.0-alpha.41",
|
|
64
|
+
"@vscode/ripgrep": "^1.18.0",
|
|
65
|
+
"@xyflow/react": "12.10.2",
|
|
66
|
+
"better-auth": "^1.6.9",
|
|
67
|
+
"commander": "^14.0.3",
|
|
68
|
+
"ink": "^7.0.3",
|
|
69
|
+
"lexical": "^0.35.0",
|
|
70
|
+
"lucide-react": "^0.545.0",
|
|
71
|
+
"prismjs": "^1.30.0",
|
|
72
|
+
"react": "^19.2.5",
|
|
73
|
+
"react-dom": "^19.2.5",
|
|
74
|
+
"react-markdown": "^10.1.0",
|
|
75
|
+
"react-virtuoso": "^4.18.6",
|
|
76
|
+
"remark-gfm": "^4.0.1",
|
|
77
|
+
"tailwindcss": "^4.2.4"
|
|
78
|
+
},
|
|
79
|
+
"devDependencies": {
|
|
80
|
+
"@tanstack/router-plugin": "^1.167.28",
|
|
81
|
+
"@types/node": "^25.6.0",
|
|
82
|
+
"@types/prismjs": "^1.26.6",
|
|
83
|
+
"@types/react": "^19.2.14",
|
|
84
|
+
"@types/react-dom": "^19.2.3",
|
|
85
|
+
"@vitejs/plugin-react": "^6.0.1",
|
|
86
|
+
"@vscode/vsce": "^3.6.0",
|
|
87
|
+
"esbuild": "^0.27.7",
|
|
88
|
+
"tsx": "^4.21.0",
|
|
89
|
+
"typescript": "^6.0.3",
|
|
90
|
+
"vite": "^8.0.10",
|
|
91
|
+
"vite-tsconfig-paths": "^5.1.4"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/mcp/LICENSE.mcp-cli
CHANGED
|
File without changes
|