@moxxy/sdk 0.11.0 → 0.12.0

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 (49) hide show
  1. package/dist/elision-state.d.ts.map +1 -1
  2. package/dist/elision-state.js +6 -0
  3. package/dist/elision-state.js.map +1 -1
  4. package/dist/events.d.ts +33 -1
  5. package/dist/events.d.ts.map +1 -1
  6. package/dist/index.d.ts +7 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/mode-helpers.d.ts +12 -0
  11. package/dist/mode-helpers.d.ts.map +1 -1
  12. package/dist/mode-helpers.js +105 -3
  13. package/dist/mode-helpers.js.map +1 -1
  14. package/dist/mode.d.ts +9 -0
  15. package/dist/mode.d.ts.map +1 -1
  16. package/dist/mode.js.map +1 -1
  17. package/dist/plugin.d.ts +10 -1
  18. package/dist/plugin.d.ts.map +1 -1
  19. package/dist/provider-login-bridge.d.ts +53 -0
  20. package/dist/provider-login-bridge.d.ts.map +1 -0
  21. package/dist/provider-login-bridge.js +95 -0
  22. package/dist/provider-login-bridge.js.map +1 -0
  23. package/dist/provider.d.ts +53 -0
  24. package/dist/provider.d.ts.map +1 -1
  25. package/dist/subagent.d.ts +6 -0
  26. package/dist/subagent.d.ts.map +1 -1
  27. package/dist/surface.d.ts +159 -0
  28. package/dist/surface.d.ts.map +1 -0
  29. package/dist/surface.js +27 -0
  30. package/dist/surface.js.map +1 -0
  31. package/dist/tool-display.d.ts +73 -0
  32. package/dist/tool-display.d.ts.map +1 -0
  33. package/dist/tool-display.js +66 -0
  34. package/dist/tool-display.js.map +1 -0
  35. package/package.json +5 -1
  36. package/src/elision-state.ts +5 -0
  37. package/src/events.ts +36 -0
  38. package/src/index.ts +41 -0
  39. package/src/loop-helpers.test.ts +40 -0
  40. package/src/mode-helpers.ts +114 -3
  41. package/src/mode.ts +7 -0
  42. package/src/plugin.ts +10 -1
  43. package/src/provider-login-bridge.test.ts +78 -0
  44. package/src/provider-login-bridge.ts +105 -0
  45. package/src/provider.ts +45 -2
  46. package/src/subagent.ts +6 -0
  47. package/src/surface.ts +173 -0
  48. package/src/tool-display.test.ts +71 -0
  49. package/src/tool-display.ts +118 -0
package/dist/plugin.d.ts CHANGED
@@ -9,13 +9,14 @@ import type { LifecycleHooks } from './hooks.js';
9
9
  import type { ModeDef } from './mode.js';
10
10
  import type { ProviderDef } from './provider.js';
11
11
  import type { MoxxyRequirement } from './requirements.js';
12
+ import type { SurfaceDef } from './surface.js';
12
13
  import type { ToolDef } from './tool.js';
13
14
  import type { TranscriberDef } from './transcriber.js';
14
15
  import type { SynthesizerDef } from './synthesizer.js';
15
16
  import type { ViewRendererDef } from './view-renderer.js';
16
17
  import type { TunnelProviderDef } from './tunnel.js';
17
18
  import type { WorkflowExecutorDef } from './workflow.js';
