@moxxy/sdk 0.1.2 → 0.1.3

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 (96) hide show
  1. package/README.md +73 -73
  2. package/dist/compactor-helpers.d.ts +4 -1
  3. package/dist/compactor-helpers.d.ts.map +1 -1
  4. package/dist/compactor-helpers.js +50 -21
  5. package/dist/compactor-helpers.js.map +1 -1
  6. package/dist/define.d.ts +4 -0
  7. package/dist/define.d.ts.map +1 -1
  8. package/dist/define.js +6 -0
  9. package/dist/define.js.map +1 -1
  10. package/dist/embedding.d.ts +17 -0
  11. package/dist/embedding.d.ts.map +1 -1
  12. package/dist/errors.d.ts +1 -1
  13. package/dist/errors.d.ts.map +1 -1
  14. package/dist/errors.js.map +1 -1
  15. package/dist/fs-utils.d.ts +27 -0
  16. package/dist/fs-utils.d.ts.map +1 -0
  17. package/dist/fs-utils.js +44 -0
  18. package/dist/fs-utils.js.map +1 -0
  19. package/dist/http-utils.d.ts +16 -0
  20. package/dist/http-utils.d.ts.map +1 -0
  21. package/dist/http-utils.js +40 -0
  22. package/dist/http-utils.js.map +1 -0
  23. package/dist/index.d.ts +12 -6
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +9 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/mode-helpers.d.ts +58 -0
  28. package/dist/mode-helpers.d.ts.map +1 -1
  29. package/dist/mode-helpers.js +119 -0
  30. package/dist/mode-helpers.js.map +1 -1
  31. package/dist/mode.d.ts +8 -0
  32. package/dist/mode.d.ts.map +1 -1
  33. package/dist/mutex.d.ts +15 -0
  34. package/dist/mutex.d.ts.map +1 -0
  35. package/dist/mutex.js +15 -0
  36. package/dist/mutex.js.map +1 -0
  37. package/dist/plugin.d.ts +27 -1
  38. package/dist/plugin.d.ts.map +1 -1
  39. package/dist/provider-utils.d.ts +6 -0
  40. package/dist/provider-utils.d.ts.map +1 -1
  41. package/dist/provider-utils.js +8 -0
  42. package/dist/provider-utils.js.map +1 -1
  43. package/dist/resolvers.d.ts +52 -0
  44. package/dist/resolvers.d.ts.map +1 -0
  45. package/dist/resolvers.js +123 -0
  46. package/dist/resolvers.js.map +1 -0
  47. package/dist/schemas.d.ts +24 -24
  48. package/dist/session-like.d.ts +85 -1
  49. package/dist/session-like.d.ts.map +1 -1
  50. package/dist/voice.d.ts +36 -0
  51. package/dist/voice.d.ts.map +1 -0
  52. package/dist/voice.js +82 -0
  53. package/dist/voice.js.map +1 -0
  54. package/dist/workflow.d.ts +144 -0
  55. package/dist/workflow.d.ts.map +1 -0
  56. package/dist/workflow.js +14 -0
  57. package/dist/workflow.js.map +1 -0
  58. package/package.json +14 -14
  59. package/src/compactor-helpers.test.ts +41 -0
  60. package/src/compactor-helpers.ts +53 -19
  61. package/src/define.ts +10 -0
  62. package/src/embedding.ts +18 -0
  63. package/src/errors.ts +3 -0
  64. package/src/fs-utils.test.ts +61 -0
  65. package/src/fs-utils.ts +55 -0
  66. package/src/http-utils.test.ts +36 -0
  67. package/src/http-utils.ts +40 -0
  68. package/src/index.ts +58 -3
  69. package/src/mode-helpers.ts +169 -0
  70. package/src/mode.ts +8 -0
  71. package/src/mutex.test.ts +36 -0
  72. package/src/mutex.ts +31 -0
  73. package/src/plugin.ts +27 -1
  74. package/src/provider-utils.ts +9 -0
  75. package/src/resolvers.test.ts +45 -0
  76. package/src/resolvers.ts +164 -0
  77. package/src/session-like.ts +87 -1
  78. package/src/stuck-loop.test.ts +42 -0
  79. package/src/voice.ts +103 -0
  80. package/src/workflow.ts +165 -0
  81. package/dist/command-sync.d.ts +0 -23
  82. package/dist/command-sync.d.ts.map +0 -1
  83. package/dist/command-sync.js +0 -36
  84. package/dist/command-sync.js.map +0 -1
  85. package/dist/loop-helpers.d.ts +0 -68
  86. package/dist/loop-helpers.d.ts.map +0 -1
  87. package/dist/loop-helpers.js +0 -283
  88. package/dist/loop-helpers.js.map +0 -1
  89. package/dist/loop.d.ts +0 -106
  90. package/dist/loop.d.ts.map +0 -1
  91. package/dist/loop.js +0 -2
  92. package/dist/loop.js.map +0 -1
  93. package/dist/plugin-kind.d.ts +0 -10
  94. package/dist/plugin-kind.d.ts.map +0 -1
  95. package/dist/plugin-kind.js +0 -31
  96. package/dist/plugin-kind.js.map +0 -1
