@moxxy/sdk 0.41.3 → 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.
Files changed (172) hide show
  1. package/dist/auto-approve.d.ts +14 -0
  2. package/dist/auto-approve.d.ts.map +1 -0
  3. package/dist/auto-approve.js +29 -0
  4. package/dist/auto-approve.js.map +1 -0
  5. package/dist/channel.d.ts +9 -0
  6. package/dist/channel.d.ts.map +1 -1
  7. package/dist/channel.js +14 -0
  8. package/dist/channel.js.map +1 -1
  9. package/dist/client-session.d.ts +3 -0
  10. package/dist/client-session.d.ts.map +1 -1
  11. package/dist/compactor-helpers.d.ts +1 -1
  12. package/dist/compactor-helpers.d.ts.map +1 -1
  13. package/dist/compactor-helpers.js +14 -4
  14. package/dist/compactor-helpers.js.map +1 -1
  15. package/dist/computer-control.d.ts +77 -3
  16. package/dist/computer-control.d.ts.map +1 -1
  17. package/dist/computer-control.js +12 -1
  18. package/dist/computer-control.js.map +1 -1
  19. package/dist/conduct.d.ts +16 -0
  20. package/dist/conduct.d.ts.map +1 -0
  21. package/dist/conduct.js +33 -0
  22. package/dist/conduct.js.map +1 -0
  23. package/dist/define.d.ts +3 -0
  24. package/dist/define.d.ts.map +1 -1
  25. package/dist/define.js +3 -0
  26. package/dist/define.js.map +1 -1
  27. package/dist/elision-state.d.ts +9 -0
  28. package/dist/elision-state.d.ts.map +1 -1
  29. package/dist/elision-state.js +16 -3
  30. package/dist/elision-state.js.map +1 -1
  31. package/dist/events.d.ts +13 -1
  32. package/dist/events.d.ts.map +1 -1
  33. package/dist/fs-utils.d.ts.map +1 -1
  34. package/dist/fs-utils.js +43 -2
  35. package/dist/fs-utils.js.map +1 -1
  36. package/dist/index.d.ts +14 -7
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +12 -5
  39. package/dist/index.js.map +1 -1
  40. package/dist/locale.d.ts +9 -0
  41. package/dist/locale.d.ts.map +1 -0
  42. package/dist/locale.js +16 -0
  43. package/dist/locale.js.map +1 -0
  44. package/dist/mode/checkpoint.d.ts +7 -0
  45. package/dist/mode/checkpoint.d.ts.map +1 -1
  46. package/dist/mode/collect-stream.d.ts.map +1 -1
  47. package/dist/mode/collect-stream.js +3 -2
  48. package/dist/mode/collect-stream.js.map +1 -1
  49. package/dist/mode/project-messages.d.ts +7 -0
  50. package/dist/mode/project-messages.d.ts.map +1 -1
  51. package/dist/mode/project-messages.js +26 -4
  52. package/dist/mode/project-messages.js.map +1 -1
  53. package/dist/mode/react-loop.d.ts.map +1 -1
  54. package/dist/mode/react-loop.js +5 -3
  55. package/dist/mode/react-loop.js.map +1 -1
  56. package/dist/mode/stuck-loop.d.ts +8 -2
  57. package/dist/mode/stuck-loop.d.ts.map +1 -1
  58. package/dist/mode/stuck-loop.js +9 -1
  59. package/dist/mode/stuck-loop.js.map +1 -1
  60. package/dist/mode-helpers.d.ts +1 -1
  61. package/dist/mode-helpers.d.ts.map +1 -1
  62. package/dist/mode-helpers.js +1 -1
  63. package/dist/mode-helpers.js.map +1 -1
  64. package/dist/mode.d.ts +10 -3
  65. package/dist/mode.d.ts.map +1 -1
  66. package/dist/mode.js.map +1 -1
  67. package/dist/permission.d.ts +6 -0
  68. package/dist/permission.d.ts.map +1 -1
  69. package/dist/progress.d.ts +24 -0
  70. package/dist/progress.d.ts.map +1 -0
  71. package/dist/progress.js +59 -0
  72. package/dist/progress.js.map +1 -0
  73. package/dist/provider.d.ts +11 -1
  74. package/dist/provider.d.ts.map +1 -1
  75. package/dist/resolvers.js +2 -2
  76. package/dist/resolvers.js.map +1 -1
  77. package/dist/schemas.d.ts +9 -0
  78. package/dist/schemas.d.ts.map +1 -1
  79. package/dist/schemas.js +3 -0
  80. package/dist/schemas.js.map +1 -1
  81. package/dist/server.d.ts +1 -0
  82. package/dist/server.d.ts.map +1 -1
  83. package/dist/server.js +2 -0
  84. package/dist/server.js.map +1 -1
  85. package/dist/session-like.d.ts +21 -1
  86. package/dist/session-like.d.ts.map +1 -1
  87. package/dist/skill-mentions.d.ts +38 -0
  88. package/dist/skill-mentions.d.ts.map +1 -0
  89. package/dist/skill-mentions.js +84 -0
  90. package/dist/skill-mentions.js.map +1 -0
  91. package/dist/skill.d.ts +6 -0
  92. package/dist/skill.d.ts.map +1 -1
  93. package/dist/supersede.d.ts +31 -0
  94. package/dist/supersede.d.ts.map +1 -0
  95. package/dist/supersede.js +34 -0
  96. package/dist/supersede.js.map +1 -0
  97. package/dist/tool-dispatch.d.ts.map +1 -1
  98. package/dist/tool-dispatch.js +3 -2
  99. package/dist/tool-dispatch.js.map +1 -1
  100. package/dist/tool-gating.d.ts +9 -1
  101. package/dist/tool-gating.d.ts.map +1 -1
  102. package/dist/tool-gating.js +57 -7
  103. package/dist/tool-gating.js.map +1 -1
  104. package/dist/tool-modes.d.ts +8 -0
  105. package/dist/tool-modes.d.ts.map +1 -0
  106. package/dist/tool-modes.js +21 -0
  107. package/dist/tool-modes.js.map +1 -0
  108. package/dist/tool.d.ts +18 -0
  109. package/dist/tool.d.ts.map +1 -1
  110. package/dist/wait-for.d.ts +34 -0
  111. package/dist/wait-for.d.ts.map +1 -0
  112. package/dist/wait-for.js +67 -0
  113. package/dist/wait-for.js.map +1 -0
  114. package/package.json +9 -5
  115. package/src/auto-approve.test.ts +29 -0
  116. package/src/auto-approve.ts +29 -0
  117. package/src/channel-auth.test.ts +2 -1
  118. package/src/channel-control.test.ts +2 -1
  119. package/src/channel.ts +18 -0
  120. package/src/client-session.ts +3 -0
  121. package/src/compactor-helpers.test.ts +26 -0
  122. package/src/compactor-helpers.ts +16 -4
  123. package/src/computer-control.test.ts +11 -0
  124. package/src/computer-control.ts +16 -1
  125. package/src/conduct.test.ts +62 -0
  126. package/src/conduct.ts +37 -0
  127. package/src/cross-process-lock.test.ts +3 -2
  128. package/src/define.ts +6 -0
  129. package/src/elision-state.ts +24 -3
  130. package/src/events.ts +13 -1
  131. package/src/finish-pairing.test.ts +45 -0
  132. package/src/fs-utils.test.ts +40 -6
  133. package/src/fs-utils.ts +42 -2
  134. package/src/index.ts +38 -1
  135. package/src/json-file-store.test.ts +5 -3
  136. package/src/locale.test.ts +31 -0
  137. package/src/locale.ts +16 -0
  138. package/src/mode/checkpoint.ts +7 -0
  139. package/src/mode/collect-stream.ts +3 -2
  140. package/src/mode/project-messages.test.ts +72 -1
  141. package/src/mode/project-messages.ts +26 -5
  142. package/src/mode/react-loop.ts +6 -3
  143. package/src/mode/stuck-loop.ts +14 -3
  144. package/src/mode-helpers.ts +1 -0
  145. package/src/mode.ts +10 -3
  146. package/src/permission.ts +6 -0
  147. package/src/process-invocation.test.ts +3 -9
  148. package/src/progress.test.ts +81 -0
  149. package/src/progress.ts +73 -0
  150. package/src/provider.ts +12 -1
  151. package/src/resolvers.test.ts +14 -1
  152. package/src/resolvers.ts +2 -2
  153. package/src/schemas.ts +3 -0
  154. package/src/server.ts +2 -0
  155. package/src/session-like.ts +21 -1
  156. package/src/skill-mentions.test.ts +113 -0
  157. package/src/skill-mentions.ts +108 -0
  158. package/src/skill.ts +6 -0
  159. package/src/stuck-loop.test.ts +12 -0
  160. package/src/supersede.test.ts +115 -0
  161. package/src/supersede.ts +55 -0
  162. package/src/test-isolation.test.ts +26 -0
  163. package/src/token-efficiency.test.ts +7 -1
  164. package/src/tool-dispatch.test.ts +13 -0
  165. package/src/tool-dispatch.ts +3 -2
  166. package/src/tool-gating.test.ts +81 -0
  167. package/src/tool-gating.ts +53 -7
  168. package/src/tool-modes.test.ts +45 -0
  169. package/src/tool-modes.ts +23 -0
  170. package/src/tool.ts +18 -0
  171. package/src/wait-for.test.ts +132 -0
  172. package/src/wait-for.ts +79 -0
