@pasko70/pibo 1.7.2 → 1.7.4
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/README.md +183 -0
- 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/chat-trace-helpers.js +3 -1
- package/dist/apps/chat/data/session-query-service.js +66 -3
- package/dist/apps/chat/data/timeline-query-service.js +8 -2
- package/dist/apps/chat/trace-v2.js +9 -4
- package/dist/apps/chat/trace.js +189 -4
- package/dist/apps/chat/web-app.js +164 -34
- package/dist/apps/chat-ui/assets/{dist-Ddn6n4ge.js → dist-B8jyBeFH.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-eRtG3vUM.js → dist-BS-A0VYR.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-Jc0njXt3.js → dist-BZoXuF9y.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CCHtiwhr.js → dist-Bl9cf-yT.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CxWQqjbA.js → dist-BzmsjE6I.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-Cfyo-Bgw.js → dist-C6kgrKy2.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-8eLx-6HY.js → dist-CSKVaxJI.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BXT6rjJn.js → dist-ChDQZXGN.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DjmyW251.js → dist-D6v32djn.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-cyStkSiF.js → dist-MCSKIQ04.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CCt9U3Or.js → dist-OTFZZTiY.js} +1 -1
- package/dist/apps/chat-ui/assets/index-CXXHizfD.js +166 -0
- package/dist/apps/chat-ui/assets/{index-Dz6asKNQ.css → index-DgVHk3gL.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 +0 -0
- package/dist/apps/chat-vscode-web/assets/index-B4Jk2P5o.js +41 -0
- package/dist/apps/chat-vscode-web/index.html +1 -1
- package/dist/apps/vscode-artifacts/latest.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.7.4.vsix +0 -0
- package/dist/bin/pibo.js +0 -0
- package/dist/bin/rg.js +0 -0
- package/dist/data/schema.js +2 -0
- package/dist/shared/trace-page-merge.js +40 -0
- package/dist/web/http.js +7 -1
- package/docs/README.md +23 -0
- package/docs/ops/install-developer-host.md +112 -0
- package/docs/ops/install-user-host.md +96 -0
- package/docs/ops/upgrade-user-to-developer-host.md +69 -0
- package/docs/ops/vscode-extension-release.md +160 -0
- 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/dist/apps/chat-ui/assets/index-COp5Hme0.js +0 -166
- package/dist/apps/chat-vscode-web/assets/index-CfeNUaRh.js +0 -41
|
@@ -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-B4Jk2P5o.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/apps/chat-vscode/assets/index-B5QK07zO.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
Binary file
|
|
Binary file
|
package/dist/bin/pibo.js
CHANGED
|
File without changes
|
package/dist/bin/rg.js
CHANGED
|
File without changes
|
package/dist/data/schema.js
CHANGED
|
@@ -354,6 +354,8 @@ export function applyPiboDataSchema(db) {
|
|
|
354
354
|
ON sessions(channel, kind, updated_at DESC);
|
|
355
355
|
CREATE INDEX IF NOT EXISTS idx_event_log_session_stream
|
|
356
356
|
ON event_log(session_id, stream_id);
|
|
357
|
+
CREATE INDEX IF NOT EXISTS idx_event_log_session_sequence_stream
|
|
358
|
+
ON event_log(session_id, session_sequence DESC, stream_id DESC);
|
|
357
359
|
CREATE INDEX IF NOT EXISTS idx_event_log_room_stream
|
|
358
360
|
ON event_log(room_id, stream_id);
|
|
359
361
|
CREATE INDEX IF NOT EXISTS idx_event_log_topic_stream
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { flattenTraceNodes, nestTraceNodes } from "./trace-nodes.js";
|
|
2
|
+
export function mergeOlderTracePage(current, older) {
|
|
3
|
+
if (current.piboSessionId !== older.piboSessionId)
|
|
4
|
+
return current;
|
|
5
|
+
const seenRawEvents = new Set();
|
|
6
|
+
const rawEvents = [...older.rawEvents, ...current.rawEvents].filter((event) => {
|
|
7
|
+
const key = event.id || `${event.eventSequence ?? ""}:${event.type}:${event.createdAt}`;
|
|
8
|
+
if (seenRawEvents.has(key))
|
|
9
|
+
return false;
|
|
10
|
+
seenRawEvents.add(key);
|
|
11
|
+
return true;
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
...current,
|
|
15
|
+
version: current.version,
|
|
16
|
+
nodes: mergeTraceNodes(older.nodes, current.nodes),
|
|
17
|
+
rawEvents,
|
|
18
|
+
beforeCursor: older.beforeCursor ?? current.beforeCursor,
|
|
19
|
+
firstEventSequence: older.firstEventSequence ?? current.firstEventSequence,
|
|
20
|
+
nextBeforeSequence: older.nextBeforeSequence,
|
|
21
|
+
nextBeforeCursor: older.nextBeforeCursor,
|
|
22
|
+
hasOlderEvents: older.hasOlderEvents,
|
|
23
|
+
eventLimit: (current.eventLimit ?? 0) + (older.eventLimit ?? older.pageSize ?? 0),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function mergeTraceNodes(olderNodes, currentNodes) {
|
|
27
|
+
const byId = new Map();
|
|
28
|
+
for (const node of flattenTraceNodes([...olderNodes])) {
|
|
29
|
+
byId.set(node.id, { ...node, children: [] });
|
|
30
|
+
}
|
|
31
|
+
for (const node of flattenTraceNodes([...currentNodes])) {
|
|
32
|
+
const existing = byId.get(node.id);
|
|
33
|
+
byId.set(node.id, {
|
|
34
|
+
...existing,
|
|
35
|
+
...node,
|
|
36
|
+
children: [],
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return nestTraceNodes([...byId.values()]);
|
|
40
|
+
}
|
package/dist/web/http.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { gzipSync } from "node:zlib";
|
|
2
2
|
export const MAX_WEB_REQUEST_BODY_BYTES = 4 * 1024 * 1024;
|
|
3
3
|
const MIN_COMPRESS_RESPONSE_BYTES = 1024;
|
|
4
|
-
const MAX_SYNC_GZIP_RESPONSE_BYTES =
|
|
4
|
+
const MAX_SYNC_GZIP_RESPONSE_BYTES = 64 * 1024;
|
|
5
5
|
const INTERNAL_SOCKET_PEER_HEADER = "x-pibo-socket-peer";
|
|
6
6
|
export class PiboWebHttpError extends Error {
|
|
7
7
|
statusCode;
|
|
@@ -82,7 +82,9 @@ export async function sendWebResponse(response, webResponse) {
|
|
|
82
82
|
if (compressEncoding && webResponse.body) {
|
|
83
83
|
const body = await readResponseBody(webResponse);
|
|
84
84
|
if (body.length >= MIN_COMPRESS_RESPONSE_BYTES && body.length <= MAX_SYNC_GZIP_RESPONSE_BYTES) {
|
|
85
|
+
const compressionStartedAt = performance.now();
|
|
85
86
|
const compressed = gzipSync(body, { level: 1 });
|
|
87
|
+
appendServerTimingHeader(headers, `response_compress;dur=${(performance.now() - compressionStartedAt).toFixed(1)}`);
|
|
86
88
|
headers["content-encoding"] = compressEncoding;
|
|
87
89
|
headers["content-length"] = String(compressed.length);
|
|
88
90
|
headers.vary = appendVary(headers.vary, "accept-encoding");
|
|
@@ -120,6 +122,10 @@ export async function sendWebResponse(response, webResponse) {
|
|
|
120
122
|
response.off("close", cancel);
|
|
121
123
|
}
|
|
122
124
|
}
|
|
125
|
+
function appendServerTimingHeader(headers, value) {
|
|
126
|
+
const existing = headers["server-timing"];
|
|
127
|
+
headers["server-timing"] = appendServerTiming(Array.isArray(existing) ? existing.join(", ") : existing ?? null, value);
|
|
128
|
+
}
|
|
123
129
|
function responseHeaders(webResponse) {
|
|
124
130
|
const headers = {};
|
|
125
131
|
const setCookie = webResponse.headers.getSetCookie?.();
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Pibo Documentation
|
|
2
|
+
|
|
3
|
+
This directory is the single home for project documentation, specs, plans, and reports.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
docs/
|
|
9
|
+
project/ Normal/current project docs and other canonical documentation
|
|
10
|
+
specs/ Product, technical, and implementation specifications
|
|
11
|
+
plans/ Implementation plans and design plans
|
|
12
|
+
reports/ Investigation reports, validation reports, and generated report artifacts
|
|
13
|
+
legacy/ Previous documentation set kept for reference
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Rules
|
|
17
|
+
|
|
18
|
+
- Put normal/current project docs and other canonical documentation in `docs/project/`.
|
|
19
|
+
- Put specifications in `docs/specs/`.
|
|
20
|
+
- Put implementation plans in `docs/plans/`.
|
|
21
|
+
- Put investigation, validation, and incident reports in `docs/reports/`.
|
|
22
|
+
- Do not create new root-level `plans/`, `reports/`, or `specs/` directories.
|
|
23
|
+
- Do not delete legacy docs unless there is a separate cleanup decision.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Install Pibo as a Developer Host
|
|
2
|
+
|
|
3
|
+
Use this path when the host is used to develop Pibo itself.
|
|
4
|
+
|
|
5
|
+
## Philosophy
|
|
6
|
+
|
|
7
|
+
Production must stay stable while development moves quickly. The dev gateway can restart, fail, or deploy the `dev` branch without interrupting the main production gateway.
|
|
8
|
+
|
|
9
|
+
Docker compute workers are part of the developer setup. Each agent should get its own isolated container and gateway so agent restarts do not disturb other agents or the host gateways.
|
|
10
|
+
|
|
11
|
+
## Target layout
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
/root/code/pibo main / production
|
|
15
|
+
/root/code/pibo/.worktrees/dev dev / development
|
|
16
|
+
|
|
17
|
+
/root/.pibo production data
|
|
18
|
+
/root/.pibo-dev development data
|
|
19
|
+
|
|
20
|
+
pibo-web.service prod web 4788, gateway 4789
|
|
21
|
+
pibo-web-dev.service dev web 4808, gateway 4809
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Remotes
|
|
25
|
+
|
|
26
|
+
Each developer host should use its own fork as `origin` and the canonical repo as `upstream`:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
origin git@github.com:<server-or-user-fork>/pibo.git
|
|
30
|
+
upstream git@github.com:Pascapone/pibo.git
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Plan the setup
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pibo setup developer-host \
|
|
37
|
+
--origin git@github.com:<server-or-user-fork>/pibo.git \
|
|
38
|
+
--upstream git@github.com:Pascapone/pibo.git \
|
|
39
|
+
--prod-domain pibo.example.com \
|
|
40
|
+
--dev-domain dev.pibo.example.com \
|
|
41
|
+
--print-files
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Review the generated systemd units, dev start wrapper, environment template, and Caddyfile. Stage files before applying when testing a fresh host:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
pibo setup developer-host \
|
|
48
|
+
--origin git@github.com:<server-or-user-fork>/pibo.git \
|
|
49
|
+
--prod-domain pibo.example.com \
|
|
50
|
+
--dev-domain dev.pibo.example.com \
|
|
51
|
+
--write-to /tmp/pibo-setup
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Apply after review:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pibo setup developer-host \
|
|
58
|
+
--origin git@github.com:<server-or-user-fork>/pibo.git \
|
|
59
|
+
--prod-domain pibo.example.com \
|
|
60
|
+
--dev-domain dev.pibo.example.com \
|
|
61
|
+
--apply --yes
|
|
62
|
+
systemctl daemon-reload
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Important detail: service pinning
|
|
66
|
+
|
|
67
|
+
Do not globally install the dev worktree over the production install. `npm install -g .` from a local checkout creates a global symlink to that checkout; running it again from the dev worktree can accidentally move `/usr/bin/pibo` to dev.
|
|
68
|
+
|
|
69
|
+
The generated developer services avoid this by pinning production to:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
/usr/bin/node /root/code/pibo/dist/bin/pibo.js
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
and dev to the wrapper in `/usr/local/bin/pibo-web-dev-start.mjs`, which imports the dev worktree directly.
|
|
76
|
+
|
|
77
|
+
Run this in each checkout/worktree instead:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm ci
|
|
81
|
+
npm run build
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Important detail: dev internal gateway port
|
|
85
|
+
|
|
86
|
+
Do not start dev only with:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
pibo gateway:web --web-port 4808
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
That changes the web port but leaves the internal gateway at the default `4789`, which collides with production. The generated developer setup uses a wrapper that calls `runWebGatewayServer` with:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
web port: 4808
|
|
96
|
+
internal port: 4809
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Validate
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
systemctl is-active pibo-web
|
|
103
|
+
systemctl is-active pibo-web-dev
|
|
104
|
+
pibo gateway web status
|
|
105
|
+
PIBO_GATEWAY_DEV_PORT=4808 pibo gateway dev status
|
|
106
|
+
pibo setup doctor --domain pibo.example.com --dev-domain dev.pibo.example.com --expected-ip <server-ip> --require-docker --min-swap-gb 8
|
|
107
|
+
pibo compute spawn --help
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
DNS must point to the host before Caddy can issue public certificates.
|
|
111
|
+
|
|
112
|
+
Docker and swap are developer-host prerequisites only. User-host installs can ignore Docker and swap. The setup command does not create swap automatically; provision it at the OS level, then verify it with `pibo setup doctor --min-swap-gb 8`.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Install Pibo as a User Host
|
|
2
|
+
|
|
3
|
+
Use this path when you want to run Pibo, not develop Pibo itself.
|
|
4
|
+
|
|
5
|
+
## What this installs
|
|
6
|
+
|
|
7
|
+
A user host has one gateway and one data directory:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
/root/.pibo
|
|
11
|
+
pibo-web.service
|
|
12
|
+
127.0.0.1:4788 web app
|
|
13
|
+
127.0.0.1:4789 internal gateway
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
It does not require Docker, a dev gateway, a GitHub App, or branch worktrees.
|
|
17
|
+
|
|
18
|
+
## Recommended flow
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -g @pasko70/pibo
|
|
22
|
+
pibo setup doctor --domain pibo.example.com --expected-ip <server-ip>
|
|
23
|
+
pibo setup user-host --domain pibo.example.com --print-files
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Review the generated files before installing them. To stage the exact paths without touching the host, use:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pibo setup user-host --domain pibo.example.com --write-to /tmp/pibo-setup
|
|
30
|
+
find /tmp/pibo-setup -type f -maxdepth 5 -print
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
After review, apply directly on the host with:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pibo setup user-host --domain pibo.example.com --apply --yes
|
|
37
|
+
systemctl daemon-reload
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Configure auth
|
|
41
|
+
|
|
42
|
+
For a public deployment with Google OAuth:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pibo config set auth.baseURL https://pibo.example.com
|
|
46
|
+
pibo config set auth.secret <at-least-32-characters>
|
|
47
|
+
pibo config set auth.googleClientId <google-client-id>
|
|
48
|
+
pibo config set auth.googleClientSecret <google-client-secret>
|
|
49
|
+
pibo config set auth.allowedEmails you@example.com
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
For a local development install on a developer laptop, use the local auth mode. This skips Google OAuth and binds the gateway to loopback only:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pibo config set auth.mode local
|
|
56
|
+
pibo gateway:web --auth=local
|
|
57
|
+
# Open http://localhost:4788/apps/chat and click "Sign in with Google".
|
|
58
|
+
# The dev identity dev@pibo.local is auto-attached without OAuth.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Local auth refuses a non-loopback bind:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pibo gateway:web --auth=local --web-host=0.0.0.0
|
|
65
|
+
# Error: --auth=local requires a loopback bind (127.0.0.1, ::1, or localhost).
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Three independent request-time safety layers guard the local auth service. See `docs/specs/capabilities/web-auth-and-same-origin-host.md` REQ-010 and the `pibo-debug-auth` skill for the full model.
|
|
69
|
+
|
|
70
|
+
## Start the gateway
|
|
71
|
+
|
|
72
|
+
`pibo-web` will not start until Better Auth config is complete. This cannot be automated because you must create/select your Google OAuth client and allowed user list. Check it first:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pibo setup doctor --pibo-home /root/.pibo
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
If auth is incomplete, the doctor prints a hard blocker and the exact missing keys. After installing the rendered systemd unit:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
systemctl daemon-reload
|
|
82
|
+
systemctl enable --now pibo-web
|
|
83
|
+
pibo gateway web status
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
If you use Caddy, point DNS at the host before expecting Let's Encrypt to issue a certificate. Local auth mode bypasses the Better Auth requirement and prints a warning instead of a hard blocker.
|
|
87
|
+
|
|
88
|
+
## When not to use this path
|
|
89
|
+
|
|
90
|
+
Use the developer-host path if you need:
|
|
91
|
+
|
|
92
|
+
- a separate dev gateway;
|
|
93
|
+
- Docker compute workers;
|
|
94
|
+
- multiple agents working in isolated containers;
|
|
95
|
+
- GitHub App PR automation;
|
|
96
|
+
- `main` and `dev` branch deployment on the same host.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Upgrade a User Host to a Developer Host
|
|
2
|
+
|
|
3
|
+
A normal npm-installed Pibo host can be upgraded later. The upgrade must preserve the production gateway and add development infrastructure next to it.
|
|
4
|
+
|
|
5
|
+
## Starting point
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
/root/.pibo
|
|
9
|
+
pibo-web.service
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Target point
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
/root/.pibo unchanged production data
|
|
16
|
+
/root/.pibo-dev new development data
|
|
17
|
+
/root/code/pibo source checkout on main
|
|
18
|
+
/root/code/pibo/.worktrees/dev source worktree on dev
|
|
19
|
+
pibo-web.service existing production service
|
|
20
|
+
pibo-web-dev.service new development service
|
|
21
|
+
Docker installed for compute workers
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Plan first
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
pibo setup developer-host \
|
|
28
|
+
--origin git@github.com:<server-or-user-fork>/pibo.git \
|
|
29
|
+
--prod-domain pibo.example.com \
|
|
30
|
+
--dev-domain dev.pibo.example.com \
|
|
31
|
+
--print-files
|
|
32
|
+
|
|
33
|
+
pibo setup developer-host \
|
|
34
|
+
--origin git@github.com:<server-or-user-fork>/pibo.git \
|
|
35
|
+
--prod-domain pibo.example.com \
|
|
36
|
+
--dev-domain dev.pibo.example.com \
|
|
37
|
+
--write-to /tmp/pibo-setup
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Upgrade rules
|
|
41
|
+
|
|
42
|
+
- Do not replace `/root/.pibo`.
|
|
43
|
+
- Do not stop production unless a user approves it.
|
|
44
|
+
- Create `/root/.pibo-dev` separately.
|
|
45
|
+
- Keep `pibo-web` on `4788/4789`.
|
|
46
|
+
- Start `pibo-web-dev` on `4808/4809`.
|
|
47
|
+
- Install Docker only for the developer path.
|
|
48
|
+
- Provision swap at the OS level for developer hosts, then verify it with `--min-swap-gb 8`.
|
|
49
|
+
- Build each checkout with `npm ci && npm run build`; do not globally install the dev worktree over production.
|
|
50
|
+
- Keep generated services pinned to branch-specific entrypoints instead of relying on one mutable global `pibo` symlink.
|
|
51
|
+
- Keep `origin` pointed at the host-specific fork.
|
|
52
|
+
- Keep `upstream` pointed at `git@github.com:Pascapone/pibo.git`.
|
|
53
|
+
|
|
54
|
+
## Validation
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pibo setup doctor --domain pibo.example.com --dev-domain dev.pibo.example.com --expected-ip <server-ip> --require-docker --min-swap-gb 8
|
|
58
|
+
pibo gateway web status
|
|
59
|
+
PIBO_GATEWAY_DEV_PORT=4808 pibo gateway dev status
|
|
60
|
+
docker --version
|
|
61
|
+
pibo compute spawn --help
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
After DNS is updated, check both browser URLs:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
https://pibo.example.com/apps/chat
|
|
68
|
+
https://dev.pibo.example.com/apps/chat
|
|
69
|
+
```
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Pibo VS Code Extension Release Runbook
|
|
2
|
+
|
|
3
|
+
The Pibo VS Code extension is shipped as a `.vsix` artifact. This runbook describes the end-to-end release process and the split of responsibilities between the maintainer and the `pibo` release script.
|
|
4
|
+
|
|
5
|
+
## Distribution channels
|
|
6
|
+
|
|
7
|
+
The extension is published through two channels that are intentionally separate:
|
|
8
|
+
|
|
9
|
+
| Channel | Owner | Cadence | What it carries |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| npm `@pasko70/pibo` | automated via `npm publish` (or the release script's `--publish-npm` flag) | every `main` commit that includes a version bump | the `pibo` CLI, the gateway, the WebView bundle at `dist/apps/chat-vscode-web/` |
|
|
12
|
+
| VS Code Marketplace `pibo.pibo-vscode` | **maintainer uploads the VSIX manually** via <https://marketplace.visualstudio.com/manage> | every release that needs the extension UI updated | the `.vsix` produced by `npm run vscode:package` |
|
|
13
|
+
|
|
14
|
+
The npm package and the Marketplace extension are versioned together. The release script bumps both `package.json` (npm) and `src/apps/chat-vscode/package.json` (extension) in one go so the published artifacts stay in lockstep.
|
|
15
|
+
|
|
16
|
+
`pibo vscode install` (new since the distribution rework) downloads the VSIX from the GitHub Release for the configured repo (`Pascapone/pibo` by default). When the maintainer also uploads the same VSIX to the Marketplace, both channels serve identical bytes.
|
|
17
|
+
|
|
18
|
+
## Versioning
|
|
19
|
+
|
|
20
|
+
- The root `package.json#version` is the npm version. It follows [SemVer](https://semver.org/).
|
|
21
|
+
- The extension's `src/apps/chat-vscode/package.json#version` is the Marketplace version. It is kept equal to the npm version (the release script enforces this).
|
|
22
|
+
- A SemVer **minor** bump (e.g., `1.2.0` → `1.3.0`) is appropriate when the change is additive and backward-compatible. The distribution rework itself is a minor bump: existing `pibo` users are unaffected, and the new `pibo vscode install` command is opt-in.
|
|
23
|
+
- A SemVer **major** bump is reserved for breaking changes to either the public CLI surface or the WebView host↔Web postMessage contract.
|
|
24
|
+
|
|
25
|
+
## Release steps
|
|
26
|
+
|
|
27
|
+
The release script does the heavy lifting. The maintainer's job is to review, commit, and push.
|
|
28
|
+
|
|
29
|
+
### 1. Pick the version
|
|
30
|
+
|
|
31
|
+
Decide on the next version. For the distribution rework that introduces `pibo vscode install`, the right bump is `1.2.0` → `1.3.0` (new CLI command, new marketplace-ready extension, no breaking changes).
|
|
32
|
+
|
|
33
|
+
### 2. Bump + build + package (local)
|
|
34
|
+
|
|
35
|
+
From the repo root:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
node scripts/release.mjs --version 1.3.0
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The script:
|
|
42
|
+
|
|
43
|
+
1. Reads the current version from both `package.json` files.
|
|
44
|
+
2. Writes the new version to both files.
|
|
45
|
+
3. Runs `npm run build` (which includes the WebView build).
|
|
46
|
+
4. Runs `npm run vscode:package` to produce `dist/apps/vscode-artifacts/pibo-vscode-1.3.0.vsix` and a stable `latest.vsix` copy.
|
|
47
|
+
5. Prints the VSIX path and size.
|
|
48
|
+
|
|
49
|
+
The script does **not** push to git or create a tag. The maintainer reviews the diff and commits it.
|
|
50
|
+
|
|
51
|
+
### 3. Commit and tag
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
git add package.json src/apps/chat-vscode/package.json
|
|
55
|
+
git commit -m "chore(release): bump @pasko70/pibo and pibo.pibo-vscode to 1.3.0"
|
|
56
|
+
git tag -a v1.3.0 -m "@pasko70/pibo 1.3.0"
|
|
57
|
+
git push origin main
|
|
58
|
+
git push origin v1.3.0
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 4. Create a GitHub Release with the VSIX attached
|
|
62
|
+
|
|
63
|
+
The maintainer's local machine has the `gh` CLI installed:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
gh release create v1.3.0 \
|
|
67
|
+
dist/apps/vscode-artifacts/pibo-vscode-1.3.0.vsix \
|
|
68
|
+
--title "pibo 1.3.0" \
|
|
69
|
+
--notes "..."
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
In environments where `gh` is not available (e.g. the pibo compute workers),
|
|
73
|
+
`scripts/create-github-release.mjs` performs the same action via the Pibo
|
|
74
|
+
GitHub App, which has been installed on `Pascapone/pibo` with the
|
|
75
|
+
`contents: write` scope. The script accepts the GitHub App credentials from
|
|
76
|
+
`PIBO_GITHUB_APP_ID` and `PIBO_GITHUB_APP_KEY` environment variables, or
|
|
77
|
+
from the well-known env file at
|
|
78
|
+
`/root/.pibo/uploads/github-app.env` (with the PEM key auto-discovered
|
|
79
|
+
next to it).
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
node scripts/create-github-release.mjs \
|
|
83
|
+
--tag v1.3.0 \
|
|
84
|
+
--asset dist/apps/vscode-artifacts/pibo-vscode-1.3.0.vsix
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Both paths make the VSIX downloadable from a stable URL
|
|
88
|
+
(`https://github.com/Pascapone/pibo/releases/download/v1.3.0/pibo-vscode-1.3.0.vsix`).
|
|
89
|
+
The `pibo vscode install` command uses the GitHub Releases API to discover
|
|
90
|
+
this URL automatically.
|
|
91
|
+
|
|
92
|
+
The release script can also do this in one step:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
node scripts/release.mjs --version 1.3.0 --create-release
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
…if the tag has already been pushed. Internally the release script calls
|
|
99
|
+
`scripts/create-github-release.mjs`, so it works in worker environments
|
|
100
|
+
without `gh`.
|
|
101
|
+
|
|
102
|
+
### 5. Publish the npm package
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm publish
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Or, in one go with the release script:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
node scripts/release.mjs --version 1.3.0 --publish-npm --create-release
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
The publish step uploads the `pibo` CLI, the gateway plugins, and the WebView bundle. The Marketplace upload is intentionally **not** automated — see step 6.
|
|
115
|
+
|
|
116
|
+
### 6. Upload the VSIX to the VS Code Marketplace (manual)
|
|
117
|
+
|
|
118
|
+
The Marketplace does not currently accept a Personal Access Token from this account (Azure-side provisioning issue). The release is therefore finished by uploading the VSIX through the Marketplace web UI:
|
|
119
|
+
|
|
120
|
+
1. Open <https://marketplace.visualstudio.com/manage>.
|
|
121
|
+
2. Pick the publisher `pibo` (created during the first marketplace publish).
|
|
122
|
+
3. Click **Upload new extension** and select `dist/apps/vscode-artifacts/pibo-vscode-1.3.0.vsix`.
|
|
123
|
+
4. The Marketplace validates the manifest and publishes the extension. The publisher ID is `pibo.pibo-vscode`.
|
|
124
|
+
|
|
125
|
+
After the upload, `code --install-extension pibo.pibo-vscode` works for end users.
|
|
126
|
+
|
|
127
|
+
### 7. Verify
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
pibo vscode install --vsix dist/apps/vscode-artifacts/pibo-vscode-1.3.0.vsix
|
|
131
|
+
pibo vscode status
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Confirm that `status` reports `pibo.pibo-vscode@1.3.0` installed via the expected `code` binary, and that the WebView loads the gateway at `http://127.0.0.1:4788/apps/chat-vscode/`.
|
|
135
|
+
|
|
136
|
+
## Rollback
|
|
137
|
+
|
|
138
|
+
If a release is broken:
|
|
139
|
+
|
|
140
|
+
- **npm**: `npm unpublish @pasko70/pibo@1.3.0` works only within 72 hours of publish. After that, publish `1.3.1` with a fix.
|
|
141
|
+
- **VSIX via `pibo vscode install`**: delete the GitHub Release and re-create it with a fixed VSIX. Users who have already installed the extension will not auto-update until they run `pibo vscode install` again.
|
|
142
|
+
- **Marketplace**: the Marketplace UI supports un-publishing or un-listing. For a fast fix, upload a corrected `.vsix` with the same version (the Marketplace accepts a re-upload before processing the original).
|
|
143
|
+
|
|
144
|
+
## What ships in the `pibo` npm package
|
|
145
|
+
|
|
146
|
+
The `files` whitelist in `package.json` controls what is published:
|
|
147
|
+
|
|
148
|
+
- `dist/` — the compiled server, the gateway plugins, the WebView bundles (chat-ui, context-files-ui, chat-vscode-web).
|
|
149
|
+
- `context/` — the bundled agent skills.
|
|
150
|
+
- `skills/builtin/**` — built-in user skills.
|
|
151
|
+
- `docs/ops/**` — operator runbooks.
|
|
152
|
+
- `README.md` and `src/mcp/LICENSE.mcp-cli`.
|
|
153
|
+
|
|
154
|
+
The `.vsix` is **not** in the npm package. It lives on the GitHub Release and (after the maintainer uploads it) on the VS Code Marketplace.
|
|
155
|
+
|
|
156
|
+
## Why the WebView bundle is in the npm package
|
|
157
|
+
|
|
158
|
+
The extension's WebView loads from `http://<gateway>/apps/chat-vscode/`, not from the `.vsix`. The gateway serves the bundle out of `dist/apps/chat-vscode-web/`. If the bundle were not in the npm package, the gateway would return 404 for the WebView and the extension would be unusable.
|
|
159
|
+
|
|
160
|
+
Including the bundle in npm costs about 1 MB of disk per `pibo` install and zero runtime cost for users who never open the extension. Users who only use the `pibo` CLI never load the bundle.
|