@moxxy/core 0.3.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/LICENSE +21 -0
- package/README.md +125 -0
- package/dist/events/factory.d.ts +6 -0
- package/dist/events/factory.d.ts.map +1 -0
- package/dist/events/factory.js +14 -0
- package/dist/events/factory.js.map +1 -0
- package/dist/events/log.d.ts +92 -0
- package/dist/events/log.d.ts.map +1 -0
- package/dist/events/log.js +244 -0
- package/dist/events/log.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +16 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +27 -0
- package/dist/logger.js.map +1 -0
- package/dist/permissions/engine.d.ts +94 -0
- package/dist/permissions/engine.d.ts.map +1 -0
- package/dist/permissions/engine.js +203 -0
- package/dist/permissions/engine.js.map +1 -0
- package/dist/permissions/resolvers.d.ts +8 -0
- package/dist/permissions/resolvers.d.ts.map +1 -0
- package/dist/permissions/resolvers.js +8 -0
- package/dist/permissions/resolvers.js.map +1 -0
- package/dist/plugins/discovery.d.ts +9 -0
- package/dist/plugins/discovery.d.ts.map +1 -0
- package/dist/plugins/discovery.js +112 -0
- package/dist/plugins/discovery.js.map +1 -0
- package/dist/plugins/host-options.d.ts +72 -0
- package/dist/plugins/host-options.d.ts.map +1 -0
- package/dist/plugins/host-options.js +2 -0
- package/dist/plugins/host-options.js.map +1 -0
- package/dist/plugins/host.d.ts +53 -0
- package/dist/plugins/host.d.ts.map +1 -0
- package/dist/plugins/host.js +269 -0
- package/dist/plugins/host.js.map +1 -0
- package/dist/plugins/lifecycle.d.ts +31 -0
- package/dist/plugins/lifecycle.d.ts.map +1 -0
- package/dist/plugins/lifecycle.js +100 -0
- package/dist/plugins/lifecycle.js.map +1 -0
- package/dist/plugins/loader.d.ts +7 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +68 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/package-requirements.d.ts +16 -0
- package/dist/plugins/package-requirements.d.ts.map +1 -0
- package/dist/plugins/package-requirements.js +52 -0
- package/dist/plugins/package-requirements.js.map +1 -0
- package/dist/plugins/registry-kinds.d.ts +58 -0
- package/dist/plugins/registry-kinds.d.ts.map +1 -0
- package/dist/plugins/registry-kinds.js +139 -0
- package/dist/plugins/registry-kinds.js.map +1 -0
- package/dist/plugins/toposort.d.ts +24 -0
- package/dist/plugins/toposort.d.ts.map +1 -0
- package/dist/plugins/toposort.js +67 -0
- package/dist/plugins/toposort.js.map +1 -0
- package/dist/preferences.d.ts +40 -0
- package/dist/preferences.d.ts.map +1 -0
- package/dist/preferences.js +58 -0
- package/dist/preferences.js.map +1 -0
- package/dist/registries/active-backend-registry.d.ts +65 -0
- package/dist/registries/active-backend-registry.d.ts.map +1 -0
- package/dist/registries/active-backend-registry.js +108 -0
- package/dist/registries/active-backend-registry.js.map +1 -0
- package/dist/registries/active-def-registry.d.ts +59 -0
- package/dist/registries/active-def-registry.d.ts.map +1 -0
- package/dist/registries/active-def-registry.js +63 -0
- package/dist/registries/active-def-registry.js.map +1 -0
- package/dist/registries/agents.d.ts +16 -0
- package/dist/registries/agents.d.ts.map +1 -0
- package/dist/registries/agents.js +17 -0
- package/dist/registries/agents.js.map +1 -0
- package/dist/registries/cache-strategies.d.ts +12 -0
- package/dist/registries/cache-strategies.d.ts.map +1 -0
- package/dist/registries/cache-strategies.js +13 -0
- package/dist/registries/cache-strategies.js.map +1 -0
- package/dist/registries/channels.d.ts +16 -0
- package/dist/registries/channels.d.ts.map +1 -0
- package/dist/registries/channels.js +35 -0
- package/dist/registries/channels.js.map +1 -0
- package/dist/registries/commands.d.ts +29 -0
- package/dist/registries/commands.d.ts.map +1 -0
- package/dist/registries/commands.js +72 -0
- package/dist/registries/commands.js.map +1 -0
- package/dist/registries/compactors.d.ts +12 -0
- package/dist/registries/compactors.d.ts.map +1 -0
- package/dist/registries/compactors.js +13 -0
- package/dist/registries/compactors.js.map +1 -0
- package/dist/registries/def-map-registry.d.ts +33 -0
- package/dist/registries/def-map-registry.d.ts.map +1 -0
- package/dist/registries/def-map-registry.js +36 -0
- package/dist/registries/def-map-registry.js.map +1 -0
- package/dist/registries/embedders.d.ts +16 -0
- package/dist/registries/embedders.d.ts.map +1 -0
- package/dist/registries/embedders.js +17 -0
- package/dist/registries/embedders.js.map +1 -0
- package/dist/registries/isolators.d.ts +21 -0
- package/dist/registries/isolators.d.ts.map +1 -0
- package/dist/registries/isolators.js +32 -0
- package/dist/registries/isolators.js.map +1 -0
- package/dist/registries/modes.d.ts +28 -0
- package/dist/registries/modes.d.ts.map +1 -0
- package/dist/registries/modes.js +81 -0
- package/dist/registries/modes.js.map +1 -0
- package/dist/registries/providers.d.ts +44 -0
- package/dist/registries/providers.d.ts.map +1 -0
- package/dist/registries/providers.js +95 -0
- package/dist/registries/providers.js.map +1 -0
- package/dist/registries/skills.d.ts +24 -0
- package/dist/registries/skills.d.ts.map +1 -0
- package/dist/registries/skills.js +81 -0
- package/dist/registries/skills.js.map +1 -0
- package/dist/registries/surfaces.d.ts +13 -0
- package/dist/registries/surfaces.d.ts.map +1 -0
- package/dist/registries/surfaces.js +14 -0
- package/dist/registries/surfaces.js.map +1 -0
- package/dist/registries/synthesizers.d.ts +26 -0
- package/dist/registries/synthesizers.d.ts.map +1 -0
- package/dist/registries/synthesizers.js +34 -0
- package/dist/registries/synthesizers.js.map +1 -0
- package/dist/registries/tools.d.ts +49 -0
- package/dist/registries/tools.d.ts.map +1 -0
- package/dist/registries/tools.js +98 -0
- package/dist/registries/tools.js.map +1 -0
- package/dist/registries/transcribers.d.ts +17 -0
- package/dist/registries/transcribers.d.ts.map +1 -0
- package/dist/registries/transcribers.js +18 -0
- package/dist/registries/transcribers.js.map +1 -0
- package/dist/registries/tunnel-providers.d.ts +12 -0
- package/dist/registries/tunnel-providers.d.ts.map +1 -0
- package/dist/registries/tunnel-providers.js +13 -0
- package/dist/registries/tunnel-providers.js.map +1 -0
- package/dist/registries/view-renderers.d.ts +13 -0
- package/dist/registries/view-renderers.d.ts.map +1 -0
- package/dist/registries/view-renderers.js +14 -0
- package/dist/registries/view-renderers.js.map +1 -0
- package/dist/registries/workflow-executors.d.ts +13 -0
- package/dist/registries/workflow-executors.d.ts.map +1 -0
- package/dist/registries/workflow-executors.js +14 -0
- package/dist/registries/workflow-executors.js.map +1 -0
- package/dist/requirements.d.ts +59 -0
- package/dist/requirements.d.ts.map +1 -0
- package/dist/requirements.js +149 -0
- package/dist/requirements.js.map +1 -0
- package/dist/run-turn.d.ts +6 -0
- package/dist/run-turn.d.ts.map +1 -0
- package/dist/run-turn.js +141 -0
- package/dist/run-turn.js.map +1 -0
- package/dist/session-runtime.d.ts +67 -0
- package/dist/session-runtime.d.ts.map +1 -0
- package/dist/session-runtime.js +2 -0
- package/dist/session-runtime.js.map +1 -0
- package/dist/session.d.ts +203 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +399 -0
- package/dist/session.js.map +1 -0
- package/dist/sessions/persistence.d.ts +184 -0
- package/dist/sessions/persistence.d.ts.map +1 -0
- package/dist/sessions/persistence.js +442 -0
- package/dist/sessions/persistence.js.map +1 -0
- package/dist/setup-agent.d.ts +91 -0
- package/dist/setup-agent.d.ts.map +1 -0
- package/dist/setup-agent.js +138 -0
- package/dist/setup-agent.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +4 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +16 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +99 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/parse.d.ts +5 -0
- package/dist/skills/parse.d.ts.map +1 -0
- package/dist/skills/parse.js +8 -0
- package/dist/skills/parse.js.map +1 -0
- package/dist/skills/synthesize-draft.d.ts +8 -0
- package/dist/skills/synthesize-draft.d.ts.map +1 -0
- package/dist/skills/synthesize-draft.js +32 -0
- package/dist/skills/synthesize-draft.js.map +1 -0
- package/dist/skills/synthesize.d.ts +33 -0
- package/dist/skills/synthesize.d.ts.map +1 -0
- package/dist/skills/synthesize.js +241 -0
- package/dist/skills/synthesize.js.map +1 -0
- package/dist/subagents/events.d.ts +20 -0
- package/dist/subagents/events.d.ts.map +1 -0
- package/dist/subagents/events.js +146 -0
- package/dist/subagents/events.js.map +1 -0
- package/dist/subagents/registry.d.ts +40 -0
- package/dist/subagents/registry.d.ts.map +1 -0
- package/dist/subagents/registry.js +42 -0
- package/dist/subagents/registry.js.map +1 -0
- package/dist/subagents/run-child.d.ts +43 -0
- package/dist/subagents/run-child.d.ts.map +1 -0
- package/dist/subagents/run-child.js +276 -0
- package/dist/subagents/run-child.js.map +1 -0
- package/dist/subagents/spawn.d.ts +8 -0
- package/dist/subagents/spawn.d.ts.map +1 -0
- package/dist/subagents/spawn.js +8 -0
- package/dist/subagents/spawn.js.map +1 -0
- package/dist/subagents/tools.d.ts +4 -0
- package/dist/subagents/tools.d.ts.map +1 -0
- package/dist/subagents/tools.js +13 -0
- package/dist/subagents/tools.js.map +1 -0
- package/dist/subagents.d.ts +3 -0
- package/dist/subagents.d.ts.map +1 -0
- package/dist/subagents.js +3 -0
- package/dist/subagents.js.map +1 -0
- package/dist/surfaces/host.d.ts +53 -0
- package/dist/surfaces/host.d.ts.map +1 -0
- package/dist/surfaces/host.js +177 -0
- package/dist/surfaces/host.js.map +1 -0
- package/dist/tunnel/localhost.d.ts +7 -0
- package/dist/tunnel/localhost.d.ts.map +1 -0
- package/dist/tunnel/localhost.js +21 -0
- package/dist/tunnel/localhost.js.map +1 -0
- package/dist/usage-stats.d.ts +42 -0
- package/dist/usage-stats.d.ts.map +1 -0
- package/dist/usage-stats.js +83 -0
- package/dist/usage-stats.js.map +1 -0
- package/dist/view/default-renderer.d.ts +7 -0
- package/dist/view/default-renderer.d.ts.map +1 -0
- package/dist/view/default-renderer.js +14 -0
- package/dist/view/default-renderer.js.map +1 -0
- package/dist/view/parse.d.ts +7 -0
- package/dist/view/parse.d.ts.map +1 -0
- package/dist/view/parse.js +479 -0
- package/dist/view/parse.js.map +1 -0
- package/package.json +61 -0
- package/src/events/factory.ts +27 -0
- package/src/events/log.test.ts +470 -0
- package/src/events/log.ts +256 -0
- package/src/index.ts +102 -0
- package/src/logger.ts +46 -0
- package/src/permissions/engine.test.ts +206 -0
- package/src/permissions/engine.ts +247 -0
- package/src/permissions/resolvers.test.ts +40 -0
- package/src/permissions/resolvers.ts +17 -0
- package/src/plugins/discovery.test.ts +115 -0
- package/src/plugins/discovery.ts +124 -0
- package/src/plugins/host-options.ts +73 -0
- package/src/plugins/host-view-tunnel.test.ts +86 -0
- package/src/plugins/host.test.ts +434 -0
- package/src/plugins/host.ts +327 -0
- package/src/plugins/lifecycle.test.ts +187 -0
- package/src/plugins/lifecycle.ts +136 -0
- package/src/plugins/loader.ts +79 -0
- package/src/plugins/package-requirements.ts +50 -0
- package/src/plugins/registry-kinds.test.ts +162 -0
- package/src/plugins/registry-kinds.ts +210 -0
- package/src/plugins/toposort.test.ts +66 -0
- package/src/plugins/toposort.ts +69 -0
- package/src/preferences.test.ts +105 -0
- package/src/preferences.ts +84 -0
- package/src/registries/active-backend-registry.ts +142 -0
- package/src/registries/active-def-registry.test.ts +103 -0
- package/src/registries/active-def-registry.ts +97 -0
- package/src/registries/agents.ts +18 -0
- package/src/registries/cache-strategies.ts +14 -0
- package/src/registries/channels.ts +42 -0
- package/src/registries/commands.test.ts +71 -0
- package/src/registries/commands.ts +78 -0
- package/src/registries/compactors.ts +14 -0
- package/src/registries/def-map-registry.test.ts +67 -0
- package/src/registries/def-map-registry.ts +59 -0
- package/src/registries/embedders.test.ts +54 -0
- package/src/registries/embedders.ts +18 -0
- package/src/registries/isolators.test.ts +43 -0
- package/src/registries/isolators.ts +38 -0
- package/src/registries/modes.test.ts +66 -0
- package/src/registries/modes.ts +80 -0
- package/src/registries/providers.test.ts +50 -0
- package/src/registries/providers.ts +97 -0
- package/src/registries/semantics.test.ts +117 -0
- package/src/registries/skills.ts +87 -0
- package/src/registries/surfaces.ts +18 -0
- package/src/registries/synthesizers.test.ts +63 -0
- package/src/registries/synthesizers.ts +36 -0
- package/src/registries/tools.test.ts +142 -0
- package/src/registries/tools.ts +145 -0
- package/src/registries/transcribers.test.ts +70 -0
- package/src/registries/transcribers.ts +19 -0
- package/src/registries/tunnel-providers.test.ts +30 -0
- package/src/registries/tunnel-providers.ts +14 -0
- package/src/registries/view-renderers.test.ts +68 -0
- package/src/registries/view-renderers.ts +15 -0
- package/src/registries/workflow-executors.test.ts +53 -0
- package/src/registries/workflow-executors.ts +15 -0
- package/src/requirements.targetinfo.test.ts +70 -0
- package/src/requirements.test.ts +111 -0
- package/src/requirements.ts +262 -0
- package/src/run-turn.test.ts +178 -0
- package/src/run-turn.ts +156 -0
- package/src/session-runtime.ts +75 -0
- package/src/session.test.ts +216 -0
- package/src/session.ts +491 -0
- package/src/sessions/persistence.flush.test.ts +100 -0
- package/src/sessions/persistence.ready.test.ts +91 -0
- package/src/sessions/persistence.test.ts +274 -0
- package/src/sessions/persistence.ts +498 -0
- package/src/setup-agent.test.ts +72 -0
- package/src/setup-agent.ts +189 -0
- package/src/skills/index.ts +14 -0
- package/src/skills/loader.test.ts +102 -0
- package/src/skills/loader.ts +114 -0
- package/src/skills/parse.test.ts +59 -0
- package/src/skills/parse.ts +11 -0
- package/src/skills/synthesize-draft.test.ts +79 -0
- package/src/skills/synthesize-draft.ts +46 -0
- package/src/skills/synthesize.test.ts +170 -0
- package/src/skills/synthesize.ts +304 -0
- package/src/subagents/events.test.ts +56 -0
- package/src/subagents/events.ts +194 -0
- package/src/subagents/registry.ts +62 -0
- package/src/subagents/run-child.test.ts +185 -0
- package/src/subagents/run-child.ts +425 -0
- package/src/subagents/spawn.ts +12 -0
- package/src/subagents/tools.ts +19 -0
- package/src/subagents.ts +2 -0
- package/src/surfaces/host.test.ts +330 -0
- package/src/surfaces/host.ts +192 -0
- package/src/tunnel/localhost.test.ts +22 -0
- package/src/tunnel/localhost.ts +21 -0
- package/src/usage-stats.test.ts +77 -0
- package/src/usage-stats.ts +119 -0
- package/src/view/default-renderer.test.ts +29 -0
- package/src/view/default-renderer.ts +14 -0
- package/src/view/parse-extended.test.ts +255 -0
- package/src/view/parse.test.ts +232 -0
- package/src/view/parse.ts +520 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { AppContext, ClientSession, MoxxyEvent, RunTurnOptions, SessionId, SessionInfo } from '@moxxy/sdk';
|
|
2
|
+
import { newTurnId } from './events/factory.js';
|
|
3
|
+
import type { SessionRuntime } from './session-runtime.js';
|
|
4
|
+
import { EventLog } from './events/log.js';
|
|
5
|
+
import { HookDispatcherImpl } from './plugins/lifecycle.js';
|
|
6
|
+
import { PluginHost, type PluginLoader } from './plugins/host.js';
|
|
7
|
+
import { ProviderRegistry } from './registries/providers.js';
|
|
8
|
+
import { ModeRegistry } from './registries/modes.js';
|
|
9
|
+
import { CacheStrategyRegistry } from './registries/cache-strategies.js';
|
|
10
|
+
import { ViewRendererRegistry } from './registries/view-renderers.js';
|
|
11
|
+
import { TunnelProviderRegistry } from './registries/tunnel-providers.js';
|
|
12
|
+
import { CompactorRegistry } from './registries/compactors.js';
|
|
13
|
+
import { ChannelRegistryImpl } from './registries/channels.js';
|
|
14
|
+
import { SurfaceRegistryImpl } from './registries/surfaces.js';
|
|
15
|
+
import { SurfaceHostImpl } from './surfaces/host.js';
|
|
16
|
+
import { SkillRegistryImpl } from './registries/skills.js';
|
|
17
|
+
import { type ToolRegistry } from './registries/tools.js';
|
|
18
|
+
import { AgentRegistry } from './registries/agents.js';
|
|
19
|
+
import { CommandRegistry } from './registries/commands.js';
|
|
20
|
+
import { TranscriberRegistry } from './registries/transcribers.js';
|
|
21
|
+
import { SynthesizerRegistry } from './registries/synthesizers.js';
|
|
22
|
+
import { EmbedderRegistry } from './registries/embedders.js';
|
|
23
|
+
import { IsolatorRegistry } from './registries/isolators.js';
|
|
24
|
+
import { WorkflowExecutorRegistry } from './registries/workflow-executors.js';
|
|
25
|
+
import { RequirementRegistry } from './requirements.js';
|
|
26
|
+
import { PermissionEngine } from './permissions/engine.js';
|
|
27
|
+
import type { ApprovalResolver, CredentialResolver, ElisionSettings, McpAdminView, ProviderAdminView, WorkflowsView, PluginsAdminView, PermissionResolver } from '@moxxy/sdk';
|
|
28
|
+
import { type Logger } from './logger.js';
|
|
29
|
+
export interface SessionOptions {
|
|
30
|
+
readonly cwd: string;
|
|
31
|
+
readonly logger?: Logger;
|
|
32
|
+
readonly sessionId?: SessionId;
|
|
33
|
+
readonly permissionEngine?: PermissionEngine;
|
|
34
|
+
readonly permissionResolver?: PermissionResolver;
|
|
35
|
+
readonly hookTimeoutMs?: number;
|
|
36
|
+
readonly silent?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Optional plugin loader. When provided, `session.pluginHost.discoverAndLoad()`
|
|
39
|
+
* can dynamic-import discovered plugins; without one, only static plugins
|
|
40
|
+
* registered via `registerStatic()` are wired up.
|
|
41
|
+
*/
|
|
42
|
+
readonly pluginLoader?: PluginLoader;
|
|
43
|
+
/**
|
|
44
|
+
* Extra directories to scan for plugins, on top of the cwd-rooted
|
|
45
|
+
* `node_modules` walk. The CLI sets this to `~/.moxxy/plugins` (and its
|
|
46
|
+
* `node_modules` subtree) so runtime-installed / scaffolded plugins are
|
|
47
|
+
* discoverable. Crucially these are remembered by the host and reused on
|
|
48
|
+
* `pluginHost.reload()`, so a hot-reload neither drops user plugins nor
|
|
49
|
+
* fails to pick up freshly written ones.
|
|
50
|
+
*/
|
|
51
|
+
readonly pluginDiscoveryPaths?: ReadonlyArray<string>;
|
|
52
|
+
/**
|
|
53
|
+
* Predicate (by package name) for whether a discovered plugin is disabled.
|
|
54
|
+
* Forwarded to the PluginHost so `pluginHost.reload()` never resurrects a
|
|
55
|
+
* plugin the user turned off via config `plugins[name].enabled = false`.
|
|
56
|
+
* Reads live state, so a runtime enable/disable applies on the next reload.
|
|
57
|
+
*/
|
|
58
|
+
readonly isPluginDisabled?: (packageName: string) => boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Vault-backed secret resolver. When provided, every tool handler gets
|
|
61
|
+
* `ctx.getSecret(name)` so plugins can read an API key / token at call
|
|
62
|
+
* time. The plaintext never enters the model's context or `process.env`;
|
|
63
|
+
* only the handler that asks receives it. The CLI/runner wires this to
|
|
64
|
+
* the session vault's `get`.
|
|
65
|
+
*/
|
|
66
|
+
readonly secretResolver?: (name: string) => Promise<string | null>;
|
|
67
|
+
/**
|
|
68
|
+
* Pre-seeded event log. Used by `moxxy resume` to restore the
|
|
69
|
+
* conversation from a persisted JSONL. Subscribers don't re-fire for
|
|
70
|
+
* seeded events (the constructor pushes them directly), so plugin
|
|
71
|
+
* hooks won't run for historical entries.
|
|
72
|
+
*/
|
|
73
|
+
readonly log?: EventLog;
|
|
74
|
+
}
|
|
75
|
+
export declare class Session implements ClientSession, SessionRuntime {
|
|
76
|
+
readonly id: SessionId;
|
|
77
|
+
readonly cwd: string;
|
|
78
|
+
readonly log: EventLog;
|
|
79
|
+
readonly logger: Logger;
|
|
80
|
+
readonly tools: ToolRegistry;
|
|
81
|
+
readonly providers: ProviderRegistry;
|
|
82
|
+
readonly modes: ModeRegistry;
|
|
83
|
+
readonly compactors: CompactorRegistry;
|
|
84
|
+
readonly cacheStrategies: CacheStrategyRegistry;
|
|
85
|
+
readonly viewRenderers: ViewRendererRegistry;
|
|
86
|
+
readonly tunnelProviders: TunnelProviderRegistry;
|
|
87
|
+
readonly channels: ChannelRegistryImpl;
|
|
88
|
+
/** Registry of surface defs (terminal, browser, …) contributed by plugins. */
|
|
89
|
+
readonly surfaceRegistry: SurfaceRegistryImpl;
|
|
90
|
+
/**
|
|
91
|
+
* Manages the live, open surface instances for this session. The runner
|
|
92
|
+
* drives it for thin clients; the agent's tools reach the same resources via
|
|
93
|
+
* plugin module state. See {@link SurfaceHostImpl}.
|
|
94
|
+
*/
|
|
95
|
+
readonly surfaces: SurfaceHostImpl;
|
|
96
|
+
readonly skills: SkillRegistryImpl;
|
|
97
|
+
readonly agents: AgentRegistry;
|
|
98
|
+
readonly commands: CommandRegistry;
|
|
99
|
+
readonly transcribers: TranscriberRegistry;
|
|
100
|
+
readonly synthesizers: SynthesizerRegistry;
|
|
101
|
+
readonly embedders: EmbedderRegistry;
|
|
102
|
+
readonly isolators: IsolatorRegistry;
|
|
103
|
+
readonly workflowExecutors: WorkflowExecutorRegistry;
|
|
104
|
+
readonly requirements: RequirementRegistry;
|
|
105
|
+
readonly permissions: PermissionEngine;
|
|
106
|
+
/** Current PermissionResolver. Update via `setPermissionResolver(r)`. */
|
|
107
|
+
resolver: PermissionResolver;
|
|
108
|
+
/**
|
|
109
|
+
* Optional generic approval resolver. Loop strategies use this to ask
|
|
110
|
+
* the user a checkpoint question (plan validation, command preview,
|
|
111
|
+
* diff review, etc.). Null when running headless or before the TUI
|
|
112
|
+
* registers one — strategies that have no resolver simply skip the
|
|
113
|
+
* approval step.
|
|
114
|
+
*/
|
|
115
|
+
approvalResolver: ApprovalResolver | null;
|
|
116
|
+
/**
|
|
117
|
+
* Elision (context-on-demand) settings, resolved from `config.context.elision`
|
|
118
|
+
* at setup and updated on config reload. Null → built-in defaults apply
|
|
119
|
+
* (elision on). Read into each turn's ModeContext.
|
|
120
|
+
*/
|
|
121
|
+
elisionSettings: ElisionSettings | null;
|
|
122
|
+
/** Lazy tool loading toggle, from `config.context.lazyTools`. Default off. */
|
|
123
|
+
lazyTools: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Reasoning/thinking preference, from `config.context.reasoning`. Forwarded
|
|
126
|
+
* to each turn's ModeContext and on to the provider, which honors it only
|
|
127
|
+
* when the active model advertises `supportsReasoning`. Undefined → off.
|
|
128
|
+
*/
|
|
129
|
+
reasoning: {
|
|
130
|
+
readonly effort?: 'low' | 'medium' | 'high';
|
|
131
|
+
} | boolean | undefined;
|
|
132
|
+
/**
|
|
133
|
+
* Model id resolved by the most recent `runTurn()` (see SessionRuntime).
|
|
134
|
+
* Last-writer-wins for concurrent turns; null until the first turn runs.
|
|
135
|
+
*/
|
|
136
|
+
lastResolvedModel: string | null;
|
|
137
|
+
/**
|
|
138
|
+
* Live runtime capabilities the host installs on a local Session (see
|
|
139
|
+
* SessionLike). A RemoteSession leaves them undefined. Declared here — rather
|
|
140
|
+
* than monkey-patched on via `as unknown as` — so the host and channels get
|
|
141
|
+
* type-checked access.
|
|
142
|
+
*/
|
|
143
|
+
readyProviders?: Set<string>;
|
|
144
|
+
credentialResolver?: CredentialResolver;
|
|
145
|
+
mcpAdmin?: McpAdminView;
|
|
146
|
+
providerAdmin?: ProviderAdminView;
|
|
147
|
+
workflows?: WorkflowsView;
|
|
148
|
+
pluginsAdmin?: PluginsAdminView;
|
|
149
|
+
readonly dispatcher: HookDispatcherImpl;
|
|
150
|
+
readonly pluginHost: PluginHost;
|
|
151
|
+
private readonly controller;
|
|
152
|
+
constructor(opts: SessionOptions);
|
|
153
|
+
get signal(): AbortSignal;
|
|
154
|
+
abort(reason?: string): void;
|
|
155
|
+
/**
|
|
156
|
+
* Swap the active PermissionResolver. Channels call this after they're
|
|
157
|
+
* constructed so the session uses the channel's interactive resolver
|
|
158
|
+
* (TUI prompt, Telegram inline keyboard, HTTP allow-list, etc.).
|
|
159
|
+
* Replaces the previous monkey-patching of the private `resolver` field
|
|
160
|
+
* from CLI command code.
|
|
161
|
+
*/
|
|
162
|
+
setPermissionResolver(resolver: PermissionResolver): void;
|
|
163
|
+
/** Install/replace the generic approval resolver. Pass null to clear. */
|
|
164
|
+
setApprovalResolver(resolver: ApprovalResolver | null): void;
|
|
165
|
+
/**
|
|
166
|
+
* `SessionLike.reset` — the authoritative `/new`. Clears the event log;
|
|
167
|
+
* the log's clear listeners propagate the wipe to whatever observes it
|
|
168
|
+
* (the persistence sidecar truncates its JSONL so `--resume` sees an
|
|
169
|
+
* empty session; a wrapping RunnerServer broadcasts a reset so attached
|
|
170
|
+
* mirrors clear in lockstep). Registries, resolvers, and the active
|
|
171
|
+
* provider survive — only the conversation context vanishes. Callers
|
|
172
|
+
* must abort any in-flight turn first (same contract as `log.clear()`).
|
|
173
|
+
*/
|
|
174
|
+
reset(): Promise<void>;
|
|
175
|
+
/**
|
|
176
|
+
* Graceful shutdown: fire every plugin's `onShutdown` hook, then abort
|
|
177
|
+
* the session. Idempotent — safe to call multiple times (subsequent
|
|
178
|
+
* calls are no-ops once `closed` is set).
|
|
179
|
+
*
|
|
180
|
+
* Channels' SIGINT handlers should call this before exiting so plugins
|
|
181
|
+
* can flush state (memory journal, vault, audit logs, etc.).
|
|
182
|
+
*/
|
|
183
|
+
close(reason?: string): Promise<void>;
|
|
184
|
+
private closed;
|
|
185
|
+
appContext(): AppContext;
|
|
186
|
+
startTurn(): {
|
|
187
|
+
turnId: ReturnType<typeof newTurnId>;
|
|
188
|
+
};
|
|
189
|
+
subscribe(fn: (e: MoxxyEvent) => void | Promise<void>): () => void;
|
|
190
|
+
/**
|
|
191
|
+
* Drive one turn against this session. Method form of the `runTurn` free
|
|
192
|
+
* function so a local `Session` satisfies `SessionLike` (the channel-facing
|
|
193
|
+
* contract a `RemoteSession` proxy also implements).
|
|
194
|
+
*/
|
|
195
|
+
runTurn(prompt: string, opts?: RunTurnOptions): AsyncIterable<MoxxyEvent>;
|
|
196
|
+
/**
|
|
197
|
+
* Wire-friendly snapshot of the registries for channels to render. Mirrors
|
|
198
|
+
* what a `RemoteSession` fetches from the runner over RPC - keep the two in
|
|
199
|
+
* sync.
|
|
200
|
+
*/
|
|
201
|
+
getInfo(): SessionInfo;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/session.js
ADDED
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { newSessionId, newTurnId } from './events/factory.js';
|
|
2
|
+
import { runTurn as runTurnImpl } from './run-turn.js';
|
|
3
|
+
import { EventLog } from './events/log.js';
|
|
4
|
+
import { HookDispatcherImpl } from './plugins/lifecycle.js';
|
|
5
|
+
import { PluginHost } from './plugins/host.js';
|
|
6
|
+
import { ProviderRegistry } from './registries/providers.js';
|
|
7
|
+
import { ModeRegistry } from './registries/modes.js';
|
|
8
|
+
import { CacheStrategyRegistry } from './registries/cache-strategies.js';
|
|
9
|
+
import { ViewRendererRegistry } from './registries/view-renderers.js';
|
|
10
|
+
import { defaultViewRenderer } from './view/default-renderer.js';
|
|
11
|
+
import { TunnelProviderRegistry } from './registries/tunnel-providers.js';
|
|
12
|
+
import { localhostTunnel } from './tunnel/localhost.js';
|
|
13
|
+
import { CompactorRegistry } from './registries/compactors.js';
|
|
14
|
+
import { ChannelRegistryImpl } from './registries/channels.js';
|
|
15
|
+
import { SurfaceRegistryImpl } from './registries/surfaces.js';
|
|
16
|
+
import { SurfaceHostImpl } from './surfaces/host.js';
|
|
17
|
+
import { SkillRegistryImpl } from './registries/skills.js';
|
|
18
|
+
import { ToolRegistryImpl } from './registries/tools.js';
|
|
19
|
+
import { AgentRegistry } from './registries/agents.js';
|
|
20
|
+
import { CommandRegistry } from './registries/commands.js';
|
|
21
|
+
import { TranscriberRegistry } from './registries/transcribers.js';
|
|
22
|
+
import { SynthesizerRegistry } from './registries/synthesizers.js';
|
|
23
|
+
import { EmbedderRegistry } from './registries/embedders.js';
|
|
24
|
+
import { IsolatorRegistry } from './registries/isolators.js';
|
|
25
|
+
import { WorkflowExecutorRegistry } from './registries/workflow-executors.js';
|
|
26
|
+
import { RequirementRegistry } from './requirements.js';
|
|
27
|
+
import { PermissionEngine } from './permissions/engine.js';
|
|
28
|
+
import { autoAllowResolver } from './permissions/resolvers.js';
|
|
29
|
+
import { evaluateToolRule } from '@moxxy/sdk';
|
|
30
|
+
import { createLogger, silentLogger } from './logger.js';
|
|
31
|
+
import { clearRetainedChildren } from './subagents/registry.js';
|
|
32
|
+
export class Session {
|
|
33
|
+
id;
|
|
34
|
+
cwd;
|
|
35
|
+
log;
|
|
36
|
+
logger;
|
|
37
|
+
tools;
|
|
38
|
+
providers;
|
|
39
|
+
modes;
|
|
40
|
+
compactors;
|
|
41
|
+
cacheStrategies;
|
|
42
|
+
viewRenderers;
|
|
43
|
+
tunnelProviders;
|
|
44
|
+
channels;
|
|
45
|
+
/** Registry of surface defs (terminal, browser, …) contributed by plugins. */
|
|
46
|
+
surfaceRegistry;
|
|
47
|
+
/**
|
|
48
|
+
* Manages the live, open surface instances for this session. The runner
|
|
49
|
+
* drives it for thin clients; the agent's tools reach the same resources via
|
|
50
|
+
* plugin module state. See {@link SurfaceHostImpl}.
|
|
51
|
+
*/
|
|
52
|
+
surfaces;
|
|
53
|
+
skills;
|
|
54
|
+
agents;
|
|
55
|
+
commands;
|
|
56
|
+
transcribers;
|
|
57
|
+
synthesizers;
|
|
58
|
+
embedders;
|
|
59
|
+
isolators;
|
|
60
|
+
workflowExecutors;
|
|
61
|
+
requirements;
|
|
62
|
+
permissions;
|
|
63
|
+
/** Current PermissionResolver. Update via `setPermissionResolver(r)`. */
|
|
64
|
+
resolver;
|
|
65
|
+
/**
|
|
66
|
+
* Optional generic approval resolver. Loop strategies use this to ask
|
|
67
|
+
* the user a checkpoint question (plan validation, command preview,
|
|
68
|
+
* diff review, etc.). Null when running headless or before the TUI
|
|
69
|
+
* registers one — strategies that have no resolver simply skip the
|
|
70
|
+
* approval step.
|
|
71
|
+
*/
|
|
72
|
+
approvalResolver = null;
|
|
73
|
+
/**
|
|
74
|
+
* Elision (context-on-demand) settings, resolved from `config.context.elision`
|
|
75
|
+
* at setup and updated on config reload. Null → built-in defaults apply
|
|
76
|
+
* (elision on). Read into each turn's ModeContext.
|
|
77
|
+
*/
|
|
78
|
+
elisionSettings = null;
|
|
79
|
+
/** Lazy tool loading toggle, from `config.context.lazyTools`. Default off. */
|
|
80
|
+
lazyTools = false;
|
|
81
|
+
/**
|
|
82
|
+
* Reasoning/thinking preference, from `config.context.reasoning`. Forwarded
|
|
83
|
+
* to each turn's ModeContext and on to the provider, which honors it only
|
|
84
|
+
* when the active model advertises `supportsReasoning`. Undefined → off.
|
|
85
|
+
*/
|
|
86
|
+
reasoning = undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Model id resolved by the most recent `runTurn()` (see SessionRuntime).
|
|
89
|
+
* Last-writer-wins for concurrent turns; null until the first turn runs.
|
|
90
|
+
*/
|
|
91
|
+
lastResolvedModel = null;
|
|
92
|
+
/**
|
|
93
|
+
* Live runtime capabilities the host installs on a local Session (see
|
|
94
|
+
* SessionLike). A RemoteSession leaves them undefined. Declared here — rather
|
|
95
|
+
* than monkey-patched on via `as unknown as` — so the host and channels get
|
|
96
|
+
* type-checked access.
|
|
97
|
+
*/
|
|
98
|
+
readyProviders;
|
|
99
|
+
credentialResolver;
|
|
100
|
+
mcpAdmin;
|
|
101
|
+
providerAdmin;
|
|
102
|
+
workflows;
|
|
103
|
+
pluginsAdmin;
|
|
104
|
+
dispatcher;
|
|
105
|
+
pluginHost;
|
|
106
|
+
controller = new AbortController();
|
|
107
|
+
constructor(opts) {
|
|
108
|
+
this.id = opts.sessionId ?? newSessionId();
|
|
109
|
+
this.cwd = opts.cwd;
|
|
110
|
+
this.logger = opts.logger ?? (opts.silent ? silentLogger : createLogger());
|
|
111
|
+
this.log = opts.log ?? new EventLog();
|
|
112
|
+
this.tools = new ToolRegistryImpl({
|
|
113
|
+
logger: this.logger,
|
|
114
|
+
cwd: this.cwd,
|
|
115
|
+
...(opts.secretResolver ? { secretResolver: opts.secretResolver } : {}),
|
|
116
|
+
});
|
|
117
|
+
this.providers = new ProviderRegistry();
|
|
118
|
+
this.modes = new ModeRegistry();
|
|
119
|
+
this.compactors = new CompactorRegistry();
|
|
120
|
+
this.cacheStrategies = new CacheStrategyRegistry();
|
|
121
|
+
this.viewRenderers = new ViewRendererRegistry();
|
|
122
|
+
// Seed the built-in renderer so `present_view` always has one to parse
|
|
123
|
+
// with; plugins can register/replace and `setActive` an alternative.
|
|
124
|
+
this.viewRenderers.register(defaultViewRenderer);
|
|
125
|
+
this.tunnelProviders = new TunnelProviderRegistry();
|
|
126
|
+
// Seed the no-op localhost provider so the web surface always resolves a
|
|
127
|
+
// URL; plugins (cloudflared) register/setActive a real tunnel.
|
|
128
|
+
this.tunnelProviders.register(localhostTunnel);
|
|
129
|
+
this.channels = new ChannelRegistryImpl();
|
|
130
|
+
this.surfaceRegistry = new SurfaceRegistryImpl();
|
|
131
|
+
this.surfaces = new SurfaceHostImpl(this.surfaceRegistry, { cwd: this.cwd, logger: this.logger }, this.logger);
|
|
132
|
+
this.skills = new SkillRegistryImpl();
|
|
133
|
+
this.agents = new AgentRegistry();
|
|
134
|
+
this.commands = new CommandRegistry();
|
|
135
|
+
this.transcribers = new TranscriberRegistry();
|
|
136
|
+
this.synthesizers = new SynthesizerRegistry({
|
|
137
|
+
...(opts.secretResolver ? { secretResolver: opts.secretResolver } : {}),
|
|
138
|
+
});
|
|
139
|
+
this.embedders = new EmbedderRegistry();
|
|
140
|
+
this.isolators = new IsolatorRegistry();
|
|
141
|
+
this.workflowExecutors = new WorkflowExecutorRegistry();
|
|
142
|
+
this.requirements = new RequirementRegistry({
|
|
143
|
+
tools: this.tools,
|
|
144
|
+
providers: this.providers,
|
|
145
|
+
modes: this.modes,
|
|
146
|
+
compactors: this.compactors,
|
|
147
|
+
channels: this.channels,
|
|
148
|
+
agents: this.agents,
|
|
149
|
+
commands: this.commands,
|
|
150
|
+
transcribers: this.transcribers,
|
|
151
|
+
synthesizers: this.synthesizers,
|
|
152
|
+
});
|
|
153
|
+
this.permissions = opts.permissionEngine ?? new PermissionEngine();
|
|
154
|
+
// Always wrap the user-supplied resolver with the persistent
|
|
155
|
+
// policy engine, so saved `allow_always` / `deny` rules from
|
|
156
|
+
// ~/.moxxy/permissions.json short-circuit the resolver's prompt
|
|
157
|
+
// path. Without this wrap the engine is dead weight — the
|
|
158
|
+
// permissions JSON updates on every "allow always" click but no
|
|
159
|
+
// future turn ever consults it.
|
|
160
|
+
this.resolver = wrapWithPolicy(opts.permissionResolver ?? autoAllowResolver, this.permissions, (name) => this.tools.get(name)?.permission);
|
|
161
|
+
this.dispatcher = new HookDispatcherImpl({
|
|
162
|
+
logger: this.logger,
|
|
163
|
+
hookTimeoutMs: opts.hookTimeoutMs,
|
|
164
|
+
});
|
|
165
|
+
this.pluginHost = new PluginHost({
|
|
166
|
+
cwd: this.cwd,
|
|
167
|
+
logger: this.logger,
|
|
168
|
+
tools: this.tools,
|
|
169
|
+
providers: this.providers,
|
|
170
|
+
modes: this.modes,
|
|
171
|
+
compactors: this.compactors,
|
|
172
|
+
cacheStrategies: this.cacheStrategies,
|
|
173
|
+
viewRenderers: this.viewRenderers,
|
|
174
|
+
tunnelProviders: this.tunnelProviders,
|
|
175
|
+
channels: this.channels,
|
|
176
|
+
surfaces: this.surfaceRegistry,
|
|
177
|
+
agents: this.agents,
|
|
178
|
+
commands: this.commands,
|
|
179
|
+
transcribers: this.transcribers,
|
|
180
|
+
synthesizers: this.synthesizers,
|
|
181
|
+
embedders: this.embedders,
|
|
182
|
+
isolators: this.isolators,
|
|
183
|
+
workflowExecutors: this.workflowExecutors,
|
|
184
|
+
requirements: this.requirements,
|
|
185
|
+
dispatcher: this.dispatcher,
|
|
186
|
+
loader: opts.pluginLoader,
|
|
187
|
+
...(opts.pluginDiscoveryPaths ? { userPaths: opts.pluginDiscoveryPaths } : {}),
|
|
188
|
+
...(opts.isPluginDisabled ? { isDisabled: opts.isPluginDisabled } : {}),
|
|
189
|
+
});
|
|
190
|
+
// Fan every appended event out to plugin `onEvent` hooks. Without this
|
|
191
|
+
// wiring the hook is dead code — declared on the SDK, dispatched by
|
|
192
|
+
// HookDispatcherImpl, but nothing ever calls dispatchEvent.
|
|
193
|
+
this.log.subscribe((event) => {
|
|
194
|
+
// appContext() clones the whole process.env; only pay that per-event cost
|
|
195
|
+
// when a plugin actually has an onEvent hook to receive it. With none,
|
|
196
|
+
// dispatchEvent would iterate an empty hook list anyway.
|
|
197
|
+
if (!this.dispatcher.hasEventHooks())
|
|
198
|
+
return;
|
|
199
|
+
return this.dispatcher.dispatchEvent(event, this.appContext());
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
get signal() {
|
|
203
|
+
return this.controller.signal;
|
|
204
|
+
}
|
|
205
|
+
abort(reason = 'user-requested abort') {
|
|
206
|
+
this.controller.abort(reason);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Swap the active PermissionResolver. Channels call this after they're
|
|
210
|
+
* constructed so the session uses the channel's interactive resolver
|
|
211
|
+
* (TUI prompt, Telegram inline keyboard, HTTP allow-list, etc.).
|
|
212
|
+
* Replaces the previous monkey-patching of the private `resolver` field
|
|
213
|
+
* from CLI command code.
|
|
214
|
+
*/
|
|
215
|
+
setPermissionResolver(resolver) {
|
|
216
|
+
// Re-wrap so policy rules continue to short-circuit prompts when a
|
|
217
|
+
// channel installs its own resolver mid-session.
|
|
218
|
+
this.resolver = wrapWithPolicy(resolver, this.permissions, (name) => this.tools.get(name)?.permission);
|
|
219
|
+
}
|
|
220
|
+
/** Install/replace the generic approval resolver. Pass null to clear. */
|
|
221
|
+
setApprovalResolver(resolver) {
|
|
222
|
+
this.approvalResolver = resolver;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* `SessionLike.reset` — the authoritative `/new`. Clears the event log;
|
|
226
|
+
* the log's clear listeners propagate the wipe to whatever observes it
|
|
227
|
+
* (the persistence sidecar truncates its JSONL so `--resume` sees an
|
|
228
|
+
* empty session; a wrapping RunnerServer broadcasts a reset so attached
|
|
229
|
+
* mirrors clear in lockstep). Registries, resolvers, and the active
|
|
230
|
+
* provider survive — only the conversation context vanishes. Callers
|
|
231
|
+
* must abort any in-flight turn first (same contract as `log.clear()`).
|
|
232
|
+
*/
|
|
233
|
+
async reset() {
|
|
234
|
+
this.log.clear();
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Graceful shutdown: fire every plugin's `onShutdown` hook, then abort
|
|
238
|
+
* the session. Idempotent — safe to call multiple times (subsequent
|
|
239
|
+
* calls are no-ops once `closed` is set).
|
|
240
|
+
*
|
|
241
|
+
* Channels' SIGINT handlers should call this before exiting so plugins
|
|
242
|
+
* can flush state (memory journal, vault, audit logs, etc.).
|
|
243
|
+
*/
|
|
244
|
+
async close(reason = 'shutdown') {
|
|
245
|
+
if (this.closed)
|
|
246
|
+
return;
|
|
247
|
+
this.closed = true;
|
|
248
|
+
try {
|
|
249
|
+
// Tear down any open surfaces (PTYs, browser screencasts) before the
|
|
250
|
+
// plugin shutdown hooks dispose their underlying resources.
|
|
251
|
+
await this.surfaces.closeAll();
|
|
252
|
+
await this.dispatcher.dispatchShutdown(this.appContext());
|
|
253
|
+
}
|
|
254
|
+
finally {
|
|
255
|
+
// Drop THIS session's retained child sessions (the workflow `awaitInput`
|
|
256
|
+
// flow keeps them in a process-local registry until a
|
|
257
|
+
// `continue()`/`release()`). A paused run that never resumes would
|
|
258
|
+
// otherwise pin them for the whole process lifetime — release them on
|
|
259
|
+
// shutdown so they don't leak. Scoped to this session's id so closing one
|
|
260
|
+
// session never wipes another live session's paused children.
|
|
261
|
+
clearRetainedChildren(this.id);
|
|
262
|
+
this.abort(reason);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
closed = false;
|
|
266
|
+
appContext() {
|
|
267
|
+
return {
|
|
268
|
+
sessionId: this.id,
|
|
269
|
+
cwd: this.cwd,
|
|
270
|
+
log: this.log.asReader(),
|
|
271
|
+
env: { ...process.env },
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
startTurn() {
|
|
275
|
+
return { turnId: newTurnId() };
|
|
276
|
+
}
|
|
277
|
+
subscribe(fn) {
|
|
278
|
+
return this.log.subscribe(fn);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Drive one turn against this session. Method form of the `runTurn` free
|
|
282
|
+
* function so a local `Session` satisfies `SessionLike` (the channel-facing
|
|
283
|
+
* contract a `RemoteSession` proxy also implements).
|
|
284
|
+
*/
|
|
285
|
+
runTurn(prompt, opts = {}) {
|
|
286
|
+
return runTurnImpl(this, prompt, opts);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Wire-friendly snapshot of the registries for channels to render. Mirrors
|
|
290
|
+
* what a `RemoteSession` fetches from the runner over RPC - keep the two in
|
|
291
|
+
* sync.
|
|
292
|
+
*/
|
|
293
|
+
getInfo() {
|
|
294
|
+
let activeMode = null;
|
|
295
|
+
let activeModeBadge = null;
|
|
296
|
+
try {
|
|
297
|
+
const mode = this.modes.getActive();
|
|
298
|
+
activeMode = mode.name;
|
|
299
|
+
// Surface the active mode's presentation hint so channels can render a
|
|
300
|
+
// persistent badge (e.g. goal mode) without hard-coding mode names.
|
|
301
|
+
activeModeBadge = mode.badge ? { label: mode.badge.label, ...(mode.badge.tone ? { tone: mode.badge.tone } : {}) } : null;
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
// No mode active yet (registry empty pre-boot) - report null.
|
|
305
|
+
}
|
|
306
|
+
const active = this.providers.getActiveName();
|
|
307
|
+
const ready = this.readyProviders;
|
|
308
|
+
return {
|
|
309
|
+
sessionId: this.id,
|
|
310
|
+
cwd: this.cwd,
|
|
311
|
+
activeProvider: active,
|
|
312
|
+
providers: this.providers.list().map((p) => ({
|
|
313
|
+
name: p.name,
|
|
314
|
+
models: p.models,
|
|
315
|
+
authKind: p.auth?.kind === 'oauth' ? 'oauth' : 'api-key',
|
|
316
|
+
// Built-in providers ship hard-coded model lists, so live
|
|
317
|
+
// discovery on /v1/models isn't required from the host. Admin-
|
|
318
|
+
// registered providers (kind: 'apiKey' without a builtin def)
|
|
319
|
+
// are the ones the desktop's "Fetch live" affordance targets;
|
|
320
|
+
// they advertise this via the provider-admin factory by
|
|
321
|
+
// setting `supportsLiveModelDiscovery: true` on their def.
|
|
322
|
+
supportsLiveModelDiscovery: p.supportsLiveModelDiscovery === true,
|
|
323
|
+
enabled: this.providers.isEnabled(p.name),
|
|
324
|
+
})),
|
|
325
|
+
activeMode,
|
|
326
|
+
activeModeBadge,
|
|
327
|
+
modes: this.modes.list().map((m) => m.name),
|
|
328
|
+
tools: this.tools.list().map((t) => ({
|
|
329
|
+
name: t.name,
|
|
330
|
+
description: t.description,
|
|
331
|
+
...(t.compact ? { compact: t.compact } : {}),
|
|
332
|
+
})),
|
|
333
|
+
skills: this.skills.list().map((s) => ({ id: s.id, name: s.frontmatter.name })),
|
|
334
|
+
commands: this.commands.list().map((c) => ({
|
|
335
|
+
name: c.name,
|
|
336
|
+
description: c.description,
|
|
337
|
+
...(c.aliases ? { aliases: c.aliases } : {}),
|
|
338
|
+
...(c.channels ? { channels: c.channels } : {}),
|
|
339
|
+
...(c.pendingNotice ? { pendingNotice: c.pendingNotice } : {}),
|
|
340
|
+
})),
|
|
341
|
+
readyProviders: ready ? [...ready] : active ? [active] : [],
|
|
342
|
+
// hasTranscriber reports whether any backend is *registered*,
|
|
343
|
+
// not whether one is active. The active selection is per-flow
|
|
344
|
+
// (the TUI activates Codex on its first voice toggle; the
|
|
345
|
+
// desktop relies on handleTranscribe's candidate fallback).
|
|
346
|
+
// For UI affordance gating (showing / hiding a mic button),
|
|
347
|
+
// any registered transcriber means "voice is wired."
|
|
348
|
+
hasTranscriber: this.transcribers.list().length > 0,
|
|
349
|
+
activeTranscriber: this.transcribers.getActiveName(),
|
|
350
|
+
hasSynthesizer: this.synthesizers.list().length > 0,
|
|
351
|
+
activeSynthesizer: this.synthesizers.getActiveName(),
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Wrap a `PermissionResolver` so the persistent `PermissionEngine` runs
|
|
357
|
+
* first. If the engine has a matching allow/deny rule from
|
|
358
|
+
* `~/.moxxy/permissions.json`, that decision short-circuits the
|
|
359
|
+
* resolver's prompt path. Otherwise the resolver runs as usual.
|
|
360
|
+
*
|
|
361
|
+
* The wrapper is a Proxy that intercepts only `check` (and provides the
|
|
362
|
+
* prompt-free `policyCheck` probe); every other property (e.g. `abortAll`
|
|
363
|
+
* and any channel-specific helpers) passes straight through to the
|
|
364
|
+
* underlying resolver, so callers reach those methods exactly as before.
|
|
365
|
+
*/
|
|
366
|
+
function wrapWithPolicy(inner, engine, getToolRule) {
|
|
367
|
+
// The policy-only decision: user policy (permissions.json) wins, then the
|
|
368
|
+
// tool's own declared rule (so a tool marked `allow` is never blocked in
|
|
369
|
+
// headless runs). Returns null when neither decides — `check` then falls
|
|
370
|
+
// through to the channel resolver's prompt / deny-by-default path, while
|
|
371
|
+
// `policyCheck` callers (auto-approving modes) supply their own fallback
|
|
372
|
+
// so no prompt can ever fire.
|
|
373
|
+
const policyDecision = (call) => {
|
|
374
|
+
const policy = engine.check(call);
|
|
375
|
+
if (policy)
|
|
376
|
+
return policy;
|
|
377
|
+
return evaluateToolRule(getToolRule(call.name), call);
|
|
378
|
+
};
|
|
379
|
+
// Use a Proxy so any extra methods on the underlying resolver
|
|
380
|
+
// (`abortAll`, channel-specific helpers) remain accessible — only
|
|
381
|
+
// `check`/`policyCheck` are intercepted.
|
|
382
|
+
return new Proxy(inner, {
|
|
383
|
+
get(target, prop, receiver) {
|
|
384
|
+
if (prop === 'check') {
|
|
385
|
+
return async (call, ctx) => {
|
|
386
|
+
const decided = policyDecision(call);
|
|
387
|
+
if (decided)
|
|
388
|
+
return decided;
|
|
389
|
+
return target.check(call, ctx);
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
if (prop === 'policyCheck') {
|
|
393
|
+
return async (call) => policyDecision(call);
|
|
394
|
+
}
|
|
395
|
+
return Reflect.get(target, prop, receiver);
|
|
396
|
+
},
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|