@pasko70/pibo 1.9.2 → 1.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +183 -183
  2. package/context/codex-base-prompt.md +148 -148
  3. package/context/compute-worker.md +23 -23
  4. package/context/pibo-compaction-prompt.md +100 -100
  5. package/context/pibo-native-tooling.md +18 -18
  6. package/context/pibo-system-prompt.md +77 -77
  7. package/dist/apps/chat/agent-store.js +248 -248
  8. package/dist/apps/chat/data/project-service.js +168 -168
  9. package/dist/apps/chat/data/read-state-service.js +18 -18
  10. package/dist/apps/chat/data/session-query-service.js +25 -25
  11. package/dist/apps/chat/data/timeline-query-service.js +14 -14
  12. package/dist/apps/chat/static-assets.js +854 -854
  13. package/dist/apps/chat/workflow-persistence.js +255 -255
  14. package/dist/apps/chat-ui/assets/{dist-5GM30SQK.js → dist-5WHjqNrY.js} +1 -1
  15. package/dist/apps/chat-ui/assets/{dist-Cge8JklW.js → dist-BJBNSAIH.js} +1 -1
  16. package/dist/apps/chat-ui/assets/{dist-C-5u2QIS.js → dist-C3liNPZJ.js} +1 -1
  17. package/dist/apps/chat-ui/assets/{dist-BWbWIOcD.js → dist-CW6FHEaw.js} +1 -1
  18. package/dist/apps/chat-ui/assets/{dist-CjYtD7ZT.js → dist-CaNlj6v6.js} +1 -1
  19. package/dist/apps/chat-ui/assets/{dist-BYKMZlI0.js → dist-Cne74s6i.js} +1 -1
  20. package/dist/apps/chat-ui/assets/{dist-9lsp1UpA.js → dist-DvKZv20v.js} +1 -1
  21. package/dist/apps/chat-ui/assets/{dist-DFhhiR8M.js → dist-FYH7vzrh.js} +1 -1
  22. package/dist/apps/chat-ui/assets/{dist-Etxmpyxg.js → dist-f5KioIwL.js} +1 -1
  23. package/dist/apps/chat-ui/assets/{dist-2KdPXbMT.js → dist-hWrpj7SE.js} +1 -1
  24. package/dist/apps/chat-ui/assets/{dist-Idz5kzy8.js → dist-jAuO8_bV.js} +1 -1
  25. package/dist/apps/chat-ui/assets/{index-BqD_bm7z.js → index-Bf29pJph.js} +29 -29
  26. package/dist/apps/chat-ui/index.html +17 -17
  27. package/dist/apps/chat-ui/manifest.webmanifest +25 -25
  28. package/dist/apps/chat-ui/sw.js +47 -47
  29. package/dist/apps/chat-vscode-web/assets/index-BAMxIaI_.js +41 -0
  30. package/dist/apps/chat-vscode-web/index.html +13 -13
  31. package/dist/apps/cli-ui/cliSessionsCommand.js +23 -23
  32. package/dist/apps/context-files-ui/index.html +11 -11
  33. package/dist/cli.js +39 -39
  34. package/dist/compute/cli.js +54 -54
  35. package/dist/core/session-router.js +5 -2
  36. package/dist/cron/cli.js +15 -15
  37. package/dist/cron/store.js +49 -49
  38. package/dist/data/cli.js +23 -23
  39. package/dist/data/event-log.js +23 -23
  40. package/dist/data/message-store.js +20 -20
  41. package/dist/data/navigation-store.js +9 -9
  42. package/dist/data/observation-store.js +4 -4
  43. package/dist/data/payload-store.js +17 -17
  44. package/dist/data/schema.js +431 -431
  45. package/dist/data/session-store.js +4 -4
  46. package/dist/data/telemetry-queries.js +54 -54
  47. package/dist/data/telemetry.js +197 -197
  48. package/dist/debug/events.js +12 -12
  49. package/dist/debug/failures.js +6 -6
  50. package/dist/debug/index.js +227 -227
  51. package/dist/debug/messages.js +6 -6
  52. package/dist/debug/pty.js +124 -124
  53. package/dist/debug/session.js +29 -29
  54. package/dist/debug/tools.js +5 -5
  55. package/dist/debug/web-snapshot-browser-scripts.js +294 -294
  56. package/dist/debug/web-streaming-browser-library.js +925 -925
  57. package/dist/debug/web-streaming-browser-scripts.js +232 -232
  58. package/dist/debug/web-streaming-provider-telemetry.js +4 -4
  59. package/dist/debug/web.js +93 -93
  60. package/dist/gateway/cli.js +19 -19
  61. package/dist/mcp/config-command.js +53 -53
  62. package/dist/mcp/index.js +21 -21
  63. package/dist/mcp/registry.js +11 -11
  64. package/dist/pi-packages/cli.js +11 -11
  65. package/dist/plugins/context-files-store.js +110 -110
  66. package/dist/plugins/context-files.js +4 -4
  67. package/dist/ralph/cli.js +18 -18
  68. package/dist/ralph/templates.js +140 -140
  69. package/dist/reliability/store.js +226 -226
  70. package/dist/session-ui/sessionActivity.js +30 -0
  71. package/dist/sessions/pibo-data-store.js +16 -16
  72. package/dist/sessions/sqlite-store.js +53 -53
  73. package/dist/setup/cli.js +58 -58
  74. package/dist/signals/projector.js +26 -11
  75. package/dist/signals/registry.js +41 -0
  76. package/dist/tools/agent-browser-wrapper.js +80 -80
  77. package/dist/tools/browser-use-cdp.js +12 -12
  78. package/dist/tools/browser-use-wrapper.js +762 -762
  79. package/dist/tools/guides.js +538 -538
  80. package/dist/tools/index.js +99 -99
  81. package/dist/tools/runtime/node-worker-source.js +205 -205
  82. package/dist/tools/runtime/python-worker-source.js +177 -177
  83. package/dist/vscode/cli.js +9 -9
  84. package/dist/web-annotations/cdp.js +900 -900
  85. package/dist/web-annotations/store.js +96 -96
  86. package/docs/README.md +23 -23
  87. package/docs/ops/install-developer-host.md +112 -112
  88. package/docs/ops/install-user-host.md +96 -96
  89. package/docs/ops/upgrade-user-to-developer-host.md +69 -69
  90. package/docs/ops/vscode-extension-release.md +160 -160
  91. package/package.json +95 -95
  92. package/skills/builtin/graphify/SKILL.md +52 -52
  93. package/skills/builtin/pi-agent-harness/SKILL.md +319 -319
  94. package/skills/builtin/pi-agent-harness/agents/openai.yaml +4 -4
  95. package/skills/builtin/pibo-docker-system/SKILL.md +170 -170
  96. package/skills/builtin/pibo-spec-writing/SKILL.md +330 -330
  97. package/skills/builtin/prd/SKILL.md +143 -143
  98. package/skills/builtin/ralph-loop/SKILL.md +359 -359
  99. package/skills/builtin/ralph-prd-json/SKILL.md +123 -123
  100. package/skills/builtin/skill-creator/LICENSE.txt +201 -201
  101. package/skills/builtin/skill-creator/SKILL.md +513 -513
  102. package/skills/builtin/skill-creator/agents/analyzer.md +274 -274
  103. package/skills/builtin/skill-creator/agents/comparator.md +202 -202
  104. package/skills/builtin/skill-creator/agents/grader.md +223 -223
  105. package/skills/builtin/skill-creator/assets/eval_review.html +146 -146
  106. package/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -471
  107. package/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -1325
  108. package/skills/builtin/skill-creator/references/schemas.md +430 -430
  109. package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -401
  110. package/skills/builtin/skill-creator/scripts/generate_report.py +326 -326
  111. package/skills/builtin/skill-creator/scripts/improve_description.py +247 -247
  112. package/skills/builtin/skill-creator/scripts/package_skill.py +136 -136
  113. package/skills/builtin/skill-creator/scripts/quick_validate.py +102 -102
  114. package/skills/builtin/skill-creator/scripts/run_eval.py +310 -310
  115. package/skills/builtin/skill-creator/scripts/run_loop.py +328 -328
  116. package/skills/builtin/skill-creator/scripts/utils.py +47 -47
  117. package/skills/builtin/web-annotations/SKILL.md +93 -93
  118. package/src/mcp/LICENSE.mcp-cli +21 -21
  119. package/dist/apps/chat-vscode-web/assets/index-Cst9OUkC.js +0 -41
  120. package/dist/session-ui/activeTurn.js +0 -126
