@geohar/un-bien 0.20.15 → 0.20.17

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.
@@ -8,7 +8,7 @@ import type { AcquiredLock } from "../session/cwd_lock.js";
8
8
  import type { RelayClient } from "../transport/relay_client.js";
9
9
  import type { PlainPeerChannel } from "../transport/peer_channel.js";
10
10
  import type { ThinkingLevel } from "../protocol/types.js";
11
- /** App↔Pi room meta projected by the ROOT session (see index.ts `_myRoomMeta`). */
11
+ /** App↔Pi room meta projected by the ROOT session (see index.ts `SessionState.myRoomMeta`). */
12
12
  export type RoomMeta = {
13
13
  name: string;
14
14
  cwd: string;
@@ -0,0 +1,20 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ import type { EnvelopeMessage } from "../session/rpc_envelope.js";
3
+ export interface TestScenarioDeps {
4
+ /** Broadcast an envelope to every attached owner (the relay fan-out seam). */
5
+ broadcast: (env: EnvelopeMessage) => void;
6
+ /** Emit on the pi events bus (drives the extension's real bridges). */
7
+ emitBus: (channel: string, data: unknown) => void;
8
+ }
9
+ /** The pi-events-bus emitter — reads the live `_pi` handle at CALL time
10
+ * (accessor, not snapshot: `_pi` is reassigned by session replacement and
11
+ * tests). */
12
+ export declare function makeTestBusEmitter(piAccessor: () => ExtensionAPI | null): (channel: string, data: unknown) => void;
13
+ /** Run one canned UI-test scenario. Returns a short status for the notify. */
14
+ export declare function runTestScenario(deps: TestScenarioDeps, scenario: string): string;
15
+ /**
16
+ * New-protocol inbound: dispatch an envelope-carried pi `RpcCommand` to the SDK
17
+ * and answer with a `{ rpc: response }` envelope to the SENDER. Native to the
18
+ * envelope wire — does NOT use the stock `_routeClientMessageFrom` switch. The
19
+ * SDK primitives (`_wakeAgent`, `_abortCurrentTurn`) are pi, not old protocol.
20
+ */
@@ -0,0 +1,414 @@
1
+ const _TEST_SVG_B64 = Buffer.from('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 60">' +
2
+ '<rect width="120" height="60" rx="8" fill="#4c8bf5"/>' +
3
+ '<text x="60" y="37" font-size="16" fill="white" text-anchor="middle"' +
4
+ ' font-family="sans-serif">un-bien</text></svg>').toString("base64");
5
+ /** The pi-events-bus emitter — reads the live `_pi` handle at CALL time
6
+ * (accessor, not snapshot: `_pi` is reassigned by session replacement and
7
+ * tests). */
8
+ export function makeTestBusEmitter(piAccessor) {
9
+ return (channel, data) => {
10
+ try {
11
+ ;
12
+ piAccessor()?.events?.emit(channel, data);
13
+ }
14
+ catch {
15
+ /* bus absent — best effort */
16
+ }
17
+ };
18
+ }
19
+ /** Run one canned UI-test scenario. Returns a short status for the notify. */
20
+ export function runTestScenario(deps, scenario) {
21
+ const { broadcast, emitBus } = deps;
22
+ const s = (scenario.trim().split(/\s+/)[0] || "help").toLowerCase();
23
+ const id = `test-${Date.now()}`;
24
+ switch (s) {
25
+ case "ask-select":
26
+ broadcast({
27
+ rpc: {
28
+ type: "extension_ui_request",
29
+ id,
30
+ method: "select",
31
+ title: "Pick one (test)",
32
+ options: ["Alpha", "Beta", "Gamma"],
33
+ },
34
+ });
35
+ return "sent ask-select";
36
+ case "ask-confirm":
37
+ broadcast({
38
+ rpc: {
39
+ type: "extension_ui_request",
40
+ id,
41
+ method: "confirm",
42
+ title: "Confirm (test)",
43
+ message: "Proceed with the test action?",
44
+ },
45
+ });
46
+ return "sent ask-confirm";
47
+ case "ask-input":
48
+ broadcast({
49
+ rpc: {
50
+ type: "extension_ui_request",
51
+ id,
52
+ method: "input",
53
+ title: "Input (test)",
54
+ placeholder: "Type something…",
55
+ },
56
+ });
57
+ return "sent ask-input";
58
+ case "ask-editor":
59
+ broadcast({
60
+ rpc: {
61
+ type: "extension_ui_request",
62
+ id,
63
+ method: "editor",
64
+ title: "Editor (test)",
65
+ prefill: "edit me",
66
+ },
67
+ });
68
+ return "sent ask-editor";
69
+ case "ask-notify":
70
+ broadcast({
71
+ rpc: {
72
+ type: "extension_ui_request",
73
+ id,
74
+ method: "notify",
75
+ message: "This is a test notice.",
76
+ notify_type: "info",
77
+ },
78
+ });
79
+ return "sent ask-notify";
80
+ case "ask-rich":
81
+ emitBus("@eko24ive/pi-ask:started", {
82
+ version: 1,
83
+ flowId: `test-flow-${Date.now()}`,
84
+ source: "test",
85
+ title: "Rich ask (test)",
86
+ questions: [
87
+ {
88
+ id: "q1",
89
+ prompt: "Which approach?",
90
+ type: "single",
91
+ options: [
92
+ { value: "a", label: "Approach A", description: "the safe one" },
93
+ { value: "b", label: "Approach B", preview: "preview text here" },
94
+ ],
95
+ },
96
+ {
97
+ id: "q2",
98
+ prompt: "Anything to add?",
99
+ type: "single",
100
+ options: [{ value: "ok", label: "Looks good", freeform: true }],
101
+ },
102
+ ],
103
+ });
104
+ return "emitted pi-ask:started (rich)";
105
+ case "plan":
106
+ emitBus("plan:snapshot", {
107
+ ns: "test",
108
+ seq: 1,
109
+ items: [
110
+ {
111
+ id: "t1",
112
+ kind: "plan",
113
+ title: "Design the thing",
114
+ status: "done",
115
+ deps: [],
116
+ },
117
+ {
118
+ id: "t2",
119
+ kind: "plan",
120
+ title: "Build the thing",
121
+ status: "in_progress",
122
+ deps: ["t1"],
123
+ },
124
+ {
125
+ id: "t3",
126
+ kind: "plan",
127
+ title: "Test the thing",
128
+ status: "pending",
129
+ deps: ["t2"],
130
+ },
131
+ ],
132
+ });
133
+ return "emitted plan:snapshot";
134
+ case "subagents":
135
+ emitBus("subagents:created", {
136
+ id: "sa1",
137
+ type: "explore",
138
+ description: "Explore the codebase",
139
+ });
140
+ emitBus("subagents:started", { id: "sa1" });
141
+ emitBus("subagents:created", {
142
+ id: "sa2",
143
+ type: "plan",
144
+ description: "Draft an implementation plan",
145
+ });
146
+ emitBus("subagents:completed", { id: "sa2" });
147
+ return "emitted subagents lifecycle";
148
+ case "svg": {
149
+ // A TOOL card renders standalone; the app pulls tool-emitted images from
150
+ // INSIDE the tool_execution_end `result` (imagesFromToolResult unwraps
151
+ // `{content:[{type:"image",data,mimeType}]}`) and renders them below the
152
+ // card (WireImageView -> SVGImageView). Deliver the SVG that way.
153
+ const tc = `tc-svg-${Date.now()}`;
154
+ broadcast({ rpc: { type: "turn_start" } });
155
+ broadcast({
156
+ rpc: {
157
+ type: "tool_execution_start",
158
+ toolCallId: tc,
159
+ toolName: "render_svg",
160
+ args: { note: "test svg" },
161
+ },
162
+ });
163
+ broadcast({
164
+ rpc: {
165
+ type: "tool_execution_end",
166
+ toolCallId: tc,
167
+ result: {
168
+ content: [
169
+ { type: "text", text: "rendered a test SVG" },
170
+ {
171
+ type: "image",
172
+ data: _TEST_SVG_B64,
173
+ mimeType: "image/svg+xml",
174
+ },
175
+ ],
176
+ },
177
+ isError: false,
178
+ },
179
+ });
180
+ broadcast({ rpc: { type: "agent_settled" } });
181
+ return "sent svg (envelope tool_execution_end + image)";
182
+ }
183
+ case "tool": {
184
+ const tc = `tc-${Date.now()}`;
185
+ broadcast({ rpc: { type: "turn_start" } });
186
+ broadcast({
187
+ rpc: {
188
+ type: "tool_execution_start",
189
+ toolCallId: tc,
190
+ toolName: "bash",
191
+ args: { command: "echo hello" },
192
+ },
193
+ });
194
+ broadcast({
195
+ rpc: {
196
+ type: "tool_execution_end",
197
+ toolCallId: tc,
198
+ result: "hello\n",
199
+ isError: false,
200
+ },
201
+ });
202
+ broadcast({ rpc: { type: "agent_settled" } });
203
+ return "sent tool pair (envelope)";
204
+ }
205
+ case "diff": {
206
+ // Exercise the rich diff rendering: aux `{hunks}` (input Edit diff) rides
207
+ // ALONGSIDE the raw edit `tool_execution_start`. OUTPUT is classified
208
+ // app-side from the result, so no aux.output rides the end frame.
209
+ const tc = `tc-diff-${Date.now()}`;
210
+ const hunks = [
211
+ {
212
+ lines: [
213
+ { kind: "context", oldLine: 1, newLine: 1, text: "const a = 1;" },
214
+ { kind: "remove", oldLine: 2, text: "const b = 2;" },
215
+ { kind: "add", newLine: 2, text: "const b = 3;" },
216
+ { kind: "context", oldLine: 3, newLine: 3, text: "const c = 4;" },
217
+ ],
218
+ },
219
+ ];
220
+ broadcast({ rpc: { type: "turn_start" } });
221
+ broadcast({
222
+ rpc: {
223
+ type: "tool_execution_start",
224
+ toolCallId: tc,
225
+ toolName: "edit",
226
+ args: {
227
+ path: "demo.ts",
228
+ old_string: "const b = 2;",
229
+ new_string: "const b = 3;",
230
+ },
231
+ },
232
+ aux: { hunks },
233
+ });
234
+ broadcast({
235
+ rpc: {
236
+ type: "tool_execution_end",
237
+ toolCallId: tc,
238
+ result: "edited demo.ts",
239
+ isError: false,
240
+ },
241
+ });
242
+ broadcast({ rpc: { type: "agent_settled" } });
243
+ return "sent diff (edit + aux hunks — shows the Diff⇄Content toggle)";
244
+ }
245
+ case "code-shell": {
246
+ // bash-family result → the app classifies it into a `code` block (lang
247
+ // shell), syntax-highlighted. OUTPUT is app-side now — no aux stamped.
248
+ const tc = `tc-sh-${Date.now()}`;
249
+ broadcast({ rpc: { type: "turn_start" } });
250
+ broadcast({
251
+ rpc: {
252
+ type: "tool_execution_start",
253
+ toolCallId: tc,
254
+ toolName: "bash",
255
+ args: { command: "ls -la" },
256
+ },
257
+ });
258
+ broadcast({
259
+ rpc: {
260
+ type: "tool_execution_end",
261
+ toolCallId: tc,
262
+ result: "total 24\ndrwxr-xr-x 5 geo staff 160 Aug 29 10:00 .\n-rw-r--r-- 1 geo staff 1024 index.ts\n-rw-r--r-- 1 geo staff 512 README.md",
263
+ isError: false,
264
+ },
265
+ });
266
+ broadcast({ rpc: { type: "agent_settled" } });
267
+ return "sent code-shell (bash output → code block, lang shell)";
268
+ }
269
+ case "code-file": {
270
+ // read-family with a *.swift path → `code` block, lang inferred from the
271
+ // extension (swift) and highlighted.
272
+ const tc = `tc-rd-${Date.now()}`;
273
+ broadcast({ rpc: { type: "turn_start" } });
274
+ broadcast({
275
+ rpc: {
276
+ type: "tool_execution_start",
277
+ toolCallId: tc,
278
+ toolName: "read",
279
+ args: { path: "/src/Greeter.swift" },
280
+ },
281
+ });
282
+ broadcast({
283
+ rpc: {
284
+ type: "tool_execution_end",
285
+ toolCallId: tc,
286
+ result: 'struct Greeter {\n let name: String\n func greet() -> String {\n return "Hello, \\(name)!"\n }\n}',
287
+ isError: false,
288
+ },
289
+ });
290
+ broadcast({ rpc: { type: "agent_settled" } });
291
+ return "sent code-file (read .swift → highlighted code block)";
292
+ }
293
+ case "diff-output": {
294
+ // A tool whose RESULT already embeds a unified diff → the app parses it
295
+ // into a `diff` block (re-reading persisted text; replay-safe).
296
+ const tc = `tc-do-${Date.now()}`;
297
+ broadcast({ rpc: { type: "turn_start" } });
298
+ broadcast({
299
+ rpc: {
300
+ type: "tool_execution_start",
301
+ toolCallId: tc,
302
+ toolName: "bash",
303
+ args: { command: "git diff" },
304
+ },
305
+ });
306
+ broadcast({
307
+ rpc: {
308
+ type: "tool_execution_end",
309
+ toolCallId: tc,
310
+ result: 'diff --git a/app.ts b/app.ts\n--- a/app.ts\n+++ b/app.ts\n@@ -1,3 +1,3 @@\n const port = 3000;\n-const host = "127.0.0.1";\n+const host = "0.0.0.0";\n start(host, port);',
311
+ isError: false,
312
+ },
313
+ });
314
+ broadcast({ rpc: { type: "agent_settled" } });
315
+ return "sent diff-output (result embeds a unified diff → diff block)";
316
+ }
317
+ case "write": {
318
+ // write carries the new file text in args.content; no live diff → the
319
+ // card shows the Content view (new text as a code block, replay-safe).
320
+ const tc = `tc-wr-${Date.now()}`;
321
+ const content = "export function add(a: number, b: number): number {\n return a + b;\n}";
322
+ broadcast({ rpc: { type: "turn_start" } });
323
+ broadcast({
324
+ rpc: {
325
+ type: "tool_execution_start",
326
+ toolCallId: tc,
327
+ toolName: "write",
328
+ args: { path: "/src/math.ts", content },
329
+ },
330
+ });
331
+ broadcast({
332
+ rpc: {
333
+ type: "tool_execution_end",
334
+ toolCallId: tc,
335
+ result: "wrote /src/math.ts",
336
+ isError: false,
337
+ },
338
+ });
339
+ broadcast({ rpc: { type: "agent_settled" } });
340
+ return "sent write (args.content → content-as-code block)";
341
+ }
342
+ case "agent": {
343
+ broadcast({ rpc: { type: "turn_start" } });
344
+ broadcast({
345
+ rpc: {
346
+ type: "message_update",
347
+ assistantMessageEvent: {
348
+ type: "text_delta",
349
+ delta: "This is a ",
350
+ },
351
+ },
352
+ });
353
+ broadcast({
354
+ rpc: {
355
+ type: "message_update",
356
+ assistantMessageEvent: {
357
+ type: "text_delta",
358
+ delta: "test agent message.",
359
+ },
360
+ },
361
+ });
362
+ broadcast({
363
+ rpc: {
364
+ type: "message_end",
365
+ message: {
366
+ role: "assistant",
367
+ content: [{ type: "text", text: "This is a test agent message." }],
368
+ },
369
+ },
370
+ });
371
+ broadcast({ rpc: { type: "agent_settled" } });
372
+ return "sent agent message (envelope)";
373
+ }
374
+ case "error":
375
+ broadcast({
376
+ rpc: {
377
+ type: "message_end",
378
+ message: {
379
+ role: "assistant",
380
+ stopReason: "error",
381
+ errorMessage: "This is a test error.",
382
+ },
383
+ },
384
+ });
385
+ broadcast({ rpc: { type: "agent_settled" } });
386
+ return "sent error (envelope message_end/error)";
387
+ case "all":
388
+ for (const sc of [
389
+ "ask-notify",
390
+ "plan",
391
+ "subagents",
392
+ "svg",
393
+ "tool",
394
+ "diff",
395
+ "code-shell",
396
+ "code-file",
397
+ "diff-output",
398
+ "write",
399
+ "agent",
400
+ "error",
401
+ ])
402
+ runTestScenario(deps, sc);
403
+ return "sent all (ask-notify, plan, subagents, svg, tool, diff, code-shell, code-file, diff-output, write, agent, error)";
404
+ default:
405
+ return "usage: /unbien test <ask-select|ask-confirm|ask-input|ask-editor|ask-notify|ask-rich|plan|subagents|svg|tool|diff|code-shell|code-file|diff-output|write|agent|error|all>";
406
+ }
407
+ }
408
+ /**
409
+ * New-protocol inbound: dispatch an envelope-carried pi `RpcCommand` to the SDK
410
+ * and answer with a `{ rpc: response }` envelope to the SENDER. Native to the
411
+ * envelope wire — does NOT use the stock `_routeClientMessageFrom` switch. The
412
+ * SDK primitives (`_wakeAgent`, `_abortCurrentTurn`) are pi, not old protocol.
413
+ */
414
+ //# sourceMappingURL=test_scenarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_scenarios.js","sourceRoot":"","sources":["../../src/commands/test_scenarios.ts"],"names":[],"mappings":"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"}