@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,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `setupAgent` — the one-call ergonomic entry to the moxxy runtime.
|
|
3
|
+
*
|
|
4
|
+
* Constructing a {@link Session}, registering a mode + provider plugins + tools,
|
|
5
|
+
* activating a provider, and calling {@link runTurn} is the standard boilerplate.
|
|
6
|
+
* This wraps all of it in a single SYNCHRONOUS call and hands back a small
|
|
7
|
+
* {@link Agent} you destructure:
|
|
8
|
+
*
|
|
9
|
+
* import { setupAgent } from '@moxxy/core';
|
|
10
|
+
* import defaultMode from '@moxxy/mode-default';
|
|
11
|
+
* import openai from '@moxxy/plugin-provider-openai';
|
|
12
|
+
*
|
|
13
|
+
* const { ask, stream, session } = setupAgent({
|
|
14
|
+
* plugins: [defaultMode, openai],
|
|
15
|
+
* provider: { name: 'openai', config: { apiKey: process.env.OPENAI_API_KEY } },
|
|
16
|
+
* tools: [myTool],
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* console.log(await ask('Hello!')); // final reply text (async)
|
|
20
|
+
* for await (const e of stream('Go on…')) { … } // event stream (async generator)
|
|
21
|
+
*
|
|
22
|
+
* Two ways to run a turn: `stream()` is a proper async generator that YIELDS each
|
|
23
|
+
* {@link MoxxyEvent} as it happens; `ask()`/`collect()` are async — the final
|
|
24
|
+
* text, or every event. The methods close over the session (no `this`), so
|
|
25
|
+
* destructuring is safe. `session` is the LIVE session — hot-change blocks
|
|
26
|
+
* between turns through it (or the `setProvider`/`setMode`/`use`/`addTool` sugar).
|
|
27
|
+
* It stays block-agnostic: you pass the provider/mode PLUGINS in, so `@moxxy/core`
|
|
28
|
+
* never depends on a vendor.
|
|
29
|
+
*/
|
|
30
|
+
import type { MoxxyEvent, PermissionResolver, Plugin, RunTurnOptions, ToolDef } from '@moxxy/sdk';
|
|
31
|
+
import { Session, type SessionOptions } from './session.js';
|
|
32
|
+
export interface SetupAgentOptions {
|
|
33
|
+
/** Working directory the agent operates in. Defaults to `process.cwd()`. */
|
|
34
|
+
readonly cwd?: string;
|
|
35
|
+
/** Plugins to register up front — modes, providers, tool-packs, … (order kept). */
|
|
36
|
+
readonly plugins?: readonly Plugin[];
|
|
37
|
+
/** Tools to register directly (sugar over authoring a one-tool plugin). */
|
|
38
|
+
readonly tools?: readonly ToolDef[];
|
|
39
|
+
/** Activate a provider after registration: its registered `name` + the config
|
|
40
|
+
* its `createClient` needs (e.g. `{ apiKey }`). */
|
|
41
|
+
readonly provider?: {
|
|
42
|
+
readonly name: string;
|
|
43
|
+
readonly config?: Record<string, unknown>;
|
|
44
|
+
};
|
|
45
|
+
/** Permission policy: `'auto'` (approve every tool call — frictionless headless
|
|
46
|
+
* default), `'deny'` (refuse all), or a custom {@link PermissionResolver}. */
|
|
47
|
+
readonly permissions?: 'auto' | 'deny' | PermissionResolver;
|
|
48
|
+
/** Any other {@link SessionOptions} (logger, secretResolver, pluginLoader,
|
|
49
|
+
* pluginDiscoveryPaths, …). */
|
|
50
|
+
readonly session?: Omit<SessionOptions, 'cwd' | 'permissionResolver'>;
|
|
51
|
+
}
|
|
52
|
+
export interface Agent {
|
|
53
|
+
/** The underlying live {@link Session} — full control + hot-change escape hatch
|
|
54
|
+
* (`session.providers`, `session.tools`, `session.modes`, `session.pluginHost`). */
|
|
55
|
+
readonly session: Session;
|
|
56
|
+
/** Run one turn as an async generator, YIELDING each event as it happens:
|
|
57
|
+
* `for await (const e of stream(prompt)) …`. */
|
|
58
|
+
stream(prompt: string, opts?: RunTurnOptions): AsyncGenerator<MoxxyEvent, void, void>;
|
|
59
|
+
/** Run one turn; resolve with the final assistant text (`''` if none). */
|
|
60
|
+
ask(prompt: string, opts?: RunTurnOptions): Promise<string>;
|
|
61
|
+
/** Run one turn; resolve with every emitted event. */
|
|
62
|
+
collect(prompt: string, opts?: RunTurnOptions): Promise<ReadonlyArray<MoxxyEvent>>;
|
|
63
|
+
/** Discover + load plugins from `node_modules` (and `pluginDiscoveryPaths`).
|
|
64
|
+
* Async; resolves with this agent for chaining. */
|
|
65
|
+
discover(): Promise<Agent>;
|
|
66
|
+
/** Register another plugin (mode / provider / tool-pack) on the live session. */
|
|
67
|
+
use(plugin: Plugin): Agent;
|
|
68
|
+
/** Register a tool on the live session. */
|
|
69
|
+
addTool(tool: ToolDef): Agent;
|
|
70
|
+
/** Remove a registered tool by name. */
|
|
71
|
+
removeTool(name: string): Agent;
|
|
72
|
+
/** Swap the active provider (and its config) for subsequent turns. */
|
|
73
|
+
setProvider(name: string, config?: Record<string, unknown>): Agent;
|
|
74
|
+
/** Swap the active loop strategy (mode) for subsequent turns. */
|
|
75
|
+
setMode(name: string): Agent;
|
|
76
|
+
}
|
|
77
|
+
/** A reusable, pre-filled chunk of {@link SetupAgentOptions} — e.g. a provider
|
|
78
|
+
* "preset" that bundles a provider plugin + the default mode + its config, so
|
|
79
|
+
* `setupAgent(openaiPreset({ apiKey }))` is a one-line drop-in. A preset is just
|
|
80
|
+
* an options object, so presets compose: pass an array and they merge. */
|
|
81
|
+
export type AgentPreset = SetupAgentOptions;
|
|
82
|
+
/**
|
|
83
|
+
* Build a ready-to-run {@link Agent}. Synchronous — destructure the result.
|
|
84
|
+
* Accepts a full options object, a single {@link AgentPreset}, or an ARRAY of
|
|
85
|
+
* presets that are merged (see {@link mergePresets}):
|
|
86
|
+
*
|
|
87
|
+
* setupAgent(openaiPreset({ apiKey }))
|
|
88
|
+
* setupAgent([openaiPreset({ apiKey }), anthropicPreset({ apiKey })]) // both; openai active
|
|
89
|
+
*/
|
|
90
|
+
export declare function setupAgent(input?: SetupAgentOptions | readonly SetupAgentOptions[]): Agent;
|
|
91
|
+
//# sourceMappingURL=setup-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-agent.d.ts","sourceRoot":"","sources":["../src/setup-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAElG,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAI5D,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACpC;wDACoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACzF;mFAC+E;IAC/E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,kBAAkB,CAAC;IAC5D;oCACgC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,oBAAoB,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,KAAK;IACpB;yFACqF;IACrF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B;qDACiD;IACjD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtF,0EAA0E;IAC1E,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,sDAAsD;IACtD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IACnF;wDACoD;IACpD,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAG3B,iFAAiF;IACjF,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,2CAA2C;IAC3C,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9B,wCAAwC;IACxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAChC,sEAAsE;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;IACnE,iEAAiE;IACjE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;CAC9B;AAgBD;;;2EAG2E;AAC3E,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC;AA8B5C;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,GAAE,iBAAiB,GAAG,SAAS,iBAAiB,EAAO,GAAG,KAAK,CAiD9F"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `setupAgent` — the one-call ergonomic entry to the moxxy runtime.
|
|
3
|
+
*
|
|
4
|
+
* Constructing a {@link Session}, registering a mode + provider plugins + tools,
|
|
5
|
+
* activating a provider, and calling {@link runTurn} is the standard boilerplate.
|
|
6
|
+
* This wraps all of it in a single SYNCHRONOUS call and hands back a small
|
|
7
|
+
* {@link Agent} you destructure:
|
|
8
|
+
*
|
|
9
|
+
* import { setupAgent } from '@moxxy/core';
|
|
10
|
+
* import defaultMode from '@moxxy/mode-default';
|
|
11
|
+
* import openai from '@moxxy/plugin-provider-openai';
|
|
12
|
+
*
|
|
13
|
+
* const { ask, stream, session } = setupAgent({
|
|
14
|
+
* plugins: [defaultMode, openai],
|
|
15
|
+
* provider: { name: 'openai', config: { apiKey: process.env.OPENAI_API_KEY } },
|
|
16
|
+
* tools: [myTool],
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* console.log(await ask('Hello!')); // final reply text (async)
|
|
20
|
+
* for await (const e of stream('Go on…')) { … } // event stream (async generator)
|
|
21
|
+
*
|
|
22
|
+
* Two ways to run a turn: `stream()` is a proper async generator that YIELDS each
|
|
23
|
+
* {@link MoxxyEvent} as it happens; `ask()`/`collect()` are async — the final
|
|
24
|
+
* text, or every event. The methods close over the session (no `this`), so
|
|
25
|
+
* destructuring is safe. `session` is the LIVE session — hot-change blocks
|
|
26
|
+
* between turns through it (or the `setProvider`/`setMode`/`use`/`addTool` sugar).
|
|
27
|
+
* It stays block-agnostic: you pass the provider/mode PLUGINS in, so `@moxxy/core`
|
|
28
|
+
* never depends on a vendor.
|
|
29
|
+
*/
|
|
30
|
+
import { Session } from './session.js';
|
|
31
|
+
import { runTurn, collectTurn } from './run-turn.js';
|
|
32
|
+
import { autoAllowResolver, denyByDefaultResolver } from './permissions/resolvers.js';
|
|
33
|
+
function resolvePermissions(p) {
|
|
34
|
+
if (p === 'deny')
|
|
35
|
+
return denyByDefaultResolver;
|
|
36
|
+
if (p === undefined || p === 'auto')
|
|
37
|
+
return autoAllowResolver;
|
|
38
|
+
return p;
|
|
39
|
+
}
|
|
40
|
+
function finalText(events) {
|
|
41
|
+
for (let i = events.length - 1; i >= 0; i -= 1) {
|
|
42
|
+
const e = events[i];
|
|
43
|
+
if (e.type === 'assistant_message')
|
|
44
|
+
return e.content;
|
|
45
|
+
}
|
|
46
|
+
return '';
|
|
47
|
+
}
|
|
48
|
+
/** Merge an array of presets into one options object: plugins concatenate
|
|
49
|
+
* (de-duped by name, so two presets both bringing the default mode register it
|
|
50
|
+
* once), tools concatenate, and the FIRST preset that names a provider wins as
|
|
51
|
+
* the active one (the others are still registered, so you can `setProvider` to
|
|
52
|
+
* swap). cwd/permissions take the first set; session options shallow-merge. */
|
|
53
|
+
function mergePresets(presets) {
|
|
54
|
+
const plugins = [];
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
const tools = [];
|
|
57
|
+
let provider;
|
|
58
|
+
let cwd;
|
|
59
|
+
let permissions;
|
|
60
|
+
let session;
|
|
61
|
+
for (const p of presets) {
|
|
62
|
+
for (const pl of p.plugins ?? []) {
|
|
63
|
+
if (seen.has(pl.name))
|
|
64
|
+
continue;
|
|
65
|
+
seen.add(pl.name);
|
|
66
|
+
plugins.push(pl);
|
|
67
|
+
}
|
|
68
|
+
if (p.tools)
|
|
69
|
+
tools.push(...p.tools);
|
|
70
|
+
if (!provider && p.provider)
|
|
71
|
+
provider = p.provider;
|
|
72
|
+
cwd ??= p.cwd;
|
|
73
|
+
permissions ??= p.permissions;
|
|
74
|
+
if (p.session)
|
|
75
|
+
session = { ...session, ...p.session };
|
|
76
|
+
}
|
|
77
|
+
return { plugins, tools, provider, cwd, permissions, session };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Build a ready-to-run {@link Agent}. Synchronous — destructure the result.
|
|
81
|
+
* Accepts a full options object, a single {@link AgentPreset}, or an ARRAY of
|
|
82
|
+
* presets that are merged (see {@link mergePresets}):
|
|
83
|
+
*
|
|
84
|
+
* setupAgent(openaiPreset({ apiKey }))
|
|
85
|
+
* setupAgent([openaiPreset({ apiKey }), anthropicPreset({ apiKey })]) // both; openai active
|
|
86
|
+
*/
|
|
87
|
+
export function setupAgent(input = {}) {
|
|
88
|
+
const opts = Array.isArray(input) ? mergePresets(input) : input;
|
|
89
|
+
const session = new Session({
|
|
90
|
+
cwd: opts.cwd ?? process.cwd(),
|
|
91
|
+
permissionResolver: resolvePermissions(opts.permissions),
|
|
92
|
+
...opts.session,
|
|
93
|
+
});
|
|
94
|
+
for (const plugin of opts.plugins ?? [])
|
|
95
|
+
session.pluginHost.registerStatic(plugin);
|
|
96
|
+
for (const tool of opts.tools ?? [])
|
|
97
|
+
session.tools.register(tool);
|
|
98
|
+
if (opts.provider)
|
|
99
|
+
session.providers.setActive(opts.provider.name, opts.provider.config);
|
|
100
|
+
const agent = {
|
|
101
|
+
session,
|
|
102
|
+
async *stream(prompt, runOpts) {
|
|
103
|
+
yield* runTurn(session, prompt, runOpts);
|
|
104
|
+
},
|
|
105
|
+
async ask(prompt, runOpts) {
|
|
106
|
+
return finalText(await collectTurn(session, prompt, runOpts));
|
|
107
|
+
},
|
|
108
|
+
collect(prompt, runOpts) {
|
|
109
|
+
return collectTurn(session, prompt, runOpts);
|
|
110
|
+
},
|
|
111
|
+
async discover() {
|
|
112
|
+
await session.pluginHost.discoverAndLoad();
|
|
113
|
+
return agent;
|
|
114
|
+
},
|
|
115
|
+
use(plugin) {
|
|
116
|
+
session.pluginHost.registerStatic(plugin);
|
|
117
|
+
return agent;
|
|
118
|
+
},
|
|
119
|
+
addTool(tool) {
|
|
120
|
+
session.tools.register(tool);
|
|
121
|
+
return agent;
|
|
122
|
+
},
|
|
123
|
+
removeTool(name) {
|
|
124
|
+
session.tools.unregister(name);
|
|
125
|
+
return agent;
|
|
126
|
+
},
|
|
127
|
+
setProvider(name, config) {
|
|
128
|
+
session.providers.setActive(name, config);
|
|
129
|
+
return agent;
|
|
130
|
+
},
|
|
131
|
+
setMode(name) {
|
|
132
|
+
session.modes.setActive(name);
|
|
133
|
+
return agent;
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
return agent;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=setup-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-agent.js","sourceRoot":"","sources":["../src/setup-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { parseSkillFile, parseFrontmatter } from './parse.js';
|
|
2
|
+
export { discoverSkills, defaultUserSkillsDir, defaultProjectSkillsDir, type SkillLoadOptions, type DiscoveredSkill, } from './loader.js';
|
|
3
|
+
export { synthesizeSkill, buildSynthesizeSkillPlugin, type SynthesizeOptions, type SynthesizedSkill, } from './synthesize.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { parseSkillFile, parseFrontmatter } from './parse.js';
|
|
2
|
+
export { discoverSkills, defaultUserSkillsDir, defaultProjectSkillsDir, } from './loader.js';
|
|
3
|
+
export { synthesizeSkill, buildSynthesizeSkillPlugin, } from './synthesize.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,uBAAuB,GAGxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,0BAA0B,GAG3B,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Skill, type SkillScope } from '@moxxy/sdk';
|
|
2
|
+
import type { Logger } from '../logger.js';
|
|
3
|
+
export interface SkillLoadOptions {
|
|
4
|
+
readonly projectDir?: string;
|
|
5
|
+
readonly userDir?: string;
|
|
6
|
+
readonly pluginDirs?: ReadonlyArray<string>;
|
|
7
|
+
readonly builtinDir?: string;
|
|
8
|
+
readonly logger?: Logger;
|
|
9
|
+
}
|
|
10
|
+
export interface DiscoveredSkill extends Skill {
|
|
11
|
+
readonly scope: SkillScope;
|
|
12
|
+
}
|
|
13
|
+
export declare function discoverSkills(opts?: SkillLoadOptions): Promise<ReadonlyArray<DiscoveredSkill>>;
|
|
14
|
+
export declare function defaultUserSkillsDir(): string;
|
|
15
|
+
export declare function defaultProjectSkillsDir(cwd: string): string;
|
|
16
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAgB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,wBAAsB,cAAc,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAczG;AA0ED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { skillFrontmatterSchema, asSkillId } from '@moxxy/sdk';
|
|
5
|
+
import { parseSkillFile } from './parse.js';
|
|
6
|
+
export async function discoverSkills(opts = {}) {
|
|
7
|
+
const sources = [];
|
|
8
|
+
if (opts.builtinDir)
|
|
9
|
+
sources.push({ dir: opts.builtinDir, scope: 'builtin' });
|
|
10
|
+
for (const dir of opts.pluginDirs ?? [])
|
|
11
|
+
sources.push({ dir, scope: 'plugin' });
|
|
12
|
+
const userDir = opts.userDir ?? defaultUserSkillsDir();
|
|
13
|
+
sources.push({ dir: userDir, scope: 'user' });
|
|
14
|
+
if (opts.projectDir)
|
|
15
|
+
sources.push({ dir: opts.projectDir, scope: 'project' });
|
|
16
|
+
const seenNames = new Map();
|
|
17
|
+
for (const source of sources) {
|
|
18
|
+
const skills = await loadDir(source.dir, source.scope, opts.logger);
|
|
19
|
+
for (const skill of skills)
|
|
20
|
+
seenNames.set(skill.frontmatter.name, skill);
|
|
21
|
+
}
|
|
22
|
+
return [...seenNames.values()];
|
|
23
|
+
}
|
|
24
|
+
async function loadDir(dir, scope, logger) {
|
|
25
|
+
let entries;
|
|
26
|
+
try {
|
|
27
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
const out = [];
|
|
33
|
+
for (const entry of entries) {
|
|
34
|
+
if (entry.isDirectory()) {
|
|
35
|
+
out.push(...(await loadDir(path.join(dir, entry.name), scope, logger)));
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (!entry.isFile() || !entry.name.endsWith('.md'))
|
|
39
|
+
continue;
|
|
40
|
+
const full = path.join(dir, entry.name);
|
|
41
|
+
let raw;
|
|
42
|
+
try {
|
|
43
|
+
raw = await fs.readFile(full, 'utf8');
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
// One unreadable .md (permission, race-deleted, symlink loop) must not
|
|
47
|
+
// abort discovery of every remaining skill across every source — degrade
|
|
48
|
+
// to skipping just this file, like the invalid-frontmatter case below.
|
|
49
|
+
logger?.warn('skill: unreadable file, skipping', {
|
|
50
|
+
path: full,
|
|
51
|
+
error: err instanceof Error ? err.message : String(err),
|
|
52
|
+
});
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const { frontmatter, body } = parseSkillFile(raw);
|
|
56
|
+
const parsed = skillFrontmatterSchema.safeParse(frontmatter);
|
|
57
|
+
if (!parsed.success) {
|
|
58
|
+
logger?.warn('skill: invalid frontmatter, skipping', { path: full, issues: parsed.error.issues });
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Auto-derive trigger fallbacks from the skill name when the
|
|
62
|
+
// frontmatter `triggers:` field is missing/empty. Without this,
|
|
63
|
+
// user-authored skills (or model-synthesized ones that skipped the
|
|
64
|
+
// field) have no triggers at all — they're effectively invisible
|
|
65
|
+
// to the trigger-match router and confusing in /skills listings.
|
|
66
|
+
// We split the kebab-case name into words and also keep the full
|
|
67
|
+
// slug as a literal trigger.
|
|
68
|
+
const fm = parsed.data;
|
|
69
|
+
const finalTriggers = fm.triggers && fm.triggers.length > 0 ? fm.triggers : deriveTriggers(fm.name);
|
|
70
|
+
out.push({
|
|
71
|
+
id: asSkillId(`${scope}/${fm.name}`),
|
|
72
|
+
path: full,
|
|
73
|
+
scope,
|
|
74
|
+
frontmatter: { ...fm, triggers: finalTriggers },
|
|
75
|
+
body: body.trimEnd(),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Derive trigger-like phrases from a kebab-case skill name. Best-effort
|
|
82
|
+
* fallback for skills whose frontmatter omits the `triggers:` field —
|
|
83
|
+
* gives the router and `/skills` listing *something* to show.
|
|
84
|
+
*/
|
|
85
|
+
function deriveTriggers(name) {
|
|
86
|
+
const parts = name.split('-').filter((p) => p.length > 1);
|
|
87
|
+
const out = new Set();
|
|
88
|
+
out.add(name.replace(/-/g, ' '));
|
|
89
|
+
for (const p of parts)
|
|
90
|
+
out.add(p);
|
|
91
|
+
return [...out];
|
|
92
|
+
}
|
|
93
|
+
export function defaultUserSkillsDir() {
|
|
94
|
+
return path.join(os.homedir(), '.moxxy', 'skills');
|
|
95
|
+
}
|
|
96
|
+
export function defaultProjectSkillsDir(cwd) {
|
|
97
|
+
return path.join(cwd, '.moxxy', 'skills');
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { parseFrontmatterFile, type ParsedFrontmatter } from '@moxxy/sdk';
|
|
2
|
+
export type ParsedSkillFile = ParsedFrontmatter;
|
|
3
|
+
export declare const parseSkillFile: typeof parseFrontmatterFile;
|
|
4
|
+
export { parseFrontmatter } from '@moxxy/sdk';
|
|
5
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/skills/parse.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD,eAAO,MAAM,cAAc,6BAAuB,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// The skill frontmatter parser now lives canonically in @moxxy/sdk
|
|
2
|
+
// (`parseFrontmatterFile`/`parseFrontmatter`), shared with plugin-memory so the
|
|
3
|
+
// previously-copy-pasted copies can't diverge. This module keeps the historical
|
|
4
|
+
// `parseSkillFile`/`ParsedSkillFile` names as thin re-exports.
|
|
5
|
+
import { parseFrontmatterFile } from '@moxxy/sdk';
|
|
6
|
+
export const parseSkillFile = parseFrontmatterFile;
|
|
7
|
+
export { parseFrontmatter } from '@moxxy/sdk';
|
|
8
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/skills/parse.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,gFAAgF;AAChF,gFAAgF;AAChF,+DAA+D;AAC/D,OAAO,EAAE,oBAAoB,EAA0B,MAAM,YAAY,CAAC;AAI1E,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LLMProvider } from '@moxxy/sdk';
|
|
2
|
+
export interface DraftedSkill {
|
|
3
|
+
raw: string;
|
|
4
|
+
frontmatter: Record<string, unknown>;
|
|
5
|
+
body: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function draftSkill(provider: LLMProvider, model: string, intent: string, signal: AbortSignal): Promise<DraftedSkill>;
|
|
8
|
+
//# sourceMappingURL=synthesize-draft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesize-draft.d.ts","sourceRoot":"","sources":["../../src/skills/synthesize-draft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAUD,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAkBvB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { parseSkillFile } from './parse.js';
|
|
2
|
+
const DRAFT_SYSTEM_PROMPT = `You are a skill-author. Output ONLY a Markdown file with YAML frontmatter. No prose outside the Markdown. Frontmatter MUST include:
|
|
3
|
+
- name (kebab-case slug, <=60 chars, lowercase letters/numbers/hyphens only, starting with a letter)
|
|
4
|
+
- description (1 sentence, <=120 chars)
|
|
5
|
+
- triggers (array of 2-5 short phrases the user might say)
|
|
6
|
+
- allowed-tools (array of tool names, e.g. ["Read", "Edit", "Bash"])
|
|
7
|
+
|
|
8
|
+
The body is the instructions for future invocations. Keep it under 30 lines. Numbered steps preferred.`;
|
|
9
|
+
export async function draftSkill(provider, model, intent, signal) {
|
|
10
|
+
let accumulated = '';
|
|
11
|
+
for await (const event of provider.stream({
|
|
12
|
+
model,
|
|
13
|
+
system: DRAFT_SYSTEM_PROMPT,
|
|
14
|
+
messages: [{ role: 'user', content: [{ type: 'text', text: `User intent: ${intent}` }] }],
|
|
15
|
+
maxTokens: 2000,
|
|
16
|
+
signal,
|
|
17
|
+
})) {
|
|
18
|
+
if (event.type === 'text_delta')
|
|
19
|
+
accumulated += event.delta;
|
|
20
|
+
if (event.type === 'error') {
|
|
21
|
+
throw new Error(`synthesizeSkill: provider error: ${event.message}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const raw = extractMarkdownBlock(accumulated);
|
|
25
|
+
const { frontmatter, body } = parseSkillFile(raw);
|
|
26
|
+
return { raw, frontmatter: frontmatter, body };
|
|
27
|
+
}
|
|
28
|
+
function extractMarkdownBlock(s) {
|
|
29
|
+
const fence = /```(?:markdown|md)?\n([\s\S]*?)```/.exec(s);
|
|
30
|
+
return fence ? fence[1] : s;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=synthesize-draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesize-draft.js","sourceRoot":"","sources":["../../src/skills/synthesize-draft.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAQ5C,MAAM,mBAAmB,GAAG;;;;;;uGAM2E,CAAC;AAExG,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAqB,EACrB,KAAa,EACb,MAAc,EACd,MAAmB;IAEnB,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;QACxC,KAAK;QACL,MAAM,EAAE,mBAAmB;QAC3B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACzF,SAAS,EAAE,IAAI;QACf,MAAM;KACP,CAAC,EAAE,CAAC;QACH,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;YAAE,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC;QAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAClD,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,WAAsC,EAAE,IAAI,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,oBAAoB,CAAC,CAAS;IACrC,MAAM,KAAK,GAAG,oCAAoC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type Plugin, type Skill, type SkillScope, type TurnId } from '@moxxy/sdk';
|
|
2
|
+
import type { Session } from '../session.js';
|
|
3
|
+
export interface SynthesizeOptions {
|
|
4
|
+
readonly userDir?: string;
|
|
5
|
+
readonly projectDir?: string;
|
|
6
|
+
readonly model?: string;
|
|
7
|
+
readonly auditPath?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Directory holding builtin skills (`@moxxy/skills-builtin`). Threaded
|
|
10
|
+
* through so `reload_skills` can rescan the same source set as the boot
|
|
11
|
+
* loader — otherwise reload silently drops the builtins, observed when
|
|
12
|
+
* a session called `reload_skills` and lost every shipped skill.
|
|
13
|
+
*/
|
|
14
|
+
readonly builtinDir?: string;
|
|
15
|
+
/** Extra plugin-supplied skill directories. Same boot-vs-reload story. */
|
|
16
|
+
readonly pluginDirs?: ReadonlyArray<string>;
|
|
17
|
+
}
|
|
18
|
+
export interface SynthesizedSkill {
|
|
19
|
+
readonly skill: Skill;
|
|
20
|
+
readonly path: string;
|
|
21
|
+
readonly scope: SkillScope;
|
|
22
|
+
}
|
|
23
|
+
export declare function synthesizeSkill(session: Session, intent: string, scope: 'user' | 'project', opts?: SynthesizeOptions,
|
|
24
|
+
/**
|
|
25
|
+
* The active turn's id, threaded from the tool's `ctx.turnId`. The
|
|
26
|
+
* `skill_created` event MUST carry it so run-turn's per-turn subscriber
|
|
27
|
+
* (`event.turnId !== turnId → drop`) doesn't filter the event out of the
|
|
28
|
+
* running turn's stream. Falls back to a fresh turn only for legacy callers
|
|
29
|
+
* that invoke this outside a turn.
|
|
30
|
+
*/
|
|
31
|
+
turnId?: TurnId): Promise<SynthesizedSkill>;
|
|
32
|
+
export declare function buildSynthesizeSkillPlugin(session: Session, opts?: SynthesizeOptions): Plugin;
|
|
33
|
+
//# sourceMappingURL=synthesize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/skills/synthesize.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AAIpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,GAAE,iBAAsB;AAC5B;;;;;;GAMG;AACH,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CAwE3B;AAkCD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE,iBAAsB,GAC3B,MAAM,CA8IR"}
|