@pasko70/pibo 1.9.13 → 1.10.1

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 (163) 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-profiles.js +2 -2
  8. package/dist/apps/chat/agent-store.js +263 -250
  9. package/dist/apps/chat/chat-request-normalizers.js +17 -0
  10. package/dist/apps/chat/data/chat-data-mappers.js +2 -0
  11. package/dist/apps/chat/data/project-service.js +168 -168
  12. package/dist/apps/chat/data/read-state-service.js +18 -18
  13. package/dist/apps/chat/data/session-query-service.js +25 -25
  14. package/dist/apps/chat/data/timeline-query-service.js +19 -19
  15. package/dist/apps/chat/loop-api.js +181 -0
  16. package/dist/apps/chat/static-assets.js +854 -854
  17. package/dist/apps/chat/web-app.js +36 -16
  18. package/dist/apps/chat/workflow-manual-trigger-runtime.js +149 -46
  19. package/dist/apps/chat/workflow-persistence.js +255 -255
  20. package/dist/apps/chat-ui/assets/{dist-BZ2eTC4f.js → dist-3Sts0Afa.js} +1 -1
  21. package/dist/apps/chat-ui/assets/{dist-BHa-kcGl.js → dist-4NlLjLs7.js} +1 -1
  22. package/dist/apps/chat-ui/assets/{dist-yCYNNb5d.js → dist-BA6mhAec.js} +1 -1
  23. package/dist/apps/chat-ui/assets/{dist-D811wJeV.js → dist-BPl-fzRB.js} +1 -1
  24. package/dist/apps/chat-ui/assets/{dist-Dq4GxJi3.js → dist-BPnn9e2B.js} +1 -1
  25. package/dist/apps/chat-ui/assets/{dist-CzE6k3F3.js → dist-BpfBSMzK.js} +1 -1
  26. package/dist/apps/chat-ui/assets/{dist-CnVsqwSG.js → dist-Cvx5M97R.js} +1 -1
  27. package/dist/apps/chat-ui/assets/{dist-WyXdYl-w.js → dist-DnXWNQRm.js} +1 -1
  28. package/dist/apps/chat-ui/assets/{dist-BNMu92bb.js → dist-hU-2oAb6.js} +1 -1
  29. package/dist/apps/chat-ui/assets/{dist-BCB6zezO.js → dist-r31x5Fcc.js} +1 -1
  30. package/dist/apps/chat-ui/assets/{dist-HqTN67dc.js → dist-uF6UXzI7.js} +1 -1
  31. package/dist/apps/chat-ui/assets/index-CaTGYBOS.js +173 -0
  32. package/dist/apps/chat-ui/assets/{index-C0x9nEcf.css → index-al8DeEjA.css} +1 -1
  33. package/dist/apps/chat-ui/index.html +18 -18
  34. package/dist/apps/chat-ui/manifest.webmanifest +25 -25
  35. package/dist/apps/chat-ui/sw.js +47 -47
  36. package/dist/apps/chat-vscode-web/assets/index-CK4SMZuu.js +41 -0
  37. package/dist/apps/chat-vscode-web/index.html +13 -13
  38. package/dist/apps/cli-ui/cliSessionsCommand.js +23 -23
  39. package/dist/apps/context-files-ui/index.html +11 -11
  40. package/dist/cli-session/localSessionSource.js +34 -12
  41. package/dist/cli.js +61 -44
  42. package/dist/compute/cli.js +54 -54
  43. package/dist/compute/resource-health.js +35 -2
  44. package/dist/core/events.js +6 -1
  45. package/dist/core/routed-session.js +97 -5
  46. package/dist/core/runtime.js +6 -1
  47. package/dist/core/session-router.js +27 -8
  48. package/dist/cron/cli.js +15 -15
  49. package/dist/cron/store.js +49 -49
  50. package/dist/data/cli.js +23 -23
  51. package/dist/data/event-log.js +23 -23
  52. package/dist/data/ingest-service.js +3 -1
  53. package/dist/data/message-store.js +27 -27
  54. package/dist/data/navigation-store.js +9 -9
  55. package/dist/data/observation-store.js +4 -4
  56. package/dist/data/payload-store.js +17 -17
  57. package/dist/data/schema.js +433 -433
  58. package/dist/data/session-store.js +4 -4
  59. package/dist/data/telemetry-queries.js +54 -54
  60. package/dist/data/telemetry.js +197 -197
  61. package/dist/debug/events.js +12 -12
  62. package/dist/debug/failures.js +6 -6
  63. package/dist/debug/index.js +231 -227
  64. package/dist/debug/messages.js +6 -6
  65. package/dist/debug/pty.js +124 -124
  66. package/dist/debug/session.js +29 -29
  67. package/dist/debug/tools.js +5 -5
  68. package/dist/debug/trace.js +42 -7
  69. package/dist/debug/web-snapshot-browser-scripts.js +294 -294
  70. package/dist/debug/web-streaming-browser-library.js +925 -925
  71. package/dist/debug/web-streaming-browser-scripts.js +232 -232
  72. package/dist/debug/web-streaming-provider-telemetry.js +4 -4
  73. package/dist/debug/web.js +93 -93
  74. package/dist/gateway/cli.js +19 -19
  75. package/dist/gateway/server.js +4 -2
  76. package/dist/gateway/web.js +2 -2
  77. package/dist/index.js +1 -0
  78. package/dist/loops/accounting.js +19 -0
  79. package/dist/loops/channel.js +8 -0
  80. package/dist/loops/cli.js +224 -0
  81. package/dist/loops/plugin.js +16 -0
  82. package/dist/loops/prompts.js +86 -0
  83. package/dist/loops/service.js +446 -0
  84. package/dist/loops/stopping.js +170 -0
  85. package/dist/loops/store.js +642 -0
  86. package/dist/loops/templates.js +232 -0
  87. package/dist/loops/tools.js +184 -0
  88. package/dist/loops/types.js +1 -0
  89. package/dist/mcp/config-command.js +53 -53
  90. package/dist/mcp/index.js +21 -21
  91. package/dist/mcp/registry.js +11 -11
  92. package/dist/pi-packages/cli.js +11 -11
  93. package/dist/plugins/builtin.js +8 -0
  94. package/dist/plugins/context-files-store.js +110 -110
  95. package/dist/plugins/context-files.js +4 -4
  96. package/dist/plugins/registry.js +23 -12
  97. package/dist/ralph/cli.js +18 -18
  98. package/dist/ralph/templates.js +140 -140
  99. package/dist/reliability/store.js +256 -229
  100. package/dist/runs/lifecycle.js +59 -0
  101. package/dist/runs/registry.js +47 -1
  102. package/dist/runs/tools.js +31 -13
  103. package/dist/session-ui/terminalRows.js +66 -2
  104. package/dist/sessions/pibo-data-store.js +16 -16
  105. package/dist/sessions/sqlite-store.js +53 -53
  106. package/dist/setup/cli.js +58 -58
  107. package/dist/shared/trace-async-agent-runs.js +4 -4
  108. package/dist/shared/trace-event-projection.js +59 -19
  109. package/dist/shared/trace-nodes.js +5 -0
  110. package/dist/shared/trace-page-merge.js +15 -0
  111. package/dist/shared/trace-run-notifications.js +3 -1
  112. package/dist/signals/projector.js +6 -2
  113. package/dist/tools/agent-browser-wrapper.js +80 -80
  114. package/dist/tools/browser-pool.js +50 -0
  115. package/dist/tools/browser-use-cdp.js +12 -12
  116. package/dist/tools/browser-use-leases.js +12 -8
  117. package/dist/tools/browser-use-wrapper.js +762 -762
  118. package/dist/tools/guides.js +596 -538
  119. package/dist/tools/index.js +123 -99
  120. package/dist/tools/registry.js +21 -3
  121. package/dist/tools/runtime/node-worker-source.js +205 -205
  122. package/dist/tools/runtime/python-worker-source.js +177 -177
  123. package/dist/vscode/cli.js +9 -9
  124. package/dist/web-annotations/cdp.js +900 -900
  125. package/dist/web-annotations/store.js +96 -96
  126. package/docs/README.md +23 -23
  127. package/docs/ops/install-developer-host.md +112 -112
  128. package/docs/ops/install-user-host.md +96 -96
  129. package/docs/ops/upgrade-user-to-developer-host.md +69 -69
  130. package/docs/ops/vscode-extension-release.md +160 -160
  131. package/package.json +99 -95
  132. package/skills/builtin/graphify/SKILL.md +52 -52
  133. package/skills/builtin/loop/SKILL.md +78 -0
  134. package/skills/builtin/pi-agent-harness/SKILL.md +319 -319
  135. package/skills/builtin/pi-agent-harness/agents/openai.yaml +4 -4
  136. package/skills/builtin/pibo-docker-system/SKILL.md +170 -170
  137. package/skills/builtin/pibo-spec-writing/SKILL.md +330 -330
  138. package/skills/builtin/prd/SKILL.md +143 -143
  139. package/skills/builtin/ralph-loop/SKILL.md +361 -359
  140. package/skills/builtin/ralph-prd-json/SKILL.md +123 -123
  141. package/skills/builtin/skill-creator/LICENSE.txt +201 -201
  142. package/skills/builtin/skill-creator/SKILL.md +513 -513
  143. package/skills/builtin/skill-creator/agents/analyzer.md +274 -274
  144. package/skills/builtin/skill-creator/agents/comparator.md +202 -202
  145. package/skills/builtin/skill-creator/agents/grader.md +223 -223
  146. package/skills/builtin/skill-creator/assets/eval_review.html +146 -146
  147. package/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -471
  148. package/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -1325
  149. package/skills/builtin/skill-creator/references/schemas.md +430 -430
  150. package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -401
  151. package/skills/builtin/skill-creator/scripts/generate_report.py +326 -326
  152. package/skills/builtin/skill-creator/scripts/improve_description.py +247 -247
  153. package/skills/builtin/skill-creator/scripts/package_skill.py +136 -136
  154. package/skills/builtin/skill-creator/scripts/quick_validate.py +102 -102
  155. package/skills/builtin/skill-creator/scripts/run_eval.py +310 -310
  156. package/skills/builtin/skill-creator/scripts/run_loop.py +328 -328
  157. package/skills/builtin/skill-creator/scripts/utils.py +47 -47
  158. package/skills/builtin/web-annotations/SKILL.md +93 -93
  159. package/src/mcp/LICENSE.mcp-cli +21 -21
  160. package/dist/apps/chat-ui/assets/index-DwHJfmiF.js +0 -173
  161. package/dist/apps/chat-vscode-web/assets/index-BAMxIaI_.js +0 -41
  162. package/dist/apps/vscode-artifacts/latest.vsix +0 -0
  163. package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.9.13.vsix +0 -0
