@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Moxxy (moxxy.ai)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# @moxxy/core
|
|
2
|
+
|
|
3
|
+
The [moxxy](https://moxxy.ai) runtime, as a library. Construct an agentic
|
|
4
|
+
**Session**, register the blocks you want (providers, tools, modes, compactors,
|
|
5
|
+
channels, …), and run turns — embed moxxy's agent loop directly in your own code
|
|
6
|
+
instead of going through the CLI or desktop app.
|
|
7
|
+
|
|
8
|
+
`@moxxy/core` is the **engine + the block registries**. It ships *no* built-in
|
|
9
|
+
LLM provider or loop strategy — those are swappable packages you register, so
|
|
10
|
+
nothing is welded in.
|
|
11
|
+
|
|
12
|
+
> **Just want to run an agent fast?** Use
|
|
13
|
+
> [`@moxxy/agent`](https://www.npmjs.com/package/@moxxy/agent) —
|
|
14
|
+
> `setupAgent(openaiPreset({ apiKey }))` and you're done. This package is the
|
|
15
|
+
> layer underneath, for when you want full control of the blocks.
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm i @moxxy/core @moxxy/sdk @moxxy/mode-default @moxxy/plugin-provider-openai
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
(`@moxxy/sdk` gives you the typed contracts + `define*` factories for authoring
|
|
24
|
+
your own blocks.)
|
|
25
|
+
|
|
26
|
+
## Quick start — `setupAgent`
|
|
27
|
+
|
|
28
|
+
`setupAgent` wires a Session + your blocks in one synchronous call and hands back
|
|
29
|
+
a small agent you destructure:
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { setupAgent } from '@moxxy/core';
|
|
33
|
+
import defaultMode from '@moxxy/mode-default';
|
|
34
|
+
import openai from '@moxxy/plugin-provider-openai';
|
|
35
|
+
|
|
36
|
+
const { ask, stream, session } = setupAgent({
|
|
37
|
+
plugins: [defaultMode, openai],
|
|
38
|
+
provider: { name: 'openai', config: { apiKey: process.env.OPENAI_API_KEY } },
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// `ask` → the final reply text (async):
|
|
42
|
+
console.log(await ask('Say hello in French.'));
|
|
43
|
+
|
|
44
|
+
// `stream` → an async generator yielding each event:
|
|
45
|
+
for await (const event of stream('Now in German.')) {
|
|
46
|
+
if (event.type === 'assistant_chunk') process.stdout.write(event.delta);
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`collect(prompt)` resolves with every event; `session` is the live Session for
|
|
51
|
+
anything the sugar doesn't cover.
|
|
52
|
+
|
|
53
|
+
### Tools
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { defineTool } from '@moxxy/sdk';
|
|
57
|
+
import { z } from 'zod';
|
|
58
|
+
|
|
59
|
+
const { ask, addTool } = setupAgent({ plugins: [defaultMode, openai], provider: { name: 'openai' } });
|
|
60
|
+
|
|
61
|
+
addTool(
|
|
62
|
+
defineTool({
|
|
63
|
+
name: 'get_weather',
|
|
64
|
+
description: 'Current weather for a city.',
|
|
65
|
+
inputSchema: z.object({ city: z.string() }),
|
|
66
|
+
handler: async ({ city }) => `It's sunny in ${city}.`,
|
|
67
|
+
}),
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
console.log(await ask("What's the weather in Paris?"));
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Hot-swap blocks between turns
|
|
74
|
+
|
|
75
|
+
Nothing is hardcoded — the registries *are* the enable/disable/swap mechanism,
|
|
76
|
+
exposed as chainable sugar (and on `agent.session` directly):
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
agent.setProvider('anthropic', { apiKey: process.env.ANTHROPIC_API_KEY }); // swap LLM
|
|
80
|
+
agent.setMode('goal'); // swap loop strategy
|
|
81
|
+
agent.removeTool('get_weather');
|
|
82
|
+
await agent.discover(); // load npm plugins
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Under the hood (manual wiring)
|
|
86
|
+
|
|
87
|
+
`setupAgent` is sugar over the raw API, which you can use directly:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { Session, runTurn, autoAllowResolver } from '@moxxy/core';
|
|
91
|
+
|
|
92
|
+
const session = new Session({ cwd: process.cwd(), permissionResolver: autoAllowResolver });
|
|
93
|
+
session.pluginHost.registerStatic(defaultMode);
|
|
94
|
+
session.pluginHost.registerStatic(openai);
|
|
95
|
+
session.providers.setActive('openai', { apiKey: process.env.OPENAI_API_KEY });
|
|
96
|
+
|
|
97
|
+
for await (const event of runTurn(session, 'Summarise the files in this repo.')) {
|
|
98
|
+
// …
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## What's in the box
|
|
103
|
+
|
|
104
|
+
`setupAgent` + `Session` + `runTurn`/`collectTurn` · the registries
|
|
105
|
+
(`ProviderRegistry`, `ToolRegistryImpl`, `ModeRegistry`, `CompactorRegistry`,
|
|
106
|
+
`CacheStrategyRegistry`, `ChannelRegistryImpl`, `EmbedderRegistry`, …) ·
|
|
107
|
+
`PluginHost` + plugin discovery/loading · `SessionPersistence` (save / resume) ·
|
|
108
|
+
the `PermissionEngine` + resolvers (`autoAllowResolver`, `denyByDefaultResolver`,
|
|
109
|
+
allow-list, callback) · the `EventLog` · skills · `createLogger`. The
|
|
110
|
+
`@moxxy/sdk` types in the public surface (`MoxxyEvent`, `Plugin`, `ToolDef`,
|
|
111
|
+
`PermissionResolver`, `RunTurnOptions`) are re-exported, so the API is fully
|
|
112
|
+
typed from a single import.
|
|
113
|
+
|
|
114
|
+
`packages/core/src/index.ts` is the curated public surface. The package is `0.x`:
|
|
115
|
+
the API may still change between minor versions while it settles.
|
|
116
|
+
|
|
117
|
+
## You bring the model
|
|
118
|
+
|
|
119
|
+
`@moxxy/core` is provider-agnostic: it defines the `LLMProvider` contract (in
|
|
120
|
+
`@moxxy/sdk`) but bundles no vendor. Register a provider plugin (or your own)
|
|
121
|
+
before running a turn.
|
|
122
|
+
|
|
123
|
+
## License
|
|
124
|
+
|
|
125
|
+
MIT
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { EventId, EmittedEvent, MoxxyEvent, SessionId, TurnId } from '@moxxy/sdk';
|
|
2
|
+
export declare const newEventId: () => EventId;
|
|
3
|
+
export declare const newTurnId: () => TurnId;
|
|
4
|
+
export declare const newSessionId: () => SessionId;
|
|
5
|
+
export declare function materializeEvent(partial: EmittedEvent, seq: number, now?: () => number): MoxxyEvent;
|
|
6
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/events/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,OAAO,EACP,YAAY,EACZ,UAAU,EACV,SAAS,EACT,MAAM,EACP,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,UAAU,QAAO,OAA4B,CAAC;AAC3D,eAAO,MAAM,SAAS,QAAO,MAA0B,CAAC;AACxD,eAAO,MAAM,YAAY,QAAO,SAAgC,CAAC;AAEjE,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,MAAiB,GAC3B,UAAU,CAOZ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ulid } from 'ulid';
|
|
2
|
+
import { asEventId, asSessionId, asTurnId } from '@moxxy/sdk';
|
|
3
|
+
export const newEventId = () => asEventId(ulid());
|
|
4
|
+
export const newTurnId = () => asTurnId(ulid());
|
|
5
|
+
export const newSessionId = () => asSessionId(ulid());
|
|
6
|
+
export function materializeEvent(partial, seq, now = Date.now) {
|
|
7
|
+
const base = {
|
|
8
|
+
id: newEventId(),
|
|
9
|
+
seq,
|
|
10
|
+
ts: partial.ts ?? now(),
|
|
11
|
+
};
|
|
12
|
+
return { ...partial, ...base };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/events/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS5B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,CAAC,MAAM,UAAU,GAAG,GAAY,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,SAAS,GAAG,GAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAc,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AAEjE,MAAM,UAAU,gBAAgB,CAC9B,OAAqB,EACrB,GAAW,EACX,MAAoB,IAAI,CAAC,GAAG;IAE5B,MAAM,IAAI,GAAyC;QACjD,EAAE,EAAE,UAAU,EAAE;QAChB,GAAG;QACH,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG,EAAE;KACxB,CAAC;IACF,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,EAAgB,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { EmittedEvent, EventLogReader, MoxxyEvent, MoxxyEventOfType, MoxxyEventType, TurnId } from '@moxxy/sdk';
|
|
2
|
+
export type EventListener = (event: MoxxyEvent) => void | Promise<void>;
|
|
3
|
+
export declare class EventLog implements EventLogReader {
|
|
4
|
+
private readonly events;
|
|
5
|
+
private readonly listeners;
|
|
6
|
+
private readonly clearListeners;
|
|
7
|
+
private readonly now;
|
|
8
|
+
/**
|
|
9
|
+
* Lazy secondary indexes so `ofType`/`byTurn` are O(matches) instead of an
|
|
10
|
+
* O(n) full-array `filter` per call (these back hot paths: token-accounting's
|
|
11
|
+
* `ofType('provider_response')`, lazy-tool gating's
|
|
12
|
+
* `ofType('tool_call_requested')`, and remote-session's per-turn
|
|
13
|
+
* `byTurn(turnId)` priming). Built lazily on first query so a cold/seeded log
|
|
14
|
+
* pays the one-time O(n) build only if anything ever queries it, then kept
|
|
15
|
+
* O(1) per append/ingest. Reset to `null` (rebuild-on-next-query) by
|
|
16
|
+
* `clear`/`rebase`, which mutate `events` wholesale.
|
|
17
|
+
*
|
|
18
|
+
* Each index holds the SAME event object references in their original
|
|
19
|
+
* append order — so a query returns an array deep-equal to the old
|
|
20
|
+
* `events.filter(...)` for every input.
|
|
21
|
+
*/
|
|
22
|
+
private byType;
|
|
23
|
+
private byTurnId;
|
|
24
|
+
/**
|
|
25
|
+
* Seq of the FIRST event this log holds. 0 for an authoring log; a mirror
|
|
26
|
+
* primed by a partial attach replay (runner protocol v6 `replay.start`)
|
|
27
|
+
* rebases to the first replayed seq so `ingest`'s contiguity gate lines up
|
|
28
|
+
* with the runner's stream instead of expecting history we never received.
|
|
29
|
+
* `seq === base + index` for every held event.
|
|
30
|
+
*/
|
|
31
|
+
private base;
|
|
32
|
+
constructor(seed?: ReadonlyArray<MoxxyEvent>, opts?: {
|
|
33
|
+
now?: () => number;
|
|
34
|
+
});
|
|
35
|
+
get length(): number;
|
|
36
|
+
/** Seq of the first held event (see {@link rebase}). */
|
|
37
|
+
get baseSeq(): number;
|
|
38
|
+
at(seq: number): MoxxyEvent | undefined;
|
|
39
|
+
slice(from?: number, to?: number): ReadonlyArray<MoxxyEvent>;
|
|
40
|
+
/** Build both secondary indexes from the current `events` array, preserving
|
|
41
|
+
* append order. Bucket arrays hold the original event references. */
|
|
42
|
+
private buildIndexes;
|
|
43
|
+
/** Append one event to the live indexes (no-op while they're cold). Called
|
|
44
|
+
* after the event is pushed to `events`, so order is preserved. */
|
|
45
|
+
private indexEvent;
|
|
46
|
+
ofType<T extends MoxxyEventType>(type: T): ReadonlyArray<MoxxyEventOfType<T>>;
|
|
47
|
+
byTurn(turnId: TurnId): ReadonlyArray<MoxxyEvent>;
|
|
48
|
+
toJSON(): ReadonlyArray<MoxxyEvent>;
|
|
49
|
+
append(partial: EmittedEvent): Promise<MoxxyEvent>;
|
|
50
|
+
subscribe(fn: EventListener): () => void;
|
|
51
|
+
/**
|
|
52
|
+
* Append an already-materialized event, preserving its `id`/`seq`/`ts`
|
|
53
|
+
* rather than minting new ones. This is how a thin client mirrors the
|
|
54
|
+
* runner's log: the server is the sole authority for event identity, so the
|
|
55
|
+
* mirror must keep the originals. De-dupes by `seq` (idempotent replay) and
|
|
56
|
+
* fires listeners fire-and-forget - a mirror has no dispatcher to await.
|
|
57
|
+
*
|
|
58
|
+
* Not for normal authoring; use {@link append} for that.
|
|
59
|
+
*/
|
|
60
|
+
ingest(event: MoxxyEvent): void;
|
|
61
|
+
/**
|
|
62
|
+
* Start this (empty) log at `seq` instead of 0. A mirror primed by a
|
|
63
|
+
* PARTIAL attach replay (`replay: 'none'` / `{ tail }`) calls this with the
|
|
64
|
+
* runner's announced first seq so {@link ingest}'s contiguity gate accepts
|
|
65
|
+
* the stream. Only valid while empty — rebasing held events would detach
|
|
66
|
+
* their seqs from their indices.
|
|
67
|
+
*/
|
|
68
|
+
rebase(seq: number): void;
|
|
69
|
+
/**
|
|
70
|
+
* Drop every event from the log. Used by `/new` to start a fresh
|
|
71
|
+
* session without rebuilding the entire Session object — the
|
|
72
|
+
* registries, resolvers, and active provider stay; only the
|
|
73
|
+
* conversation context vanishes. Per-event listeners are NOT
|
|
74
|
+
* notified (there's no "event removed" event in the schema), but
|
|
75
|
+
* {@link onClear} subscribers fire — that's how the persistence
|
|
76
|
+
* sidecar truncates its JSONL (so `--resume` can't resurrect wiped
|
|
77
|
+
* history) and how the runner broadcasts a reset to attached
|
|
78
|
+
* mirrors, in lockstep with the wipe.
|
|
79
|
+
*
|
|
80
|
+
* Safe to call only when no turn is in flight — callers should abort
|
|
81
|
+
* their AbortController and await any pending runTurn() first.
|
|
82
|
+
*/
|
|
83
|
+
clear(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Subscribe to {@link clear}. Fires synchronously after the events array
|
|
86
|
+
* empties, so a listener reading the log observes the post-wipe state.
|
|
87
|
+
* Returns the unsubscribe callback.
|
|
88
|
+
*/
|
|
89
|
+
onClear(fn: () => void): () => void;
|
|
90
|
+
asReader(): EventLogReader;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/events/log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,MAAM,EACP,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAExE,qBAAa,QAAS,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,MAAM,CAAkD;IAChE,OAAO,CAAC,QAAQ,CAA0C;IAC1D;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,CAAK;gBAEL,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,EAAE,IAAI,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAWnF,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,wDAAwD;IACxD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAMvC,KAAK,CAAC,IAAI,SAAI,EAAE,EAAE,GAAE,MAAuC,GAAG,aAAa,CAAC,UAAU,CAAC;IAMvF;yEACqE;IACrE,OAAO,CAAC,YAAY;IAepB;uEACmE;IACnE,OAAO,CAAC,UAAU;IAalB,MAAM,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAW7E,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IAMjD,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC;IAI7B,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAmBxD,SAAS,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAKxC;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA2B/B;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAczB;;;;;;;;;;;;;OAaG;IACH,KAAK,IAAI,IAAI;IAoBb;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKnC,QAAQ,IAAI,cAAc;CAG3B"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { materializeEvent } from './factory.js';
|
|
2
|
+
export class EventLog {
|
|
3
|
+
events = [];
|
|
4
|
+
listeners = new Set();
|
|
5
|
+
clearListeners = new Set();
|
|
6
|
+
now;
|
|
7
|
+
/**
|
|
8
|
+
* Lazy secondary indexes so `ofType`/`byTurn` are O(matches) instead of an
|
|
9
|
+
* O(n) full-array `filter` per call (these back hot paths: token-accounting's
|
|
10
|
+
* `ofType('provider_response')`, lazy-tool gating's
|
|
11
|
+
* `ofType('tool_call_requested')`, and remote-session's per-turn
|
|
12
|
+
* `byTurn(turnId)` priming). Built lazily on first query so a cold/seeded log
|
|
13
|
+
* pays the one-time O(n) build only if anything ever queries it, then kept
|
|
14
|
+
* O(1) per append/ingest. Reset to `null` (rebuild-on-next-query) by
|
|
15
|
+
* `clear`/`rebase`, which mutate `events` wholesale.
|
|
16
|
+
*
|
|
17
|
+
* Each index holds the SAME event object references in their original
|
|
18
|
+
* append order — so a query returns an array deep-equal to the old
|
|
19
|
+
* `events.filter(...)` for every input.
|
|
20
|
+
*/
|
|
21
|
+
byType = null;
|
|
22
|
+
byTurnId = null;
|
|
23
|
+
/**
|
|
24
|
+
* Seq of the FIRST event this log holds. 0 for an authoring log; a mirror
|
|
25
|
+
* primed by a partial attach replay (runner protocol v6 `replay.start`)
|
|
26
|
+
* rebases to the first replayed seq so `ingest`'s contiguity gate lines up
|
|
27
|
+
* with the runner's stream instead of expecting history we never received.
|
|
28
|
+
* `seq === base + index` for every held event.
|
|
29
|
+
*/
|
|
30
|
+
base = 0;
|
|
31
|
+
constructor(seed = [], opts = {}) {
|
|
32
|
+
this.now = opts.now ?? Date.now;
|
|
33
|
+
for (const e of seed)
|
|
34
|
+
this.events.push(e);
|
|
35
|
+
// Align `base` to the first seeded event so `seq === base + index` holds
|
|
36
|
+
// regardless of where the seed starts. Today every caller seeds a log
|
|
37
|
+
// re-sequenced to 0..n-1 (so this is a no-op), but a caller seeding a tail
|
|
38
|
+
// slice (e.g. seq 50..) would otherwise get silently wrong at()/slice()
|
|
39
|
+
// seq-addressing and an off-by-`base` ingest() contiguity gate.
|
|
40
|
+
if (seed.length > 0)
|
|
41
|
+
this.base = seed[0].seq;
|
|
42
|
+
}
|
|
43
|
+
get length() {
|
|
44
|
+
return this.events.length;
|
|
45
|
+
}
|
|
46
|
+
/** Seq of the first held event (see {@link rebase}). */
|
|
47
|
+
get baseSeq() {
|
|
48
|
+
return this.base;
|
|
49
|
+
}
|
|
50
|
+
at(seq) {
|
|
51
|
+
const index = seq - this.base;
|
|
52
|
+
if (index < 0 || index >= this.events.length)
|
|
53
|
+
return undefined;
|
|
54
|
+
return this.events[index];
|
|
55
|
+
}
|
|
56
|
+
slice(from = 0, to = this.base + this.events.length) {
|
|
57
|
+
// Seq-addressed, like `at`. Events below the base were never held, so a
|
|
58
|
+
// `from` before it just clamps to everything we have.
|
|
59
|
+
return this.events.slice(Math.max(0, from - this.base), Math.max(0, to - this.base));
|
|
60
|
+
}
|
|
61
|
+
/** Build both secondary indexes from the current `events` array, preserving
|
|
62
|
+
* append order. Bucket arrays hold the original event references. */
|
|
63
|
+
buildIndexes() {
|
|
64
|
+
const byType = new Map();
|
|
65
|
+
const byTurnId = new Map();
|
|
66
|
+
for (const e of this.events) {
|
|
67
|
+
let typeBucket = byType.get(e.type);
|
|
68
|
+
if (!typeBucket)
|
|
69
|
+
byType.set(e.type, (typeBucket = []));
|
|
70
|
+
typeBucket.push(e);
|
|
71
|
+
let turnBucket = byTurnId.get(e.turnId);
|
|
72
|
+
if (!turnBucket)
|
|
73
|
+
byTurnId.set(e.turnId, (turnBucket = []));
|
|
74
|
+
turnBucket.push(e);
|
|
75
|
+
}
|
|
76
|
+
this.byType = byType;
|
|
77
|
+
this.byTurnId = byTurnId;
|
|
78
|
+
}
|
|
79
|
+
/** Append one event to the live indexes (no-op while they're cold). Called
|
|
80
|
+
* after the event is pushed to `events`, so order is preserved. */
|
|
81
|
+
indexEvent(e) {
|
|
82
|
+
if (this.byType) {
|
|
83
|
+
const bucket = this.byType.get(e.type);
|
|
84
|
+
if (bucket)
|
|
85
|
+
bucket.push(e);
|
|
86
|
+
else
|
|
87
|
+
this.byType.set(e.type, [e]);
|
|
88
|
+
}
|
|
89
|
+
if (this.byTurnId) {
|
|
90
|
+
const bucket = this.byTurnId.get(e.turnId);
|
|
91
|
+
if (bucket)
|
|
92
|
+
bucket.push(e);
|
|
93
|
+
else
|
|
94
|
+
this.byTurnId.set(e.turnId, [e]);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
ofType(type) {
|
|
98
|
+
if (!this.byType)
|
|
99
|
+
this.buildIndexes();
|
|
100
|
+
// The bucket already holds exactly the matching events in append order —
|
|
101
|
+
// identical to the old `events.filter(e => e.type === type)`. Return a copy
|
|
102
|
+
// so callers can't mutate the index (filter() also returned a fresh array).
|
|
103
|
+
const bucket = this.byType.get(type);
|
|
104
|
+
// Bucket holds only events whose `type === T`, so the cast is sound; route
|
|
105
|
+
// through `unknown` because TS can't narrow the heterogeneous union here.
|
|
106
|
+
return (bucket ? [...bucket] : []);
|
|
107
|
+
}
|
|
108
|
+
byTurn(turnId) {
|
|
109
|
+
if (!this.byTurnId)
|
|
110
|
+
this.buildIndexes();
|
|
111
|
+
const bucket = this.byTurnId.get(turnId);
|
|
112
|
+
return bucket ? [...bucket] : [];
|
|
113
|
+
}
|
|
114
|
+
toJSON() {
|
|
115
|
+
return [...this.events];
|
|
116
|
+
}
|
|
117
|
+
async append(partial) {
|
|
118
|
+
const event = materializeEvent(partial, this.base + this.events.length, this.now);
|
|
119
|
+
this.events.push(event);
|
|
120
|
+
this.indexEvent(event);
|
|
121
|
+
// Snapshot listeners so a subscribe/unsubscribe during dispatch (e.g.,
|
|
122
|
+
// a runTurn finishing and unsubscribing while we're still mid-fanout)
|
|
123
|
+
// doesn't change the iteration target.
|
|
124
|
+
const snapshot = [...this.listeners];
|
|
125
|
+
for (const fn of snapshot) {
|
|
126
|
+
try {
|
|
127
|
+
await fn(event);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Listeners must not block the log; failures are non-fatal here. Hook
|
|
131
|
+
// failures are recorded as ErrorEvents by the dispatcher above this.
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return event;
|
|
135
|
+
}
|
|
136
|
+
subscribe(fn) {
|
|
137
|
+
this.listeners.add(fn);
|
|
138
|
+
return () => this.listeners.delete(fn);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Append an already-materialized event, preserving its `id`/`seq`/`ts`
|
|
142
|
+
* rather than minting new ones. This is how a thin client mirrors the
|
|
143
|
+
* runner's log: the server is the sole authority for event identity, so the
|
|
144
|
+
* mirror must keep the originals. De-dupes by `seq` (idempotent replay) and
|
|
145
|
+
* fires listeners fire-and-forget - a mirror has no dispatcher to await.
|
|
146
|
+
*
|
|
147
|
+
* Not for normal authoring; use {@link append} for that.
|
|
148
|
+
*/
|
|
149
|
+
ingest(event) {
|
|
150
|
+
// Contiguous, ordered delivery over a single socket means
|
|
151
|
+
// seq === base + index. Accept ONLY the next-expected seq: this drops
|
|
152
|
+
// duplicates (overlap between attach-replay and the live stream,
|
|
153
|
+
// seq < base + length) AND refuses a gap (seq > base + length) rather than
|
|
154
|
+
// pushing it at the wrong index, which would permanently desync `seq` from
|
|
155
|
+
// the array index. A gap can't happen over the reliable in-order
|
|
156
|
+
// transport, so refusing one is fail-safe.
|
|
157
|
+
if (event.seq !== this.base + this.events.length)
|
|
158
|
+
return;
|
|
159
|
+
this.events.push(event);
|
|
160
|
+
this.indexEvent(event);
|
|
161
|
+
const snapshot = [...this.listeners];
|
|
162
|
+
for (const fn of snapshot) {
|
|
163
|
+
try {
|
|
164
|
+
// Fire-and-forget, but attach a rejection handler: an async listener
|
|
165
|
+
// that rejects must be swallowed the same way append()'s awaited
|
|
166
|
+
// try/catch swallows it — otherwise it surfaces as an unhandled
|
|
167
|
+
// rejection and (under Node's default policy) can kill the process.
|
|
168
|
+
void Promise.resolve(fn(event)).catch(() => {
|
|
169
|
+
// Mirror listeners must not break ingestion.
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// Mirror listeners must not break ingestion (synchronous throw).
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Start this (empty) log at `seq` instead of 0. A mirror primed by a
|
|
179
|
+
* PARTIAL attach replay (`replay: 'none'` / `{ tail }`) calls this with the
|
|
180
|
+
* runner's announced first seq so {@link ingest}'s contiguity gate accepts
|
|
181
|
+
* the stream. Only valid while empty — rebasing held events would detach
|
|
182
|
+
* their seqs from their indices.
|
|
183
|
+
*/
|
|
184
|
+
rebase(seq) {
|
|
185
|
+
if (this.events.length > 0) {
|
|
186
|
+
throw new Error(`EventLog.rebase(${seq}): log already holds ${this.events.length} events`);
|
|
187
|
+
}
|
|
188
|
+
if (!Number.isInteger(seq) || seq < 0) {
|
|
189
|
+
throw new Error(`EventLog.rebase(${seq}): seq must be a non-negative integer`);
|
|
190
|
+
}
|
|
191
|
+
this.base = seq;
|
|
192
|
+
// Rebase only runs on an empty log, so the indexes (if warm) are already
|
|
193
|
+
// empty — but null them to stay defensive about the events-array invariant.
|
|
194
|
+
this.byType = null;
|
|
195
|
+
this.byTurnId = null;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Drop every event from the log. Used by `/new` to start a fresh
|
|
199
|
+
* session without rebuilding the entire Session object — the
|
|
200
|
+
* registries, resolvers, and active provider stay; only the
|
|
201
|
+
* conversation context vanishes. Per-event listeners are NOT
|
|
202
|
+
* notified (there's no "event removed" event in the schema), but
|
|
203
|
+
* {@link onClear} subscribers fire — that's how the persistence
|
|
204
|
+
* sidecar truncates its JSONL (so `--resume` can't resurrect wiped
|
|
205
|
+
* history) and how the runner broadcasts a reset to attached
|
|
206
|
+
* mirrors, in lockstep with the wipe.
|
|
207
|
+
*
|
|
208
|
+
* Safe to call only when no turn is in flight — callers should abort
|
|
209
|
+
* their AbortController and await any pending runTurn() first.
|
|
210
|
+
*/
|
|
211
|
+
clear() {
|
|
212
|
+
this.events.length = 0;
|
|
213
|
+
// The secondary indexes mirror `events`; drop them so the next query
|
|
214
|
+
// rebuilds from the now-empty array (cheap) rather than serving stale
|
|
215
|
+
// buckets.
|
|
216
|
+
this.byType = null;
|
|
217
|
+
this.byTurnId = null;
|
|
218
|
+
// A session reset restarts the authoritative stream at seq 0 — a rebased
|
|
219
|
+
// mirror must follow, or it would wait forever for seqs that never come.
|
|
220
|
+
this.base = 0;
|
|
221
|
+
const snapshot = [...this.clearListeners];
|
|
222
|
+
for (const fn of snapshot) {
|
|
223
|
+
try {
|
|
224
|
+
fn();
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
// A clear listener must not block the wipe.
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Subscribe to {@link clear}. Fires synchronously after the events array
|
|
233
|
+
* empties, so a listener reading the log observes the post-wipe state.
|
|
234
|
+
* Returns the unsubscribe callback.
|
|
235
|
+
*/
|
|
236
|
+
onClear(fn) {
|
|
237
|
+
this.clearListeners.add(fn);
|
|
238
|
+
return () => this.clearListeners.delete(fn);
|
|
239
|
+
}
|
|
240
|
+
asReader() {
|
|
241
|
+
return this;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/events/log.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export { Session, type SessionOptions } from './session.js';
|
|
2
|
+
export { runTurn, collectTurn, type RunTurnOptions } from './run-turn.js';
|
|
3
|
+
export { setupAgent, type Agent, type SetupAgentOptions, type AgentPreset, } from './setup-agent.js';
|
|
4
|
+
export type { MoxxyEvent, Plugin, ToolDef, PermissionResolver } from '@moxxy/sdk';
|
|
5
|
+
export { createSubagentSpawner, clearRetainedChildren, type SubagentRuntime } from './subagents.js';
|
|
6
|
+
export { loadPreferences, savePreferences, preferencesPath, type MoxxyPreferences, } from './preferences.js';
|
|
7
|
+
export { loadUsageStats, mergeUsageStats, clearUsageStats, usageStatsPath, type UsageStatsFile, type StoredModelUsage, } from './usage-stats.js';
|
|
8
|
+
export { SkillRegistryImpl } from './registries/skills.js';
|
|
9
|
+
export { parseSkillFile, parseFrontmatter, discoverSkills, defaultUserSkillsDir, defaultProjectSkillsDir, synthesizeSkill, buildSynthesizeSkillPlugin, type SkillLoadOptions, type DiscoveredSkill, type SynthesizeOptions, type SynthesizedSkill, } from './skills/index.js';
|
|
10
|
+
export { EventLog, type EventListener } from './events/log.js';
|
|
11
|
+
export { newTurnId, newSessionId } from './events/factory.js';
|
|
12
|
+
export { ToolRegistryImpl, type ToolRegistry } from './registries/tools.js';
|
|
13
|
+
export { ProviderRegistry } from './registries/providers.js';
|
|
14
|
+
export { ModeRegistry } from './registries/modes.js';
|
|
15
|
+
export { CompactorRegistry } from './registries/compactors.js';
|
|
16
|
+
export { CacheStrategyRegistry } from './registries/cache-strategies.js';
|
|
17
|
+
export { ViewRendererRegistry } from './registries/view-renderers.js';
|
|
18
|
+
export { defaultViewRenderer } from './view/default-renderer.js';
|
|
19
|
+
export { parseView, validateDoc, countNodes } from './view/parse.js';
|
|
20
|
+
export { TunnelProviderRegistry } from './registries/tunnel-providers.js';
|
|
21
|
+
export { localhostTunnel } from './tunnel/localhost.js';
|
|
22
|
+
export { ChannelRegistryImpl } from './registries/channels.js';
|
|
23
|
+
export { AgentRegistry } from './registries/agents.js';
|
|
24
|
+
export { CommandRegistry } from './registries/commands.js';
|
|
25
|
+
export { TranscriberRegistry } from './registries/transcribers.js';
|
|
26
|
+
export { SynthesizerRegistry } from './registries/synthesizers.js';
|
|
27
|
+
export { EmbedderRegistry } from './registries/embedders.js';
|
|
28
|
+
export { IsolatorRegistry as ContributedIsolatorRegistry } from './registries/isolators.js';
|
|
29
|
+
export { RequirementRegistry, type RequirementRegistryOptions } from './requirements.js';
|
|
30
|
+
export { SessionPersistence, defaultSessionsDir, readIndex as readSessionIndex, restoreEvents as restoreSessionEvents, deleteSession, type SessionMeta, type SessionPersistenceOpts, } from './sessions/persistence.js';
|
|
31
|
+
export { PluginHost, PluginRequirementError, type PluginLoader, type PluginSkipReason, type PluginSkipRecord, type PluginSkipSource, type RegisterStaticOptions, } from './plugins/host.js';
|
|
32
|
+
export { HookDispatcherImpl } from './plugins/lifecycle.js';
|
|
33
|
+
export { discoverPlugins } from './plugins/discovery.js';
|
|
34
|
+
export { toposortPluginManifests, PluginCycleError } from './plugins/toposort.js';
|
|
35
|
+
export { readPackageMoxxyRequirements } from './plugins/package-requirements.js';
|
|
36
|
+
export { createPluginLoader, type JitiLoaderOptions } from './plugins/loader.js';
|
|
37
|
+
export { PermissionEngine, permissionPolicySchema, type PermissionPolicy, type PolicyRule, } from './permissions/engine.js';
|
|
38
|
+
export { autoAllowResolver, denyByDefaultResolver, createCallbackResolver, createDeferredPermissionResolver, type DeferredPermissionResolver, type DeferredPermissionResolverOptions, type PermissionPromptHandler, createAllowListResolver, } from './permissions/resolvers.js';
|
|
39
|
+
export { createLogger, silentLogger, type Logger, type LogLevel } from './logger.js';
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export { Session } from './session.js';
|
|
2
|
+
export { runTurn, collectTurn } from './run-turn.js';
|
|
3
|
+
export { setupAgent, } from './setup-agent.js';
|
|
4
|
+
export { createSubagentSpawner, clearRetainedChildren } from './subagents.js';
|
|
5
|
+
export { loadPreferences, savePreferences, preferencesPath, } from './preferences.js';
|
|
6
|
+
export { loadUsageStats, mergeUsageStats, clearUsageStats, usageStatsPath, } from './usage-stats.js';
|
|
7
|
+
export { SkillRegistryImpl } from './registries/skills.js';
|
|
8
|
+
export { parseSkillFile, parseFrontmatter, discoverSkills, defaultUserSkillsDir, defaultProjectSkillsDir, synthesizeSkill, buildSynthesizeSkillPlugin, } from './skills/index.js';
|
|
9
|
+
export { EventLog } from './events/log.js';
|
|
10
|
+
// newEventId + materializeEvent are module-private helpers used only by
|
|
11
|
+
// EventLog.append; not re-exported.
|
|
12
|
+
export { newTurnId, newSessionId } from './events/factory.js';
|
|
13
|
+
export { ToolRegistryImpl } from './registries/tools.js';
|
|
14
|
+
export { ProviderRegistry } from './registries/providers.js';
|
|
15
|
+
export { ModeRegistry } from './registries/modes.js';
|
|
16
|
+
export { CompactorRegistry } from './registries/compactors.js';
|
|
17
|
+
export { CacheStrategyRegistry } from './registries/cache-strategies.js';
|
|
18
|
+
export { ViewRendererRegistry } from './registries/view-renderers.js';
|
|
19
|
+
export { defaultViewRenderer } from './view/default-renderer.js';
|
|
20
|
+
export { parseView, validateDoc, countNodes } from './view/parse.js';
|
|
21
|
+
export { TunnelProviderRegistry } from './registries/tunnel-providers.js';
|
|
22
|
+
export { localhostTunnel } from './tunnel/localhost.js';
|
|
23
|
+
export { ChannelRegistryImpl } from './registries/channels.js';
|
|
24
|
+
export { AgentRegistry } from './registries/agents.js';
|
|
25
|
+
export { CommandRegistry } from './registries/commands.js';
|
|
26
|
+
export { TranscriberRegistry } from './registries/transcribers.js';
|
|
27
|
+
export { SynthesizerRegistry } from './registries/synthesizers.js';
|
|
28
|
+
export { EmbedderRegistry } from './registries/embedders.js';
|
|
29
|
+
export { IsolatorRegistry as ContributedIsolatorRegistry } from './registries/isolators.js';
|
|
30
|
+
export { RequirementRegistry } from './requirements.js';
|
|
31
|
+
export { SessionPersistence, defaultSessionsDir, readIndex as readSessionIndex, restoreEvents as restoreSessionEvents, deleteSession, } from './sessions/persistence.js';
|
|
32
|
+
export { PluginHost, PluginRequirementError, } from './plugins/host.js';
|
|
33
|
+
export { HookDispatcherImpl } from './plugins/lifecycle.js';
|
|
34
|
+
export { discoverPlugins } from './plugins/discovery.js';
|
|
35
|
+
export { toposortPluginManifests, PluginCycleError } from './plugins/toposort.js';
|
|
36
|
+
export { readPackageMoxxyRequirements } from './plugins/package-requirements.js';
|
|
37
|
+
export { createPluginLoader } from './plugins/loader.js';
|
|
38
|
+
export { PermissionEngine, permissionPolicySchema, } from './permissions/engine.js';
|
|
39
|
+
export { autoAllowResolver, denyByDefaultResolver, createCallbackResolver, createDeferredPermissionResolver, createAllowListResolver, } from './permissions/resolvers.js';
|
|
40
|
+
export { createLogger, silentLogger } from './logger.js';
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
export interface Logger {
|
|
3
|
+
debug(msg: string, meta?: Record<string, unknown>): void;
|
|
4
|
+
info(msg: string, meta?: Record<string, unknown>): void;
|
|
5
|
+
warn(msg: string, meta?: Record<string, unknown>): void;
|
|
6
|
+
error(msg: string, meta?: Record<string, unknown>): void;
|
|
7
|
+
child(bindings: Record<string, unknown>): Logger;
|
|
8
|
+
}
|
|
9
|
+
export interface LoggerOptions {
|
|
10
|
+
minLevel?: LogLevel;
|
|
11
|
+
sink?: (line: string) => void;
|
|
12
|
+
bindings?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createLogger(opts?: LoggerOptions): Logger;
|
|
15
|
+
export declare const silentLogger: Logger;
|
|
16
|
+
//# sourceMappingURL=logger.d.ts.map
|