package/dist/plugin.d.ts CHANGED
@@ -3,6 +3,8 @@ import type { CacheStrategyDef } from './cache-strategy.js';
3
3
  import type { ChannelDef } from './channel.js';
4
4
  import type { CommandDef } from './command.js';
5
5
  import type { CompactorDef } from './compactor.js';
6
+ import type { EmbedderDef } from './embedding.js';
7
+ import type { Isolator } from './isolation.js';
6
8
  import type { LifecycleHooks } from './hooks.js';
7
9
  import type { ModeDef } from './mode.js';
8
10
  import type { ProviderDef } from './provider.js';
@@ -11,7 +13,8 @@ import type { ToolDef } from './tool.js';
11
13
  import type { TranscriberDef } from './transcriber.js';
12
14
  import type { ViewRendererDef } from './view-renderer.js';
13
15
  import type { TunnelProviderDef } from './tunnel.js';
14
- export type PluginKind = 'tools' | 'provider' | 'mode' | 'compactor' | 'cache-strategy' | 'view-renderer' | 'tunnel-provider' | 'mcp' | 'cli' | 'channel' | 'hooks' | 'agent' | 'command' | 'transcriber';
16
+ import type { WorkflowExecutorDef } from './workflow.js';
17
+ export type PluginKind = 'tools' | 'provider' | 'mode' | 'compactor' | 'cache-strategy' | 'view-renderer' | 'tunnel-provider' | 'mcp' | 'cli' | 'channel' | 'hooks' | 'agent' | 'command' | 'transcriber' | 'embedder' | 'isolator' | 'workflow-executor';
15
18
  export interface PluginSpec {
16
19
  readonly name: string;
17
20
  readonly version?: string;
@@ -45,6 +48,22 @@ export interface PluginSpec {
45
48
  * the active provider does not advertise `supportsAudio`.
46
49
  */
47
50
  readonly transcribers?: ReadonlyArray<TranscriberDef>;
51
+ /**
52
+ * Text-embedding backends contributed by the plugin. Selected by name via
53
+ * `session.embedders.setActive(name, config)`; @moxxy/plugin-memory uses the
54
+ * active embedder for semantic recall. `createClient` is lazy so a discovered
55
+ * embedder plugin never pulls its (often heavy) runtime in until selected.
56
+ */
57
+ readonly embedders?: ReadonlyArray<EmbedderDef>;
58
+ /**
59
+ * Capability isolators contributed by the plugin (worker_threads, subprocess,
60
+ * wasm, …). Registered into the active security layer's `IsolatorRegistry`
61
+ * and selected by name via `security.isolator` config. Registration alone is
62
+ * inert — a contributed isolator is NEVER auto-activated as the sandbox
63
+ * boundary; the user must opt in by name (so a rogue plugin can't silently
64
+ * weaken isolation).
65
+ */
66
+ readonly isolators?: ReadonlyArray<Isolator>;
48
67
  /**
49
68
  * Typed subagent kinds the plugin contributes. Each becomes
50
69
  * dispatchable as `dispatch_agent({ agentType: <name>, ... })`.
@@ -62,6 +81,13 @@ export interface PluginSpec {
62
81
  * pickers, raw-mode toggles) inside the channel itself.
63
82
  */
64
83
  readonly commands?: ReadonlyArray<CommandDef>;
84
+ /**
85
+ * Workflow-execution strategies contributed by the plugin. One is active per
86
+ * session (selected via `session.workflowExecutors.setActive(name)`); the
87
+ * active executor runs a workflow DAG. `@moxxy/plugin-workflows` ships the
88
+ * default `dag` executor.
89
+ */
90
+ readonly workflowExecutors?: ReadonlyArray<WorkflowExecutorDef>;
65
91
  readonly hooks?: LifecycleHooks;
66
92
  readonly skillsDir?: string;
67
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,GAAG,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,mBAAmB,CAAC;AAE1P,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAClD;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC3D;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACxD;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACtD;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAChD;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1C;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CACzD"}
@@ -4,6 +4,12 @@
4
4
  */
5
5
  /** Canonical stop reasons emitted on `message_end` events. */
6
6
  export type StopReason = 'end_turn' | 'tool_use' | 'max_tokens' | 'stop_sequence' | 'error';
7
+ /**
8
+ * Rough token estimate for a blob of text: ~4 chars per token. The shared
9
+ * fallback for a provider's `countTokens` when no native tokenizer is wired —
10
+ * previously each provider hardcoded `Math.ceil(text.length / 4)` independently.
11
+ */
12
+ export declare function estimateTextTokens(text: string): number;
7
13
  /**
8
14
  * Heuristic: should a provider request retry on this error? Used by stream
9
15
  * modes to attach a `retryable: boolean` flag to the `error` event so callers
@@ -1 +1 @@
1
- {"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,OAAO,CAAC;AAE5F;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAYtD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,GAAG,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9D;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAYzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAyGxD"}
1
+ {"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,OAAO,CAAC;AAE5F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAYtD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,GAAG,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9D;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAYzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAyGxD"}
@@ -3,6 +3,14 @@
3
3
  * are only allowed to depend on @moxxy/sdk, not core.
4
4
  */
5
5
  import { classifyNetworkError } from './errors.js';
6
+ /**
7
+ * Rough token estimate for a blob of text: ~4 chars per token. The shared
8
+ * fallback for a provider's `countTokens` when no native tokenizer is wired —
9
+ * previously each provider hardcoded `Math.ceil(text.length / 4)` independently.
10
+ */
11
+ export function estimateTextTokens(text) {
12
+ return Math.ceil(text.length / 4);
13
+ }
6
14
  /**
7
15
  * Heuristic: should a provider request retry on this error? Used by stream
8
16
  * modes to attach a `retryable: boolean` flag to the `error` event so callers
@@ -1 +1 @@
1
- {"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { PendingToolCall, PermissionContext, PermissionDecision, PermissionResolver, PermissionRule } from './permission.js';
2
+ export declare const autoAllowResolver: PermissionResolver;
3
+ export declare const denyByDefaultResolver: PermissionResolver;
4
+ export interface CallbackResolverOptions {
5
+ readonly name?: string;
6
+ readonly callback: (call: PendingToolCall, ctx: PermissionContext) => Promise<PermissionDecision>;
7
+ }
8
+ export declare function createCallbackResolver(opts: CallbackResolverOptions): PermissionResolver;
9
+ export declare function createAllowListResolver(toolNames: ReadonlyArray<string>): PermissionResolver;
10
+ export type PermissionPromptHandler = (call: PendingToolCall, ctx: PermissionContext) => Promise<PermissionDecision>;
11
+ export interface DeferredPermissionResolverOptions {
12
+ readonly prompt: PermissionPromptHandler;
13
+ readonly name?: string;
14
+ readonly sessionAllows?: Set<string>;
15
+ }
16
+ export interface DeferredPermissionResolver extends PermissionResolver {
17
+ /**
18
+ * Resolve all in-flight prompts with `deny`. Call from a channel's `stop`
19
+ * so a pending permission prompt doesn't hang forever when the host UI
20
+ * unmounts (the TUI bug the audit flagged).
21
+ */
22
+ abortAll(reason?: string): void;
23
+ }
24
+ /**
25
+ * Resolver for channels that defer permission decisions to an external UI
26
+ * (Ink dialog, Telegram inline keyboard, web form). Wraps a `prompt`
27
+ * callback with:
28
+ * - sessionAllows shortcut — `allow_session` decisions skip subsequent
29
+ * prompts for the same tool name.
30
+ * - in-flight tracking — `abortAll()` resolves pending prompts with
31
+ * `deny`, so the channel can shut down cleanly without hangs.
32
+ */
33
+ export declare function createDeferredPermissionResolver(opts: DeferredPermissionResolverOptions): DeferredPermissionResolver;
34
+ /**
35
+ * Evaluate a tool's OWN declared {@link PermissionRule} against a call.
36
+ *
37
+ * Tools can ship a `permission` rule to express their author's policy — e.g.
38
+ * `reload_skills` / `load_tool` declare `{ action: 'allow' }` because they're
39
+ * safe, internal, idempotent operations that should never prompt. That rule
40
+ * was previously stored on the ToolDef but never consulted, so in headless
41
+ * runs (where the channel resolver denies by default) even these safe tools
42
+ * were blocked. The session resolver now consults this BETWEEN the user's
43
+ * `permissions.json` policy and the channel resolver, so:
44
+ *
45
+ * user policy (deny/allow) > tool-declared rule > channel resolver
46
+ *
47
+ * Returns a decision for a matching `allow`/`deny` rule, or `null` to defer
48
+ * (no rule, pattern didn't match, or `action: 'prompt'` — the interactive
49
+ * resolver should handle those).
50
+ */
51
+ export declare function evaluateToolRule(rule: PermissionRule | undefined, call: PendingToolCall): PermissionDecision | null;
52
+ //# sourceMappingURL=resolvers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../src/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,iBAAiB,EAAE,kBAK/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,kBAKnC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnG;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,uBAAuB,GAAG,kBAAkB,CAKxF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,kBAAkB,CAS5F;AAED,MAAM,MAAM,uBAAuB,GAAG,CACpC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,iBAAiB,KACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEjC,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,iCAAiC,GACtC,0BAA0B,CAsC5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,cAAc,GAAG,SAAS,EAChC,IAAI,EAAE,eAAe,GACpB,kBAAkB,GAAG,IAAI,CAU3B"}
@@ -0,0 +1,123 @@
1
+ export const autoAllowResolver = {
2
+ name: 'auto-allow',
3
+ async check() {
4
+ return { mode: 'allow', reason: 'auto-allow resolver (test mode)' };
5
+ },
6
+ };
7
+ export const denyByDefaultResolver = {
8
+ name: 'deny-by-default',
9
+ async check() {
10
+ return { mode: 'deny', reason: 'No interactive resolver available in headless mode. Use --allow-tools or permissions.json.' };
11
+ },
12
+ };
13
+ export function createCallbackResolver(opts) {
14
+ return {
15
+ name: opts.name ?? 'callback',
16
+ check: opts.callback,
17
+ };
18
+ }
19
+ export function createAllowListResolver(toolNames) {
20
+ const allowed = new Set(toolNames);
21
+ return {
22
+ name: 'allow-list',
23
+ async check(call) {
24
+ if (allowed.has(call.name))
25
+ return { mode: 'allow_session', reason: 'allow-list' };
26
+ return { mode: 'deny', reason: `Tool '${call.name}' not in allow-list` };
27
+ },
28
+ };
29
+ }
30
+ /**
31
+ * Resolver for channels that defer permission decisions to an external UI
32
+ * (Ink dialog, Telegram inline keyboard, web form). Wraps a `prompt`
33
+ * callback with:
34
+ * - sessionAllows shortcut — `allow_session` decisions skip subsequent
35
+ * prompts for the same tool name.
36
+ * - in-flight tracking — `abortAll()` resolves pending prompts with
37
+ * `deny`, so the channel can shut down cleanly without hangs.
38
+ */
39
+ export function createDeferredPermissionResolver(opts) {
40
+ const sessionAllows = opts.sessionAllows ?? new Set();
41
+ const pending = new Set();
42
+ return {
43
+ name: opts.name ?? 'deferred',
44
+ async check(call, ctx) {
45
+ if (sessionAllows.has(call.name)) {
46
+ return { mode: 'allow_session', reason: 'allow_session previously granted' };
47
+ }
48
+ const decision = await new Promise((resolve) => {
49
+ pending.add(resolve);
50
+ opts.prompt(call, ctx).then((d) => {
51
+ pending.delete(resolve);
52
+ resolve(d);
53
+ }, (err) => {
54
+ pending.delete(resolve);
55
+ resolve({ mode: 'deny', reason: err instanceof Error ? err.message : String(err) });
56
+ });
57
+ });
58
+ // Both allow_session and allow_always should skip future prompts for
59
+ // the same tool within this resolver instance. allow_always
60
+ // additionally signals to the caller (via the decision flag) that
61
+ // the rule should be persisted to ~/.moxxy/permissions.json — but
62
+ // that persistence isn't our job; the channel does it when wiring
63
+ // up the dialog.
64
+ if (decision.mode === 'allow_session' || decision.mode === 'allow_always') {
65
+ sessionAllows.add(call.name);
66
+ }
67
+ return decision;
68
+ },
69
+ abortAll(reason = 'channel closed') {
70
+ for (const r of pending)
71
+ r({ mode: 'deny', reason });
72
+ pending.clear();
73
+ },
74
+ };
75
+ }
76
+ /**
77
+ * Evaluate a tool's OWN declared {@link PermissionRule} against a call.
78
+ *
79
+ * Tools can ship a `permission` rule to express their author's policy — e.g.
80
+ * `reload_skills` / `load_tool` declare `{ action: 'allow' }` because they're
81
+ * safe, internal, idempotent operations that should never prompt. That rule
82
+ * was previously stored on the ToolDef but never consulted, so in headless
83
+ * runs (where the channel resolver denies by default) even these safe tools
84
+ * were blocked. The session resolver now consults this BETWEEN the user's
85
+ * `permissions.json` policy and the channel resolver, so:
86
+ *
87
+ * user policy (deny/allow) > tool-declared rule > channel resolver
88
+ *
89
+ * Returns a decision for a matching `allow`/`deny` rule, or `null` to defer
90
+ * (no rule, pattern didn't match, or `action: 'prompt'` — the interactive
91
+ * resolver should handle those).
92
+ */
93
+ export function evaluateToolRule(rule, call) {
94
+ if (!rule || !toolRuleMatches(rule, call))
95
+ return null;
96
+ switch (rule.action) {
97
+ case 'allow':
98
+ return { mode: 'allow', reason: rule.reason ?? 'tool-declared allow' };
99
+ case 'deny':
100
+ return { mode: 'deny', reason: rule.reason ?? 'tool-declared deny' };
101
+ case 'prompt':
102
+ return null; // defer to the interactive resolver
103
+ }
104
+ }
105
+ function toolRuleMatches(rule, call) {
106
+ const p = rule.pattern;
107
+ if (!p)
108
+ return true; // no pattern → applies to every call of this tool
109
+ if (p.name !== undefined && !patternMatch(p.name, call.name))
110
+ return false;
111
+ if (p.inputMatches) {
112
+ const input = (call.input ?? {});
113
+ for (const [key, matcher] of Object.entries(p.inputMatches)) {
114
+ if (!patternMatch(matcher, String(input[key] ?? '')))
115
+ return false;
116
+ }
117
+ }
118
+ return true;
119
+ }
120
+ function patternMatch(pattern, candidate) {
121
+ return pattern instanceof RegExp ? pattern.test(candidate) : pattern === candidate;
122
+ }
123
+ //# sourceMappingURL=resolvers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../src/resolvers.ts"],"names":[],"mappings":"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"}
package/dist/schemas.d.ts CHANGED
@@ -9,20 +9,20 @@ export declare const requirementSchema: z.ZodObject<{
9
9
  hint: z.ZodOptional<z.ZodString>;
10
10
  }, "strip", z.ZodTypeAny, {
11
11
  name: string;
12
- kind: "provider" | "mode" | "compactor" | "channel" | "agent" | "command" | "transcriber" | "plugin" | "tool" | "runtime";
13
- version?: string | undefined;
12
+ kind: "tool" | "plugin" | "compactor" | "provider" | "mode" | "channel" | "agent" | "command" | "transcriber" | "runtime";
13
+ hint?: string | undefined;
14
14
  reason?: string | undefined;
15
+ version?: string | undefined;
15
16
  state?: "registered" | "active" | "ready" | undefined;
16
17
  optional?: boolean | undefined;
17
- hint?: string | undefined;
18
18
  }, {
19
19
  name: string;
20
- kind: "provider" | "mode" | "compactor" | "channel" | "agent" | "command" | "transcriber" | "plugin" | "tool" | "runtime";
21
- version?: string | undefined;
20
+ kind: "tool" | "plugin" | "compactor" | "provider" | "mode" | "channel" | "agent" | "command" | "transcriber" | "runtime";
21
+ hint?: string | undefined;
22
22
  reason?: string | undefined;
23
+ version?: string | undefined;
23
24
  state?: "registered" | "active" | "ready" | undefined;
24
25
  optional?: boolean | undefined;
25
- hint?: string | undefined;
26
26
  }>;
27
27
  /**
28
28
  * Optional schedule block on a skill. When present, the scheduler
@@ -135,11 +135,11 @@ export declare const pluginManifestSchema: z.ZodObject<{
135
135
  skills: z.ZodOptional<z.ZodString>;
136
136
  }, "strip", z.ZodTypeAny, {
137
137
  entry: string;
138
- kind?: "tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
138
+ kind?: "compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
139
139
  skills?: string | undefined;
140
140
  }, {
141
141
  entry: string;
142
- kind?: "tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
142
+ kind?: "compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
143
143
  skills?: string | undefined;
144
144
  }>;
145
145
  /**
@@ -159,11 +159,11 @@ export declare const moxxyPackageSchema: z.ZodObject<{
159
159
  skills: z.ZodOptional<z.ZodString>;
160
160
  }, "strip", z.ZodTypeAny, {
161
161
  entry: string;
162
- kind?: "tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
162
+ kind?: "compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
163
163
  skills?: string | undefined;
164
164
  }, {
165
165
  entry: string;
166
- kind?: "tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
166
+ kind?: "compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
167
167
  skills?: string | undefined;
168
168
  }>>;
169
169
  requirements: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -176,50 +176,50 @@ export declare const moxxyPackageSchema: z.ZodObject<{
176
176
  hint: z.ZodOptional<z.ZodString>;
177
177
  }, "strip", z.ZodTypeAny, {
178
178
  name: string;
179
- kind: "provider" | "mode" | "compactor" | "channel" | "agent" | "command" | "transcriber" | "plugin" | "tool" | "runtime";
180
- version?: string | undefined;
179
+ kind: "tool" | "plugin" | "compactor" | "provider" | "mode" | "channel" | "agent" | "command" | "transcriber" | "runtime";
180
+ hint?: string | undefined;
181
181
  reason?: string | undefined;
182
+ version?: string | undefined;
182
183
  state?: "registered" | "active" | "ready" | undefined;
183
184
  optional?: boolean | undefined;
184
- hint?: string | undefined;
185
185
  }, {
186
186
  name: string;
187
- kind: "provider" | "mode" | "compactor" | "channel" | "agent" | "command" | "transcriber" | "plugin" | "tool" | "runtime";
188
- version?: string | undefined;
187
+ kind: "tool" | "plugin" | "compactor" | "provider" | "mode" | "channel" | "agent" | "command" | "transcriber" | "runtime";
188
+ hint?: string | undefined;
189
189
  reason?: string | undefined;
190
+ version?: string | undefined;
190
191
  state?: "registered" | "active" | "ready" | undefined;
191
192
  optional?: boolean | undefined;
192
- hint?: string | undefined;
193
193
  }>, "many">>;
194
194
  }, "strip", z.ZodTypeAny, {
195
195
  plugin?: {
196
196
  entry: string;
197
- kind?: "tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
197
+ kind?: "compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
198
198
  skills?: string | undefined;
199
199
  } | undefined;
200
200
  requirements?: {
201
201
  name: string;
202
- kind: "provider" | "mode" | "compactor" | "channel" | "agent" | "command" | "transcriber" | "plugin" | "tool" | "runtime";
203
- version?: string | undefined;
202
+ kind: "tool" | "plugin" | "compactor" | "provider" | "mode" | "channel" | "agent" | "command" | "transcriber" | "runtime";
203
+ hint?: string | undefined;
204
204
  reason?: string | undefined;
205
+ version?: string | undefined;
205
206
  state?: "registered" | "active" | "ready" | undefined;
206
207
  optional?: boolean | undefined;
207
- hint?: string | undefined;
208
208
  }[] | undefined;
209
209
  }, {
210
210
  plugin?: {
211
211
  entry: string;
212
- kind?: "tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("tools" | "provider" | "mode" | "compactor" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
212
+ kind?: "compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber" | ("compactor" | "tools" | "provider" | "mode" | "cache-strategy" | "view-renderer" | "tunnel-provider" | "mcp" | "cli" | "channel" | "hooks" | "agent" | "command" | "transcriber")[] | undefined;
213
213
  skills?: string | undefined;
214
214
  } | undefined;
215
215
  requirements?: {
216
216
  name: string;
217
- kind: "provider" | "mode" | "compactor" | "channel" | "agent" | "command" | "transcriber" | "plugin" | "tool" | "runtime";
218
- version?: string | undefined;
217
+ kind: "tool" | "plugin" | "compactor" | "provider" | "mode" | "channel" | "agent" | "command" | "transcriber" | "runtime";
218
+ hint?: string | undefined;
219
219
  reason?: string | undefined;
220
+ version?: string | undefined;
220
221
  state?: "registered" | "active" | "ready" | undefined;
221
222
  optional?: boolean | undefined;
222
- hint?: string | undefined;
223
223
  }[] | undefined;
224
224
  }>;
225
225
  export type SkillFrontmatterInput = z.infer<typeof skillFrontmatterSchema>;
@@ -37,10 +37,22 @@ export interface RunTurnOptions {
37
37
  export interface SessionLogReader extends EventLogReader {
38
38
  subscribe(fn: (event: MoxxyEvent) => void | Promise<void>): () => void;
39
39
  }
40
- /** Serializable provider metadata (models + context windows) for display. */
40
+ /** How a provider authenticates. UIs use this to decide whether to
41
+ * show an API-key field or kick off an OAuth flow. */
42
+ export type ProviderAuthKind = 'api-key' | 'oauth';
43
+ /** Serializable provider metadata (models + context windows + auth)
44
+ * for display. */
41
45
  export interface ProviderInfo {
42
46
  readonly name: string;
43
47
  readonly models: ReadonlyArray<ModelDescriptor>;
48
+ /** 'oauth' when the provider declares an oauth login on its plugin
49
+ * definition, 'api-key' otherwise. Defaults to 'api-key' for
50
+ * providers that don't declare. */
51
+ readonly authKind: ProviderAuthKind;
52
+ /** True when the provider's plugin can list its models live (e.g.
53
+ * via /v1/models). Lets the desktop's model picker show a
54
+ * "Fetch live" affordance only where it makes sense. */
55
+ readonly supportsLiveModelDiscovery: boolean;
44
56
  }
45
57
  /** Serializable tool metadata for status lines / slash menus / compact rendering. */
46
58
  export interface ToolInfo {
@@ -86,6 +98,64 @@ export interface SessionInfo {
86
98
  /** Name of the active transcriber, or null. Lets a thin client proxy STT. */
87
99
  readonly activeTranscriber: string | null;
88
100
  }
101
+ /**
102
+ * Resolves a provider's stored credentials (vault tokens / API keys) into the
103
+ * config object `providers.setActive` needs. The host installs one on a local
104
+ * Session at boot; it is undefined across a `RemoteSession` transport (a closure
105
+ * can't cross the wire — the runner side resolves credentials there instead).
106
+ */
107
+ export type CredentialResolver = (providerName: string) => Promise<Record<string, unknown>>;
108
+ /** One server's status in {@link McpAdminView.listServers}. */
109
+ export interface McpServerStatusView {
110
+ readonly name: string;
111
+ readonly enabled: boolean;
112
+ readonly connected: boolean;
113
+ }
114
+ /**
115
+ * The slice of the MCP admin API a channel needs to drive the MCP picker and
116
+ * status line. Present on a local Session when the MCP admin plugin is wired;
117
+ * a `RemoteSession` leaves {@link SessionLike.mcpAdmin} undefined and the UI
118
+ * degrades gracefully.
119
+ */
120
+ export interface McpAdminView {
121
+ enableAndAttach(name: string): Promise<{
122
+ toolNames: ReadonlyArray<string>;
123
+ } | null>;
124
+ detach(name: string): Promise<boolean>;
125
+ listServers(): Promise<ReadonlyArray<McpServerStatusView>>;
126
+ }
127
+ /** One workflow's summary for the `/workflows` modal. */
128
+ export interface WorkflowSummaryView {
129
+ readonly name: string;
130
+ readonly description: string;
131
+ readonly enabled: boolean;
132
+ readonly scope: string;
133
+ readonly steps: number;
134
+ /** Human-readable trigger summary, e.g. `cron(0 8 * * *)` or `on-demand`. */
135
+ readonly triggers: string;
136
+ }
137
+ /** Result of running a workflow from the modal. */
138
+ export interface WorkflowRunView {
139
+ readonly ok: boolean;
140
+ readonly output: string;
141
+ readonly error?: string;
142
+ readonly steps: ReadonlyArray<{
143
+ readonly id: string;
144
+ readonly status: string;
145
+ readonly error?: string;
146
+ }>;
147
+ }
148
+ /**
149
+ * The slice of the workflows API a channel needs to drive the `/workflows`
150
+ * modal (list, enable/disable toggle, run). Present on a local Session when
151
+ * `@moxxy/plugin-workflows` is wired; a `RemoteSession` leaves
152
+ * {@link SessionLike.workflows} undefined and the UI degrades gracefully.
153
+ */
154
+ export interface WorkflowsView {
155
+ list(): Promise<ReadonlyArray<WorkflowSummaryView>>;
156
+ setEnabled(name: string, enabled: boolean): Promise<void>;
157
+ run(name: string): Promise<WorkflowRunView>;
158
+ }
89
159
  /**
90
160
  * The session surface a `Channel` depends on, decoupled from whether the
91
161
  * session runs in-process (`@moxxy/core`'s `Session`) or is a thin-client
@@ -107,5 +177,19 @@ export interface SessionLike {
107
177
  /** Wire-friendly registry snapshot for rendering. */
108
178
  getInfo(): SessionInfo;
109
179
  close(reason?: string): Promise<void>;
180
+ /**
181
+ * Live runtime capabilities present only on an in-process Session; a
182
+ * `RemoteSession` thin client leaves them undefined, so callers MUST guard.
183
+ * For plain display prefer the serializable {@link getInfo} snapshot — these
184
+ * are for the mutate/guard paths a channel drives (provider switch, MCP picker).
185
+ */
186
+ /** Providers whose credentials resolved this session (live, mutable). */
187
+ readyProviders?: Set<string>;
188
+ /** Re-resolves a provider's credentials before `providers.setActive`. */
189
+ credentialResolver?: CredentialResolver;
190
+ /** MCP admin slice backing the MCP picker / status line. */
191
+ mcpAdmin?: McpAdminView;
192
+ /** Workflows slice backing the `/workflows` modal. */
193
+ workflows?: WorkflowsView;
110
194
  }
111
195
  //# sourceMappingURL=session-like.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-like.d.ts","sourceRoot":"","sources":["../src/session-like.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-like.d.ts","sourceRoot":"","sources":["../src/session-like.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Voice / transcription helpers shared across surfaces.
3
+ *
4
+ * The TUI's voice-input infrastructure used to inline the same logic
5
+ * with a `Codex`-specific name baked in. Pulled out here as
6
+ * *agnostic* helpers that take a transcriber name as input, so the
7
+ * desktop, TUI, and any future channel can mirror the same flow:
8
+ *
9
+ * - Is the session ready to transcribe? Check via the requirements
10
+ * API for a named transcriber. (`checkTranscriberReady`)
11
+ * - Activate any registered transcriber lazily. Returns the active
12
+ * transcriber instance. (`resolveTranscriber`)
13
+ * - "Just give me whatever works" — try a list of candidates in
14
+ * order, or fall back to the first registered one. (`pickFirstAvailableTranscriber`)
15
+ */
16
+ import type { ClientSession } from './client-session.js';
17
+ import type { MoxxyRequirement, RequirementCheck } from './requirements.js';
18
+ import type { Transcriber } from './transcriber.js';
19
+ /** Probe whether a *named* transcriber is ready: registered, with any
20
+ * declared upstream requirements satisfied. The optional `requires`
21
+ * list lets channels gate on additional provider / auth runtimes
22
+ * (the Codex transcriber e.g. depends on the `openai-codex` provider
23
+ * + its OAuth runtime). */
24
+ export declare function checkTranscriberReady(session: ClientSession, transcriberName: string, requires?: ReadonlyArray<MoxxyRequirement>): RequirementCheck;
25
+ /** Activate a transcriber by name, lazily. Returns the active instance
26
+ * ready to `.transcribe(...)`. Throws if no such transcriber is
27
+ * registered, or a *different* one is already active. */
28
+ export declare function resolveTranscriber(session: ClientSession, transcriberName: string): Transcriber;
29
+ /** "Just pick a transcriber that works."
30
+ *
31
+ * Tries each name in `candidates` in order — first one that can be
32
+ * activated wins. Returns null if none can be activated, so callers
33
+ * can degrade gracefully (hide their mic button, show a "no voice
34
+ * configured" tip, …) instead of throwing. */
35
+ export declare function pickFirstAvailableTranscriber(session: ClientSession, candidates: ReadonlyArray<string>): Transcriber | null;
36
+ //# sourceMappingURL=voice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../src/voice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;4BAI4B;AAC5B,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,MAAM,EACvB,QAAQ,GAAE,aAAa,CAAC,gBAAgB,CAAM,GAC7C,gBAAgB,CAqBlB;AAED;;0DAE0D;AAC1D,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,MAAM,GACtB,WAAW,CAcb;AAED;;;;;+CAK+C;AAC/C,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAChC,WAAW,GAAG,IAAI,CAepB"}