18
- export type PluginKind = 'tools' | 'provider' | 'mode' | 'compactor' | 'cache-strategy' | 'view-renderer' | 'tunnel-provider' | 'mcp' | 'cli' | 'channel' | 'hooks' | 'agent' | 'command' | 'transcriber' | 'synthesizer' | 'embedder' | 'isolator' | 'workflow-executor';
19
+ export type PluginKind = 'tools' | 'provider' | 'mode' | 'compactor' | 'cache-strategy' | 'view-renderer' | 'tunnel-provider' | 'mcp' | 'cli' | 'channel' | 'surface' | 'hooks' | 'agent' | 'command' | 'transcriber' | 'synthesizer' | 'embedder' | 'isolator' | 'workflow-executor';
19
20
  export interface PluginSpec {
20
21
  readonly name: string;
21
22
  readonly version?: string;
@@ -42,6 +43,14 @@ export interface PluginSpec {
42
43
  */
43
44
  readonly tunnelProviders?: ReadonlyArray<TunnelProviderDef>;
44
45
  readonly channels?: ReadonlyArray<ChannelDef>;
46
+ /**
47
+ * Interactive surfaces contributed by the plugin — long-lived panes a human
48
+ * and the agent drive together (an embedded terminal, an in-window browser).
49
+ * Registered into the session's `SurfaceRegistry`; the runner exposes them to
50
+ * thin clients over the `surface.*` protocol family. The plugin's own tools
51
+ * reach the same underlying resource through module state. See {@link SurfaceDef}.
52
+ */
53
+ readonly surfaces?: ReadonlyArray<SurfaceDef>;
45
54
  /**
46
55
  * Speech-to-text backends contributed by the plugin. Selected by name via
47
56
  * `session.transcribers.setActive(name)`; channels with audio input use
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Cross-process bridge for relaying a provider login's interactive prompts —
3
+ * the out-of-band token / authorization-code paste that `claude-code` needs —
4
+ * from a spawned `moxxy login --stdin-prompts` subprocess to a GUI host that
5
+ * has no TTY (the desktop app).
6
+ *
7
+ * The subprocess emits each `ctx.prompt(question)` call as a NUL-bracketed
8
+ * JSON marker on stdout. NUL never appears in normal terminal output, so the
9
+ * host can scan the byte stream for these markers, render the prompt, and
10
+ * write the user's answer back as one stdin line. Loopback flows that never
11
+ * call `ctx.prompt` (e.g. openai-codex, which captures the code via a local
12
+ * callback server) emit no markers — the host just streams their output and
13
+ * waits for the process to exit.
14
+ *
15
+ * Living here (not in the CLI or the desktop contract) keeps the one wire
16
+ * format in a package both the CLI producer and the desktop consumer already
17
+ * depend on, so the two ends can never drift.
18
+ */
19
+ export interface LoginPromptRequest {
20
+ /** The question to show the user, verbatim from `ctx.prompt`. */
21
+ readonly question: string;
22
+ /** True for secrets — the host should mask the input field. */
23
+ readonly mask: boolean;
24
+ }
25
+ /** One decoded item from a login subprocess's stdout stream. */
26
+ export type LoginStreamItem = {
27
+ readonly type: 'output';
28
+ readonly text: string;
29
+ } | {
30
+ readonly type: 'prompt';
31
+ readonly prompt: LoginPromptRequest;
32
+ };
33
+ /**
34
+ * Serialize a prompt request as a NUL-bracketed marker for stdout. The
35
+ * leading NUL also delimits it from any partial preceding `ctx.write` output
36
+ * the host scanner has buffered.
37
+ */
38
+ export declare function encodeLoginPrompt(req: LoginPromptRequest): string;
39
+ /**
40
+ * Try to parse a single inter-NUL segment as a prompt marker. Returns null
41
+ * when it isn't one, so the host can pass the segment through as output.
42
+ */
43
+ export declare function decodeLoginPrompt(segment: string): LoginPromptRequest | null;
44
+ /**
45
+ * Streaming scanner for a login subprocess's stdout. Feed it chunks; it
46
+ * returns the ordered output / prompt items decoded so far, holding back any
47
+ * incomplete trailing marker (an opening NUL with no closing NUL yet) until
48
+ * the rest of it arrives in a later chunk.
49
+ */
50
+ export declare function createLoginStreamScanner(): {
51
+ push(chunk: string): ReadonlyArray<LoginStreamItem>;
52
+ };
53
+ //# sourceMappingURL=provider-login-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-login-bridge.d.ts","sourceRoot":"","sources":["../src/provider-login-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAErE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAEjE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAS5E;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;CACrD,CAmCA"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Cross-process bridge for relaying a provider login's interactive prompts —
3
+ * the out-of-band token / authorization-code paste that `claude-code` needs —
4
+ * from a spawned `moxxy login --stdin-prompts` subprocess to a GUI host that
5
+ * has no TTY (the desktop app).
6
+ *
7
+ * The subprocess emits each `ctx.prompt(question)` call as a NUL-bracketed
8
+ * JSON marker on stdout. NUL never appears in normal terminal output, so the
9
+ * host can scan the byte stream for these markers, render the prompt, and
10
+ * write the user's answer back as one stdin line. Loopback flows that never
11
+ * call `ctx.prompt` (e.g. openai-codex, which captures the code via a local
12
+ * callback server) emit no markers — the host just streams their output and
13
+ * waits for the process to exit.
14
+ *
15
+ * Living here (not in the CLI or the desktop contract) keeps the one wire
16
+ * format in a package both the CLI producer and the desktop consumer already
17
+ * depend on, so the two ends can never drift.
18
+ */
19
+ /** The byte that brackets a prompt marker. Absent from normal CLI output. */
20
+ const NUL = '\u0000';
21
+ /** Tag distinguishing a login-prompt marker from any other NUL-bracketed run. */
22
+ const PROMPT_TAG = 'moxxy.login.prompt';
23
+ /**
24
+ * Serialize a prompt request as a NUL-bracketed marker for stdout. The
25
+ * leading NUL also delimits it from any partial preceding `ctx.write` output
26
+ * the host scanner has buffered.
27
+ */
28
+ export function encodeLoginPrompt(req) {
29
+ return NUL + JSON.stringify({ tag: PROMPT_TAG, question: req.question, mask: req.mask }) + NUL;
30
+ }
31
+ /**
32
+ * Try to parse a single inter-NUL segment as a prompt marker. Returns null
33
+ * when it isn't one, so the host can pass the segment through as output.
34
+ */
35
+ export function decodeLoginPrompt(segment) {
36
+ if (!segment.startsWith('{'))
37
+ return null;
38
+ try {
39
+ const o = JSON.parse(segment);
40
+ if (o.tag !== PROMPT_TAG || typeof o.question !== 'string')
41
+ return null;
42
+ return { question: o.question, mask: o.mask === true };
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ }
48
+ /**
49
+ * Streaming scanner for a login subprocess's stdout. Feed it chunks; it
50
+ * returns the ordered output / prompt items decoded so far, holding back any
51
+ * incomplete trailing marker (an opening NUL with no closing NUL yet) until
52
+ * the rest of it arrives in a later chunk.
53
+ */
54
+ export function createLoginStreamScanner() {
55
+ let buf = '';
56
+ return {
57
+ push(chunk) {
58
+ buf += chunk;
59
+ const out = [];
60
+ // Consume every COMPLETE marker (NUL <json> NUL), emitting the plain
61
+ // text before each as output. Stop at the first NUL with no closing
62
+ // partner — that's a marker still mid-flight, kept for the next chunk.
63
+ for (;;) {
64
+ const open = buf.indexOf(NUL);
65
+ if (open === -1)
66
+ break;
67
+ const close = buf.indexOf(NUL, open + 1);
68
+ if (close === -1)
69
+ break;
70
+ if (open > 0)
71
+ out.push({ type: 'output', text: buf.slice(0, open) });
72
+ const segment = buf.slice(open + 1, close);
73
+ const prompt = decodeLoginPrompt(segment);
74
+ // A NUL-bracketed run that isn't a valid marker is anomalous; surface
75
+ // its inner text as output rather than swallowing it.
76
+ out.push(prompt ? { type: 'prompt', prompt } : { type: 'output', text: segment });
77
+ buf = buf.slice(close + 1);
78
+ }
79
+ // Flush any plain text that precedes a still-incomplete marker (or all
80
+ // of it when no NUL is pending), keeping only the partial marker.
81
+ const pending = buf.indexOf(NUL);
82
+ if (pending === -1) {
83
+ if (buf)
84
+ out.push({ type: 'output', text: buf });
85
+ buf = '';
86
+ }
87
+ else if (pending > 0) {
88
+ out.push({ type: 'output', text: buf.slice(0, pending) });
89
+ buf = buf.slice(pending);
90
+ }
91
+ return out;
92
+ },
93
+ };
94
+ }
95
+ //# sourceMappingURL=provider-login-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-login-bridge.js","sourceRoot":"","sources":["../src/provider-login-bridge.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,23 @@ export type ContentBlock = {
38
38
  readonly mediaType: string;
39
39
  readonly data: string;
40
40
  readonly name?: string;
41
+ }
42
+ /**
43
+ * A model reasoning/thinking block, preserved in conversation history so it
44
+ * can be replayed on the next request. Anthropic REQUIRES the signed
45
+ * `thinking` block be sent back (as the first block of an assistant turn that
46
+ * also carries tool_use) on an interleaved-thinking continuation — a missing
47
+ * or unsigned block is a hard 400, so the loop drops unsigned reasoning from
48
+ * what it replays. `redacted` blocks carry only `encrypted` (the opaque blob)
49
+ * and `text: ''`; they are replayed verbatim, never shown. Providers without
50
+ * reasoning ignore this block.
51
+ */
52
+ | {
53
+ readonly type: 'reasoning';
54
+ readonly text: string;
55
+ readonly signature?: string;
56
+ readonly redacted?: boolean;
57
+ readonly encrypted?: string;
41
58
  };
42
59
  /**
43
60
  * Provider-neutral instruction for where a prompt-cache breakpoint should be
@@ -75,6 +92,17 @@ export interface ProviderRequest {
75
92
  readonly signal?: AbortSignal;
76
93
  /** Where to place prompt-cache breakpoints. Set by the active CacheStrategy. */
77
94
  readonly cacheHints?: ReadonlyArray<CacheHint>;
95
+ /**
96
+ * Request reasoning/thinking from the model. `false`/absent = off. Providers
97
+ * gate on this AND the model descriptor's `supportsReasoning`; unsupported
98
+ * providers/models ignore it. The loop sets it from the active provider's
99
+ * reasoning config (see the per-provider reasoning setting). `effort` maps to
100
+ * each provider's native knob (Anthropic thinking budget, OpenAI/Codex
101
+ * `reasoning.effort`).
102
+ */
103
+ readonly reasoning?: {
104
+ readonly effort?: 'low' | 'medium' | 'high';
105
+ } | boolean;
78
106
  }
79
107
  export type ProviderEvent = {
80
108
  readonly type: 'message_start';
@@ -102,6 +130,24 @@ export type ProviderEvent = {
102
130
  readonly type: 'error';
103
131
  readonly message: string;
104
132
  readonly retryable: boolean;
133
+ }
134
+ /** A streamed reasoning/thinking text delta (visible summary). */
135
+ | {
136
+ readonly type: 'reasoning_delta';
137
+ readonly delta: string;
138
+ }
139
+ /**
140
+ * End-of-reasoning-block metadata for history round-trip, emitted once per
141
+ * reasoning block. `signature` is Anthropic's thinking-block signature;
142
+ * `encrypted` carries an opaque blob (Anthropic redacted_thinking data /
143
+ * Codex reasoning encrypted_content) that must be replayed verbatim;
144
+ * `redacted` marks reasoning that must never be displayed.
145
+ */
146
+ | {
147
+ readonly type: 'reasoning_signature';
148
+ readonly signature?: string;
149
+ readonly redacted?: boolean;
150
+ readonly encrypted?: string;
105
151
  };
106
152
  export interface TokenUsage {
107
153
  readonly inputTokens: number;
@@ -136,6 +182,13 @@ export interface ModelDescriptor {
136
182
  * the transcript as text instead.
137
183
  */
138
184
  readonly supportsAudio?: boolean;
185
+ /**
186
+ * Whether this model can emit reasoning/thinking summaries (Anthropic
187
+ * extended thinking, OpenAI o-series / Codex reasoning). Gates the
188
+ * per-provider reasoning config UI and whether the loop requests reasoning
189
+ * for this model. When false, `ProviderRequest.reasoning` is ignored.
190
+ */
191
+ readonly supportsReasoning?: boolean;
139
192
  }
140
193
  export interface LLMProvider {
141
194
  readonly name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,12 @@ export interface SubagentSpec {
24
24
  readonly allowedTools?: ReadonlyArray<string>;
25
25
  /** Human-readable label surfaced in `subagent_*` event payloads. */
26
26
  readonly label?: string;
27
+ /**
28
+ * Named kind this child was spawned as (e.g. `'Explore'`, `'code-reviewer'`).
29
+ * Surfaced in `subagent_*` payloads so sibling agents of the same kind group
30
+ * under one collapsible header. Defaults to `'default'`.
31
+ */
32
+ readonly agentType?: string;
27
33
  /**
28
34
  * When true, the child session stays alive after the first turn for
29
35
  * {@link SubagentSpawner.continue}. `subagent_completed` is deferred until
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,gEAAgE;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,oEAAoE;IACpE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,4FAA4F;IAC5F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACnD,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;IACrF,oFAAoF;IACpF,QAAQ,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/D,qDAAqD;IACrD,OAAO,CAAC,CAAC,cAAc,EAAE,SAAS,GAAG,IAAI,CAAC;CAC3C"}
1
+ {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,gEAAgE;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,oEAAoE;IACpE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,4FAA4F;IAC5F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACnD,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;IACrF,oFAAoF;IACpF,QAAQ,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/D,qDAAqD;IACrD,OAAO,CAAC,CAAC,cAAc,EAAE,SAAS,GAAG,IAAI,CAAC;CAC3C"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * A Surface is a long-lived, interactive pane that BOTH a human viewer (a
3
+ * desktop panel) and the agent drive together: an embedded terminal (a shared
4
+ * PTY) or an in-window browser (a shared page). Unlike a {@link Channel} — which
5
+ * is a whole conversation transport — a Surface is a single resource attached to
6
+ * an existing Session, streaming opaque output frames out and accepting opaque
7
+ * input messages in.
8
+ *
9
+ * Surfaces are RUNNER-OWNED: the underlying resource (PTY, Playwright page) lives
10
+ * in the same process as the agent's tools, so the agent reads/writes the exact
11
+ * same instance the user watches. A thin client (the desktop) renders the
12
+ * streamed frames and relays the user's input back over the runner protocol —
13
+ * there is no reverse RPC. Plugins contribute surfaces via
14
+ * `definePlugin({ surfaces: [defineSurface(...)] })`; the plugin's own tools
15
+ * (e.g. `terminal`, `browser_session`) share the resource through module state.
16
+ *
17
+ * The payloads (`SurfaceDataMessage.payload`, `SurfaceInputMessage`) are
18
+ * deliberately opaque (`unknown` / open record): they cross the JSON-RPC wire
19
+ * verbatim and each surface kind defines its own shape (PTY bytes, a base64
20
+ * frame, a navigate request). Keeping them untyped here means a new surface kind
21
+ * never has to touch this file or the protocol.
22
+ */
23
+ /**
24
+ * Surface kind discriminator. Open string union so plugins add kinds without
25
+ * editing the SDK; the built-ins are `'terminal'` and `'browser'`.
26
+ */
27
+ export type SurfaceKind = 'terminal' | 'browser' | (string & {});
28
+ /** One outbound frame from a surface instance to its viewers. */
29
+ export interface SurfaceDataMessage {
30
+ /** The instance this frame belongs to (a viewer may watch several). */
31
+ readonly surfaceId: string;
32
+ readonly kind: SurfaceKind;
33
+ /** Surface-specific payload (PTY text, a base64 frame, a url/title update). */
34
+ readonly payload: unknown;
35
+ }
36
+ /**
37
+ * One inbound message from a viewer to a surface instance — a keystroke, a
38
+ * mouse event, a navigate request, a resize. `type` discriminates; the rest is
39
+ * surface-specific.
40
+ */
41
+ export interface SurfaceInputMessage {
42
+ readonly type: string;
43
+ readonly [key: string]: unknown;
44
+ }
45
+ /** Viewport hint for a resize (terminal cols/rows or pixel width/height). */
46
+ export interface SurfaceSize {
47
+ readonly cols?: number;
48
+ readonly rows?: number;
49
+ readonly width?: number;
50
+ readonly height?: number;
51
+ }
52
+ /**
53
+ * A live, attached surface instance — the running PTY or browser page. Opening
54
+ * the same kind twice returns the SAME instance (surfaces are shared), so a
55
+ * viewer that joins late gets the existing resource plus its {@link snapshot}.
56
+ */
57
+ export interface SurfaceInstance {
58
+ readonly id: string;
59
+ readonly kind: SurfaceKind;
60
+ /** Subscribe to outbound frames. Returns an unsubscribe fn. */
61
+ onData(cb: (payload: unknown) => void): () => void;
62
+ /**
63
+ * A catch-up payload for a late-joining viewer (terminal scrollback, the last
64
+ * browser frame, the current url). Optional — a surface with no replayable
65
+ * state omits it.
66
+ */
67
+ snapshot?(): unknown;
68
+ /** Apply an inbound message from a viewer (or the agent's tool). */
69
+ input(msg: SurfaceInputMessage): void | Promise<void>;
70
+ /** Re-size the viewport, when the surface is size-aware. */
71
+ resize?(size: SurfaceSize): void | Promise<void>;
72
+ /**
73
+ * Detach this instance. The underlying shared resource MAY persist (the
74
+ * agent's tool can still use the PTY/page); `close` just tears down streaming
75
+ * + viewer state. A surface that owns its resource exclusively disposes it.
76
+ */
77
+ close(): void | Promise<void>;
78
+ }
79
+ /** Whether a surface kind can run right now (e.g. node-pty present). */
80
+ export interface SurfaceAvailability {
81
+ readonly ok: boolean;
82
+ /** Human-readable explanation when `ok` is false (shown in the empty pane). */
83
+ readonly reason?: string;
84
+ }
85
+ /** Context handed to a surface when it opens. */
86
+ export interface SurfaceContext {
87
+ /** Working directory of the owning Session. */
88
+ readonly cwd: string;
89
+ readonly logger?: {
90
+ debug?(msg: string, meta?: Record<string, unknown>): void;
91
+ info?(msg: string, meta?: Record<string, unknown>): void;
92
+ warn?(msg: string, meta?: Record<string, unknown>): void;
93
+ error?(msg: string, meta?: Record<string, unknown>): void;
94
+ };
95
+ }
96
+ /**
97
+ * A registered, named factory for a Surface. `open` is idempotent per kind: a
98
+ * second `open` attaches to the resource the first one created (the host
99
+ * enforces this), so the agent's tool and the user's pane share one instance.
100
+ */
101
+ export interface SurfaceDef {
102
+ readonly kind: SurfaceKind;
103
+ readonly description?: string;
104
+ open(ctx: SurfaceContext): Promise<SurfaceInstance> | SurfaceInstance;
105
+ /** Optional runtime gate (default: always available). */
106
+ isAvailable?(ctx: SurfaceContext): Promise<SurfaceAvailability> | SurfaceAvailability;
107
+ }
108
+ /** Identity helper mirroring `defineTool` / `defineChannel`. */
109
+ export declare function defineSurface(def: SurfaceDef): SurfaceDef;
110
+ /**
111
+ * Read-only registry of surface defs contributed by plugins. Implementation
112
+ * lives in @moxxy/core.
113
+ */
114
+ export interface SurfaceRegistry {
115
+ list(): ReadonlyArray<SurfaceDef>;
116
+ get(kind: SurfaceKind): SurfaceDef | undefined;
117
+ has(kind: SurfaceKind): boolean;
118
+ }
119
+ /** Wire-friendly surface descriptor for `surface.list` (no functions). */
120
+ export interface SurfaceInfo {
121
+ readonly kind: SurfaceKind;
122
+ readonly description?: string;
123
+ readonly available: boolean;
124
+ /** Why it is unavailable, when `available` is false. */
125
+ readonly reason?: string;
126
+ }
127
+ /** Result of opening a surface — its id + a catch-up snapshot for the viewer. */
128
+ export interface OpenSurfaceResult {
129
+ readonly surfaceId: string;
130
+ readonly kind: SurfaceKind;
131
+ readonly snapshot?: unknown;
132
+ }
133
+ /**
134
+ * The runtime manager of open surface instances, present on an in-process
135
+ * `Session`. The runner server drives it on behalf of attached clients; the
136
+ * agent's tools reach the SAME underlying resources through plugin module state.
137
+ * Output from every open instance is multiplexed through {@link onData}.
138
+ */
139
+ export interface SurfaceHost {
140
+ /** Available surface kinds with their current availability. */
141
+ list(): Promise<ReadonlyArray<SurfaceInfo>>;
142
+ /** Open (or attach to the shared) instance for a kind. */
143
+ open(kind: SurfaceKind): Promise<OpenSurfaceResult>;
144
+ /** Route a viewer message to an open instance. No-op if it isn't open. */
145
+ input(surfaceId: string, msg: SurfaceInputMessage): Promise<void>;
146
+ /** Resize an open instance. No-op if it isn't open or isn't size-aware. */
147
+ resize(surfaceId: string, size: SurfaceSize): Promise<void>;
148
+ /** Close one open instance. */
149
+ close(surfaceId: string): Promise<void>;
150
+ /**
151
+ * Subscribe to outbound frames from EVERY open instance (multiplexed by
152
+ * `surfaceId`). Returns an unsubscribe fn. The runner subscribes once and
153
+ * broadcasts each frame as a `surface.data` notification.
154
+ */
155
+ onData(cb: (msg: SurfaceDataMessage) => void): () => void;
156
+ /** Close every open instance (session teardown). */
157
+ closeAll(): Promise<void>;
158
+ }
159
+ //# sourceMappingURL=surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * A Surface is a long-lived, interactive pane that BOTH a human viewer (a
3
+ * desktop panel) and the agent drive together: an embedded terminal (a shared
4
+ * PTY) or an in-window browser (a shared page). Unlike a {@link Channel} — which
5
+ * is a whole conversation transport — a Surface is a single resource attached to
6
+ * an existing Session, streaming opaque output frames out and accepting opaque
7
+ * input messages in.
8
+ *
9
+ * Surfaces are RUNNER-OWNED: the underlying resource (PTY, Playwright page) lives
10
+ * in the same process as the agent's tools, so the agent reads/writes the exact
11
+ * same instance the user watches. A thin client (the desktop) renders the
12
+ * streamed frames and relays the user's input back over the runner protocol —
13
+ * there is no reverse RPC. Plugins contribute surfaces via
14
+ * `definePlugin({ surfaces: [defineSurface(...)] })`; the plugin's own tools
15
+ * (e.g. `terminal`, `browser_session`) share the resource through module state.
16
+ *
17
+ * The payloads (`SurfaceDataMessage.payload`, `SurfaceInputMessage`) are
18
+ * deliberately opaque (`unknown` / open record): they cross the JSON-RPC wire
19
+ * verbatim and each surface kind defines its own shape (PTY bytes, a base64
20
+ * frame, a navigate request). Keeping them untyped here means a new surface kind
21
+ * never has to touch this file or the protocol.
22
+ */
23
+ /** Identity helper mirroring `defineTool` / `defineChannel`. */
24
+ export function defineSurface(def) {
25
+ return def;
26
+ }
27
+ //# sourceMappingURL=surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA+FH,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,GAAe;IAC3C,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Channel-agnostic "rich tool result" payloads.
3
+ *
4
+ * A tool whose result is more than a line of text (a file diff, eventually a
5
+ * table or chart) returns a `ToolDisplayResult`: a short `forModel` string the
6
+ * model sees, plus a structured `display` every channel can render natively.
7
+ * The projection layer (see `mode-helpers.ts`) sends ONLY `forModel` to the
8
+ * model, so the rich payload never bloats the context window.
9
+ *
10
+ * The first (and currently only) display kind is `file-diff`, emitted by the
11
+ * built-in Write/Edit tools. It carries the changed slices of a file (a few
12
+ * lines of context around each edit) — never the whole file — so the payload
13
+ * stays bounded regardless of file size. Channels render it as a classic diff:
14
+ * line numbers, +/- markers, green/red line backgrounds.
15
+ */
16
+ /** One rendered line of a diff. */
17
+ export interface DiffLine {
18
+ readonly kind: 'context' | 'add' | 'del';
19
+ readonly text: string;
20
+ /** 1-based line number in the OLD file (del + context lines). */
21
+ readonly oldNo?: number;
22
+ /** 1-based line number in the NEW file (add + context lines). */
23
+ readonly newNo?: number;
24
+ }
25
+ /** A contiguous changed region plus its surrounding context lines. */
26
+ export interface DiffHunk {
27
+ readonly oldStart: number;
28
+ readonly oldLines: number;
29
+ readonly newStart: number;
30
+ readonly newLines: number;
31
+ readonly lines: ReadonlyArray<DiffLine>;
32
+ }
33
+ /** Structured diff for a single file write/edit. */
34
+ export interface FileDiffDisplay {
35
+ readonly kind: 'file-diff';
36
+ /** Display path — relative to cwd when possible, else absolute. */
37
+ readonly path: string;
38
+ readonly mode: 'create' | 'update';
39
+ readonly added: number;
40
+ readonly removed: number;
41
+ readonly hunks: ReadonlyArray<DiffHunk>;
42
+ /** Set when a very large diff was capped (some hunks/lines dropped). */
43
+ readonly truncated?: boolean;
44
+ }
45
+ /** Extensible union of structured tool-result payloads. */
46
+ export type ToolDisplay = FileDiffDisplay;
47
+ /**
48
+ * The shape a tool returns when it wants a rich, channel-rendered result.
49
+ * `forModel` is the only thing the model sees; `display` is for channels.
50
+ */
51
+ export interface ToolDisplayResult {
52
+ readonly forModel: string;
53
+ readonly display: ToolDisplay;
54
+ }
55
+ export declare function isToolDisplayResult(x: unknown): x is ToolDisplayResult;
56
+ export declare function isToolDisplay(x: unknown): x is ToolDisplay;
57
+ export declare function isFileDiffDisplay(x: unknown): x is FileDiffDisplay;
58
+ /** Human summary, e.g. "Added 10 lines, removed 1 line". */
59
+ export declare function fileDiffSummary(d: FileDiffDisplay): string;
60
+ /** Verb for the diff header — "Create" for new files, else "Update". */
61
+ export declare function fileDiffVerb(d: FileDiffDisplay): string;
62
+ /** Gutter number a renderer should show for a line (new number, or old for deletions). */
63
+ export declare function diffGutterNo(line: DiffLine): number | undefined;
64
+ /** A renderable row: either a diff line or a gap marker between hunks. */
65
+ export type DiffRow = DiffLine | {
66
+ readonly kind: 'gap';
67
+ };
68
+ /**
69
+ * Flatten a file diff's hunks into a single row list, inserting a `gap` marker
70
+ * between non-contiguous hunks (channels render it as a `⋯` separator).
71
+ */
72
+ export declare function toDiffRows(d: FileDiffDisplay): DiffRow[];
73
+ //# sourceMappingURL=tool-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-display.d.ts","sourceRoot":"","sources":["../src/tool-display.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,sEAAsE;AACtE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;CACzC;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,2DAA2D;AAC3D,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,iBAAiB,CAOtE;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,eAAe,CAOlE;AAED,4DAA4D;AAC5D,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAQ1D;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAEvD;AAED,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAE/D;AAED,0EAA0E;AAC1E,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,EAAE,CAOxD"}