@@ -1,178 +1,178 @@
1
- export const PYTHON_RUNTIME_WORKER_SOURCE = String.raw `
2
- import contextlib
3
- import inspect
4
- import io
5
- import json
6
- import signal
7
- import sys
8
- import traceback
9
-
10
- user_globals = {"__name__": "__pibo_runtime__"}
11
-
12
-
13
- def bounded(value, max_bytes=8192):
14
- text = str(value)
15
- encoded = text.encode("utf-8", "replace")
16
- if len(encoded) <= max_bytes:
17
- return text
18
- return encoded[:max_bytes].decode("utf-8", "replace") + "\n...<truncated>"
19
-
20
-
21
- def safe_repr(value, max_bytes=4096):
22
- try:
23
- return bounded(repr(value), max_bytes)
24
- except Exception as exc:
25
- return f"<repr failed: {type(exc).__name__}: {exc}>"
26
-
27
-
28
- def summarize(value, max_bytes=4096):
29
- result = {"type": type(value).__name__, "repr": safe_repr(value, max_bytes)}
30
- try:
31
- if hasattr(value, "shape"):
32
- shape = getattr(value, "shape")
33
- try:
34
- result["shape"] = list(shape)
35
- except Exception:
36
- pass
37
- if hasattr(value, "columns"):
38
- try:
39
- result["columns"] = [str(c) for c in list(getattr(value, "columns"))[:50]]
40
- except Exception:
41
- pass
42
- if isinstance(value, dict):
43
- result["length"] = len(value)
44
- result["keys"] = [safe_repr(k, 128) for k in list(value.keys())[:50]]
45
- elif isinstance(value, (list, tuple, set, frozenset, str, bytes, bytearray)):
46
- result["length"] = len(value)
47
- if hasattr(value, "head"):
48
- try:
49
- result["preview"] = bounded(value.head().to_string(), max_bytes)
50
- except Exception:
51
- pass
52
- except Exception:
53
- pass
54
- return result
55
-
56
-
57
- def error_summary(exc):
58
- tb = traceback.format_exc()
59
- line = None
60
- try:
61
- extracted = traceback.extract_tb(exc.__traceback__)
62
- runtime_frames = [frame for frame in extracted if frame.filename == "<pibo-runtime>"]
63
- if runtime_frames:
64
- line = runtime_frames[-1].lineno
65
- except Exception:
66
- pass
67
- out = {"name": type(exc).__name__, "message": str(exc), "traceback": tb}
68
- if line is not None:
69
- out["line"] = line
70
- return out
71
-
72
-
73
- def execute(req):
74
- mode = req.get("mode") or "exec"
75
- code = req.get("code") or ""
76
- if mode == "auto":
77
- mode = "exec"
78
- stdout = io.StringIO()
79
- stderr = io.StringIO()
80
- try:
81
- with contextlib.redirect_stdout(stdout), contextlib.redirect_stderr(stderr):
82
- if mode == "eval":
83
- value = eval(compile(code, "<pibo-runtime>", "eval"), user_globals, user_globals)
84
- else:
85
- exec(compile(code, "<pibo-runtime>", "exec"), user_globals, user_globals)
86
- value = None
87
- return {
88
- "id": req.get("id"),
89
- "status": "ok",
90
- "stdout": stdout.getvalue(),
91
- "stderr": stderr.getvalue(),
92
- "result": summarize(value) if value is not None else None,
93
- }
94
- except KeyboardInterrupt as exc:
95
- return {"id": req.get("id"), "status": "interrupted", "stdout": stdout.getvalue(), "stderr": stderr.getvalue(), "error": error_summary(exc)}
96
- except Exception as exc:
97
- return {"id": req.get("id"), "status": "error", "stdout": stdout.getvalue(), "stderr": stderr.getvalue(), "error": error_summary(exc)}
98
-
99
-
100
- def inspect_value(req):
101
- expression = req.get("expression") or ""
102
- what = req.get("what") or "summary"
103
- max_bytes = int(req.get("maxBytes") or 8192)
104
- try:
105
- value = eval(compile(expression, "<pibo-runtime>", "eval"), user_globals, user_globals)
106
- result = {"id": req.get("id"), "status": "ok"}
107
- if what in ("summary", "all"):
108
- result["summary"] = summarize(value, max_bytes)
109
- if what in ("signature", "all"):
110
- try:
111
- result["signature"] = bounded(str(inspect.signature(value)), max_bytes)
112
- except Exception as exc:
113
- result["signature"] = f"<signature unavailable: {type(exc).__name__}: {exc}>"
114
- if what in ("members", "all"):
115
- try:
116
- result["members"] = [name for name, _ in inspect.getmembers(value)[:200]]
117
- except Exception:
118
- result["members"] = dir(value)[:200]
119
- if what in ("source", "all"):
120
- try:
121
- result["source"] = bounded(inspect.getsource(value), max_bytes)
122
- except Exception as exc:
123
- result["source"] = f"<source unavailable: {type(exc).__name__}: {exc}>"
124
- if what in ("doc", "all"):
125
- result["doc"] = bounded(inspect.getdoc(value) or "", max_bytes)
126
- return result
127
- except Exception as exc:
128
- return {"id": req.get("id"), "status": "error", "error": error_summary(exc)}
129
-
130
-
131
- def list_vars(req):
132
- include_private = bool(req.get("includePrivate"))
133
- max_items = int(req.get("maxItems") or 100)
134
- max_bytes = int(req.get("maxBytes") or 4096)
135
- variables = []
136
- for name, value in sorted(user_globals.items()):
137
- if name == "__builtins__":
138
- continue
139
- if not include_private and name.startswith("_"):
140
- continue
141
- if inspect.ismodule(value):
142
- continue
143
- variables.append({"name": name, "summary": summarize(value, max_bytes)})
144
- if len(variables) >= max_items:
145
- break
146
- return {"id": req.get("id"), "status": "ok", "variables": variables, "truncated": len(variables) >= max_items}
147
-
148
-
149
- def write_response(resp):
150
- sys.stdout.write(json.dumps(resp, ensure_ascii=False) + "\n")
151
- sys.stdout.flush()
152
-
153
-
154
- def main():
155
- write_response({"id": "ready", "status": "ready"})
156
- for line in sys.stdin:
157
- try:
158
- req = json.loads(line)
159
- typ = req.get("type")
160
- if typ == "exec":
161
- resp = execute(req)
162
- elif typ == "inspect":
163
- resp = inspect_value(req)
164
- elif typ == "vars":
165
- resp = list_vars(req)
166
- elif typ == "shutdown":
167
- write_response({"id": req.get("id"), "status": "ok"})
168
- return
169
- else:
170
- resp = {"id": req.get("id"), "status": "error", "error": {"name": "RuntimeProtocolError", "message": f"unknown request type {typ}"}}
171
- except Exception as exc:
172
- resp = {"id": None, "status": "error", "error": error_summary(exc)}
173
- write_response(resp)
174
-
175
-
176
- if __name__ == "__main__":
177
- main()
1
+ export const PYTHON_RUNTIME_WORKER_SOURCE = String.raw `
2
+ import contextlib
3
+ import inspect
4
+ import io
5
+ import json
6
+ import signal
7
+ import sys
8
+ import traceback
9
+
10
+ user_globals = {"__name__": "__pibo_runtime__"}
11
+
12
+
13
+ def bounded(value, max_bytes=8192):
14
+ text = str(value)
15
+ encoded = text.encode("utf-8", "replace")
16
+ if len(encoded) <= max_bytes:
17
+ return text
18
+ return encoded[:max_bytes].decode("utf-8", "replace") + "\n...<truncated>"
19
+
20
+
21
+ def safe_repr(value, max_bytes=4096):
22
+ try:
23
+ return bounded(repr(value), max_bytes)
24
+ except Exception as exc:
25
+ return f"<repr failed: {type(exc).__name__}: {exc}>"
26
+
27
+
28
+ def summarize(value, max_bytes=4096):
29
+ result = {"type": type(value).__name__, "repr": safe_repr(value, max_bytes)}
30
+ try:
31
+ if hasattr(value, "shape"):
32
+ shape = getattr(value, "shape")
33
+ try:
34
+ result["shape"] = list(shape)
35
+ except Exception:
36
+ pass
37
+ if hasattr(value, "columns"):
38
+ try:
39
+ result["columns"] = [str(c) for c in list(getattr(value, "columns"))[:50]]
40
+ except Exception:
41
+ pass
42
+ if isinstance(value, dict):
43
+ result["length"] = len(value)
44
+ result["keys"] = [safe_repr(k, 128) for k in list(value.keys())[:50]]
45
+ elif isinstance(value, (list, tuple, set, frozenset, str, bytes, bytearray)):
46
+ result["length"] = len(value)
47
+ if hasattr(value, "head"):
48
+ try:
49
+ result["preview"] = bounded(value.head().to_string(), max_bytes)
50
+ except Exception:
51
+ pass
52
+ except Exception:
53
+ pass
54
+ return result
55
+
56
+
57
+ def error_summary(exc):
58
+ tb = traceback.format_exc()
59
+ line = None
60
+ try:
61
+ extracted = traceback.extract_tb(exc.__traceback__)
62
+ runtime_frames = [frame for frame in extracted if frame.filename == "<pibo-runtime>"]
63
+ if runtime_frames:
64
+ line = runtime_frames[-1].lineno
65
+ except Exception:
66
+ pass
67
+ out = {"name": type(exc).__name__, "message": str(exc), "traceback": tb}
68
+ if line is not None:
69
+ out["line"] = line
70
+ return out
71
+
72
+
73
+ def execute(req):
74
+ mode = req.get("mode") or "exec"
75
+ code = req.get("code") or ""
76
+ if mode == "auto":
77
+ mode = "exec"
78
+ stdout = io.StringIO()
79
+ stderr = io.StringIO()
80
+ try:
81
+ with contextlib.redirect_stdout(stdout), contextlib.redirect_stderr(stderr):
82
+ if mode == "eval":
83
+ value = eval(compile(code, "<pibo-runtime>", "eval"), user_globals, user_globals)
84
+ else:
85
+ exec(compile(code, "<pibo-runtime>", "exec"), user_globals, user_globals)
86
+ value = None
87
+ return {
88
+ "id": req.get("id"),
89
+ "status": "ok",
90
+ "stdout": stdout.getvalue(),
91
+ "stderr": stderr.getvalue(),
92
+ "result": summarize(value) if value is not None else None,
93
+ }
94
+ except KeyboardInterrupt as exc:
95
+ return {"id": req.get("id"), "status": "interrupted", "stdout": stdout.getvalue(), "stderr": stderr.getvalue(), "error": error_summary(exc)}
96
+ except Exception as exc:
97
+ return {"id": req.get("id"), "status": "error", "stdout": stdout.getvalue(), "stderr": stderr.getvalue(), "error": error_summary(exc)}
98
+
99
+
100
+ def inspect_value(req):
101
+ expression = req.get("expression") or ""
102
+ what = req.get("what") or "summary"
103
+ max_bytes = int(req.get("maxBytes") or 8192)
104
+ try:
105
+ value = eval(compile(expression, "<pibo-runtime>", "eval"), user_globals, user_globals)
106
+ result = {"id": req.get("id"), "status": "ok"}
107
+ if what in ("summary", "all"):
108
+ result["summary"] = summarize(value, max_bytes)
109
+ if what in ("signature", "all"):
110
+ try:
111
+ result["signature"] = bounded(str(inspect.signature(value)), max_bytes)
112
+ except Exception as exc:
113
+ result["signature"] = f"<signature unavailable: {type(exc).__name__}: {exc}>"
114
+ if what in ("members", "all"):
115
+ try:
116
+ result["members"] = [name for name, _ in inspect.getmembers(value)[:200]]
117
+ except Exception:
118
+ result["members"] = dir(value)[:200]
119
+ if what in ("source", "all"):
120
+ try:
121
+ result["source"] = bounded(inspect.getsource(value), max_bytes)
122
+ except Exception as exc:
123
+ result["source"] = f"<source unavailable: {type(exc).__name__}: {exc}>"
124
+ if what in ("doc", "all"):
125
+ result["doc"] = bounded(inspect.getdoc(value) or "", max_bytes)
126
+ return result
127
+ except Exception as exc:
128
+ return {"id": req.get("id"), "status": "error", "error": error_summary(exc)}
129
+
130
+
131
+ def list_vars(req):
132
+ include_private = bool(req.get("includePrivate"))
133
+ max_items = int(req.get("maxItems") or 100)
134
+ max_bytes = int(req.get("maxBytes") or 4096)
135
+ variables = []
136
+ for name, value in sorted(user_globals.items()):
137
+ if name == "__builtins__":
138
+ continue
139
+ if not include_private and name.startswith("_"):
140
+ continue
141
+ if inspect.ismodule(value):
142
+ continue
143
+ variables.append({"name": name, "summary": summarize(value, max_bytes)})
144
+ if len(variables) >= max_items:
145
+ break
146
+ return {"id": req.get("id"), "status": "ok", "variables": variables, "truncated": len(variables) >= max_items}
147
+
148
+
149
+ def write_response(resp):
150
+ sys.stdout.write(json.dumps(resp, ensure_ascii=False) + "\n")
151
+ sys.stdout.flush()
152
+
153
+
154
+ def main():
155
+ write_response({"id": "ready", "status": "ready"})
156
+ for line in sys.stdin:
157
+ try:
158
+ req = json.loads(line)
159
+ typ = req.get("type")
160
+ if typ == "exec":
161
+ resp = execute(req)
162
+ elif typ == "inspect":
163
+ resp = inspect_value(req)
164
+ elif typ == "vars":
165
+ resp = list_vars(req)
166
+ elif typ == "shutdown":
167
+ write_response({"id": req.get("id"), "status": "ok"})
168
+ return
169
+ else:
170
+ resp = {"id": req.get("id"), "status": "error", "error": {"name": "RuntimeProtocolError", "message": f"unknown request type {typ}"}}
171
+ except Exception as exc:
172
+ resp = {"id": None, "status": "error", "error": error_summary(exc)}
173
+ write_response(resp)
174
+
175
+
176
+ if __name__ == "__main__":
177
+ main()
178
178
  `;
@@ -11,15 +11,15 @@ import { runInstall } from "./install.js";
11
11
  import { runStatus, formatStatusText } from "./status.js";
12
12
  import { runUninstall } from "./uninstall.js";
13
13
  function printDiscovery() {
14
- console.log(`pibo vscode
15
-
16
- Manage the Pibo VS Code extension.
17
-
18
- Commands:
19
- install Download and install the latest Pibo VS Code extension
20
- uninstall Remove the installed Pibo VS Code extension
21
- status Show whether the extension is installed
22
-
14
+ console.log(`pibo vscode
15
+
16
+ Manage the Pibo VS Code extension.
17
+
18
+ Commands:
19
+ install Download and install the latest Pibo VS Code extension
20
+ uninstall Remove the installed Pibo VS Code extension
21
+ status Show whether the extension is installed
22
+
23
23
  Next: pibo vscode install --help`);
24
24
  }
25
25
  export async function runVscodeCli(argv = process.argv) {