@moxxy/sdk 0.8.0 → 0.9.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.
- package/README.md +32 -11
- package/dist/cache-strategy.d.ts +9 -0
- package/dist/cache-strategy.d.ts.map +1 -1
- package/dist/compactor-helpers.d.ts.map +1 -1
- package/dist/compactor-helpers.js +5 -0
- package/dist/compactor-helpers.js.map +1 -1
- package/dist/compactor.d.ts +10 -0
- package/dist/compactor.d.ts.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mode-helpers.d.ts +9 -0
- package/dist/mode-helpers.d.ts.map +1 -1
- package/dist/mode-helpers.js +9 -1
- package/dist/mode-helpers.js.map +1 -1
- package/dist/provider.d.ts +10 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/session-like.d.ts +32 -0
- package/dist/session-like.d.ts.map +1 -1
- package/dist/subagent.d.ts +15 -0
- package/dist/subagent.d.ts.map +1 -1
- package/dist/tunnel.d.ts +31 -7
- package/dist/tunnel.d.ts.map +1 -1
- package/dist/tunnel.js +153 -1
- package/dist/tunnel.js.map +1 -1
- package/dist/view-renderer.d.ts +15 -0
- package/dist/view-renderer.d.ts.map +1 -1
- package/dist/view-renderer.js +24 -0
- package/dist/view-renderer.js.map +1 -1
- package/dist/workflow.d.ts +73 -6
- package/dist/workflow.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/cache-strategy.ts +9 -0
- package/src/compactor-helpers.ts +5 -0
- package/src/compactor.ts +10 -0
- package/src/index.ts +19 -8
- package/src/mode-helpers.ts +18 -1
- package/src/provider.ts +10 -0
- package/src/session-like.ts +29 -0
- package/src/subagent.ts +16 -0
- package/src/tunnel.test.ts +78 -0
- package/src/tunnel.ts +172 -0
- package/src/view-renderer.ts +22 -0
- package/src/workflow.ts +82 -5
- package/dist/voice.d.ts +0 -36
- package/dist/voice.d.ts.map +0 -1
- package/dist/voice.js +0 -82
- package/dist/voice.js.map +0 -1
- package/src/voice.ts +0 -103
package/dist/tunnel.d.ts
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A swappable way to expose a locally-bound surface (the web channel) to the
|
|
3
|
-
* user over the public internet — so an agent on Telegram/TUI can hand the user
|
|
4
|
-
* a URL they can open. One provider is active per session (registered via
|
|
5
|
-
* plugins, like every other block); core seeds a `localhost` no-op provider so
|
|
6
|
-
* `getActive()` is non-null.
|
|
7
|
-
*/
|
|
8
1
|
export interface TunnelOpenOptions {
|
|
9
2
|
readonly port: number;
|
|
10
3
|
readonly host: string;
|
|
@@ -22,4 +15,35 @@ export interface TunnelProviderDef {
|
|
|
22
15
|
/** Optional readiness gate (e.g. the `cloudflared` binary is installed). */
|
|
23
16
|
isAvailable?(): Promise<boolean>;
|
|
24
17
|
}
|
|
18
|
+
export interface SpawnCliTunnelOptions {
|
|
19
|
+
/** Executable to spawn (e.g. `cloudflared`, `ngrok`). */
|
|
20
|
+
readonly cmd: string;
|
|
21
|
+
/** Arguments passed to the executable. */
|
|
22
|
+
readonly args: ReadonlyArray<string>;
|
|
23
|
+
/** Matches the assigned public URL in a chunk of the CLI's stdout/stderr. */
|
|
24
|
+
readonly urlRegex: RegExp;
|
|
25
|
+
/** How long to wait for the URL before giving up. Default 30s. */
|
|
26
|
+
readonly timeoutMs?: number;
|
|
27
|
+
/** Human-readable name used in error messages. Defaults to `cmd`. */
|
|
28
|
+
readonly name?: string;
|
|
29
|
+
}
|
|
30
|
+
/** A spawned CLI tunnel: the public-URL handle plus the child's pid. */
|
|
31
|
+
export interface CliTunnelHandle extends TunnelHandle {
|
|
32
|
+
/** Spawned process id (-1 if the platform didn't assign one). */
|
|
33
|
+
readonly pid: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Spawn a CLI tunnel, parse the assigned public URL out of its output, and
|
|
37
|
+
* resolve a {@link CliTunnelHandle}. The child is tracked so it is killed on
|
|
38
|
+
* `close()`, on tunnel-switch, and on process exit (no orphans). Rejects on
|
|
39
|
+
* timeout, spawn error, or premature exit (the child is killed in every reject
|
|
40
|
+
* path). This is the single spawn-and-parse implementation behind the
|
|
41
|
+
* cloudflared/ngrok tunnel providers and the webhooks tunnel.
|
|
42
|
+
*/
|
|
43
|
+
export declare function spawnCliTunnel(opts: SpawnCliTunnelOptions): Promise<CliTunnelHandle>;
|
|
44
|
+
/**
|
|
45
|
+
* Probe whether a tunnel CLI is installed and runnable (`<cmd> --version`
|
|
46
|
+
* exits 0). Used as the `isAvailable()` gate by CLI-backed tunnel providers.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isCliTunnelAvailable(cmd: string): Promise<boolean>;
|
|
25
49
|
//# sourceMappingURL=tunnel.d.ts.map
|
package/dist/tunnel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACrD,4EAA4E;IAC5E,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAClC;AA2ED,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wEAAwE;AACxE,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,iEAAiE;IACjE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAID;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAsDpF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMlE"}
|
package/dist/tunnel.js
CHANGED
|
@@ -1,2 +1,154 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A swappable way to expose a locally-bound surface (the web channel) to the
|
|
3
|
+
* user over the public internet — so an agent on Telegram/TUI can hand the user
|
|
4
|
+
* a URL they can open. One provider is active per session (registered via
|
|
5
|
+
* plugins, like every other block); core seeds a `localhost` no-op provider so
|
|
6
|
+
* `getActive()` is non-null.
|
|
7
|
+
*/
|
|
8
|
+
import { spawn } from 'node:child_process';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Shared CLI-tunnel subprocess management
|
|
11
|
+
//
|
|
12
|
+
// cloudflared/ngrok (channel-web) and the webhooks tunnel all do the same
|
|
13
|
+
// thing: spawn a CLI, watch its stdout/stderr for the assigned public URL,
|
|
14
|
+
// resolve once it's seen (or reject on timeout/exit/error), and guarantee the
|
|
15
|
+
// child is killed on close *and* on process exit (Node does not reap children).
|
|
16
|
+
// `spawnCliTunnel` is the single implementation they all share.
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* Guarantees spawned tunnel children (cloudflared/ngrok/…) never orphan or
|
|
20
|
+
* leak. Node does NOT kill child processes when the parent exits, so we track
|
|
21
|
+
* every live child and kill any survivors on process teardown — in addition to
|
|
22
|
+
* the explicit `close()` path. Each tracked child is also force-killed
|
|
23
|
+
* (SIGKILL) if it ignores SIGTERM, so a wedged tunnel can't drain
|
|
24
|
+
* memory/handles.
|
|
25
|
+
*/
|
|
26
|
+
const liveChildren = new Set();
|
|
27
|
+
let exitHookInstalled = false;
|
|
28
|
+
function killChild(child) {
|
|
29
|
+
if (child.exitCode != null || child.signalCode != null)
|
|
30
|
+
return;
|
|
31
|
+
try {
|
|
32
|
+
child.kill('SIGTERM');
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
/* already gone */
|
|
36
|
+
}
|
|
37
|
+
// Escalate if it doesn't exit promptly. unref so this timer never holds the
|
|
38
|
+
// event loop open on its own.
|
|
39
|
+
const t = setTimeout(() => {
|
|
40
|
+
try {
|
|
41
|
+
child.kill('SIGKILL');
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
/* gone */
|
|
45
|
+
}
|
|
46
|
+
}, 2000);
|
|
47
|
+
t.unref?.();
|
|
48
|
+
child.once('exit', () => clearTimeout(t));
|
|
49
|
+
}
|
|
50
|
+
function ensureExitHook() {
|
|
51
|
+
if (exitHookInstalled)
|
|
52
|
+
return;
|
|
53
|
+
exitHookInstalled = true;
|
|
54
|
+
const killAll = () => {
|
|
55
|
+
for (const child of liveChildren) {
|
|
56
|
+
try {
|
|
57
|
+
child.kill('SIGKILL'); // process is exiting; be decisive, no async escalation
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
/* gone */
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
liveChildren.clear();
|
|
64
|
+
};
|
|
65
|
+
process.once('exit', killAll);
|
|
66
|
+
process.once('SIGINT', killAll);
|
|
67
|
+
process.once('SIGTERM', killAll);
|
|
68
|
+
}
|
|
69
|
+
/** Track a spawned child; returns an `untrack()` that also kills it cleanly. */
|
|
70
|
+
function trackChild(child) {
|
|
71
|
+
ensureExitHook();
|
|
72
|
+
liveChildren.add(child);
|
|
73
|
+
child.once('exit', () => liveChildren.delete(child));
|
|
74
|
+
return () => new Promise((resolve) => {
|
|
75
|
+
liveChildren.delete(child);
|
|
76
|
+
if (child.exitCode != null || child.signalCode != null)
|
|
77
|
+
return resolve();
|
|
78
|
+
child.once('exit', () => resolve());
|
|
79
|
+
killChild(child);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
const DEFAULT_TUNNEL_URL_TIMEOUT_MS = 30_000;
|
|
83
|
+
/**
|
|
84
|
+
* Spawn a CLI tunnel, parse the assigned public URL out of its output, and
|
|
85
|
+
* resolve a {@link CliTunnelHandle}. The child is tracked so it is killed on
|
|
86
|
+
* `close()`, on tunnel-switch, and on process exit (no orphans). Rejects on
|
|
87
|
+
* timeout, spawn error, or premature exit (the child is killed in every reject
|
|
88
|
+
* path). This is the single spawn-and-parse implementation behind the
|
|
89
|
+
* cloudflared/ngrok tunnel providers and the webhooks tunnel.
|
|
90
|
+
*/
|
|
91
|
+
export function spawnCliTunnel(opts) {
|
|
92
|
+
const { cmd, args, urlRegex } = opts;
|
|
93
|
+
const name = opts.name ?? cmd;
|
|
94
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_TUNNEL_URL_TIMEOUT_MS;
|
|
95
|
+
return new Promise((resolve, reject) => {
|
|
96
|
+
let child;
|
|
97
|
+
try {
|
|
98
|
+
child = spawn(cmd, args, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
reject(new Error(`failed to spawn ${name} — is it installed? (${err instanceof Error ? err.message : String(err)})`));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const untrack = trackChild(child);
|
|
105
|
+
let settled = false;
|
|
106
|
+
const timer = setTimeout(() => {
|
|
107
|
+
if (settled)
|
|
108
|
+
return;
|
|
109
|
+
settled = true;
|
|
110
|
+
void untrack();
|
|
111
|
+
reject(new Error(`${name}: timed out after ${timeoutMs}ms waiting for the tunnel URL`));
|
|
112
|
+
}, timeoutMs);
|
|
113
|
+
timer.unref?.();
|
|
114
|
+
const onData = (buf) => {
|
|
115
|
+
if (settled)
|
|
116
|
+
return; // drain quietly once resolved so the pipe never fills
|
|
117
|
+
const url = urlRegex.exec(buf.toString('utf8'))?.[0] ?? null;
|
|
118
|
+
if (!url)
|
|
119
|
+
return;
|
|
120
|
+
settled = true;
|
|
121
|
+
clearTimeout(timer);
|
|
122
|
+
resolve({ url, pid: child.pid ?? -1, close: untrack });
|
|
123
|
+
};
|
|
124
|
+
child.stdout?.on('data', onData);
|
|
125
|
+
child.stderr?.on('data', onData);
|
|
126
|
+
child.on('error', (err) => {
|
|
127
|
+
if (settled)
|
|
128
|
+
return;
|
|
129
|
+
settled = true;
|
|
130
|
+
clearTimeout(timer);
|
|
131
|
+
void untrack();
|
|
132
|
+
reject(err);
|
|
133
|
+
});
|
|
134
|
+
child.on('exit', (code) => {
|
|
135
|
+
if (settled)
|
|
136
|
+
return;
|
|
137
|
+
settled = true;
|
|
138
|
+
clearTimeout(timer);
|
|
139
|
+
reject(new Error(`${name} exited (code ${code ?? 'null'}) before emitting a URL`));
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Probe whether a tunnel CLI is installed and runnable (`<cmd> --version`
|
|
145
|
+
* exits 0). Used as the `isAvailable()` gate by CLI-backed tunnel providers.
|
|
146
|
+
*/
|
|
147
|
+
export function isCliTunnelAvailable(cmd) {
|
|
148
|
+
return new Promise((resolve) => {
|
|
149
|
+
const child = spawn(cmd, ['--version'], { stdio: 'ignore' });
|
|
150
|
+
child.once('error', () => resolve(false));
|
|
151
|
+
child.once('exit', (code) => resolve(code === 0));
|
|
152
|
+
});
|
|
153
|
+
}
|
|
2
154
|
//# sourceMappingURL=tunnel.js.map
|
package/dist/tunnel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"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"}
|
package/dist/view-renderer.d.ts
CHANGED
|
@@ -84,6 +84,21 @@ export interface ViewRendererDef {
|
|
|
84
84
|
parse(source: string): ViewParseResult;
|
|
85
85
|
validate(doc: ViewDoc): ReadonlyArray<ViewParseError>;
|
|
86
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* URL-scheme allow-list for agent-authored `href`/`src` values — the single
|
|
89
|
+
* canonical check, enforced at BOTH walls: parse/validate time
|
|
90
|
+
* (core's `parseView`/`validateDoc`) and render time (the web frontend
|
|
91
|
+
* re-checks before emitting an anchor/img; it keeps a verbatim copy in
|
|
92
|
+
* `plugin-channel-web/src/frontend/url-safety.ts` because the browser bundle
|
|
93
|
+
* cannot import the sdk root — keep the two in lockstep).
|
|
94
|
+
*
|
|
95
|
+
* Decision (audit A44): allowed schemes are `https:`, `http:`, `mailto:`,
|
|
96
|
+
* `tel:`, plus relative/fragment URLs; `data:` only as an `img src` and only
|
|
97
|
+
* `data:image/*`. Everything else — notably `javascript:`, `vbscript:`,
|
|
98
|
+
* `data:text/*` — is rejected. Views are designed to be shared with third
|
|
99
|
+
* parties, so a `javascript:` link is click-XSS on a shared surface.
|
|
100
|
+
*/
|
|
101
|
+
export declare function isSafeViewUrl(url: string, attr: string): boolean;
|
|
87
102
|
/** Primitives — the frontend renders these directly (keymap === these tags). */
|
|
88
103
|
export declare const VIEW_PRIMITIVES: ReadonlyArray<ViewTagSpec>;
|
|
89
104
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-renderer.d.ts","sourceRoot":"","sources":["../src/view-renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"view-renderer.d.ts","sourceRoot":"","sources":["../src/view-renderer.ts"],"names":[],"mappings":"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"}
|
package/dist/view-renderer.js
CHANGED
|
@@ -11,6 +11,30 @@
|
|
|
11
11
|
* data so the browser frontend can import the SAME allow-list the parser
|
|
12
12
|
* validates against — preventing the two-list drift that would open an XSS gap.
|
|
13
13
|
*/
|
|
14
|
+
/**
|
|
15
|
+
* URL-scheme allow-list for agent-authored `href`/`src` values — the single
|
|
16
|
+
* canonical check, enforced at BOTH walls: parse/validate time
|
|
17
|
+
* (core's `parseView`/`validateDoc`) and render time (the web frontend
|
|
18
|
+
* re-checks before emitting an anchor/img; it keeps a verbatim copy in
|
|
19
|
+
* `plugin-channel-web/src/frontend/url-safety.ts` because the browser bundle
|
|
20
|
+
* cannot import the sdk root — keep the two in lockstep).
|
|
21
|
+
*
|
|
22
|
+
* Decision (audit A44): allowed schemes are `https:`, `http:`, `mailto:`,
|
|
23
|
+
* `tel:`, plus relative/fragment URLs; `data:` only as an `img src` and only
|
|
24
|
+
* `data:image/*`. Everything else — notably `javascript:`, `vbscript:`,
|
|
25
|
+
* `data:text/*` — is rejected. Views are designed to be shared with third
|
|
26
|
+
* parties, so a `javascript:` link is click-XSS on a shared surface.
|
|
27
|
+
*/
|
|
28
|
+
export function isSafeViewUrl(url, attr) {
|
|
29
|
+
const u = url.trim().toLowerCase();
|
|
30
|
+
if (u.startsWith('javascript:') || u.startsWith('vbscript:'))
|
|
31
|
+
return false;
|
|
32
|
+
if (u.startsWith('data:'))
|
|
33
|
+
return attr === 'src' && u.startsWith('data:image/');
|
|
34
|
+
if (/^[a-z][a-z0-9+.-]*:/.test(u))
|
|
35
|
+
return /^(https?:|mailto:|tel:)/.test(u);
|
|
36
|
+
return true; // relative / fragment
|
|
37
|
+
}
|
|
14
38
|
const TONE = ['default', 'muted', 'success', 'warn', 'danger'];
|
|
15
39
|
const GAP = ['none', 'sm', 'md', 'lg'];
|
|
16
40
|
/** Primitives — the frontend renders these directly (keymap === these tags). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-renderer.js","sourceRoot":"","sources":["../src/view-renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"view-renderer.js","sourceRoot":"","sources":["../src/view-renderer.ts"],"names":[],"mappings":"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"}
|
package/dist/workflow.d.ts
CHANGED
|
@@ -29,11 +29,32 @@ export interface WorkflowTrigger {
|
|
|
29
29
|
}
|
|
30
30
|
/** How a failed step is handled: abort the workflow, skip past it, or retry. */
|
|
31
31
|
export type WorkflowStepErrorMode = 'fail' | 'continue' | 'retry';
|
|
32
|
+
/** Response format for logic steps (`bridge` only may use `plain`). */
|
|
33
|
+
export type WorkflowLogicStepFormat = 'json' | 'plain';
|
|
34
|
+
/**
|
|
35
|
+
* Bounded iteration node. `body` is an ordered list of step ids that run once
|
|
36
|
+
* per iteration; after each pass the LLM evaluates `condition` as a
|
|
37
|
+
* `then`=continue / `else`=stop predicate (same mechanism as a `condition`
|
|
38
|
+
* step). The loop stops when the predicate says stop OR after `maxIterations`
|
|
39
|
+
* passes — there is no unbounded path. The iteration cap is independent of the
|
|
40
|
+
* nested-workflow {@link WorkflowRunDeps.depth} guard: a loop body that calls
|
|
41
|
+
* nested workflows still obeys the executor's depth cap.
|
|
42
|
+
*/
|
|
43
|
+
export interface WorkflowLoopAction {
|
|
44
|
+
/** Ordered step ids run once per iteration (must resolve; ≥1). */
|
|
45
|
+
readonly body: ReadonlyArray<string>;
|
|
46
|
+
/** LLM predicate: `then` = run another iteration, `else` = stop. */
|
|
47
|
+
readonly condition: string;
|
|
48
|
+
/** Hard cap on iterations (1..50). Hitting it ends the loop cleanly. */
|
|
49
|
+
readonly maxIterations: number;
|
|
50
|
+
}
|
|
32
51
|
/**
|
|
33
52
|
* One node in the DAG. Exactly one *action* key is set
|
|
34
|
-
* (`skill` | `prompt` | `tool` | `workflow`
|
|
35
|
-
*
|
|
36
|
-
*
|
|
53
|
+
* (`skill` | `prompt` | `tool` | `workflow` | `bridge` | `condition` | `switch`
|
|
54
|
+
* | `loop`). Logic steps run a single no-tools subagent turn; default response
|
|
55
|
+
* is JSON (`vars`, `branch`, optional `text`). `input` is the templated prompt
|
|
56
|
+
* for skill/prompt; `args` for tool/workflow; `bridge` / `condition` / `switch`
|
|
57
|
+
* hold the logic instruction text; `loop` holds a bounded iteration spec.
|
|
37
58
|
*/
|
|
38
59
|
export interface WorkflowStep {
|
|
39
60
|
readonly id: string;
|
|
@@ -41,14 +62,34 @@ export interface WorkflowStep {
|
|
|
41
62
|
readonly prompt?: string;
|
|
42
63
|
readonly tool?: string;
|
|
43
64
|
readonly workflow?: string;
|
|
65
|
+
/** Extract/transform upstream data into `vars` (and optional `text`). */
|
|
66
|
+
readonly bridge?: string;
|
|
67
|
+
/** If/else gate: agent returns `{"branch":"then"|"else"}`. */
|
|
68
|
+
readonly condition?: string;
|
|
69
|
+
readonly then?: ReadonlyArray<string>;
|
|
70
|
+
readonly else?: ReadonlyArray<string>;
|
|
71
|
+
/** Multi-way gate: agent returns `{"branch":"<caseId>"}`. */
|
|
72
|
+
readonly switch?: string;
|
|
73
|
+
readonly cases?: Readonly<Record<string, ReadonlyArray<string>>>;
|
|
74
|
+
readonly default?: ReadonlyArray<string>;
|
|
75
|
+
/** Bounded iteration over `loop.body`, gated by an LLM predicate. */
|
|
76
|
+
readonly loop?: WorkflowLoopAction;
|
|
44
77
|
readonly input?: string;
|
|
45
78
|
readonly args?: Record<string, unknown>;
|
|
46
79
|
readonly needs: ReadonlyArray<string>;
|
|
47
|
-
/**
|
|
80
|
+
/** Legacy deterministic guard DSL; prefer `condition`/`switch` for semantics. */
|
|
48
81
|
readonly when?: string;
|
|
49
82
|
readonly onError: WorkflowStepErrorMode;
|
|
50
83
|
readonly retries: number;
|
|
51
84
|
readonly label?: string;
|
|
85
|
+
/** `plain` only on `bridge`; `condition`/`switch` always require JSON. */
|
|
86
|
+
readonly format?: WorkflowLogicStepFormat;
|
|
87
|
+
/**
|
|
88
|
+
* When true on a `prompt` or `skill` step, the DAG pauses after the
|
|
89
|
+
* subagent's first turn so the operator can reply once; the step completes
|
|
90
|
+
* after a follow-up turn. Ignored on logic / `tool` / `workflow` steps.
|
|
91
|
+
*/
|
|
92
|
+
readonly awaitInput?: boolean;
|
|
52
93
|
}
|
|
53
94
|
export interface WorkflowInputSpec {
|
|
54
95
|
readonly default?: unknown;
|
|
@@ -60,6 +101,23 @@ export interface WorkflowDelivery {
|
|
|
60
101
|
/** Also drop the final output into `~/.moxxy/inbox/`. Default true. */
|
|
61
102
|
readonly inbox: boolean;
|
|
62
103
|
}
|
|
104
|
+
/** Visual editor metadata. Runtime executors must ignore this field. */
|
|
105
|
+
export interface WorkflowUiLayoutNode {
|
|
106
|
+
readonly x: number;
|
|
107
|
+
readonly y: number;
|
|
108
|
+
}
|
|
109
|
+
export interface WorkflowUiViewport {
|
|
110
|
+
readonly x: number;
|
|
111
|
+
readonly y: number;
|
|
112
|
+
readonly zoom: number;
|
|
113
|
+
}
|
|
114
|
+
export interface WorkflowUiLayout {
|
|
115
|
+
readonly nodes: Record<string, WorkflowUiLayoutNode>;
|
|
116
|
+
readonly viewport?: WorkflowUiViewport;
|
|
117
|
+
}
|
|
118
|
+
export interface WorkflowUi {
|
|
119
|
+
readonly layout?: WorkflowUiLayout;
|
|
120
|
+
}
|
|
63
121
|
export interface Workflow {
|
|
64
122
|
readonly name: string;
|
|
65
123
|
readonly description: string;
|
|
@@ -73,6 +131,8 @@ export interface Workflow {
|
|
|
73
131
|
readonly inputs: Record<string, WorkflowInputSpec>;
|
|
74
132
|
readonly on?: WorkflowTrigger;
|
|
75
133
|
readonly delivery?: WorkflowDelivery;
|
|
134
|
+
/** GUI-only metadata persisted with the YAML artifact. */
|
|
135
|
+
readonly ui?: WorkflowUi;
|
|
76
136
|
/** Max steps to run concurrently in one ready-set round. */
|
|
77
137
|
readonly concurrency: number;
|
|
78
138
|
readonly steps: ReadonlyArray<WorkflowStep>;
|
|
@@ -88,7 +148,7 @@ export interface WorkflowLookup {
|
|
|
88
148
|
workflow(name: string): Workflow | undefined;
|
|
89
149
|
}
|
|
90
150
|
/** Lifecycle subtypes an executor emits as `plugin_event`s (mirrors plan_*). */
|
|
91
|
-
export type WorkflowEventSubtype = 'workflow_started' | 'workflow_step_started' | 'workflow_step_completed' | 'workflow_step_skipped' | 'workflow_step_failed' | 'workflow_completed' | 'workflow_failed';
|
|
151
|
+
export type WorkflowEventSubtype = 'workflow_started' | 'workflow_step_started' | 'workflow_step_completed' | 'workflow_step_skipped' | 'workflow_step_failed' | 'workflow_step_awaiting_input' | 'workflow_paused' | 'workflow_resumed' | 'workflow_completed' | 'workflow_failed';
|
|
92
152
|
/**
|
|
93
153
|
* Everything an executor needs to run a workflow, supplied by the caller.
|
|
94
154
|
* The in-turn `workflow_run` tool wires `spawner` from `ctx.subagents`; the
|
|
@@ -115,7 +175,8 @@ export interface WorkflowRunDeps {
|
|
|
115
175
|
/** Nested-workflow recursion depth; executors guard against runaway nesting. */
|
|
116
176
|
readonly depth?: number;
|
|
117
177
|
}
|
|
118
|
-
export type WorkflowStepStatus = 'completed' | 'skipped' | 'failed';
|
|
178
|
+
export type WorkflowStepStatus = 'completed' | 'skipped' | 'failed' | 'awaiting_input';
|
|
179
|
+
export type WorkflowRunStatus = 'completed' | 'paused' | 'failed';
|
|
119
180
|
export interface WorkflowStepResult {
|
|
120
181
|
readonly id: string;
|
|
121
182
|
readonly status: WorkflowStepStatus;
|
|
@@ -126,10 +187,16 @@ export interface WorkflowStepResult {
|
|
|
126
187
|
}
|
|
127
188
|
export interface WorkflowRunResult {
|
|
128
189
|
readonly ok: boolean;
|
|
190
|
+
readonly status: WorkflowRunStatus;
|
|
129
191
|
readonly steps: ReadonlyArray<WorkflowStepResult>;
|
|
130
192
|
/** Output of the terminal (sink) step(s) — what delivery sends. */
|
|
131
193
|
readonly output: string;
|
|
132
194
|
readonly error?: string;
|
|
195
|
+
/** Set when `status` is `paused` — use with workflow reply API. */
|
|
196
|
+
readonly runId?: string;
|
|
197
|
+
readonly pendingStepId?: string;
|
|
198
|
+
/** Child subagent session id for chat / permissions while paused. */
|
|
199
|
+
readonly interactionAgentId?: string;
|
|
133
200
|
}
|
|
134
201
|
/**
|
|
135
202
|
* A swappable workflow-execution strategy. v1 ships one (`dag`); a plugin can
|
package/dist/workflow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACxD,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtD,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moxxy/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Typed public surface for the moxxy framework: event types, define* factories, lifecycle hook signatures.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"moxxy",
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
"typescript": "^5.7.3",
|
|
62
62
|
"vitest": "^2.1.8",
|
|
63
63
|
"zod": "^3.24.0",
|
|
64
|
-
"@moxxy/
|
|
65
|
-
"@moxxy/
|
|
64
|
+
"@moxxy/vitest-preset": "0.0.0",
|
|
65
|
+
"@moxxy/tsconfig": "0.0.0"
|
|
66
66
|
},
|
|
67
67
|
"scripts": {
|
|
68
68
|
"build": "tsc -p tsconfig.json",
|
package/src/cache-strategy.ts
CHANGED
|
@@ -18,6 +18,15 @@ export interface CacheStrategyContext {
|
|
|
18
18
|
* strategies should then fall back to a conservative breakpoint.
|
|
19
19
|
*/
|
|
20
20
|
readonly stablePrefixMessageIndex?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Number of trailing messages that are VOLATILE — injected for this call
|
|
23
|
+
* only and not part of the append-only history (e.g. goal mode's idle
|
|
24
|
+
* nudge, projected via `trailingUserText`). They will not appear at the
|
|
25
|
+
* same position in the next call's message list, so a breakpoint placed on
|
|
26
|
+
* or after them is a guaranteed-wasted cache write. Strategies should place
|
|
27
|
+
* their rolling tail breakpoint BEFORE these messages. Defaults to 0.
|
|
28
|
+
*/
|
|
29
|
+
readonly volatileTailMessageCount?: number;
|
|
21
30
|
}
|
|
22
31
|
|
|
23
32
|
/**
|
package/src/compactor-helpers.ts
CHANGED
|
@@ -182,6 +182,11 @@ export async function runCompactionIfNeeded(
|
|
|
182
182
|
log: ctx.log,
|
|
183
183
|
budget,
|
|
184
184
|
signal: ctx.signal,
|
|
185
|
+
// Hand the compactor the session's provider/model so the default
|
|
186
|
+
// summarize compactor can write a real summary (it truncates honestly
|
|
187
|
+
// when no provider is reachable).
|
|
188
|
+
provider: ctx.provider,
|
|
189
|
+
model: ctx.model,
|
|
185
190
|
});
|
|
186
191
|
if (result.tokensSaved <= 0 || result.summary.trim().length === 0) return false;
|
|
187
192
|
// `compactor.compact` declares `Omit<CompactionEvent, keyof EventBase>`,
|
package/src/compactor.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CompactionEvent, MoxxyEvent } from './events.js';
|
|
2
2
|
import type { EventLogReader } from './log.js';
|
|
3
|
+
import type { LLMProvider } from './provider.js';
|
|
3
4
|
|
|
4
5
|
export interface TokenBudget {
|
|
5
6
|
readonly contextWindow: number;
|
|
@@ -11,6 +12,15 @@ export interface CompactContext {
|
|
|
11
12
|
readonly log: EventLogReader;
|
|
12
13
|
readonly budget: TokenBudget;
|
|
13
14
|
readonly signal: AbortSignal;
|
|
15
|
+
/**
|
|
16
|
+
* The session's active provider + model, when the dispatcher has them
|
|
17
|
+
* (`runCompactionIfNeeded` always passes both). Lets a compactor produce a
|
|
18
|
+
* REAL model-written summary instead of a lossy truncation. Optional so
|
|
19
|
+
* hand-rolled callers and tests can still invoke `compact` without one —
|
|
20
|
+
* compactors must degrade gracefully when absent.
|
|
21
|
+
*/
|
|
22
|
+
readonly provider?: LLMProvider;
|
|
23
|
+
readonly model?: string;
|
|
14
24
|
}
|
|
15
25
|
|
|
16
26
|
export interface CompactorDef {
|
package/src/index.ts
CHANGED
|
@@ -53,6 +53,8 @@ export type {
|
|
|
53
53
|
WorkflowsView,
|
|
54
54
|
WorkflowSummaryView,
|
|
55
55
|
WorkflowRunView,
|
|
56
|
+
WorkflowValidateView,
|
|
57
|
+
WorkflowSaveView,
|
|
56
58
|
PluginsAdminView,
|
|
57
59
|
InstallablePluginView,
|
|
58
60
|
LoadedPluginView,
|
|
@@ -111,6 +113,7 @@ export type {
|
|
|
111
113
|
SubagentSpec,
|
|
112
114
|
SubagentResult,
|
|
113
115
|
SubagentSpawner,
|
|
116
|
+
SubagentContinueArgs,
|
|
114
117
|
} from './subagent.js';
|
|
115
118
|
|
|
116
119
|
|
|
@@ -143,8 +146,15 @@ export type {
|
|
|
143
146
|
ViewTagSpec,
|
|
144
147
|
ViewRendererDef,
|
|
145
148
|
} from './view-renderer.js';
|
|
146
|
-
export { VIEW_PRIMITIVES, VIEW_COMPONENTS, DEFAULT_VIEW_TAGS } from './view-renderer.js';
|
|
147
|
-
export type {
|
|
149
|
+
export { VIEW_PRIMITIVES, VIEW_COMPONENTS, DEFAULT_VIEW_TAGS, isSafeViewUrl } from './view-renderer.js';
|
|
150
|
+
export type {
|
|
151
|
+
TunnelProviderDef,
|
|
152
|
+
TunnelHandle,
|
|
153
|
+
TunnelOpenOptions,
|
|
154
|
+
SpawnCliTunnelOptions,
|
|
155
|
+
CliTunnelHandle,
|
|
156
|
+
} from './tunnel.js';
|
|
157
|
+
export { spawnCliTunnel, isCliTunnelAvailable } from './tunnel.js';
|
|
148
158
|
export { isRetryableError, toFriendlyError, zodToJsonSchema, estimateTextTokens, type StopReason } from './provider-utils.js';
|
|
149
159
|
export { writeFileAtomic, moxxyHome, moxxyPath, type WriteFileAtomicOptions } from './fs-utils.js';
|
|
150
160
|
export { createMutex, type Mutex } from './mutex.js';
|
|
@@ -244,15 +254,22 @@ export type { Skill, SkillDef, SkillFrontmatter, SkillScope, SkillSchedule } fro
|
|
|
244
254
|
export type {
|
|
245
255
|
Workflow,
|
|
246
256
|
WorkflowStep,
|
|
257
|
+
WorkflowLoopAction,
|
|
247
258
|
WorkflowTrigger,
|
|
248
259
|
WorkflowStepErrorMode,
|
|
260
|
+
WorkflowLogicStepFormat,
|
|
249
261
|
WorkflowInputSpec,
|
|
250
262
|
WorkflowDelivery,
|
|
263
|
+
WorkflowUi,
|
|
264
|
+
WorkflowUiLayout,
|
|
265
|
+
WorkflowUiLayoutNode,
|
|
266
|
+
WorkflowUiViewport,
|
|
251
267
|
WorkflowToolRunner,
|
|
252
268
|
WorkflowLookup,
|
|
253
269
|
WorkflowEventSubtype,
|
|
254
270
|
WorkflowRunDeps,
|
|
255
271
|
WorkflowStepStatus,
|
|
272
|
+
WorkflowRunStatus,
|
|
256
273
|
WorkflowStepResult,
|
|
257
274
|
WorkflowRunResult,
|
|
258
275
|
WorkflowExecutorDef,
|
|
@@ -381,10 +398,4 @@ export {
|
|
|
381
398
|
type InstallTarget,
|
|
382
399
|
} from './install-hints.js';
|
|
383
400
|
|
|
384
|
-
export {
|
|
385
|
-
checkTranscriberReady,
|
|
386
|
-
pickFirstAvailableTranscriber,
|
|
387
|
-
resolveTranscriber,
|
|
388
|
-
} from './voice.js';
|
|
389
|
-
|
|
390
401
|
export { z } from 'zod';
|