@@ -202,31 +202,31 @@ function parseNonNegativeInteger(value) {
202
202
  return parsed;
203
203
  }
204
204
  function printBrowserUseDiscovery() {
205
- console.log(`pibo tools browser-use - browser-use helpers
206
-
207
- Start:
208
- eval "$(pibo tools env browser-use)"
209
-
210
- Commands:
211
- targets List Chrome CDP targets with Chat auth hints
212
- attach-chat Export the best existing authenticated Chat target
213
- auth-template path Print the default authenticated template profile path
214
- auth-template env Print shell exports for preparing the auth template profile
215
- lease acquire Acquire an isolated authenticated browser slot
216
- lease list List authenticated browser slots
217
- lease release <id> Release one browser slot
218
- lease reap-stale Release expired or dead browser slots
219
- pool status Show read-only managed browser-pool status
220
- pool reap Reap an idle managed browser pool
221
- health Check browser-use health and report issues
222
-
223
- Next:
224
- pibo tools show browser-use
225
- pibo tools guide browser-use browser-use
226
- pibo tools browser-use targets
227
- pibo tools browser-use auth-template env
228
- pibo tools browser-use lease acquire
229
- pibo tools browser-use pool status
205
+ console.log(`pibo tools browser-use - browser-use helpers
206
+
207
+ Start:
208
+ eval "$(pibo tools env browser-use)"
209
+
210
+ Commands:
211
+ targets List Chrome CDP targets with Chat auth hints
212
+ attach-chat Export the best existing authenticated Chat target
213
+ auth-template path Print the default authenticated template profile path
214
+ auth-template env Print shell exports for preparing the auth template profile
215
+ lease acquire Acquire an isolated authenticated browser slot
216
+ lease list List authenticated browser slots
217
+ lease release <id> Release one browser slot
218
+ lease reap-stale Release expired or dead browser slots
219
+ pool status Show read-only managed browser-pool status
220
+ pool reap Reap an idle managed browser pool
221
+ health Check browser-use health and report issues
222
+
223
+ Next:
224
+ pibo tools show browser-use
225
+ pibo tools guide browser-use browser-use
226
+ pibo tools browser-use targets
227
+ pibo tools browser-use auth-template env
228
+ pibo tools browser-use lease acquire
229
+ pibo tools browser-use pool status
230
230
  pibo tools browser-use pool reap --json`);
231
231
  }
232
232
  function getBrowserPoolStatusIdentity(options) {
@@ -577,62 +577,62 @@ async function printBrowserUseHealth(status, json = false) {
577
577
  }
578
578
  }
579
579
  function printAgentBrowserDiscovery() {
580
- console.log(`pibo tools agent-browser - Agent Browser helpers
581
-
582
- Start:
583
- eval "$(pibo tools env agent-browser)"
584
-
585
- Commands:
586
- health Check Agent Browser health and report issues
587
- sessions List upstream Agent Browser sessions
588
- targets List Chrome CDP targets with Chat auth hints
589
- attach-chat Export the best existing authenticated Chat target
590
- auth-template path Print the default authenticated template profile path
591
- auth-template env Print shell exports for preparing the auth template profile
592
- lease acquire Acquire an isolated authenticated browser slot
593
- lease list List authenticated browser slots
594
- lease release <id> Release one browser slot
595
- lease reap-stale Release expired browser slots
596
-
597
- Next:
598
- pibo tools show agent-browser
599
- pibo tools guide agent-browser agent-browser
600
- pibo tools agent-browser health
580
+ console.log(`pibo tools agent-browser - Agent Browser helpers
581
+
582
+ Start:
583
+ eval "$(pibo tools env agent-browser)"
584
+
585
+ Commands:
586
+ health Check Agent Browser health and report issues
587
+ sessions List upstream Agent Browser sessions
588
+ targets List Chrome CDP targets with Chat auth hints
589
+ attach-chat Export the best existing authenticated Chat target
590
+ auth-template path Print the default authenticated template profile path
591
+ auth-template env Print shell exports for preparing the auth template profile
592
+ lease acquire Acquire an isolated authenticated browser slot
593
+ lease list List authenticated browser slots
594
+ lease release <id> Release one browser slot
595
+ lease reap-stale Release expired browser slots
596
+
597
+ Next:
598
+ pibo tools show agent-browser
599
+ pibo tools guide agent-browser agent-browser
600
+ pibo tools agent-browser health
601
601
  pibo tools agent-browser lease acquire`);
602
602
  }
603
603
  function printRalphDiscovery() {
604
- console.log(`pibo tools ralph - Ralph job helpers
605
-
606
- Commands:
607
- pibo ralph templates --json
608
- pibo ralph add --template <id> --room <room-id> --start --json
609
- pibo ralph list --all --json
610
- pibo ralph runs --job <job-id> --json
611
- pibo ralph stop <job-id>
612
- pibo ralph cancel <job-id>
613
-
614
- Next:
615
- pibo tools guide ralph ralph
604
+ console.log(`pibo tools ralph - Ralph job helpers
605
+
606
+ Commands:
607
+ pibo ralph templates --json
608
+ pibo ralph add --template <id> --room <room-id> --start --json
609
+ pibo ralph list --all --json
610
+ pibo ralph runs --job <job-id> --json
611
+ pibo ralph stop <job-id>
612
+ pibo ralph cancel <job-id>
613
+
614
+ Next:
615
+ pibo tools guide ralph ralph
616
616
  pibo ralph templates`);
617
617
  }
618
618
  function printToolsDiscovery() {
619
- console.log(`pibo tools - curated CLI tools
620
-
621
- Commands:
622
- list List curated tools
623
- installed List installed tools
624
- show <name> Show one tool
625
- install <name> Install one tool
626
- doctor <name> Check one tool
627
- guides <name> List tool guides
628
- guide <name> [guide] Print one guide
629
- path <name> Print executable path
630
- env <name> Print shell exports
631
- browser-use Browser-use auth slots and helper commands
632
- agent-browser Agent Browser sessions, targets, and auth slots
633
- ralph Ralph job helper commands
634
-
635
- Next:
619
+ console.log(`pibo tools - curated CLI tools
620
+
621
+ Commands:
622
+ list List curated tools
623
+ installed List installed tools
624
+ show <name> Show one tool
625
+ install <name> Install one tool
626
+ doctor <name> Check one tool
627
+ guides <name> List tool guides
628
+ guide <name> [guide] Print one guide
629
+ path <name> Print executable path
630
+ env <name> Print shell exports
631
+ browser-use Browser-use auth slots and helper commands
632
+ agent-browser Agent Browser sessions, targets, and auth slots
633
+ ralph Ralph job helper commands
634
+
635
+ Next:
636
636
  pibo tools list`);
637
637
  }
638
638
  export async function runToolsCli(argv = process.argv) {
@@ -790,10 +790,10 @@ export async function runToolsCli(argv = process.argv) {
790
790
  .command('auth-template')
791
791
  .description('Manage the Agent Browser authenticated template profile')
792
792
  .action(() => {
793
- console.log(`pibo tools agent-browser auth-template
794
-
795
- Commands:
796
- path Print the default authenticated template profile path
793
+ console.log(`pibo tools agent-browser auth-template
794
+
795
+ Commands:
796
+ path Print the default authenticated template profile path
797
797
  env Print shell exports for preparing the auth template profile`);
798
798
  });
799
799
  agentAuthTemplate
@@ -814,12 +814,12 @@ Commands:
814
814
  .command('lease')
815
815
  .description('Acquire and manage isolated Agent Browser slots')
816
816
  .action(() => {
817
- console.log(`pibo tools agent-browser lease
818
-
819
- Commands:
820
- acquire Acquire an isolated authenticated browser slot
821
- list List authenticated browser slots
822
- release <id> Release one browser slot
817
+ console.log(`pibo tools agent-browser lease
818
+
819
+ Commands:
820
+ acquire Acquire an isolated authenticated browser slot
821
+ list List authenticated browser slots
822
+ release <id> Release one browser slot
823
823
  reap-stale Release expired browser slots`);
824
824
  });
825
825
  agentLease
@@ -911,10 +911,10 @@ Commands:
911
911
  .command('pool')
912
912
  .description('Inspect and reap the managed browser pool')
913
913
  .action(() => {
914
- console.log(`pibo tools browser-use pool
915
-
916
- Commands:
917
- status Show read-only managed browser-pool status
914
+ console.log(`pibo tools browser-use pool
915
+
916
+ Commands:
917
+ status Show read-only managed browser-pool status
918
918
  reap Reap an idle managed browser pool`);
919
919
  });
920
920
  pool
@@ -942,10 +942,10 @@ Commands:
942
942
  .command('auth-template')
943
943
  .description('Manage the browser-use authenticated template profile')
944
944
  .action(() => {
945
- console.log(`pibo tools browser-use auth-template
946
-
947
- Commands:
948
- path Print the default authenticated template profile path
945
+ console.log(`pibo tools browser-use auth-template
946
+
947
+ Commands:
948
+ path Print the default authenticated template profile path
949
949
  env Print shell exports for preparing the auth template profile`);
950
950
  });
951
951
  authTemplate
@@ -964,12 +964,12 @@ Commands:
964
964
  .command('lease')
965
965
  .description('Acquire and manage isolated authenticated browser-use slots')
966
966
  .action(() => {
967
- console.log(`pibo tools browser-use lease
968
-
969
- Commands:
970
- acquire Acquire an isolated authenticated browser slot
971
- list List authenticated browser slots
972
- release <id> Release one browser slot
967
+ console.log(`pibo tools browser-use lease
968
+
969
+ Commands:
970
+ acquire Acquire an isolated authenticated browser slot
971
+ list List authenticated browser slots
972
+ release <id> Release one browser slot
973
973
  reap-stale Release expired or dead browser slots`);
974
974
  });
975
975
  lease
@@ -1,206 +1,206 @@
1
- export const NODE_RUNTIME_WORKER_SOURCE = String.raw `
2
- const vm = require("node:vm");
3
- const util = require("node:util");
4
-
5
- let currentOutput = null;
6
-
7
- function bounded(value, maxBytes = 8192) {
8
- const text = String(value);
9
- const bytes = Buffer.byteLength(text, "utf8");
10
- if (bytes <= maxBytes) return text;
11
- return Buffer.from(text, "utf8").subarray(0, maxBytes).toString("utf8") + "\n...<truncated>";
12
- }
13
-
14
- function safeInspect(value, maxBytes = 4096) {
15
- try {
16
- return bounded(util.inspect(value, { depth: 3, maxArrayLength: 50, breakLength: 120 }), maxBytes);
17
- } catch (error) {
18
- return "<inspect failed: " + (error?.name || "Error") + ": " + (error?.message || String(error)) + ">";
19
- }
20
- }
21
-
22
- function summarize(value, maxBytes = 4096) {
23
- const type = value === null ? "null" : Array.isArray(value) ? "array" : typeof value;
24
- const result = { type, repr: safeInspect(value, maxBytes) };
25
- try {
26
- if (value != null && typeof value.length === "number") result.length = value.length;
27
- if (Array.isArray(value)) result.length = value.length;
28
- if (value && typeof value === "object") {
29
- const keys = Object.keys(value).slice(0, 50);
30
- if (keys.length > 0) result.keys = keys;
31
- }
32
- } catch {}
33
- return result;
34
- }
35
-
36
- function errorSummary(error) {
37
- const stack = error && error.stack ? String(error.stack) : String(error);
38
- const out = {
39
- name: error && error.name ? String(error.name) : "Error",
40
- message: error && error.message ? String(error.message) : String(error),
41
- stack,
42
- };
43
- const match = stack.match(/<pibo-runtime>:(\d+):(\d+)/) || stack.match(/evalmachine\.<anonymous>:(\d+):(\d+)/);
44
- if (match) {
45
- out.line = Number(match[1]);
46
- out.column = Number(match[2]);
47
- }
48
- return out;
49
- }
50
-
51
- function appendStdout(chunk) {
52
- if (currentOutput) currentOutput.stdout += String(chunk);
53
- }
54
-
55
- function appendStderr(chunk) {
56
- if (currentOutput) currentOutput.stderr += String(chunk);
57
- }
58
-
59
- const processProxy = new Proxy(process, {
60
- get(target, prop, receiver) {
61
- if (prop === "stdout") return { write: (chunk) => { appendStdout(chunk); return true; } };
62
- if (prop === "stderr") return { write: (chunk) => { appendStderr(chunk); return true; } };
63
- return Reflect.get(target, prop, receiver);
64
- },
65
- });
66
-
67
- const consoleProxy = {
68
- log: (...args) => appendStdout(util.format(...args) + "\n"),
69
- info: (...args) => appendStdout(util.format(...args) + "\n"),
70
- debug: (...args) => appendStdout(util.format(...args) + "\n"),
71
- warn: (...args) => appendStderr(util.format(...args) + "\n"),
72
- error: (...args) => appendStderr(util.format(...args) + "\n"),
73
- dir: (value, options) => appendStdout(util.inspect(value, options) + "\n"),
74
- };
75
-
76
- const context = vm.createContext({
77
- console: consoleProxy,
78
- require,
79
- process: processProxy,
80
- Buffer,
81
- URL,
82
- URLSearchParams,
83
- TextEncoder,
84
- TextDecoder,
85
- setTimeout,
86
- clearTimeout,
87
- setInterval,
88
- clearInterval,
89
- setImmediate,
90
- clearImmediate,
91
- queueMicrotask,
92
- });
93
- context.global = context;
94
- context.globalThis = context;
95
-
96
- async function execute(req) {
97
- const mode = req.mode || "exec";
98
- const code = req.code || "";
99
- const output = { stdout: "", stderr: "" };
100
- currentOutput = output;
101
- try {
102
- const value = await (async () => {
103
- if (mode === "eval") {
104
- return await vm.runInContext(code, context, { filename: "<pibo-runtime>", timeout: Number(req.timeoutMs || 30000) });
105
- }
106
- const result = vm.runInContext(code, context, { filename: "<pibo-runtime>", timeout: Number(req.timeoutMs || 30000) });
107
- if (result && typeof result.then === "function") await result;
108
- return undefined;
109
- })();
110
- return {
111
- id: req.id,
112
- status: "ok",
113
- stdout: output.stdout,
114
- stderr: output.stderr,
115
- result: value === undefined ? null : summarize(value),
116
- };
117
- } catch (error) {
118
- return {
119
- id: req.id,
120
- status: "error",
121
- stdout: output.stdout,
122
- stderr: output.stderr,
123
- error: errorSummary(error),
124
- };
125
- } finally {
126
- currentOutput = null;
127
- }
128
- }
129
-
130
- async function inspectValue(req) {
131
- const expression = req.expression || "";
132
- const what = req.what || "summary";
133
- const maxBytes = Number(req.maxBytes || 8192);
134
- try {
135
- const value = await vm.runInContext(expression, context, { filename: "<pibo-runtime>", timeout: 15000 });
136
- const result = { id: req.id, status: "ok" };
137
- if (what === "summary" || what === "all") result.summary = summarize(value, maxBytes);
138
- if (what === "signature" || what === "all") result.signature = typeof value === "function" ? bounded(value.toString().split("{")[0].trim(), maxBytes) : "<signature unavailable>";
139
- if (what === "members" || what === "all") {
140
- const members = new Set();
141
- for (const key of Reflect.ownKeys(Object(value))) members.add(String(key));
142
- const proto = value == null ? undefined : Object.getPrototypeOf(value);
143
- if (proto) for (const key of Reflect.ownKeys(proto)) members.add(String(key));
144
- result.members = [...members].slice(0, 200);
145
- }
146
- if (what === "source" || what === "all") result.source = typeof value === "function" ? bounded(value.toString(), maxBytes) : "<source unavailable>";
147
- if (what === "doc" || what === "all") result.doc = "";
148
- return result;
149
- } catch (error) {
150
- return { id: req.id, status: "error", error: errorSummary(error) };
151
- }
152
- }
153
-
154
- function listVars(req) {
155
- const includePrivate = Boolean(req.includePrivate);
156
- const maxItems = Number(req.maxItems || 100);
157
- const maxBytes = Number(req.maxBytes || 4096);
158
- const hidden = new Set(["console", "require", "process", "Buffer", "URL", "URLSearchParams", "TextEncoder", "TextDecoder", "global", "globalThis"]);
159
- const variables = [];
160
- for (const name of Object.keys(context).sort()) {
161
- if (hidden.has(name)) continue;
162
- if (!includePrivate && name.startsWith("_")) continue;
163
- variables.push({ name, summary: summarize(context[name], maxBytes) });
164
- if (variables.length >= maxItems) break;
165
- }
166
- return { id: req.id, status: "ok", variables, truncated: variables.length >= maxItems };
167
- }
168
-
169
- function writeResponse(resp) {
170
- process.stdout.write(JSON.stringify(resp) + "\n");
171
- }
172
-
173
- async function handle(req) {
174
- if (req.type === "exec") return await execute(req);
175
- if (req.type === "inspect") return await inspectValue(req);
176
- if (req.type === "vars") return listVars(req);
177
- if (req.type === "shutdown") return { id: req.id, status: "ok", shutdown: true };
178
- return { id: req.id, status: "error", error: { name: "RuntimeProtocolError", message: "unknown request type " + req.type } };
179
- }
180
-
181
- async function main() {
182
- writeResponse({ id: "ready", status: "ready" });
183
- let buffer = "";
184
- process.stdin.setEncoding("utf8");
185
- process.stdin.on("data", async (chunk) => {
186
- buffer += chunk;
187
- let index;
188
- while ((index = buffer.indexOf("\n")) >= 0) {
189
- const line = buffer.slice(0, index);
190
- buffer = buffer.slice(index + 1);
191
- if (!line.trim()) continue;
192
- let req;
193
- try {
194
- req = JSON.parse(line);
195
- const resp = await handle(req);
196
- writeResponse(resp);
197
- if (resp.shutdown) process.exit(0);
198
- } catch (error) {
199
- writeResponse({ id: req?.id, status: "error", error: errorSummary(error) });
200
- }
201
- }
202
- });
203
- }
204
-
205
- main();
1
+ export const NODE_RUNTIME_WORKER_SOURCE = String.raw `
2
+ const vm = require("node:vm");
3
+ const util = require("node:util");
4
+
5
+ let currentOutput = null;
6
+
7
+ function bounded(value, maxBytes = 8192) {
8
+ const text = String(value);
9
+ const bytes = Buffer.byteLength(text, "utf8");
10
+ if (bytes <= maxBytes) return text;
11
+ return Buffer.from(text, "utf8").subarray(0, maxBytes).toString("utf8") + "\n...<truncated>";
12
+ }
13
+
14
+ function safeInspect(value, maxBytes = 4096) {
15
+ try {
16
+ return bounded(util.inspect(value, { depth: 3, maxArrayLength: 50, breakLength: 120 }), maxBytes);
17
+ } catch (error) {
18
+ return "<inspect failed: " + (error?.name || "Error") + ": " + (error?.message || String(error)) + ">";
19
+ }
20
+ }
21
+
22
+ function summarize(value, maxBytes = 4096) {
23
+ const type = value === null ? "null" : Array.isArray(value) ? "array" : typeof value;
24
+ const result = { type, repr: safeInspect(value, maxBytes) };
25
+ try {
26
+ if (value != null && typeof value.length === "number") result.length = value.length;
27
+ if (Array.isArray(value)) result.length = value.length;
28
+ if (value && typeof value === "object") {
29
+ const keys = Object.keys(value).slice(0, 50);
30
+ if (keys.length > 0) result.keys = keys;
31
+ }
32
+ } catch {}
33
+ return result;
34
+ }
35
+
36
+ function errorSummary(error) {
37
+ const stack = error && error.stack ? String(error.stack) : String(error);
38
+ const out = {
39
+ name: error && error.name ? String(error.name) : "Error",
40
+ message: error && error.message ? String(error.message) : String(error),
41
+ stack,
42
+ };
43
+ const match = stack.match(/<pibo-runtime>:(\d+):(\d+)/) || stack.match(/evalmachine\.<anonymous>:(\d+):(\d+)/);
44
+ if (match) {
45
+ out.line = Number(match[1]);
46
+ out.column = Number(match[2]);
47
+ }
48
+ return out;
49
+ }
50
+
51
+ function appendStdout(chunk) {
52
+ if (currentOutput) currentOutput.stdout += String(chunk);
53
+ }
54
+
55
+ function appendStderr(chunk) {
56
+ if (currentOutput) currentOutput.stderr += String(chunk);
57
+ }
58
+
59
+ const processProxy = new Proxy(process, {
60
+ get(target, prop, receiver) {
61
+ if (prop === "stdout") return { write: (chunk) => { appendStdout(chunk); return true; } };
62
+ if (prop === "stderr") return { write: (chunk) => { appendStderr(chunk); return true; } };
63
+ return Reflect.get(target, prop, receiver);
64
+ },
65
+ });
66
+
67
+ const consoleProxy = {
68
+ log: (...args) => appendStdout(util.format(...args) + "\n"),
69
+ info: (...args) => appendStdout(util.format(...args) + "\n"),
70
+ debug: (...args) => appendStdout(util.format(...args) + "\n"),
71
+ warn: (...args) => appendStderr(util.format(...args) + "\n"),
72
+ error: (...args) => appendStderr(util.format(...args) + "\n"),
73
+ dir: (value, options) => appendStdout(util.inspect(value, options) + "\n"),
74
+ };
75
+
76
+ const context = vm.createContext({
77
+ console: consoleProxy,
78
+ require,
79
+ process: processProxy,
80
+ Buffer,
81
+ URL,
82
+ URLSearchParams,
83
+ TextEncoder,
84
+ TextDecoder,
85
+ setTimeout,
86
+ clearTimeout,
87
+ setInterval,
88
+ clearInterval,
89
+ setImmediate,
90
+ clearImmediate,
91
+ queueMicrotask,
92
+ });
93
+ context.global = context;
94
+ context.globalThis = context;
95
+
96
+ async function execute(req) {
97
+ const mode = req.mode || "exec";
98
+ const code = req.code || "";
99
+ const output = { stdout: "", stderr: "" };
100
+ currentOutput = output;
101
+ try {
102
+ const value = await (async () => {
103
+ if (mode === "eval") {
104
+ return await vm.runInContext(code, context, { filename: "<pibo-runtime>", timeout: Number(req.timeoutMs || 30000) });
105
+ }
106
+ const result = vm.runInContext(code, context, { filename: "<pibo-runtime>", timeout: Number(req.timeoutMs || 30000) });
107
+ if (result && typeof result.then === "function") await result;
108
+ return undefined;
109
+ })();
110
+ return {
111
+ id: req.id,
112
+ status: "ok",
113
+ stdout: output.stdout,
114
+ stderr: output.stderr,
115
+ result: value === undefined ? null : summarize(value),
116
+ };
117
+ } catch (error) {
118
+ return {
119
+ id: req.id,
120
+ status: "error",
121
+ stdout: output.stdout,
122
+ stderr: output.stderr,
123
+ error: errorSummary(error),
124
+ };
125
+ } finally {
126
+ currentOutput = null;
127
+ }
128
+ }
129
+
130
+ async function inspectValue(req) {
131
+ const expression = req.expression || "";
132
+ const what = req.what || "summary";
133
+ const maxBytes = Number(req.maxBytes || 8192);
134
+ try {
135
+ const value = await vm.runInContext(expression, context, { filename: "<pibo-runtime>", timeout: 15000 });
136
+ const result = { id: req.id, status: "ok" };
137
+ if (what === "summary" || what === "all") result.summary = summarize(value, maxBytes);
138
+ if (what === "signature" || what === "all") result.signature = typeof value === "function" ? bounded(value.toString().split("{")[0].trim(), maxBytes) : "<signature unavailable>";
139
+ if (what === "members" || what === "all") {
140
+ const members = new Set();
141
+ for (const key of Reflect.ownKeys(Object(value))) members.add(String(key));
142
+ const proto = value == null ? undefined : Object.getPrototypeOf(value);
143
+ if (proto) for (const key of Reflect.ownKeys(proto)) members.add(String(key));
144
+ result.members = [...members].slice(0, 200);
145
+ }
146
+ if (what === "source" || what === "all") result.source = typeof value === "function" ? bounded(value.toString(), maxBytes) : "<source unavailable>";
147
+ if (what === "doc" || what === "all") result.doc = "";
148
+ return result;
149
+ } catch (error) {
150
+ return { id: req.id, status: "error", error: errorSummary(error) };
151
+ }
152
+ }
153
+
154
+ function listVars(req) {
155
+ const includePrivate = Boolean(req.includePrivate);
156
+ const maxItems = Number(req.maxItems || 100);
157
+ const maxBytes = Number(req.maxBytes || 4096);
158
+ const hidden = new Set(["console", "require", "process", "Buffer", "URL", "URLSearchParams", "TextEncoder", "TextDecoder", "global", "globalThis"]);
159
+ const variables = [];
160
+ for (const name of Object.keys(context).sort()) {
161
+ if (hidden.has(name)) continue;
162
+ if (!includePrivate && name.startsWith("_")) continue;
163
+ variables.push({ name, summary: summarize(context[name], maxBytes) });
164
+ if (variables.length >= maxItems) break;
165
+ }
166
+ return { id: req.id, status: "ok", variables, truncated: variables.length >= maxItems };
167
+ }
168
+
169
+ function writeResponse(resp) {
170
+ process.stdout.write(JSON.stringify(resp) + "\n");
171
+ }
172
+
173
+ async function handle(req) {
174
+ if (req.type === "exec") return await execute(req);
175
+ if (req.type === "inspect") return await inspectValue(req);
176
+ if (req.type === "vars") return listVars(req);
177
+ if (req.type === "shutdown") return { id: req.id, status: "ok", shutdown: true };
178
+ return { id: req.id, status: "error", error: { name: "RuntimeProtocolError", message: "unknown request type " + req.type } };
179
+ }
180
+
181
+ async function main() {
182
+ writeResponse({ id: "ready", status: "ready" });
183
+ let buffer = "";
184
+ process.stdin.setEncoding("utf8");
185
+ process.stdin.on("data", async (chunk) => {
186
+ buffer += chunk;
187
+ let index;
188
+ while ((index = buffer.indexOf("\n")) >= 0) {
189
+ const line = buffer.slice(0, index);
190
+ buffer = buffer.slice(index + 1);
191
+ if (!line.trim()) continue;
192
+ let req;
193
+ try {
194
+ req = JSON.parse(line);
195
+ const resp = await handle(req);
196
+ writeResponse(resp);
197
+ if (resp.shutdown) process.exit(0);
198
+ } catch (error) {
199
+ writeResponse({ id: req?.id, status: "error", error: errorSummary(error) });
200
+ }
201
+ }
202
+ });
203
+ }
204
+
205
+ main();
206
206
  `;