@pasko70/pibo 1.7.5 → 1.7.7
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/dist/apps/chat-ui/assets/{dist-b5e4NjPA.js → dist-BUfawaFa.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-9reC6CRy.js → dist-BhCflw5L.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-TfPabg6A.js → dist-C2wdpulS.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DY6s8EGj.js → dist-C5S2MWeq.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CKfKOLLy.js → dist-CJOnkhP1.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BFDieA29.js → dist-COMZszUx.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CD2PBsXa.js → dist-ChMCJ0Xh.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-kiXdn9N3.js → dist-CqZsX_X9.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-Jx6fE2Hb.js → dist-NDLYTRqO.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-B3s0osfY.js → dist-XR2wwVeo.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CrBAoz7q.js → dist-iblHo9vw.js} +1 -1
- package/dist/apps/chat-ui/assets/index-BStUapSa.css +1 -0
- package/dist/apps/chat-ui/assets/{index-DN6wYo-Z.js → index-BYqOi32B.js} +51 -44
- package/dist/apps/chat-ui/index.html +2 -2
- package/dist/cli.js +10 -1
- package/dist/gateway/pidfile.js +9 -9
- package/dist/gateway/web.js +30 -3
- package/dist/plugins/chat-custom-agents.js +20 -0
- package/dist/plugins/registry.js +1 -0
- package/dist/ralph/service.js +5 -2
- package/package.json +93 -93
- package/dist/apps/chat-ui/assets/index-BLY-pTWm.css +0 -1
- package/dist/apps/vscode-artifacts/latest.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.7.5.vsix +0 -0
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
<link rel="manifest" href="/apps/chat/manifest.webmanifest" />
|
|
10
10
|
<link rel="apple-touch-icon" href="/apps/chat/assets/pwa-images/ios/180.png" />
|
|
11
11
|
<title>Pibo Web Chat</title>
|
|
12
|
-
<script type="module" crossorigin src="/apps/chat/assets/index-
|
|
12
|
+
<script type="module" crossorigin src="/apps/chat/assets/index-BYqOi32B.js"></script>
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/apps/chat/assets/rolldown-runtime-S-ySWqyJ.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/apps/chat/assets/dist-SVPsM5Oi.js">
|
|
15
|
-
<link rel="stylesheet" crossorigin href="/apps/chat/assets/index-
|
|
15
|
+
<link rel="stylesheet" crossorigin href="/apps/chat/assets/index-BStUapSa.css">
|
|
16
16
|
</head>
|
|
17
17
|
<body>
|
|
18
18
|
<div id="root"></div>
|
package/dist/cli.js
CHANGED
|
@@ -48,6 +48,15 @@ function parsePositiveInteger(value) {
|
|
|
48
48
|
}
|
|
49
49
|
return parsed;
|
|
50
50
|
}
|
|
51
|
+
function defaultGatewayPortForWebPort(webPort) {
|
|
52
|
+
if (webPort === undefined)
|
|
53
|
+
return undefined;
|
|
54
|
+
const gatewayPort = webPort + 1;
|
|
55
|
+
if (gatewayPort > 65535) {
|
|
56
|
+
throw new Error("--web-port 65535 requires an explicit --gateway-port because the derived gateway port would exceed 65535");
|
|
57
|
+
}
|
|
58
|
+
return gatewayPort;
|
|
59
|
+
}
|
|
51
60
|
function isLoopbackBindForCli(host) {
|
|
52
61
|
const normalized = host.startsWith("[") && host.endsWith("]") ? host.slice(1, -1) : host;
|
|
53
62
|
return normalized === "127.0.0.1" || normalized === "::1" || normalized === "localhost";
|
|
@@ -380,7 +389,7 @@ export async function runPiboCli(argv = process.argv) {
|
|
|
380
389
|
}
|
|
381
390
|
await runWebGatewayServer({
|
|
382
391
|
authMode: authMode,
|
|
383
|
-
port: options.gatewayPort,
|
|
392
|
+
port: options.gatewayPort ?? defaultGatewayPortForWebPort(options.webPort),
|
|
384
393
|
web: {
|
|
385
394
|
host: options.webHost,
|
|
386
395
|
port: options.webPort,
|
package/dist/gateway/pidfile.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { existsSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { piboHomePath } from "../core/pibo-home.js";
|
|
3
|
-
function gatewayPidPath() {
|
|
4
|
-
return piboHomePath("gateway.pid");
|
|
3
|
+
function gatewayPidPath(port) {
|
|
4
|
+
return piboHomePath(port === undefined ? "gateway.pid" : `gateway-${port}.pid`);
|
|
5
5
|
}
|
|
6
6
|
function fallbackGatewayPidPath() {
|
|
7
7
|
return piboHomePath("gateway-fallback.pid");
|
|
8
8
|
}
|
|
9
|
-
export function readPidFile() {
|
|
9
|
+
export function readPidFile(port) {
|
|
10
10
|
try {
|
|
11
|
-
const path = gatewayPidPath();
|
|
11
|
+
const path = gatewayPidPath(port);
|
|
12
12
|
if (!existsSync(path))
|
|
13
13
|
return undefined;
|
|
14
14
|
const pid = parseInt(readFileSync(path, "utf-8").trim(), 10);
|
|
@@ -26,9 +26,9 @@ export function readPidFile() {
|
|
|
26
26
|
return undefined;
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
export function clearPidFile() {
|
|
29
|
+
export function clearPidFile(port) {
|
|
30
30
|
try {
|
|
31
|
-
const path = gatewayPidPath();
|
|
31
|
+
const path = gatewayPidPath(port);
|
|
32
32
|
if (existsSync(path)) {
|
|
33
33
|
unlinkSync(path);
|
|
34
34
|
}
|
|
@@ -37,12 +37,12 @@ export function clearPidFile() {
|
|
|
37
37
|
// ignore
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
export function writeGatewayPid() {
|
|
41
|
-
const existingPid = readPidFile();
|
|
40
|
+
export function writeGatewayPid(port) {
|
|
41
|
+
const existingPid = readPidFile(port);
|
|
42
42
|
if (existingPid !== undefined && existingPid !== process.pid) {
|
|
43
43
|
throw new Error(`Gateway already running (PID ${existingPid})`);
|
|
44
44
|
}
|
|
45
|
-
writeFileSync(gatewayPidPath(), String(process.pid), "utf-8");
|
|
45
|
+
writeFileSync(gatewayPidPath(port), String(process.pid), "utf-8");
|
|
46
46
|
}
|
|
47
47
|
export function readFallbackPidFile() {
|
|
48
48
|
try {
|
package/dist/gateway/web.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createDefaultPiboPlugins } from "../plugins/builtin.js";
|
|
2
2
|
import { createPiboBetterAuthPlugin } from "../plugins/better-auth.js";
|
|
3
|
+
import { createPiboChatCustomAgentProfilesPlugin } from "../plugins/chat-custom-agents.js";
|
|
3
4
|
import { createPiboChatWebPlugin } from "../plugins/chat-web.js";
|
|
4
5
|
import { createPiboChatVscodeWebPlugin } from "../plugins/chat-vscode-web.js";
|
|
5
6
|
import { createPiboContextFilesPlugin } from "../plugins/context-files.js";
|
|
@@ -62,8 +63,28 @@ export function resolveWebGatewayAuthMode(options = {}) {
|
|
|
62
63
|
}
|
|
63
64
|
return "better-auth";
|
|
64
65
|
}
|
|
66
|
+
function rebaseLoopbackAuthBaseURL(baseURL, options) {
|
|
67
|
+
if (!baseURL)
|
|
68
|
+
return undefined;
|
|
69
|
+
if (options.web?.host === undefined && options.web?.port === undefined)
|
|
70
|
+
return baseURL;
|
|
71
|
+
try {
|
|
72
|
+
const parsed = new URL(baseURL);
|
|
73
|
+
if (!isLoopbackHost(parsed.hostname))
|
|
74
|
+
return baseURL;
|
|
75
|
+
if (options.web?.host !== undefined && isLoopbackHost(options.web.host)) {
|
|
76
|
+
parsed.hostname = options.web.host.startsWith("[") && options.web.host.endsWith("]") ? options.web.host.slice(1, -1) : options.web.host;
|
|
77
|
+
}
|
|
78
|
+
if (options.web?.port !== undefined)
|
|
79
|
+
parsed.port = String(options.web.port);
|
|
80
|
+
return parsed.toString().replace(/\/$/, "");
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return baseURL;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
65
86
|
function authBaseURL(options) {
|
|
66
|
-
return options.auth?.baseURL ?? loadPiboConfig().auth?.baseURL;
|
|
87
|
+
return options.auth?.baseURL ?? rebaseLoopbackAuthBaseURL(loadPiboConfig().auth?.baseURL, options);
|
|
67
88
|
}
|
|
68
89
|
function defaultWebHost(baseURL, options = {}) {
|
|
69
90
|
// When local auth is selected, always default to loopback bind to keep the
|
|
@@ -86,6 +107,10 @@ export function resolveWebGatewayServerOptions(options = {}) {
|
|
|
86
107
|
const baseURL = authBaseURL(options);
|
|
87
108
|
return {
|
|
88
109
|
...options,
|
|
110
|
+
auth: {
|
|
111
|
+
...options.auth,
|
|
112
|
+
...(baseURL ? { baseURL } : {}),
|
|
113
|
+
},
|
|
89
114
|
web: {
|
|
90
115
|
...options.web,
|
|
91
116
|
host: options.web?.host ?? defaultWebHost(baseURL, options),
|
|
@@ -120,6 +145,7 @@ export function createWebPiboPluginRegistry(options = {}) {
|
|
|
120
145
|
useDevAuth ? createPiboDevAuthPlugin() : createPiboBetterAuthPlugin(resolvedOptions.auth),
|
|
121
146
|
createPiboWebHostPlugin({ announce: false, canonicalBaseURL: useDevAuth ? undefined : authBaseURL(resolvedOptions), gatewayMode: webGatewayMode(resolvedOptions, useDevAuth), ...resolvedOptions.web }),
|
|
122
147
|
createPiboCronPlugin({ cronStorePath: resolvedOptions.chat?.cronStorePath, dataStorePath: resolvedOptions.chat?.dataStorePath, dataPayloadRootDir: resolvedOptions.chat?.dataPayloadRootDir }),
|
|
148
|
+
createPiboChatCustomAgentProfilesPlugin({ agentStorePath: resolvedOptions.chat?.agentStorePath }),
|
|
123
149
|
createPiboRalphPlugin({ ralphStorePath: resolvedOptions.chat?.ralphStorePath, dataStorePath: resolvedOptions.chat?.dataStorePath, dataPayloadRootDir: resolvedOptions.chat?.dataPayloadRootDir }),
|
|
124
150
|
createPiboContextFilesPlugin(resolvedOptions.contextFiles),
|
|
125
151
|
createPiboChatWebPlugin(resolvedOptions.chat),
|
|
@@ -146,6 +172,7 @@ function createChatAppURL(options, host, port) {
|
|
|
146
172
|
export async function runWebGatewayServer(options = {}) {
|
|
147
173
|
const resolvedOptions = resolveWebGatewayServerOptions(options);
|
|
148
174
|
const pluginRegistry = resolvedOptions.pluginRegistry ?? createWebPiboPluginRegistry(resolvedOptions);
|
|
175
|
+
const pidFilePort = resolvedOptions.port;
|
|
149
176
|
const server = new PiboGatewayServer({
|
|
150
177
|
...resolvedOptions,
|
|
151
178
|
pluginRegistry,
|
|
@@ -156,7 +183,7 @@ export async function runWebGatewayServer(options = {}) {
|
|
|
156
183
|
writeFallbackGatewayPid();
|
|
157
184
|
}
|
|
158
185
|
else {
|
|
159
|
-
writeGatewayPid();
|
|
186
|
+
writeGatewayPid(pidFilePort);
|
|
160
187
|
}
|
|
161
188
|
}
|
|
162
189
|
catch (err) {
|
|
@@ -173,7 +200,7 @@ export async function runWebGatewayServer(options = {}) {
|
|
|
173
200
|
clearFallbackPidFile();
|
|
174
201
|
}
|
|
175
202
|
else {
|
|
176
|
-
clearPidFile();
|
|
203
|
+
clearPidFile(pidFilePort);
|
|
177
204
|
}
|
|
178
205
|
};
|
|
179
206
|
process.once("SIGINT", () => {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createCustomAgentProfileDefinition } from "../apps/chat/agent-profiles.js";
|
|
2
|
+
import { CustomAgentStore, createDefaultCustomAgentStore } from "../apps/chat/agent-store.js";
|
|
3
|
+
import { definePiboPlugin } from "./registry.js";
|
|
4
|
+
export function createPiboChatCustomAgentProfilesPlugin(options = {}) {
|
|
5
|
+
return definePiboPlugin({
|
|
6
|
+
id: "pibo.chat-custom-agent-profiles",
|
|
7
|
+
name: "Pibo Chat Custom Agent Profiles",
|
|
8
|
+
register(api) {
|
|
9
|
+
const store = options.agentStorePath ? new CustomAgentStore(options.agentStorePath) : createDefaultCustomAgentStore();
|
|
10
|
+
try {
|
|
11
|
+
for (const agent of store.list()) {
|
|
12
|
+
api.upsertProfile(createCustomAgentProfileDefinition(agent));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
finally {
|
|
16
|
+
store.close();
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
package/dist/plugins/registry.js
CHANGED
|
@@ -349,6 +349,7 @@ export class PiboPluginRegistry {
|
|
|
349
349
|
upsertContextFile: (contextFile) => this.upsertContextFile(withPluginContext(contextFile)),
|
|
350
350
|
removeContextFile: (key) => this.removeContextFile(key),
|
|
351
351
|
registerProfile: (profile) => this.registerProfile(profile),
|
|
352
|
+
upsertProfile: (profile) => this.upsertProfile(profile),
|
|
352
353
|
registerGatewayAction: (action) => this.registerGatewayAction(action),
|
|
353
354
|
registerChannel: (channel) => this.registerChannel(channel),
|
|
354
355
|
registerAuthService: (service) => this.registerAuthService(service),
|
package/dist/ralph/service.js
CHANGED
|
@@ -10,6 +10,7 @@ import { createDefaultPiboRalphStore } from './store.js';
|
|
|
10
10
|
import { createBuiltInRalphStopConditions, evaluateRalphStopPolicy } from './stopping.js';
|
|
11
11
|
const CHAT_WEB_CHANNEL = 'pibo.chat-web';
|
|
12
12
|
function errorMessage(error) { return error instanceof Error ? error.message : String(error); }
|
|
13
|
+
function isUnknownProfileErrorMessage(message) { return /^Unknown profile "[^"]+"/.test(message); }
|
|
13
14
|
function buildRalphPrompt(job) { return ['You are running a continuous Pibo Ralph job.', `Job: ${job.name}`, `Target: ${job.target.kind}`, '', 'Complete the task below. Return the result in this session. When this session finishes, Ralph may start a fresh session with the same task unless a configured stop condition is satisfied.', 'Important: if this job uses a promise-complete stop condition, do not quote, negate, explain, or mention its literal completion marker unless the task is fully complete and you intend to stop the job.', '', 'Task:', job.prompt].join('\n'); }
|
|
14
15
|
function isJsonObject(value) { return !!value && typeof value === 'object' && !Array.isArray(value); }
|
|
15
16
|
function mergeRunResources(jobResources, runResources) {
|
|
@@ -134,9 +135,11 @@ export class PiboRalphService {
|
|
|
134
135
|
}
|
|
135
136
|
catch (error) {
|
|
136
137
|
const cancelled = this.cancelledRuns.delete(run.id);
|
|
137
|
-
const
|
|
138
|
+
const message = errorMessage(error);
|
|
139
|
+
const fatalProfileError = !cancelled && isUnknownProfileErrorMessage(message);
|
|
140
|
+
const outcome = { status: cancelled ? 'cancelled' : 'error', error: cancelled ? undefined : message };
|
|
138
141
|
const { evaluation, conditionStates } = await this.evaluateStopPolicy(this.store.getJob(job.id) ?? job, 'after-run', run, outcome);
|
|
139
|
-
this.store.completeRun({ jobId: job.id, runId: run.id, status: outcome.status, error: outcome.error, reason: cancelled ? 'cancelled' : evaluation.reason, stopAfterRun: evaluation.finalAction !== 'continue', stopEvaluation: evaluation, conditionStates });
|
|
142
|
+
this.store.completeRun({ jobId: job.id, runId: run.id, status: outcome.status, error: outcome.error, reason: cancelled ? 'cancelled' : fatalProfileError ? 'unknown-profile' : evaluation.reason, stopAfterRun: fatalProfileError || evaluation.finalAction !== 'continue', stopEvaluation: evaluation, conditionStates });
|
|
140
143
|
await this.cleanupRunResources(job, run);
|
|
141
144
|
if (!cancelled)
|
|
142
145
|
console.error(`[ralph] job ${job.id} failed`, error);
|
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.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
|
+
}
|