@@ -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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"}
@@ -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
- /** Compact index (name + 1-line description) of not-yet-loaded tools. */
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,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM,CAUrE;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,CAaZ"}
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"}
@@ -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
- /** Compact index (name + 1-line description) of not-yet-loaded tools. */
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 lines = hidden
48
- .map((t) => `- **${t.name}** — ${truncate(oneLine(t.description ?? ''), 100)}`)
49
- .join('\n');
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.\n\n${lines}`);
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 = loadedToolNames(log);
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 };
@@ -1 +1 @@
1
- {"version":3,"file":"tool-gating.js","sourceRoot":"","sources":["../src/tool-gating.ts"],"names":[],"mappings":"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"}
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
@@ -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"}
@@ -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.41.3",
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": ">=20.19.0"
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,12 +76,12 @@
72
76
  },
73
77
  "peerDependencies": {
74
78
  "zod": "^3.25.76",
75
- "undici": "^6.28.1"
79
+ "undici": "^8.11.2"
76
80
  },
77
81
  "devDependencies": {
78
82
  "typescript": "^6.0.3",
79
- "undici": "^6.28.1",
80
- "vitest": "^4.1.11",
83
+ "undici": "^8.11.2",
84
+ "vitest": "^5.0.3",
81
85
  "zod": "^3.25.76",
82
86
  "@moxxy/tsconfig": "0.0.0",
83
87
  "@moxxy/vitest-preset": "0.0.0"
@@ -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
+ }
@@ -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
- fs.rmSync(dir, { recursive: true, force: true });
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
- fs.rmSync(home, { recursive: true, force: true });
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.
@@ -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
  }
@@ -254,6 +254,28 @@ describe('runCompactionIfNeeded', () => {
254
254
  expect(observedWindow).toBe(800_000);
255
255
  });
256
256
 
257
+ it('uses a user-supplied context window for a custom model before provider fallback', async () => {
258
+ let observedWindow = -1;
259
+ const compactor: CompactorDef = {
260
+ name: 'inspect-custom-window',
261
+ shouldCompact: (_log, budget) => {
262
+ observedWindow = budget.contextWindow;
263
+ return false;
264
+ },
265
+ compact: async () => { throw new Error('should not run'); },
266
+ };
267
+ const ctx = makeCtx({
268
+ compactor,
269
+ contextWindow: 128_000,
270
+ ctxModelId: 'vendor/model-v2',
271
+ contextWindowOverride: 200_000,
272
+ });
273
+
274
+ await runCompactionIfNeeded(ctx);
275
+
276
+ expect(observedWindow).toBe(200_000);
277
+ });
278
+
257
279
  it('force-compacts even when the provider exposes no usable context window', async () => {
258
280
  // Reactive overflow recovery: the provider already said the prompt is too
259
281
  // big, so a missing/zero window must NOT block the forced compaction.
@@ -525,6 +547,7 @@ interface MakeCtxOpts {
525
547
  readonly compactor: CompactorDef | null;
526
548
  readonly model?: string;
527
549
  readonly contextWindow?: number;
550
+ readonly contextWindowOverride?: number;
528
551
  readonly events?: ReadonlyArray<MoxxyEvent>;
529
552
  /** Set ctx.model to an id the provider's descriptor list does NOT contain,
530
553
  * so `models.find(...)` misses and the models[0] fallback must kick in. */
@@ -561,6 +584,9 @@ function makeCtx(opts: MakeCtxOpts): ModeContext & { emitted: EmittedEvent[] } {
561
584
  // ctx.model may intentionally differ from the descriptor id to exercise the
562
585
  // unlisted-model fallback.
563
586
  model: opts.ctxModelId ?? opts.model ?? 'fake-model',
587
+ ...(opts.contextWindowOverride !== undefined
588
+ ? { contextWindowOverride: opts.contextWindowOverride }
589
+ : {}),
564
590
  provider,
565
591
  tools: { list: () => [], get: () => undefined, execute: async () => undefined },
566
592
  skills: { list: () => [], get: () => undefined, byName: () => undefined, filterByTriggers: () => [] },