@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 @@
|
|
|
1
|
+
{"version":3,"file":"package-requirements.js","sourceRoot":"","sources":["../../src/plugins/package-requirements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAyB,MAAM,YAAY,CAAC;AAEvE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,WAAmB,EACnB,OAAe;IAEf,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,UAAmB,CAAC;IACxB,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAI,UAAkC,CAAC,KAAK,CAAC;IAC7D,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB,EAAE,OAAe;IAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Plugin } from '@moxxy/sdk';
|
|
2
|
+
import type { PluginHostOptions } from './host-options.js';
|
|
3
|
+
/**
|
|
4
|
+
* The per-registry record of the names a loaded plugin contributed. Keyed by
|
|
5
|
+
* the {@link LoadedRecord} field each kind writes to. PluginHost stores one
|
|
6
|
+
* `LoadedRecord` per loaded plugin so `unload` knows exactly which names to
|
|
7
|
+
* unregister from each registry.
|
|
8
|
+
*/
|
|
9
|
+
export interface RegistryNameRecord {
|
|
10
|
+
readonly toolNames: ReadonlyArray<string>;
|
|
11
|
+
readonly providerNames: ReadonlyArray<string>;
|
|
12
|
+
readonly modeNames: ReadonlyArray<string>;
|
|
13
|
+
readonly compactorNames: ReadonlyArray<string>;
|
|
14
|
+
readonly cacheStrategyNames: ReadonlyArray<string>;
|
|
15
|
+
readonly viewRendererNames: ReadonlyArray<string>;
|
|
16
|
+
readonly tunnelProviderNames: ReadonlyArray<string>;
|
|
17
|
+
readonly channelNames: ReadonlyArray<string>;
|
|
18
|
+
readonly surfaceNames: ReadonlyArray<string>;
|
|
19
|
+
readonly agentNames: ReadonlyArray<string>;
|
|
20
|
+
readonly commandNames: ReadonlyArray<string>;
|
|
21
|
+
readonly transcriberNames: ReadonlyArray<string>;
|
|
22
|
+
readonly synthesizerNames: ReadonlyArray<string>;
|
|
23
|
+
readonly embedderNames: ReadonlyArray<string>;
|
|
24
|
+
readonly isolatorNames: ReadonlyArray<string>;
|
|
25
|
+
readonly workflowExecutorNames: ReadonlyArray<string>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A single contribution kind, mapping a plugin field + registry to the
|
|
29
|
+
* register / unregister / name-extraction operations PluginHost performs for
|
|
30
|
+
* it. Driving register and unregister from this one table keeps the two sides
|
|
31
|
+
* in lockstep — adding a registry kind is one entry, not edits to two parallel
|
|
32
|
+
* 16-line lists.
|
|
33
|
+
*
|
|
34
|
+
* `TDef` is the contribution def type for this kind. The table is declared with
|
|
35
|
+
* heterogeneous defs, so it is widened to `RegistryKind<any>` for iteration;
|
|
36
|
+
* each entry's closures stay individually type-checked against their own def.
|
|
37
|
+
*/
|
|
38
|
+
export interface RegistryKind<TDef> {
|
|
39
|
+
/** Stable identifier for the kind (used by tests/diagnostics). */
|
|
40
|
+
readonly kind: string;
|
|
41
|
+
/** {@link RegistryNameRecord} field this kind writes its names to. */
|
|
42
|
+
readonly recordField: keyof RegistryNameRecord;
|
|
43
|
+
/** The defs this plugin contributes for this kind. */
|
|
44
|
+
readonly defs: (plugin: Plugin) => ReadonlyArray<TDef>;
|
|
45
|
+
/** Extract the registry key from a def (mostly `.name`; surfaces use `.kind`). */
|
|
46
|
+
readonly nameOf: (def: TDef) => string;
|
|
47
|
+
/** Register a single def into its registry (uses `register` or `replace`). */
|
|
48
|
+
readonly register: (opts: PluginHostOptions, def: TDef) => void;
|
|
49
|
+
/** Remove a previously-registered name from its registry. */
|
|
50
|
+
readonly unregister: (opts: PluginHostOptions, name: string) => void;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The authoritative ordered list of contribution kinds. The ORDER here is the
|
|
54
|
+
* exact register order `applyPlugin` used and the exact unregister order
|
|
55
|
+
* `unload` used; preserve it when editing.
|
|
56
|
+
*/
|
|
57
|
+
export declare const REGISTRY_KINDS: ReadonlyArray<RegistryKind<unknown>>;
|
|
58
|
+
//# sourceMappingURL=registry-kinds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-kinds.d.ts","sourceRoot":"","sources":["../../src/plugins/registry-kinds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOV,MAAM,EAWP,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,qBAAqB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACvD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY,CAAC,IAAI;IAChC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,MAAM,kBAAkB,CAAC;IAC/C,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC;IACvD,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;IAChE,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtE;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAoIvB,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The authoritative ordered list of contribution kinds. The ORDER here is the
|
|
3
|
+
* exact register order `applyPlugin` used and the exact unregister order
|
|
4
|
+
* `unload` used; preserve it when editing.
|
|
5
|
+
*/
|
|
6
|
+
export const REGISTRY_KINDS = [
|
|
7
|
+
{
|
|
8
|
+
kind: 'tool',
|
|
9
|
+
recordField: 'toolNames',
|
|
10
|
+
defs: (p) => p.tools ?? [],
|
|
11
|
+
nameOf: (t) => t.name,
|
|
12
|
+
register: (o, t) => o.tools.register(t),
|
|
13
|
+
unregister: (o, n) => o.tools.unregister(n),
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
kind: 'provider',
|
|
17
|
+
recordField: 'providerNames',
|
|
18
|
+
defs: (p) => p.providers ?? [],
|
|
19
|
+
nameOf: (d) => d.name,
|
|
20
|
+
register: (o, d) => o.providers.register(d),
|
|
21
|
+
unregister: (o, n) => o.providers.unregister(n),
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
kind: 'mode',
|
|
25
|
+
recordField: 'modeNames',
|
|
26
|
+
defs: (p) => p.modes ?? [],
|
|
27
|
+
nameOf: (m) => m.name,
|
|
28
|
+
register: (o, m) => o.modes.register(m),
|
|
29
|
+
unregister: (o, n) => o.modes.unregister(n),
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
kind: 'compactor',
|
|
33
|
+
recordField: 'compactorNames',
|
|
34
|
+
defs: (p) => p.compactors ?? [],
|
|
35
|
+
nameOf: (c) => c.name,
|
|
36
|
+
register: (o, c) => o.compactors.register(c),
|
|
37
|
+
unregister: (o, n) => o.compactors.unregister(n),
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
kind: 'cacheStrategy',
|
|
41
|
+
recordField: 'cacheStrategyNames',
|
|
42
|
+
defs: (p) => p.cacheStrategies ?? [],
|
|
43
|
+
nameOf: (c) => c.name,
|
|
44
|
+
register: (o, c) => o.cacheStrategies.register(c),
|
|
45
|
+
unregister: (o, n) => o.cacheStrategies.unregister(n),
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
kind: 'viewRenderer',
|
|
49
|
+
recordField: 'viewRendererNames',
|
|
50
|
+
defs: (p) => p.viewRenderers ?? [],
|
|
51
|
+
nameOf: (v) => v.name,
|
|
52
|
+
// viewRenderers use `replace` (override-allowed) on the register side.
|
|
53
|
+
register: (o, v) => o.viewRenderers.replace(v),
|
|
54
|
+
unregister: (o, n) => o.viewRenderers.unregister(n),
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
kind: 'tunnelProvider',
|
|
58
|
+
recordField: 'tunnelProviderNames',
|
|
59
|
+
defs: (p) => p.tunnelProviders ?? [],
|
|
60
|
+
nameOf: (t) => t.name,
|
|
61
|
+
// tunnelProviders use `replace` (override-allowed) on the register side.
|
|
62
|
+
register: (o, t) => o.tunnelProviders.replace(t),
|
|
63
|
+
unregister: (o, n) => o.tunnelProviders.unregister(n),
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
kind: 'channel',
|
|
67
|
+
recordField: 'channelNames',
|
|
68
|
+
defs: (p) => p.channels ?? [],
|
|
69
|
+
nameOf: (c) => c.name,
|
|
70
|
+
register: (o, c) => o.channels.register(c),
|
|
71
|
+
unregister: (o, n) => o.channels.unregister(n),
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
kind: 'surface',
|
|
75
|
+
recordField: 'surfaceNames',
|
|
76
|
+
defs: (p) => p.surfaces ?? [],
|
|
77
|
+
// surfaces are keyed by `.kind`, not `.name`.
|
|
78
|
+
nameOf: (s) => s.kind,
|
|
79
|
+
register: (o, s) => o.surfaces.register(s),
|
|
80
|
+
unregister: (o, n) => o.surfaces.unregister(n),
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
kind: 'agent',
|
|
84
|
+
recordField: 'agentNames',
|
|
85
|
+
defs: (p) => p.agents ?? [],
|
|
86
|
+
nameOf: (a) => a.name,
|
|
87
|
+
register: (o, a) => o.agents.register(a),
|
|
88
|
+
unregister: (o, n) => o.agents.unregister(n),
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
kind: 'command',
|
|
92
|
+
recordField: 'commandNames',
|
|
93
|
+
defs: (p) => p.commands ?? [],
|
|
94
|
+
nameOf: (c) => c.name,
|
|
95
|
+
register: (o, c) => o.commands.register(c),
|
|
96
|
+
unregister: (o, n) => o.commands.unregister(n),
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
kind: 'transcriber',
|
|
100
|
+
recordField: 'transcriberNames',
|
|
101
|
+
defs: (p) => p.transcribers ?? [],
|
|
102
|
+
nameOf: (t) => t.name,
|
|
103
|
+
register: (o, t) => o.transcribers.register(t),
|
|
104
|
+
unregister: (o, n) => o.transcribers.unregister(n),
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
kind: 'synthesizer',
|
|
108
|
+
recordField: 'synthesizerNames',
|
|
109
|
+
defs: (p) => p.synthesizers ?? [],
|
|
110
|
+
nameOf: (s) => s.name,
|
|
111
|
+
register: (o, s) => o.synthesizers.register(s),
|
|
112
|
+
unregister: (o, n) => o.synthesizers.unregister(n),
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
kind: 'embedder',
|
|
116
|
+
recordField: 'embedderNames',
|
|
117
|
+
defs: (p) => p.embedders ?? [],
|
|
118
|
+
nameOf: (e) => e.name,
|
|
119
|
+
register: (o, e) => o.embedders.register(e),
|
|
120
|
+
unregister: (o, n) => o.embedders.unregister(n),
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
kind: 'isolator',
|
|
124
|
+
recordField: 'isolatorNames',
|
|
125
|
+
defs: (p) => p.isolators ?? [],
|
|
126
|
+
nameOf: (i) => i.name,
|
|
127
|
+
register: (o, i) => o.isolators.register(i),
|
|
128
|
+
unregister: (o, n) => o.isolators.unregister(n),
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
kind: 'workflowExecutor',
|
|
132
|
+
recordField: 'workflowExecutorNames',
|
|
133
|
+
defs: (p) => p.workflowExecutors ?? [],
|
|
134
|
+
nameOf: (w) => w.name,
|
|
135
|
+
register: (o, w) => o.workflowExecutors.register(w),
|
|
136
|
+
unregister: (o, n) => o.workflowExecutors.unregister(n),
|
|
137
|
+
},
|
|
138
|
+
];
|
|
139
|
+
//# sourceMappingURL=registry-kinds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-kinds.js","sourceRoot":"","sources":["../../src/plugins/registry-kinds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ResolvedPluginManifest } from '@moxxy/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Topological sort of discovered plugin manifests by their static
|
|
4
|
+
* `requirements` (from `package.json#moxxy.requirements`). Only
|
|
5
|
+
* `kind: 'plugin'` requirements participate; everything else (runtime,
|
|
6
|
+
* provider-state, etc.) is irrelevant to load order.
|
|
7
|
+
*
|
|
8
|
+
* Behavior:
|
|
9
|
+
* - A manifest whose required plugin name doesn't appear in `manifests`
|
|
10
|
+
* is left in place — the readiness check in PluginHost will reject it
|
|
11
|
+
* later. Toposort doesn't pre-judge.
|
|
12
|
+
* - Optional requirements (`optional: true`) are treated as soft edges:
|
|
13
|
+
* if the target is present we order around it; if not, we skip the
|
|
14
|
+
* edge silently.
|
|
15
|
+
* - Cycles throw `PluginCycleError` with the participating plugin names
|
|
16
|
+
* so the caller can surface a useful diagnostic instead of silently
|
|
17
|
+
* loading in an arbitrary order.
|
|
18
|
+
*/
|
|
19
|
+
export declare class PluginCycleError extends Error {
|
|
20
|
+
readonly cycle: ReadonlyArray<string>;
|
|
21
|
+
constructor(cycle: ReadonlyArray<string>);
|
|
22
|
+
}
|
|
23
|
+
export declare function toposortPluginManifests(manifests: ReadonlyArray<ResolvedPluginManifest>): ReadonlyArray<ResolvedPluginManifest>;
|
|
24
|
+
//# sourceMappingURL=toposort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toposort.d.ts","sourceRoot":"","sources":["../../src/plugins/toposort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC;gBAA5B,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC;CAIlD;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAC/C,aAAa,CAAC,sBAAsB,CAAC,CA6BvC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Topological sort of discovered plugin manifests by their static
|
|
3
|
+
* `requirements` (from `package.json#moxxy.requirements`). Only
|
|
4
|
+
* `kind: 'plugin'` requirements participate; everything else (runtime,
|
|
5
|
+
* provider-state, etc.) is irrelevant to load order.
|
|
6
|
+
*
|
|
7
|
+
* Behavior:
|
|
8
|
+
* - A manifest whose required plugin name doesn't appear in `manifests`
|
|
9
|
+
* is left in place — the readiness check in PluginHost will reject it
|
|
10
|
+
* later. Toposort doesn't pre-judge.
|
|
11
|
+
* - Optional requirements (`optional: true`) are treated as soft edges:
|
|
12
|
+
* if the target is present we order around it; if not, we skip the
|
|
13
|
+
* edge silently.
|
|
14
|
+
* - Cycles throw `PluginCycleError` with the participating plugin names
|
|
15
|
+
* so the caller can surface a useful diagnostic instead of silently
|
|
16
|
+
* loading in an arbitrary order.
|
|
17
|
+
*/
|
|
18
|
+
export class PluginCycleError extends Error {
|
|
19
|
+
cycle;
|
|
20
|
+
constructor(cycle) {
|
|
21
|
+
super(`Plugin requirement cycle detected: ${cycle.join(' -> ')}`);
|
|
22
|
+
this.cycle = cycle;
|
|
23
|
+
this.name = 'PluginCycleError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function toposortPluginManifests(manifests) {
|
|
27
|
+
const byPackage = new Map();
|
|
28
|
+
for (const m of manifests)
|
|
29
|
+
byPackage.set(m.packageName, m);
|
|
30
|
+
const order = [];
|
|
31
|
+
const visited = new Set();
|
|
32
|
+
const onStack = new Set();
|
|
33
|
+
const stack = [];
|
|
34
|
+
const visit = (name) => {
|
|
35
|
+
if (visited.has(name))
|
|
36
|
+
return;
|
|
37
|
+
if (onStack.has(name)) {
|
|
38
|
+
const startIdx = stack.indexOf(name);
|
|
39
|
+
throw new PluginCycleError(stack.slice(startIdx).concat(name));
|
|
40
|
+
}
|
|
41
|
+
const manifest = byPackage.get(name);
|
|
42
|
+
if (!manifest)
|
|
43
|
+
return; // unknown dep — leave for readiness gate
|
|
44
|
+
onStack.add(name);
|
|
45
|
+
stack.push(name);
|
|
46
|
+
for (const dep of pluginDeps(manifest.requirements))
|
|
47
|
+
visit(dep);
|
|
48
|
+
onStack.delete(name);
|
|
49
|
+
stack.pop();
|
|
50
|
+
visited.add(name);
|
|
51
|
+
order.push(manifest);
|
|
52
|
+
};
|
|
53
|
+
for (const m of manifests)
|
|
54
|
+
visit(m.packageName);
|
|
55
|
+
return order;
|
|
56
|
+
}
|
|
57
|
+
function pluginDeps(requirements) {
|
|
58
|
+
if (!requirements)
|
|
59
|
+
return [];
|
|
60
|
+
const out = [];
|
|
61
|
+
for (const req of requirements) {
|
|
62
|
+
if (req.kind === 'plugin')
|
|
63
|
+
out.push(req.name);
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=toposort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toposort.js","sourceRoot":"","sources":["../../src/plugins/toposort.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACpB;IAArB,YAAqB,KAA4B;QAC/C,KAAK,CAAC,sCAAsC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAD/C,UAAK,GAAL,KAAK,CAAuB;QAE/C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CACrC,SAAgD;IAEhD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAE3D,MAAM,KAAK,GAA6B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,KAAK,GAAG,CAAC,IAAY,EAAQ,EAAE;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,yCAAyC;QAEhE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CACjB,YAAyD;IAEzD,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-level runtime preferences persisted at ~/.moxxy/preferences.json.
|
|
3
|
+
* Distinct from `~/.moxxy/config.yaml` (user-edited, source of truth for
|
|
4
|
+
* provider/plugin wiring) — this file is mutated by the TUI as the user
|
|
5
|
+
* picks a model / loop strategy via slash commands, so it survives across
|
|
6
|
+
* CLI invocations. A missing file or unreadable contents is a no-op:
|
|
7
|
+
* preferences are best-effort, never load-blocking.
|
|
8
|
+
*/
|
|
9
|
+
export interface MoxxyPreferences {
|
|
10
|
+
/** Active provider name (e.g. "openai", "anthropic"). */
|
|
11
|
+
readonly providerName?: string;
|
|
12
|
+
/** Active model id under that provider (e.g. "gpt-5.4-mini"). */
|
|
13
|
+
readonly model?: string;
|
|
14
|
+
/** Active loop strategy name (e.g. "default", "research", "goal"). */
|
|
15
|
+
readonly mode?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Providers the user disabled (desktop Settings → Providers toggle).
|
|
18
|
+
* Seeded into the ProviderRegistry at boot; a listed provider stays
|
|
19
|
+
* registered but can't be activated until re-enabled.
|
|
20
|
+
*/
|
|
21
|
+
readonly disabledProviders?: ReadonlyArray<string>;
|
|
22
|
+
}
|
|
23
|
+
export declare function preferencesPath(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Read preferences from disk. Returns an empty object when the file
|
|
26
|
+
* doesn't exist or fails to parse — preferences are an optional layer,
|
|
27
|
+
* never a hard dependency of session bootstrap.
|
|
28
|
+
*/
|
|
29
|
+
export declare function loadPreferences(): Promise<MoxxyPreferences>;
|
|
30
|
+
/**
|
|
31
|
+
* Merge-and-write preferences. Reads the current file (if any), merges
|
|
32
|
+
* the patch on top so we don't blow away unrelated fields, and writes
|
|
33
|
+
* the result back atomically. The whole read-merge-write runs inside a
|
|
34
|
+
* module-level mutex so overlapping saves serialize (invariant #5) and
|
|
35
|
+
* never lose an update. Best-effort: a write failure logs to stderr but
|
|
36
|
+
* does not throw — the user's pick still takes effect in this session,
|
|
37
|
+
* just won't persist across invocations.
|
|
38
|
+
*/
|
|
39
|
+
export declare function savePreferences(patch: Partial<MoxxyPreferences>): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=preferences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACpD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAYjE;AAUD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { createMutex, migrateModeName } from '@moxxy/sdk';
|
|
5
|
+
import { writeFileAtomic } from '@moxxy/sdk/server';
|
|
6
|
+
export function preferencesPath() {
|
|
7
|
+
return path.join(os.homedir(), '.moxxy', 'preferences.json');
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Read preferences from disk. Returns an empty object when the file
|
|
11
|
+
* doesn't exist or fails to parse — preferences are an optional layer,
|
|
12
|
+
* never a hard dependency of session bootstrap.
|
|
13
|
+
*/
|
|
14
|
+
export async function loadPreferences() {
|
|
15
|
+
try {
|
|
16
|
+
const raw = await fs.readFile(preferencesPath(), 'utf8');
|
|
17
|
+
const parsed = JSON.parse(raw);
|
|
18
|
+
if (parsed && typeof parsed === 'object') {
|
|
19
|
+
const prefs = parsed;
|
|
20
|
+
return prefs.mode ? { ...prefs, mode: migrateModeName(prefs.mode) } : prefs;
|
|
21
|
+
}
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Serializes the read-modify-write in `savePreferences` so two concurrent
|
|
29
|
+
// saves (e.g. a /model pick and a provider-disable toggle firing close
|
|
30
|
+
// together) can't both read the same snapshot and have the second write
|
|
31
|
+
// clobber the first's field. This is the single write path for the file —
|
|
32
|
+
// other packages (CLI, runner, channels) route their fire-and-forget saves
|
|
33
|
+
// through it, and any load-modify-save must go through it too.
|
|
34
|
+
const writeMutex = createMutex();
|
|
35
|
+
/**
|
|
36
|
+
* Merge-and-write preferences. Reads the current file (if any), merges
|
|
37
|
+
* the patch on top so we don't blow away unrelated fields, and writes
|
|
38
|
+
* the result back atomically. The whole read-merge-write runs inside a
|
|
39
|
+
* module-level mutex so overlapping saves serialize (invariant #5) and
|
|
40
|
+
* never lose an update. Best-effort: a write failure logs to stderr but
|
|
41
|
+
* does not throw — the user's pick still takes effect in this session,
|
|
42
|
+
* just won't persist across invocations.
|
|
43
|
+
*/
|
|
44
|
+
export async function savePreferences(patch) {
|
|
45
|
+
return writeMutex.run(async () => {
|
|
46
|
+
const current = await loadPreferences();
|
|
47
|
+
const next = { ...current, ...patch };
|
|
48
|
+
const target = preferencesPath();
|
|
49
|
+
try {
|
|
50
|
+
await writeFileAtomic(target, JSON.stringify(next, null, 2) + '\n');
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
process.stderr.write(`moxxy: failed to persist preferences to ${target}: ` +
|
|
54
|
+
`${err instanceof Error ? err.message : String(err)}\n`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=preferences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAyBpD,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAA0B,CAAC;YACzC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,uEAAuE;AACvE,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,+DAA+D;AAC/D,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAgC;IACpE,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC/B,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAC;QACxC,MAAM,IAAI,GAAqB,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C,MAAM,IAAI;gBACnD,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared base for the "single active backend" registries (speech-to-text,
|
|
3
|
+
* text-to-speech, embeddings). Each one is a Map of named defs with at most one
|
|
4
|
+
* *active* at a time:
|
|
5
|
+
* - plugins call `register(def)` at load time
|
|
6
|
+
* - the host / CLI / agent calls `setActive(name, config)` to pick one
|
|
7
|
+
* - call sites read `getActive()` / `tryGetActive()` to use it (degrading
|
|
8
|
+
* gracefully when none is active)
|
|
9
|
+
*
|
|
10
|
+
* The three concrete registries differ only along a few axes, expressed via
|
|
11
|
+
* {@link BackendRegistryOptions}:
|
|
12
|
+
* - how a def becomes an instance (`build`) — `createClient(config)` for
|
|
13
|
+
* STT/embeddings, `create({ config, getSecret })` for TTS
|
|
14
|
+
* - whether the first registered def auto-becomes active (`autoAdoptFirst`,
|
|
15
|
+
* TTS only — STT/embeddings require an explicit `setActive`)
|
|
16
|
+
* - whether the active instance is (re)built lazily on read (`buildOnRead`,
|
|
17
|
+
* TTS only — needed because `autoAdoptFirst` can set `active` without ever
|
|
18
|
+
* building an instance; it also makes `setActive` rebuild when handed a
|
|
19
|
+
* fresh config)
|
|
20
|
+
*
|
|
21
|
+
* `ProviderRegistry` deliberately stays separate: it is the core LLM path and
|
|
22
|
+
* carries its own ready-state semantics.
|
|
23
|
+
*/
|
|
24
|
+
export interface BackendRegistryOptions<TDef extends {
|
|
25
|
+
name: string;
|
|
26
|
+
}, TInstance> {
|
|
27
|
+
/** Capitalised singular noun for error messages, e.g. `'Synthesizer'`. */
|
|
28
|
+
readonly noun: string;
|
|
29
|
+
/** Turn a def + (possibly empty) config into a runtime instance. */
|
|
30
|
+
readonly build: (def: TDef, config: Record<string, unknown>) => TInstance;
|
|
31
|
+
/** Adopt the first registered def as active when nothing is active yet. */
|
|
32
|
+
readonly autoAdoptFirst?: boolean;
|
|
33
|
+
/** (Re)build the active instance lazily on read rather than requiring it to
|
|
34
|
+
* have been built at `setActive` time. Also makes `setActive` rebuild when a
|
|
35
|
+
* config is supplied. Pair with {@link autoAdoptFirst}. */
|
|
36
|
+
readonly buildOnRead?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare class ActiveBackendRegistry<TDef extends {
|
|
39
|
+
name: string;
|
|
40
|
+
}, TInstance> {
|
|
41
|
+
private readonly opts;
|
|
42
|
+
private readonly defs;
|
|
43
|
+
private readonly instances;
|
|
44
|
+
private active;
|
|
45
|
+
constructor(opts: BackendRegistryOptions<TDef, TInstance>);
|
|
46
|
+
register(def: TDef, instance?: TInstance): void;
|
|
47
|
+
/** Overwrite an existing def, dropping the cached instance so the next build
|
|
48
|
+
* uses the new def. */
|
|
49
|
+
replace(def: TDef, instance?: TInstance): void;
|
|
50
|
+
unregister(name: string): void;
|
|
51
|
+
list(): ReadonlyArray<TDef>;
|
|
52
|
+
has(name: string): boolean;
|
|
53
|
+
setActive(name: string, config?: Record<string, unknown>): TInstance;
|
|
54
|
+
/** Deactivate the current backend (callers fall back to their default). */
|
|
55
|
+
clearActive(): void;
|
|
56
|
+
getActive(): TInstance;
|
|
57
|
+
/** Active backend, or null when none is configured. Lets call sites degrade
|
|
58
|
+
* gracefully (keyword recall, the OS voice, "no transcriber configured"). */
|
|
59
|
+
tryGetActive(): TInstance | null;
|
|
60
|
+
getActiveName(): string | null;
|
|
61
|
+
/** Cached instance for `name`, building it from its def on first use. */
|
|
62
|
+
private instantiate;
|
|
63
|
+
private buildInstance;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=active-backend-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-backend-registry.d.ts","sourceRoot":"","sources":["../../src/registries/active-backend-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,sBAAsB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,SAAS;IAC9E,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC;IAC1E,2EAA2E;IAC3E,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;gEAE4D;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,qBAAa,qBAAqB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,SAAS;IAK7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,MAAM,CAAuB;gBAER,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE,SAAS,CAAC;IAE1E,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI;IAS/C;4BACwB;IACxB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI;IAM9C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC;IAI3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAmBpE,2EAA2E;IAC3E,WAAW,IAAI,IAAI;IAInB,SAAS,IAAI,SAAS;IAUtB;kFAC8E;IAC9E,YAAY,IAAI,SAAS,GAAG,IAAI;IAYhC,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,yEAAyE;IACzE,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,aAAa;CAKtB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export class ActiveBackendRegistry {
|
|
2
|
+
opts;
|
|
3
|
+
defs = new Map();
|
|
4
|
+
instances = new Map();
|
|
5
|
+
active = null;
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
this.opts = opts;
|
|
8
|
+
}
|
|
9
|
+
register(def, instance) {
|
|
10
|
+
if (this.defs.has(def.name)) {
|
|
11
|
+
throw new Error(`${this.opts.noun} already registered: ${def.name}`);
|
|
12
|
+
}
|
|
13
|
+
this.defs.set(def.name, def);
|
|
14
|
+
if (instance)
|
|
15
|
+
this.instances.set(def.name, instance);
|
|
16
|
+
if (this.opts.autoAdoptFirst && this.active === null)
|
|
17
|
+
this.active = def.name;
|
|
18
|
+
}
|
|
19
|
+
/** Overwrite an existing def, dropping the cached instance so the next build
|
|
20
|
+
* uses the new def. */
|
|
21
|
+
replace(def, instance) {
|
|
22
|
+
this.defs.set(def.name, def);
|
|
23
|
+
this.instances.delete(def.name);
|
|
24
|
+
if (instance)
|
|
25
|
+
this.instances.set(def.name, instance);
|
|
26
|
+
}
|
|
27
|
+
unregister(name) {
|
|
28
|
+
this.defs.delete(name);
|
|
29
|
+
this.instances.delete(name);
|
|
30
|
+
if (this.active === name)
|
|
31
|
+
this.active = null;
|
|
32
|
+
}
|
|
33
|
+
list() {
|
|
34
|
+
return [...this.defs.values()];
|
|
35
|
+
}
|
|
36
|
+
has(name) {
|
|
37
|
+
return this.defs.has(name);
|
|
38
|
+
}
|
|
39
|
+
setActive(name, config) {
|
|
40
|
+
if (!this.defs.has(name))
|
|
41
|
+
throw new Error(`${this.opts.noun} not registered: ${name}`);
|
|
42
|
+
if (this.opts.buildOnRead) {
|
|
43
|
+
// Supplying a config (re)builds with it; otherwise reuse / lazily build.
|
|
44
|
+
if (config)
|
|
45
|
+
this.instances.set(name, this.buildInstance(name, config));
|
|
46
|
+
this.active = name;
|
|
47
|
+
return this.instantiate(name);
|
|
48
|
+
}
|
|
49
|
+
// Build once, on first activation; later activations reuse the cache and
|
|
50
|
+
// ignore `config`.
|
|
51
|
+
let instance = this.instances.get(name);
|
|
52
|
+
if (!instance) {
|
|
53
|
+
instance = this.buildInstance(name, config);
|
|
54
|
+
this.instances.set(name, instance);
|
|
55
|
+
}
|
|
56
|
+
this.active = name;
|
|
57
|
+
return instance;
|
|
58
|
+
}
|
|
59
|
+
/** Deactivate the current backend (callers fall back to their default). */
|
|
60
|
+
clearActive() {
|
|
61
|
+
this.active = null;
|
|
62
|
+
}
|
|
63
|
+
getActive() {
|
|
64
|
+
if (!this.active) {
|
|
65
|
+
throw new Error(`No active ${this.opts.noun.toLowerCase()}. Call setActive(name) first.`);
|
|
66
|
+
}
|
|
67
|
+
if (this.opts.buildOnRead)
|
|
68
|
+
return this.instantiate(this.active);
|
|
69
|
+
const inst = this.instances.get(this.active);
|
|
70
|
+
if (!inst)
|
|
71
|
+
throw new Error(`Active ${this.opts.noun.toLowerCase()} has no instance: ${this.active}`);
|
|
72
|
+
return inst;
|
|
73
|
+
}
|
|
74
|
+
/** Active backend, or null when none is configured. Lets call sites degrade
|
|
75
|
+
* gracefully (keyword recall, the OS voice, "no transcriber configured"). */
|
|
76
|
+
tryGetActive() {
|
|
77
|
+
if (!this.active)
|
|
78
|
+
return null;
|
|
79
|
+
if (this.opts.buildOnRead) {
|
|
80
|
+
try {
|
|
81
|
+
return this.instantiate(this.active);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return this.instances.get(this.active) ?? null;
|
|
88
|
+
}
|
|
89
|
+
getActiveName() {
|
|
90
|
+
return this.active;
|
|
91
|
+
}
|
|
92
|
+
/** Cached instance for `name`, building it from its def on first use. */
|
|
93
|
+
instantiate(name) {
|
|
94
|
+
let inst = this.instances.get(name);
|
|
95
|
+
if (!inst) {
|
|
96
|
+
inst = this.buildInstance(name);
|
|
97
|
+
this.instances.set(name, inst);
|
|
98
|
+
}
|
|
99
|
+
return inst;
|
|
100
|
+
}
|
|
101
|
+
buildInstance(name, config) {
|
|
102
|
+
const def = this.defs.get(name);
|
|
103
|
+
if (!def)
|
|
104
|
+
throw new Error(`${this.opts.noun} not registered: ${name}`);
|
|
105
|
+
return this.opts.build(def, config ?? {});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=active-backend-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-backend-registry.js","sourceRoot":"","sources":["../../src/registries/active-backend-registry.ts"],"names":[],"mappings":"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"}
|