@moxxy/sdk 0.41.2 → 0.42.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/dist/auto-approve.d.ts +14 -0
- package/dist/auto-approve.d.ts.map +1 -0
- package/dist/auto-approve.js +29 -0
- package/dist/auto-approve.js.map +1 -0
- package/dist/channel.d.ts +9 -0
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +14 -0
- package/dist/channel.js.map +1 -1
- package/dist/client-session.d.ts +3 -0
- package/dist/client-session.d.ts.map +1 -1
- package/dist/compactor-helpers.d.ts +1 -1
- package/dist/compactor-helpers.d.ts.map +1 -1
- package/dist/compactor-helpers.js +14 -4
- package/dist/compactor-helpers.js.map +1 -1
- package/dist/computer-control.d.ts +77 -3
- package/dist/computer-control.d.ts.map +1 -1
- package/dist/computer-control.js +12 -1
- package/dist/computer-control.js.map +1 -1
- package/dist/conduct.d.ts +16 -0
- package/dist/conduct.d.ts.map +1 -0
- package/dist/conduct.js +33 -0
- package/dist/conduct.js.map +1 -0
- package/dist/define.d.ts +3 -0
- package/dist/define.d.ts.map +1 -1
- package/dist/define.js +3 -0
- package/dist/define.js.map +1 -1
- package/dist/elision-state.d.ts +9 -0
- package/dist/elision-state.d.ts.map +1 -1
- package/dist/elision-state.js +16 -3
- package/dist/elision-state.js.map +1 -1
- package/dist/events.d.ts +13 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/fs-utils.d.ts.map +1 -1
- package/dist/fs-utils.js +43 -2
- package/dist/fs-utils.js.map +1 -1
- package/dist/index.d.ts +14 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/dist/locale.d.ts +9 -0
- package/dist/locale.d.ts.map +1 -0
- package/dist/locale.js +16 -0
- package/dist/locale.js.map +1 -0
- package/dist/mode/checkpoint.d.ts +7 -0
- package/dist/mode/checkpoint.d.ts.map +1 -1
- package/dist/mode/collect-stream.d.ts.map +1 -1
- package/dist/mode/collect-stream.js +3 -2
- package/dist/mode/collect-stream.js.map +1 -1
- package/dist/mode/project-messages.d.ts +7 -0
- package/dist/mode/project-messages.d.ts.map +1 -1
- package/dist/mode/project-messages.js +26 -4
- package/dist/mode/project-messages.js.map +1 -1
- package/dist/mode/react-loop.d.ts.map +1 -1
- package/dist/mode/react-loop.js +5 -3
- package/dist/mode/react-loop.js.map +1 -1
- package/dist/mode/stuck-loop.d.ts +8 -2
- package/dist/mode/stuck-loop.d.ts.map +1 -1
- package/dist/mode/stuck-loop.js +9 -1
- package/dist/mode/stuck-loop.js.map +1 -1
- package/dist/mode-helpers.d.ts +1 -1
- package/dist/mode-helpers.d.ts.map +1 -1
- package/dist/mode-helpers.js +1 -1
- package/dist/mode-helpers.js.map +1 -1
- package/dist/mode.d.ts +10 -3
- package/dist/mode.d.ts.map +1 -1
- package/dist/mode.js.map +1 -1
- package/dist/permission.d.ts +6 -0
- package/dist/permission.d.ts.map +1 -1
- package/dist/progress.d.ts +24 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +59 -0
- package/dist/progress.js.map +1 -0
- package/dist/provider.d.ts +11 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/resolvers.js +2 -2
- package/dist/resolvers.js.map +1 -1
- package/dist/schemas.d.ts +9 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +3 -0
- package/dist/schemas.js.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/session-like.d.ts +21 -1
- package/dist/session-like.d.ts.map +1 -1
- package/dist/skill-mentions.d.ts +38 -0
- package/dist/skill-mentions.d.ts.map +1 -0
- package/dist/skill-mentions.js +84 -0
- package/dist/skill-mentions.js.map +1 -0
- package/dist/skill.d.ts +6 -0
- package/dist/skill.d.ts.map +1 -1
- package/dist/supersede.d.ts +31 -0
- package/dist/supersede.d.ts.map +1 -0
- package/dist/supersede.js +34 -0
- package/dist/supersede.js.map +1 -0
- package/dist/tool-dispatch.d.ts.map +1 -1
- package/dist/tool-dispatch.js +3 -2
- package/dist/tool-dispatch.js.map +1 -1
- package/dist/tool-gating.d.ts +9 -1
- package/dist/tool-gating.d.ts.map +1 -1
- package/dist/tool-gating.js +57 -7
- package/dist/tool-gating.js.map +1 -1
- package/dist/tool-modes.d.ts +8 -0
- package/dist/tool-modes.d.ts.map +1 -0
- package/dist/tool-modes.js +21 -0
- package/dist/tool-modes.js.map +1 -0
- package/dist/tool.d.ts +18 -0
- package/dist/tool.d.ts.map +1 -1
- package/dist/wait-for.d.ts +34 -0
- package/dist/wait-for.d.ts.map +1 -0
- package/dist/wait-for.js +67 -0
- package/dist/wait-for.js.map +1 -0
- package/package.json +11 -7
- package/src/auto-approve.test.ts +29 -0
- package/src/auto-approve.ts +29 -0
- package/src/channel-auth.test.ts +2 -1
- package/src/channel-control.test.ts +2 -1
- package/src/channel.ts +18 -0
- package/src/client-session.ts +3 -0
- package/src/compactor-helpers.test.ts +26 -0
- package/src/compactor-helpers.ts +16 -4
- package/src/computer-control.test.ts +11 -0
- package/src/computer-control.ts +16 -1
- package/src/conduct.test.ts +62 -0
- package/src/conduct.ts +37 -0
- package/src/cross-process-lock.test.ts +3 -2
- package/src/define.ts +6 -0
- package/src/elision-state.ts +24 -3
- package/src/events.ts +13 -1
- package/src/finish-pairing.test.ts +45 -0
- package/src/fs-utils.test.ts +40 -6
- package/src/fs-utils.ts +42 -2
- package/src/index.ts +38 -1
- package/src/json-file-store.test.ts +5 -3
- package/src/locale.test.ts +31 -0
- package/src/locale.ts +16 -0
- package/src/mode/checkpoint.ts +7 -0
- package/src/mode/collect-stream.ts +3 -2
- package/src/mode/project-messages.test.ts +72 -1
- package/src/mode/project-messages.ts +26 -5
- package/src/mode/react-loop.ts +6 -3
- package/src/mode/stuck-loop.ts +14 -3
- package/src/mode-helpers.ts +1 -0
- package/src/mode.ts +10 -3
- package/src/permission.ts +6 -0
- package/src/process-invocation.test.ts +3 -9
- package/src/progress.test.ts +81 -0
- package/src/progress.ts +73 -0
- package/src/provider.ts +12 -1
- package/src/resolvers.test.ts +14 -1
- package/src/resolvers.ts +2 -2
- package/src/schemas.ts +3 -0
- package/src/server.ts +2 -0
- package/src/session-like.ts +21 -1
- package/src/skill-mentions.test.ts +113 -0
- package/src/skill-mentions.ts +108 -0
- package/src/skill.ts +6 -0
- package/src/stuck-loop.test.ts +12 -0
- package/src/supersede.test.ts +115 -0
- package/src/supersede.ts +55 -0
- package/src/test-isolation.test.ts +26 -0
- package/src/token-efficiency.test.ts +7 -1
- package/src/tool-dispatch.test.ts +13 -0
- package/src/tool-dispatch.ts +3 -2
- package/src/tool-gating.test.ts +81 -0
- package/src/tool-gating.ts +53 -7
- package/src/tool-modes.test.ts +45 -0
- package/src/tool-modes.ts +23 -0
- package/src/tool.ts +18 -0
- package/src/wait-for.test.ts +132 -0
- package/src/wait-for.ts +79 -0
package/dist/tool-dispatch.js
CHANGED
|
@@ -66,6 +66,7 @@ export async function* dispatchToolCall(ctx, t, iteration) {
|
|
|
66
66
|
callId: asToolCallId(t.id),
|
|
67
67
|
decidedBy: 'resolver',
|
|
68
68
|
mode: decision.mode,
|
|
69
|
+
...(decision.decidedNow ? { decidedNow: true } : {}),
|
|
69
70
|
});
|
|
70
71
|
try {
|
|
71
72
|
const output = await ctx.tools.execute(t.name, actualInput, ctx.signal, {
|
|
@@ -210,7 +211,7 @@ export async function* emitRequestsAndDetectStuck(ctx, toolUses, detector, repor
|
|
|
210
211
|
input: t.input,
|
|
211
212
|
});
|
|
212
213
|
emitted.push(t);
|
|
213
|
-
const sig = detector.record(t.name, t.input);
|
|
214
|
+
const sig = detector.record(t.name, t.input, { liveState: ctx.tools.get(t.name)?.liveState === true });
|
|
214
215
|
if (!sig.stuck)
|
|
215
216
|
continue;
|
|
216
217
|
for (const r of emitted) {
|
|
@@ -267,7 +268,7 @@ export async function* emitRequestsAndNudgeOnStuck(ctx, toolUses, detector, repo
|
|
|
267
268
|
name: t.name,
|
|
268
269
|
input: t.input,
|
|
269
270
|
});
|
|
270
|
-
const sig = detector.record(t.name, t.input);
|
|
271
|
+
const sig = detector.record(t.name, t.input, { liveState: ctx.tools.get(t.name)?.liveState === true });
|
|
271
272
|
if (!sig.stuck || trip)
|
|
272
273
|
continue;
|
|
273
274
|
trip = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-dispatch.js","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tool-dispatch.js","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"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"}
|
package/dist/tool-gating.d.ts
CHANGED
|
@@ -17,7 +17,15 @@ import type { ToolDef } from './tool.js';
|
|
|
17
17
|
export declare const ALWAYS_ON_TOOLS: ReadonlySet<string>;
|
|
18
18
|
/** Tool names the model has loaded this session (from `load_tool` calls). */
|
|
19
19
|
export declare function loadedToolNames(log: EventLogReader): ReadonlySet<string>;
|
|
20
|
-
/**
|
|
20
|
+
/** Above this many registered tools, lazy loading turns itself on unless the config says otherwise. */
|
|
21
|
+
export declare const LAZY_TOOLS_AUTO_THRESHOLD = 200;
|
|
22
|
+
/** Whether to gate tools: an explicit setting wins; unset means "only when the list is long". */
|
|
23
|
+
export declare function shouldGateTools(setting: boolean | undefined, toolCount: number): boolean;
|
|
24
|
+
/** The tools a `load_tool` name stands for: one tool, or a family written as `prefix*`. */
|
|
25
|
+
export declare function matchLoadableTools<T extends {
|
|
26
|
+
readonly name: string;
|
|
27
|
+
}>(name: string, tools: ReadonlyArray<T>): T[];
|
|
28
|
+
/** Compact index of not-yet-loaded tools: one line per family, one per tool outside a family. */
|
|
21
29
|
export declare function buildToolIndex(hidden: ReadonlyArray<ToolDef>): string;
|
|
22
30
|
export interface GatedTools {
|
|
23
31
|
readonly messages: ReadonlyArray<ProviderMessage>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-gating.d.ts","sourceRoot":"","sources":["../src/tool-gating.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;;;;;;GAUG;AAEH;6EAC6E;AAC7E,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAW9C,CAAC;AAEH,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAUxE;AAUD,
|
|
1
|
+
{"version":3,"file":"tool-gating.d.ts","sourceRoot":"","sources":["../src/tool-gating.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;;;;;;GAUG;AAEH;6EAC6E;AAC7E,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAW9C,CAAC;AAEH,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAUxE;AAUD,uGAAuG;AACvG,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAExF;AAaD,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAIlH;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM,CA6BrE;AAuBD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,GAAG,EAAE,cAAc,GAClB,UAAU,CAcZ"}
|
package/dist/tool-gating.js
CHANGED
|
@@ -42,15 +42,62 @@ function oneLine(s) {
|
|
|
42
42
|
function truncate(s, n) {
|
|
43
43
|
return s.length <= n ? s : `${s.slice(0, n - 1)}…`;
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
45
|
+
/** Above this many registered tools, lazy loading turns itself on unless the config says otherwise. */
|
|
46
|
+
export const LAZY_TOOLS_AUTO_THRESHOLD = 200;
|
|
47
|
+
/** Whether to gate tools: an explicit setting wins; unset means "only when the list is long". */
|
|
48
|
+
export function shouldGateTools(setting, toolCount) {
|
|
49
|
+
return setting ?? toolCount > LAZY_TOOLS_AUTO_THRESHOLD;
|
|
50
|
+
}
|
|
51
|
+
/** A family needs this many members before the index folds it into one line. */
|
|
52
|
+
const FAMILY_MIN = 4;
|
|
53
|
+
/** The prefix a tool shares with its siblings: its MCP server, or the word before the first underscore. */
|
|
54
|
+
function familyPrefix(name) {
|
|
55
|
+
const mcp = /^mcp__[^_]+(?:_[^_]+)*__/.exec(name);
|
|
56
|
+
if (mcp)
|
|
57
|
+
return mcp[0];
|
|
58
|
+
const cut = name.indexOf('_');
|
|
59
|
+
return cut > 0 ? name.slice(0, cut + 1) : null;
|
|
60
|
+
}
|
|
61
|
+
/** The tools a `load_tool` name stands for: one tool, or a family written as `prefix*`. */
|
|
62
|
+
export function matchLoadableTools(name, tools) {
|
|
63
|
+
if (!name.endsWith('*'))
|
|
64
|
+
return tools.filter((t) => t.name === name);
|
|
65
|
+
const prefix = name.slice(0, -1);
|
|
66
|
+
return prefix.length === 0 ? [] : tools.filter((t) => t.name.startsWith(prefix));
|
|
67
|
+
}
|
|
68
|
+
/** Compact index of not-yet-loaded tools: one line per family, one per tool outside a family. */
|
|
46
69
|
export function buildToolIndex(hidden) {
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
.
|
|
70
|
+
const families = new Map();
|
|
71
|
+
for (const t of hidden) {
|
|
72
|
+
const prefix = familyPrefix(t.name);
|
|
73
|
+
if (prefix === null)
|
|
74
|
+
continue;
|
|
75
|
+
const members = families.get(prefix);
|
|
76
|
+
if (members)
|
|
77
|
+
members.push(t.name);
|
|
78
|
+
else
|
|
79
|
+
families.set(prefix, [t.name]);
|
|
80
|
+
}
|
|
81
|
+
const listed = new Set();
|
|
82
|
+
const lines = [];
|
|
83
|
+
for (const t of hidden) {
|
|
84
|
+
const prefix = familyPrefix(t.name);
|
|
85
|
+
const members = prefix === null ? undefined : families.get(prefix);
|
|
86
|
+
if (prefix !== null && members && members.length >= FAMILY_MIN) {
|
|
87
|
+
if (listed.has(prefix))
|
|
88
|
+
continue;
|
|
89
|
+
listed.add(prefix);
|
|
90
|
+
lines.push(`- **${prefix}*** (${members.length} tools: ${members.join(', ')})`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
lines.push(`- **${t.name}** — ${truncate(oneLine(t.description ?? ''), 100)}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
50
96
|
return (`## Loadable tools\n\n` +
|
|
51
97
|
`These tools exist but their full schemas are not loaded right now. When a ` +
|
|
52
98
|
`task needs one, call \`load_tool({ name: "<tool-name>" })\` first, then call ` +
|
|
53
|
-
`the tool on the next turn
|
|
99
|
+
`the tool on the next turn. A line ending in \`*\` is a family: load all of it ` +
|
|
100
|
+
`at once with its name, e.g. \`load_tool({ name: "computer_*" })\`.\n\n${lines.join('\n')}`);
|
|
54
101
|
}
|
|
55
102
|
function injectIntoSystem(messages, index) {
|
|
56
103
|
const out = messages.map((m) => m);
|
|
@@ -73,7 +120,10 @@ function injectIntoSystem(messages, index) {
|
|
|
73
120
|
* gated, so the system prompt stays byte-stable on turns that load nothing.
|
|
74
121
|
*/
|
|
75
122
|
export function applyLazyTools(messages, tools, log) {
|
|
76
|
-
const loaded =
|
|
123
|
+
const loaded = new Set();
|
|
124
|
+
for (const name of loadedToolNames(log))
|
|
125
|
+
for (const t of matchLoadableTools(name, tools))
|
|
126
|
+
loaded.add(t.name);
|
|
77
127
|
// Single partition pass: each tool is either visible (always-on or loaded) or
|
|
78
128
|
// hidden, never both — so one loop yields the exact same two arrays (same
|
|
79
129
|
// elements, same input order) the prior pair of complementary `filter`s did,
|
|
@@ -81,7 +131,7 @@ export function applyLazyTools(messages, tools, log) {
|
|
|
81
131
|
const visible = [];
|
|
82
132
|
const hidden = [];
|
|
83
133
|
for (const t of tools) {
|
|
84
|
-
(ALWAYS_ON_TOOLS.has(t.name) || loaded.has(t.name) ? visible : hidden).push(t);
|
|
134
|
+
(ALWAYS_ON_TOOLS.has(t.name) || t.alwaysLoaded === true || loaded.has(t.name) ? visible : hidden).push(t);
|
|
85
135
|
}
|
|
86
136
|
if (hidden.length === 0)
|
|
87
137
|
return { messages, tools };
|
package/dist/tool-gating.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-gating.js","sourceRoot":"","sources":["../src/tool-gating.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH;6EAC6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IAC1D,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,gBAAgB;CACjB,CAAC,CAAC;AAEH,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,GAAmB;IACjD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QACrC,MAAM,KAAK,GAAG,CAAC,CAAC,KAA8C,CAAC;QAC/D,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACrD,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"tool-gating.js","sourceRoot":"","sources":["../src/tool-gating.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolRegistry } from './mode.js';
|
|
2
|
+
/**
|
|
3
|
+
* The registry as a mode sees it: a tool that names its modes is left out of
|
|
4
|
+
* the others — not offered to the model, and refused if called anyway. It stays
|
|
5
|
+
* registered, so its permission and isolation are looked up as before.
|
|
6
|
+
*/
|
|
7
|
+
export declare function toolsForMode(tools: ToolRegistry, mode: string): ToolRegistry;
|
|
8
|
+
//# sourceMappingURL=tool-modes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-modes.d.ts","sourceRoot":"","sources":["../src/tool-modes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAK9C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAY5E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const offeredIn = (tool, mode) => !tool?.modes || tool.modes.includes(mode);
|
|
2
|
+
/**
|
|
3
|
+
* The registry as a mode sees it: a tool that names its modes is left out of
|
|
4
|
+
* the others — not offered to the model, and refused if called anyway. It stays
|
|
5
|
+
* registered, so its permission and isolation are looked up as before.
|
|
6
|
+
*/
|
|
7
|
+
export function toolsForMode(tools, mode) {
|
|
8
|
+
return {
|
|
9
|
+
list: () => tools.list().filter((tool) => offeredIn(tool, mode)),
|
|
10
|
+
get: (name) => {
|
|
11
|
+
const tool = tools.get(name);
|
|
12
|
+
return offeredIn(tool, mode) ? tool : undefined;
|
|
13
|
+
},
|
|
14
|
+
execute: async (name, input, signal, opts) => {
|
|
15
|
+
if (!offeredIn(tools.get(name), mode))
|
|
16
|
+
throw new Error(`${name} is not available in ${mode} mode`);
|
|
17
|
+
return tools.execute(name, input, signal, opts);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=tool-modes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-modes.js","sourceRoot":"","sources":["../src/tool-modes.ts"],"names":[],"mappings":"AAGA,MAAM,SAAS,GAAG,CAAC,IAAyB,EAAE,IAAY,EAAW,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAElH;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAmB,EAAE,IAAY;IAC5D,OAAO;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC3C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wBAAwB,IAAI,OAAO,CAAC,CAAC;YACnG,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/tool.d.ts
CHANGED
|
@@ -202,5 +202,23 @@ export interface ToolDef {
|
|
|
202
202
|
* enforces these bounds at every call. See `ToolIsolationSpec`.
|
|
203
203
|
*/
|
|
204
204
|
readonly isolation?: ToolIsolationSpec;
|
|
205
|
+
/**
|
|
206
|
+
* The tool reads state that changes outside the conversation (an app's
|
|
207
|
+
* window, a running job), so the same call between other calls is normal.
|
|
208
|
+
* The stuck-loop guard then counts only a back-to-back run of it.
|
|
209
|
+
*/
|
|
210
|
+
readonly liveState?: boolean;
|
|
211
|
+
/**
|
|
212
|
+
* Sent in full even when the tool list is gated: a tool a task starts with,
|
|
213
|
+
* where loading it first would cost a model round. Each one is paid for on
|
|
214
|
+
* every request, so mark the entry point of a family, not the family.
|
|
215
|
+
*/
|
|
216
|
+
readonly alwaysLoaded?: boolean;
|
|
217
|
+
/**
|
|
218
|
+
* The modes this tool is offered in; omitted = every mode. For a tool that
|
|
219
|
+
* means nothing elsewhere (goal mode's goal_abandon), so it is no way out of
|
|
220
|
+
* a task in a mode that never asked for it. See `toolsForMode`.
|
|
221
|
+
*/
|
|
222
|
+
readonly modes?: ReadonlyArray<string>;
|
|
205
223
|
}
|
|
206
224
|
//# sourceMappingURL=tool.d.ts.map
|
package/dist/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event-driven waiting: sleep until something says "look again", not on a
|
|
3
|
+
* fixed poll interval. A waiter resumes the moment its job reports progress,
|
|
4
|
+
* and a deadline only bounds the wait — it never means the job finished.
|
|
5
|
+
*/
|
|
6
|
+
/** Subscribes `wake` to a change signal; returns the unsubscribe. */
|
|
7
|
+
export type WakeSource = (wake: () => void) => () => void;
|
|
8
|
+
export type WaitOutcome<T> = {
|
|
9
|
+
readonly status: 'ready';
|
|
10
|
+
readonly value: T;
|
|
11
|
+
}
|
|
12
|
+
/** The deadline passed while the job was still running. */
|
|
13
|
+
| {
|
|
14
|
+
readonly status: 'timeout';
|
|
15
|
+
} | {
|
|
16
|
+
readonly status: 'aborted';
|
|
17
|
+
};
|
|
18
|
+
export interface WaitForOptions {
|
|
19
|
+
/** Every signal after which `check` may give a different answer. */
|
|
20
|
+
readonly wakeOn: ReadonlyArray<WakeSource>;
|
|
21
|
+
readonly timeoutMs?: number;
|
|
22
|
+
readonly signal?: AbortSignal;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolve once `check` returns a value (anything but `undefined`), re-checking
|
|
26
|
+
* only when a wake source fires. Subscribes BEFORE the first check, so a job
|
|
27
|
+
* that finishes between "read the status" and "start listening" is never
|
|
28
|
+
* missed. Every listener and timer is released on any outcome.
|
|
29
|
+
*/
|
|
30
|
+
export declare function waitFor<T>(check: () => T | undefined, opts: WaitForOptions): Promise<WaitOutcome<T>>;
|
|
31
|
+
/** A wake source that fires once after `ms` — for conditions that turn on time
|
|
32
|
+
* itself (a boot deadline), so they are re-checked exactly when they can flip. */
|
|
33
|
+
export declare function wakeAfter(ms: number): WakeSource;
|
|
34
|
+
//# sourceMappingURL=wait-for.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for.d.ts","sourceRoot":"","sources":["../src/wait-for.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qEAAqE;AACrE,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;AAE1D,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE;AACjD,2DAA2D;GACzD;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAEnC,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,EAC1B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAsCzB;AAED;mFACmF;AACnF,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAKhD"}
|
package/dist/wait-for.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event-driven waiting: sleep until something says "look again", not on a
|
|
3
|
+
* fixed poll interval. A waiter resumes the moment its job reports progress,
|
|
4
|
+
* and a deadline only bounds the wait — it never means the job finished.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Resolve once `check` returns a value (anything but `undefined`), re-checking
|
|
8
|
+
* only when a wake source fires. Subscribes BEFORE the first check, so a job
|
|
9
|
+
* that finishes between "read the status" and "start listening" is never
|
|
10
|
+
* missed. Every listener and timer is released on any outcome.
|
|
11
|
+
*/
|
|
12
|
+
export function waitFor(check, opts) {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
const { signal, timeoutMs } = opts;
|
|
15
|
+
if (signal?.aborted) {
|
|
16
|
+
resolve({ status: 'aborted' });
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
let settled = false;
|
|
20
|
+
let timer;
|
|
21
|
+
const unsubscribes = [];
|
|
22
|
+
const finish = (outcome) => {
|
|
23
|
+
if (settled)
|
|
24
|
+
return;
|
|
25
|
+
settled = true;
|
|
26
|
+
if (timer !== undefined)
|
|
27
|
+
clearTimeout(timer);
|
|
28
|
+
signal?.removeEventListener('abort', onAbort);
|
|
29
|
+
for (const unsubscribe of unsubscribes)
|
|
30
|
+
unsubscribe();
|
|
31
|
+
if (outcome instanceof Error)
|
|
32
|
+
reject(outcome);
|
|
33
|
+
else
|
|
34
|
+
resolve(outcome);
|
|
35
|
+
};
|
|
36
|
+
const onAbort = () => finish({ status: 'aborted' });
|
|
37
|
+
const recheck = () => {
|
|
38
|
+
if (settled)
|
|
39
|
+
return;
|
|
40
|
+
let value;
|
|
41
|
+
try {
|
|
42
|
+
value = check();
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
finish(error instanceof Error ? error : new Error(String(error)));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (value !== undefined)
|
|
49
|
+
finish({ status: 'ready', value });
|
|
50
|
+
};
|
|
51
|
+
for (const source of opts.wakeOn)
|
|
52
|
+
unsubscribes.push(source(recheck));
|
|
53
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
54
|
+
if (timeoutMs !== undefined)
|
|
55
|
+
timer = setTimeout(() => finish({ status: 'timeout' }), timeoutMs);
|
|
56
|
+
recheck();
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/** A wake source that fires once after `ms` — for conditions that turn on time
|
|
60
|
+
* itself (a boot deadline), so they are re-checked exactly when they can flip. */
|
|
61
|
+
export function wakeAfter(ms) {
|
|
62
|
+
return (wake) => {
|
|
63
|
+
const timer = setTimeout(wake, ms);
|
|
64
|
+
return () => clearTimeout(timer);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=wait-for.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for.js","sourceRoot":"","sources":["../src/wait-for.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CACrB,KAA0B,EAC1B,IAAoB;IAEpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACnC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAgD,CAAC;QACrD,MAAM,YAAY,GAAsB,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,CAAC,OAA+B,EAAQ,EAAE;YACvD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,KAAK,MAAM,WAAW,IAAI,YAAY;gBAAE,WAAW,EAAE,CAAC;YACtD,IAAI,OAAO,YAAY,KAAK;gBAAE,MAAM,CAAC,OAAO,CAAC,CAAC;;gBACzC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,IAAI,OAAO;gBAAE,OAAO;YACpB,IAAI,KAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,KAAK,GAAG,KAAK,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClE,OAAO;YACT,CAAC;YACD,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM;YAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACrE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,SAAS,KAAK,SAAS;YAAE,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAChG,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moxxy/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.0",
|
|
4
4
|
"description": "Typed public surface for the moxxy framework: event types, define* factories, lifecycle hook signatures.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"moxxy",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"author": "Michal Makowski <michal.makowski97@gmail.com>",
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"engines": {
|
|
37
|
-
"node": ">=
|
|
37
|
+
"node": ">=22.19.0"
|
|
38
38
|
},
|
|
39
39
|
"sideEffects": false,
|
|
40
40
|
"type": "module",
|
|
@@ -57,6 +57,10 @@
|
|
|
57
57
|
"types": "./dist/workflow-approval.d.ts",
|
|
58
58
|
"import": "./dist/workflow-approval.js"
|
|
59
59
|
},
|
|
60
|
+
"./skill-mentions": {
|
|
61
|
+
"types": "./dist/skill-mentions.d.ts",
|
|
62
|
+
"import": "./dist/skill-mentions.js"
|
|
63
|
+
},
|
|
60
64
|
"./transcriber": {
|
|
61
65
|
"types": "./dist/transcriber.d.ts",
|
|
62
66
|
"import": "./dist/transcriber.js"
|
|
@@ -72,15 +76,15 @@
|
|
|
72
76
|
},
|
|
73
77
|
"peerDependencies": {
|
|
74
78
|
"zod": "^3.25.76",
|
|
75
|
-
"undici": "^
|
|
79
|
+
"undici": "^8.11.2"
|
|
76
80
|
},
|
|
77
81
|
"devDependencies": {
|
|
78
82
|
"typescript": "^6.0.3",
|
|
79
|
-
"undici": "^
|
|
80
|
-
"vitest": "^
|
|
83
|
+
"undici": "^8.11.2",
|
|
84
|
+
"vitest": "^5.0.3",
|
|
81
85
|
"zod": "^3.25.76",
|
|
82
|
-
"@moxxy/
|
|
83
|
-
"@moxxy/
|
|
86
|
+
"@moxxy/tsconfig": "0.0.0",
|
|
87
|
+
"@moxxy/vitest-preset": "0.0.0"
|
|
84
88
|
},
|
|
85
89
|
"peerDependenciesMeta": {
|
|
86
90
|
"undici": {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { AUTO_APPROVE_PLUGIN_ID, AUTO_APPROVE_SUBTYPE, autoApproveFromEvents, autoApproveSwitch } from './auto-approve.js';
|
|
3
|
+
import type { MoxxyEvent } from './events.js';
|
|
4
|
+
|
|
5
|
+
let seq = 0;
|
|
6
|
+
const base = () => ({ id: `e${seq}`, seq: seq++, ts: 0, sessionId: 's', turnId: 't' }) as const;
|
|
7
|
+
const switched = (enabled: unknown): MoxxyEvent =>
|
|
8
|
+
({ ...base(), type: 'plugin_event', source: 'user', pluginId: AUTO_APPROVE_PLUGIN_ID, subtype: AUTO_APPROVE_SUBTYPE, payload: { enabled } }) as unknown as MoxxyEvent;
|
|
9
|
+
const prompt = (): MoxxyEvent => ({ ...base(), type: 'user_prompt', source: 'user', text: 'hi' }) as unknown as MoxxyEvent;
|
|
10
|
+
const otherPlugin = (): MoxxyEvent =>
|
|
11
|
+
({ ...base(), type: 'plugin_event', source: 'plugin', pluginId: 'x', subtype: AUTO_APPROVE_SUBTYPE, payload: { enabled: true } }) as unknown as MoxxyEvent;
|
|
12
|
+
|
|
13
|
+
describe('auto-approve fold', () => {
|
|
14
|
+
it('is off for a conversation that never switched it', () => {
|
|
15
|
+
expect(autoApproveFromEvents([prompt(), prompt()])).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('follows the last recorded switch', () => {
|
|
19
|
+
expect(autoApproveFromEvents([switched(true), prompt()])).toBe(true);
|
|
20
|
+
expect(autoApproveFromEvents([switched(true), prompt(), switched(false)])).toBe(false);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('reads a switch only from the auto-approve record itself', () => {
|
|
24
|
+
expect(autoApproveSwitch(switched(true))).toBe(true);
|
|
25
|
+
expect(autoApproveSwitch(prompt())).toBeNull();
|
|
26
|
+
expect(autoApproveSwitch(otherPlugin())).toBeNull();
|
|
27
|
+
expect(autoApproveSwitch(switched('yes'))).toBeNull();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { MoxxyEvent } from './events.js';
|
|
2
|
+
import { asPluginId } from './ids.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Auto-approve belongs to the conversation, not to one client: a switch is
|
|
6
|
+
* recorded in the event log as a `plugin_event`, so the desktop, the TUI and a
|
|
7
|
+
* channel bot attached to the same session all see one state, and the state
|
|
8
|
+
* is a pure fold over the log (a reset log starts with it off).
|
|
9
|
+
*/
|
|
10
|
+
export const AUTO_APPROVE_PLUGIN_ID = asPluginId('@moxxy/auto-approve');
|
|
11
|
+
export const AUTO_APPROVE_SUBTYPE = 'auto_approve';
|
|
12
|
+
|
|
13
|
+
/** The on/off an event records, or null when it isn't an auto-approve switch. */
|
|
14
|
+
export function autoApproveSwitch(event: MoxxyEvent): boolean | null {
|
|
15
|
+
if (event.type !== 'plugin_event') return null;
|
|
16
|
+
if (event.pluginId !== AUTO_APPROVE_PLUGIN_ID || event.subtype !== AUTO_APPROVE_SUBTYPE) return null;
|
|
17
|
+
const enabled = (event.payload as { enabled?: unknown } | null)?.enabled;
|
|
18
|
+
return typeof enabled === 'boolean' ? enabled : null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** A conversation's auto-approve state: the last recorded switch wins; off until one is recorded. */
|
|
22
|
+
export function autoApproveFromEvents(events: ReadonlyArray<MoxxyEvent>): boolean {
|
|
23
|
+
for (let i = events.length - 1; i >= 0; i -= 1) {
|
|
24
|
+
const event = events[i];
|
|
25
|
+
const enabled = event ? autoApproveSwitch(event) : null;
|
|
26
|
+
if (enabled !== null) return enabled;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
package/src/channel-auth.test.ts
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
tokenFromWsProtocolHeader,
|
|
10
10
|
MOXXY_WS_SUBPROTOCOL,
|
|
11
11
|
} from './channel-auth.js';
|
|
12
|
+
import { removeDirSync } from '@moxxy/vitest-preset/fs';
|
|
12
13
|
|
|
13
14
|
let dir: string;
|
|
14
15
|
|
|
@@ -17,7 +18,7 @@ beforeEach(() => {
|
|
|
17
18
|
});
|
|
18
19
|
|
|
19
20
|
afterEach(() => {
|
|
20
|
-
|
|
21
|
+
removeDirSync(dir);
|
|
21
22
|
});
|
|
22
23
|
|
|
23
24
|
describe('resolveChannelToken', () => {
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
stopDedicatedChannel,
|
|
20
20
|
} from './channel-control.js';
|
|
21
21
|
import { channelStatusPath, writeChannelStatus } from './channel-status.js';
|
|
22
|
+
import { removeDirSync } from '@moxxy/vitest-preset/fs';
|
|
22
23
|
|
|
23
24
|
// A pid that is essentially never alive (above the platform max) → ESRCH.
|
|
24
25
|
const DEAD_PID = 2_000_000_000;
|
|
@@ -36,7 +37,7 @@ beforeEach(() => {
|
|
|
36
37
|
afterEach(() => {
|
|
37
38
|
if (prevHome === undefined) delete process.env.MOXXY_HOME;
|
|
38
39
|
else process.env.MOXXY_HOME = prevHome;
|
|
39
|
-
|
|
40
|
+
removeDirSync(home);
|
|
40
41
|
vi.restoreAllMocks();
|
|
41
42
|
});
|
|
42
43
|
|
package/src/channel.ts
CHANGED
|
@@ -325,6 +325,24 @@ export function exitAfterPairRequested(
|
|
|
325
325
|
);
|
|
326
326
|
}
|
|
327
327
|
|
|
328
|
+
/**
|
|
329
|
+
* The end of every successful pair flow. The bot that paired was started on the
|
|
330
|
+
* subcommand's probe session — booted WITHOUT an active provider — so it must
|
|
331
|
+
* not keep serving (every message would fail "No active provider"). Stop it,
|
|
332
|
+
* then either hand control back to an orchestrator ({@link EXIT_AFTER_PAIR_FLAG})
|
|
333
|
+
* or start the channel for real through `startChannel()`, which boots a full
|
|
334
|
+
* session with the configured model.
|
|
335
|
+
*/
|
|
336
|
+
export async function finishPairing(
|
|
337
|
+
ctx: Pick<ChannelSubcommandContext, 'args' | 'deps' | 'startChannel'>,
|
|
338
|
+
stopPairingBot: () => Promise<void>,
|
|
339
|
+
startOptions?: Readonly<Record<string, unknown>>,
|
|
340
|
+
): Promise<number> {
|
|
341
|
+
await stopPairingBot();
|
|
342
|
+
if (exitAfterPairRequested(ctx)) return 0;
|
|
343
|
+
return ctx.startChannel(startOptions);
|
|
344
|
+
}
|
|
345
|
+
|
|
328
346
|
/**
|
|
329
347
|
* Read-only registry of channels available in a Session. Implementation lives
|
|
330
348
|
* in @moxxy/core.
|
package/src/client-session.ts
CHANGED
|
@@ -96,4 +96,7 @@ export interface ClientSession extends SessionLike {
|
|
|
96
96
|
readonly synthesizers: SynthesizersClientView;
|
|
97
97
|
readonly requirements: RequirementsClientView;
|
|
98
98
|
readonly permissions: PermissionsClientView;
|
|
99
|
+
/** Switch the conversation's auto-approve (read it from `getInfo().autoApprove`).
|
|
100
|
+
* Optional: a client of a runner without the shared switch has none. */
|
|
101
|
+
setAutoApprove?(enabled: boolean): Promise<void>;
|
|
99
102
|
}
|