@moxxy/sdk 0.1.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +239 -0
- package/dist/compactor-helpers.d.ts +4 -1
- package/dist/compactor-helpers.d.ts.map +1 -1
- package/dist/compactor-helpers.js +50 -21
- package/dist/compactor-helpers.js.map +1 -1
- package/dist/define.d.ts +4 -0
- package/dist/define.d.ts.map +1 -1
- package/dist/define.js +6 -0
- package/dist/define.js.map +1 -1
- package/dist/embedding.d.ts +17 -0
- package/dist/embedding.d.ts.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/fs-utils.d.ts +27 -0
- package/dist/fs-utils.d.ts.map +1 -0
- package/dist/fs-utils.js +44 -0
- package/dist/fs-utils.js.map +1 -0
- package/dist/http-utils.d.ts +16 -0
- package/dist/http-utils.d.ts.map +1 -0
- package/dist/http-utils.js +40 -0
- package/dist/http-utils.js.map +1 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/mode-helpers.d.ts +58 -0
- package/dist/mode-helpers.d.ts.map +1 -1
- package/dist/mode-helpers.js +119 -0
- package/dist/mode-helpers.js.map +1 -1
- package/dist/mode.d.ts +8 -0
- package/dist/mode.d.ts.map +1 -1
- package/dist/mutex.d.ts +15 -0
- package/dist/mutex.d.ts.map +1 -0
- package/dist/mutex.js +15 -0
- package/dist/mutex.js.map +1 -0
- package/dist/plugin.d.ts +27 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/provider-utils.d.ts +6 -0
- package/dist/provider-utils.d.ts.map +1 -1
- package/dist/provider-utils.js +8 -0
- package/dist/provider-utils.js.map +1 -1
- package/dist/resolvers.d.ts +52 -0
- package/dist/resolvers.d.ts.map +1 -0
- package/dist/resolvers.js +123 -0
- package/dist/resolvers.js.map +1 -0
- package/dist/session-like.d.ts +85 -1
- package/dist/session-like.d.ts.map +1 -1
- package/dist/voice.d.ts +36 -0
- package/dist/voice.d.ts.map +1 -0
- package/dist/voice.js +82 -0
- package/dist/voice.js.map +1 -0
- package/dist/workflow.d.ts +144 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +14 -0
- package/dist/workflow.js.map +1 -0
- package/package.json +38 -2
- package/src/compactor-helpers.test.ts +41 -0
- package/src/compactor-helpers.ts +53 -19
- package/src/define.ts +10 -0
- package/src/embedding.ts +18 -0
- package/src/errors.ts +3 -0
- package/src/fs-utils.test.ts +61 -0
- package/src/fs-utils.ts +55 -0
- package/src/http-utils.test.ts +36 -0
- package/src/http-utils.ts +40 -0
- package/src/index.ts +58 -3
- package/src/mode-helpers.ts +169 -0
- package/src/mode.ts +8 -0
- package/src/mutex.test.ts +36 -0
- package/src/mutex.ts +31 -0
- package/src/plugin.ts +27 -1
- package/src/provider-utils.ts +9 -0
- package/src/resolvers.test.ts +45 -0
- package/src/resolvers.ts +164 -0
- package/src/session-like.ts +87 -1
- package/src/stuck-loop.test.ts +42 -0
- package/src/voice.ts +103 -0
- package/src/workflow.ts +165 -0
package/README.md
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://moxxy.ai">
|
|
3
|
+
<img src="https://moxxy.ai/moxxy-head-256.png" alt="moxxy" width="128" />
|
|
4
|
+
</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<h1 align="center">@moxxy/sdk</h1>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
The typed public surface for the moxxy framework.<br/>
|
|
11
|
+
Zero runtime dependencies. The contract every plugin, channel, and provider speaks.
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="https://www.npmjs.com/package/@moxxy/sdk">
|
|
16
|
+
<img src="https://img.shields.io/npm/v/@moxxy/sdk?logo=npm&logoColor=white" alt="npm" />
|
|
17
|
+
</a>
|
|
18
|
+
<a href="https://nodejs.org">
|
|
19
|
+
<img src="https://img.shields.io/badge/node-%3E%3D20.10-brightgreen?logo=node.js&logoColor=white" alt="Node ≥20.10" />
|
|
20
|
+
</a>
|
|
21
|
+
<a href="https://www.typescriptlang.org">
|
|
22
|
+
<img src="https://img.shields.io/badge/TypeScript-strict-3178C6?logo=typescript&logoColor=white" alt="TypeScript" />
|
|
23
|
+
</a>
|
|
24
|
+
<a href="https://github.com/moxxy-ai/new_moxxy/actions/workflows/ci.yml">
|
|
25
|
+
<img src="https://github.com/moxxy-ai/new_moxxy/actions/workflows/ci.yml/badge.svg" alt="CI" />
|
|
26
|
+
</a>
|
|
27
|
+
</p>
|
|
28
|
+
|
|
29
|
+
<p align="center">
|
|
30
|
+
<a href="#installation">Install</a>
|
|
31
|
+
·
|
|
32
|
+
<a href="#quickstart">Quickstart</a>
|
|
33
|
+
·
|
|
34
|
+
<a href="https://moxxy.ai">Docs</a>
|
|
35
|
+
·
|
|
36
|
+
<a href="#what-the-sdk-gives-you">Surface</a>
|
|
37
|
+
·
|
|
38
|
+
<a href="#authoring-a-plugin">Plugin guide</a>
|
|
39
|
+
</p>
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## What this package is
|
|
44
|
+
|
|
45
|
+
`@moxxy/sdk` is the typed contract between the moxxy runtime and everything that plugs into it. Providers, modes, tools, channels, compactors, cache strategies, isolators, transcribers, view renderers, tunnel providers, agents, commands, and skills all use it as their interface to the runtime.
|
|
46
|
+
|
|
47
|
+
The package exports:
|
|
48
|
+
|
|
49
|
+
- `define*` factories, the only blessed way to author each kind of block.
|
|
50
|
+
- The `MoxxyEvent` discriminated union, covering every event the runtime can emit or replay.
|
|
51
|
+
- `ClientSession` and `SessionLike`, the views channels and modes see.
|
|
52
|
+
- Lifecycle hook signatures (`onTurnStart`, `onAssistantMessage`, and so on).
|
|
53
|
+
- Small helper utilities that do not pull the runtime along: token accounting, compactor helpers, zod-to-JSON-Schema, tool gating, embedding caching, retryable-error classification.
|
|
54
|
+
|
|
55
|
+
It is the only moxxy package safe to depend on from a published plugin. `@moxxy/core` is the runtime, and plugins never import it.
|
|
56
|
+
|
|
57
|
+
## Why depend on the SDK
|
|
58
|
+
|
|
59
|
+
- **Zero runtime dependencies.** The package builds without pulling anything into your bundle. `zod` is declared as a peer dependency so your plugin and the host agree on one copy.
|
|
60
|
+
- **One contract, every block.** The shape is consistent across tools, channels, providers, compactors, and the rest. Once you have written one plugin you know how to write the next.
|
|
61
|
+
- **Strict TypeScript.** `defineTool` is generic on its zod schema so handler arguments are fully inferred. Types double as documentation.
|
|
62
|
+
- **Type-only views into the runtime.** `SessionLike` exposes only what a channel needs and keeps the rest of the registry private.
|
|
63
|
+
- **Event-log first.** Every block is reactive over a single typed event stream. No hidden globals, easy to record and replay.
|
|
64
|
+
|
|
65
|
+
## Installation
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
npm install @moxxy/sdk zod
|
|
69
|
+
# or: pnpm add @moxxy/sdk zod
|
|
70
|
+
# or: yarn add @moxxy/sdk zod
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`zod` is a peer dependency. The SDK does not ship it.
|
|
74
|
+
|
|
75
|
+
Requirements: Node.js 20.10 or later. Strict TypeScript is recommended.
|
|
76
|
+
|
|
77
|
+
## Quickstart
|
|
78
|
+
|
|
79
|
+
A tool plugin in nine lines:
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
import { definePlugin, defineTool, z } from '@moxxy/sdk';
|
|
83
|
+
|
|
84
|
+
export default definePlugin({
|
|
85
|
+
name: '@acme/moxxy-plugin-greet',
|
|
86
|
+
tools: [
|
|
87
|
+
defineTool({
|
|
88
|
+
name: 'greet',
|
|
89
|
+
description: 'Return a greeting for the given name.',
|
|
90
|
+
inputSchema: z.object({ name: z.string() }),
|
|
91
|
+
handler: ({ name }) => `Hello, ${name}!`,
|
|
92
|
+
}),
|
|
93
|
+
],
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Add a `"moxxy"` block to your `package.json` and moxxy auto-discovers it on the next launch:
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"moxxy": { "plugin": { "entry": "./dist/index.js", "kind": "tools" } }
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
That is the whole setup. `moxxy plugins list` will show your tool on the next session start.
|
|
106
|
+
|
|
107
|
+
## What the SDK gives you
|
|
108
|
+
|
|
109
|
+
### `define*` factories
|
|
110
|
+
|
|
111
|
+
| Factory | Defines |
|
|
112
|
+
|---|---|
|
|
113
|
+
| `definePlugin` | A bundle of any of the below. The discoverable unit. |
|
|
114
|
+
| `defineTool` | A callable tool with a zod-typed input, optional `permission`, `isolation`, and `compact` display config. |
|
|
115
|
+
| `defineProvider` | An LLM backend such as Anthropic, OpenAI, or a custom service. |
|
|
116
|
+
| `defineMode` | A loop strategy. The agent's iteration topology (`tool-use`, `plan-execute`, `bmad`, and so on). |
|
|
117
|
+
| `defineCompactor` | A context-window compaction strategy (summarise, drop, hybrid). |
|
|
118
|
+
| `defineCacheStrategy` | Where to place provider cache breakpoints. |
|
|
119
|
+
| `defineChannel` | A user-facing surface (TUI, HTTP, Telegram, web). |
|
|
120
|
+
| `defineCommand` | A `/slash` command surfaced in every channel that hosts commands. |
|
|
121
|
+
| `defineSkill` | A prompt-only Markdown skill (frontmatter + body). |
|
|
122
|
+
| `defineAgent` | A subagent kind dispatchable from the parent loop. |
|
|
123
|
+
| `defineTranscriber` | A speech-to-text backend wired into every audio-capable channel. |
|
|
124
|
+
| `definePermission` | A permission rule contributed to the resolver chain. |
|
|
125
|
+
| `defineViewRenderer` | A target for the agent-authored UI primitives. |
|
|
126
|
+
| `defineTunnelProvider` | A public-URL tunnel for HTTP channels (cloudflared, ngrok). |
|
|
127
|
+
| `defineIsolator` (via `@moxxy/plugin-security`) | A capability sandbox. The SDK exports the `Isolator` interface and the `ISOLATION_RANK` ordering. |
|
|
128
|
+
|
|
129
|
+
### Types and events
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
import type {
|
|
133
|
+
MoxxyEvent, // the discriminated union of every event in the log
|
|
134
|
+
EventLogReader, // a stable view over the session's event log
|
|
135
|
+
ClientSession, // what channels and slash-commands see
|
|
136
|
+
SessionLike, // what modes, providers, and tools see
|
|
137
|
+
PendingToolCall,
|
|
138
|
+
PermissionDecision,
|
|
139
|
+
ApprovalRequest, ApprovalDecision,
|
|
140
|
+
ToolDef, ProviderDef, ModeDef, CompactorDef, CacheStrategyDef,
|
|
141
|
+
Plugin, PluginSpec,
|
|
142
|
+
Skill, SkillDef, SkillFrontmatter, SkillScope,
|
|
143
|
+
} from '@moxxy/sdk';
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Helpers
|
|
147
|
+
|
|
148
|
+
- `zodToJsonSchema` converts a zod schema to JSON Schema for provider tool calls.
|
|
149
|
+
- `isRetryableError` and `toFriendlyError` classify provider errors uniformly.
|
|
150
|
+
- `estimateContextTokens` and `runCompactionIfNeeded` are scaffolding for custom compactors.
|
|
151
|
+
- `CachedEmbeddingProvider` wraps any `EmbeddingProvider` with on-disk caching.
|
|
152
|
+
- `dispatchToolCall` invokes a tool through the full gating, permission, and isolation pipeline.
|
|
153
|
+
- `summarizeSessionTokensFromEvents` and `summarizeTokensByModel` give pure token accounting over the event log.
|
|
154
|
+
|
|
155
|
+
### Lifecycle hooks
|
|
156
|
+
|
|
157
|
+
A plugin can declare optional hooks: `onSessionStart`, `onTurnStart`, `onAssistantMessage`, `onToolResult`, `onError`, `onCompact`, and `onSessionEnd`. All are strongly typed and fire in plugin-registration order. The SDK exposes the hook context types. `@moxxy/core` invokes them at the right point in the loop.
|
|
158
|
+
|
|
159
|
+
## Authoring a plugin
|
|
160
|
+
|
|
161
|
+
A tool plugin with the minimum surface:
|
|
162
|
+
|
|
163
|
+
```ts
|
|
164
|
+
import { definePlugin, defineTool, z } from '@moxxy/sdk';
|
|
165
|
+
|
|
166
|
+
export default definePlugin({
|
|
167
|
+
name: '@acme/moxxy-plugin-weather',
|
|
168
|
+
tools: [
|
|
169
|
+
defineTool({
|
|
170
|
+
name: 'get_weather',
|
|
171
|
+
description: 'Fetch current weather for a city.',
|
|
172
|
+
inputSchema: z.object({ city: z.string() }),
|
|
173
|
+
// Handler args are inferred from the zod schema.
|
|
174
|
+
handler: async ({ city }) => {
|
|
175
|
+
const res = await fetch(`https://wttr.in/${encodeURIComponent(city)}?format=j1`);
|
|
176
|
+
return res.json();
|
|
177
|
+
},
|
|
178
|
+
// Optional: gate the call, declare capabilities, customise the compact display.
|
|
179
|
+
permission: { action: 'prompt' },
|
|
180
|
+
isolation: { capabilities: { net: { allow: ['wttr.in'] } } },
|
|
181
|
+
compact: { verb: 'Reading weather', subject: ({ city }) => city },
|
|
182
|
+
}),
|
|
183
|
+
],
|
|
184
|
+
});
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
A provider plugin:
|
|
188
|
+
|
|
189
|
+
```ts
|
|
190
|
+
import { definePlugin, defineProvider, type ProviderDef } from '@moxxy/sdk';
|
|
191
|
+
|
|
192
|
+
const myProvider: ProviderDef = defineProvider({
|
|
193
|
+
name: 'my-llm',
|
|
194
|
+
models: [{ id: 'flagship', contextWindow: 200_000 }],
|
|
195
|
+
async *stream(ctx) { /* yield MoxxyEvent values */ },
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
export default definePlugin({
|
|
199
|
+
name: '@acme/moxxy-provider-my-llm',
|
|
200
|
+
providers: [myProvider],
|
|
201
|
+
});
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
A mode (loop strategy):
|
|
205
|
+
|
|
206
|
+
```ts
|
|
207
|
+
import { definePlugin, defineMode, type ModeContext, type MoxxyEvent } from '@moxxy/sdk';
|
|
208
|
+
|
|
209
|
+
async function* runMyMode(ctx: ModeContext): AsyncIterable<MoxxyEvent> {
|
|
210
|
+
// emit events, call providers, dispatch tools, return when the turn ends.
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export default definePlugin({
|
|
214
|
+
name: '@acme/moxxy-mode-my',
|
|
215
|
+
modes: [defineMode({
|
|
216
|
+
name: 'my-mode',
|
|
217
|
+
description: 'One-line summary surfaced in the /mode picker.',
|
|
218
|
+
run: runMyMode,
|
|
219
|
+
})],
|
|
220
|
+
});
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Per-block author guides for skill, plugin, tool, channel, provider, loop strategy, compactor, and cache strategy live in the monorepo at [`.claude/agents/`](https://github.com/moxxy-ai/new_moxxy/tree/main/.claude/agents).
|
|
224
|
+
|
|
225
|
+
## Architectural rules
|
|
226
|
+
|
|
227
|
+
Three invariants keep the framework swappable:
|
|
228
|
+
|
|
229
|
+
1. `@moxxy/sdk` has zero internal dependencies. Enforced in CI via `pnpm check:deps`.
|
|
230
|
+
2. `@moxxy/core` does not import any plugin. Plugins flow into core through the SDK only.
|
|
231
|
+
3. Plugins never import `@moxxy/core`. If you find yourself wanting to, the missing piece belongs in the SDK.
|
|
232
|
+
|
|
233
|
+
## Docs
|
|
234
|
+
|
|
235
|
+
Full documentation lives at [docs.moxxy.ai](https://docs.moxxy.ai): concepts, plugin author guides, channel guides, and recipes.
|
|
236
|
+
|
|
237
|
+
## License
|
|
238
|
+
|
|
239
|
+
MIT. See the repository root for the full text.
|
|
@@ -30,5 +30,8 @@ export declare function estimateContextTokens(log: EventLogReader): number;
|
|
|
30
30
|
* compactor bug can't kill the turn. Failures emit a non-fatal
|
|
31
31
|
* `error` event for observability.
|
|
32
32
|
*/
|
|
33
|
-
export declare function runCompactionIfNeeded(ctx: ModeContext
|
|
33
|
+
export declare function runCompactionIfNeeded(ctx: ModeContext, opts?: {
|
|
34
|
+
readonly force?: boolean;
|
|
35
|
+
}): Promise<boolean>;
|
|
36
|
+
export declare function isContextOverflowError(message: string): boolean;
|
|
34
37
|
//# sourceMappingURL=compactor-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compactor-helpers.d.ts","sourceRoot":"","sources":["../src/compactor-helpers.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CA8BjE;AA2BD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"compactor-helpers.d.ts","sourceRoot":"","sources":["../src/compactor-helpers.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CA8BjE;AA2BD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,EAChB,IAAI,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,OAAO,CAAC,OAAO,CAAC,CAwElB;AAqBD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/D"}
|
|
@@ -86,42 +86,48 @@ function safeJsonLen(v) {
|
|
|
86
86
|
* compactor bug can't kill the turn. Failures emit a non-fatal
|
|
87
87
|
* `error` event for observability.
|
|
88
88
|
*/
|
|
89
|
-
export async function runCompactionIfNeeded(ctx) {
|
|
89
|
+
export async function runCompactionIfNeeded(ctx, opts = {}) {
|
|
90
90
|
const compactor = ctx.compactor;
|
|
91
91
|
if (!compactor)
|
|
92
|
-
return;
|
|
92
|
+
return false;
|
|
93
93
|
// Resolve the active model's descriptor so we use the *real* context
|
|
94
94
|
// window. `Number.MAX_SAFE_INTEGER` (the old /compact behavior) made
|
|
95
95
|
// threshold-based compactors always look comfortable, even at 99%.
|
|
96
96
|
const descriptor = ctx.provider.models.find((m) => m.id === ctx.model);
|
|
97
97
|
const contextWindow = descriptor?.contextWindow;
|
|
98
98
|
if (!contextWindow || contextWindow <= 0)
|
|
99
|
-
return;
|
|
99
|
+
return false;
|
|
100
100
|
const events = ctx.log.slice();
|
|
101
101
|
if (events.length === 0)
|
|
102
|
-
return;
|
|
102
|
+
return false;
|
|
103
103
|
const budget = {
|
|
104
104
|
contextWindow,
|
|
105
105
|
estimatedTokens: estimateContextTokens(ctx.log),
|
|
106
106
|
reserveForOutput: descriptor?.maxOutputTokens ?? 0,
|
|
107
107
|
};
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
108
|
+
// `force` skips the threshold gate — used reactively after the provider
|
|
109
|
+
// rejects a request for being over the context window (our estimate can
|
|
110
|
+
// lag the provider's real tokenizer), so we compact and retry rather than
|
|
111
|
+
// failing the turn.
|
|
112
|
+
if (!opts.force) {
|
|
113
|
+
let shouldRun = false;
|
|
114
|
+
try {
|
|
115
|
+
shouldRun = compactor.shouldCompact(ctx.log, budget);
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
await ctx.emit({
|
|
119
|
+
type: 'error',
|
|
120
|
+
sessionId: ctx.sessionId,
|
|
121
|
+
turnId: ctx.turnId,
|
|
122
|
+
source: 'system',
|
|
123
|
+
kind: 'retryable',
|
|
124
|
+
message: `compactor.shouldCompact threw: ${err instanceof Error ? err.message : String(err)}`,
|
|
125
|
+
});
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
if (!shouldRun)
|
|
129
|
+
return false;
|
|
122
130
|
}
|
|
123
|
-
if (!shouldRun)
|
|
124
|
-
return;
|
|
125
131
|
try {
|
|
126
132
|
const result = await compactor.compact(events, {
|
|
127
133
|
log: ctx.log,
|
|
@@ -129,7 +135,7 @@ export async function runCompactionIfNeeded(ctx) {
|
|
|
129
135
|
signal: ctx.signal,
|
|
130
136
|
});
|
|
131
137
|
if (result.tokensSaved <= 0 || result.summary.trim().length === 0)
|
|
132
|
-
return;
|
|
138
|
+
return false;
|
|
133
139
|
// `compactor.compact` declares `Omit<CompactionEvent, keyof EventBase>`,
|
|
134
140
|
// but every shipped compactor (and the SDK examples) fills sessionId /
|
|
135
141
|
// turnId / source. Defensive-fill from ctx so a compactor that obeyed
|
|
@@ -141,6 +147,7 @@ export async function runCompactionIfNeeded(ctx) {
|
|
|
141
147
|
...result,
|
|
142
148
|
};
|
|
143
149
|
await ctx.emit(emittable);
|
|
150
|
+
return true;
|
|
144
151
|
}
|
|
145
152
|
catch (err) {
|
|
146
153
|
await ctx.emit({
|
|
@@ -151,6 +158,28 @@ export async function runCompactionIfNeeded(ctx) {
|
|
|
151
158
|
kind: 'retryable',
|
|
152
159
|
message: `compactor.compact threw: ${err instanceof Error ? err.message : String(err)}`,
|
|
153
160
|
});
|
|
161
|
+
return false;
|
|
154
162
|
}
|
|
155
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Heuristic: does this provider error mean "the request was too big for the
|
|
166
|
+
* model's context window"? Providers phrase it many ways (OpenAI "maximum
|
|
167
|
+
* context length is N tokens", Anthropic "prompt is too long", the runner's
|
|
168
|
+
* own "input exceeds context window"), and it usually arrives as a
|
|
169
|
+
* non-retryable 400 — so the turn loop matches on it to compact + retry
|
|
170
|
+
* instead of dying.
|
|
171
|
+
*/
|
|
172
|
+
const CONTEXT_OVERFLOW_PATTERNS = [
|
|
173
|
+
/context[\s_-]{0,2}(window|length)/i,
|
|
174
|
+
/maximum context/i,
|
|
175
|
+
/context_length_exceeded/i,
|
|
176
|
+
/exceeds?\b[^.]{0,24}context/i,
|
|
177
|
+
/input[^.]{0,24}(exceeds|too long|too large|too many)/i,
|
|
178
|
+
/too many (input )?tokens/i,
|
|
179
|
+
/prompt is too long/i,
|
|
180
|
+
/reduce the length/i,
|
|
181
|
+
];
|
|
182
|
+
export function isContextOverflowError(message) {
|
|
183
|
+
return CONTEXT_OVERFLOW_PATTERNS.some((re) => re.test(message));
|
|
184
|
+
}
|
|
156
185
|
//# sourceMappingURL=compactor-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compactor-helpers.js","sourceRoot":"","sources":["../src/compactor-helpers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"compactor-helpers.js","sourceRoot":"","sources":["../src/compactor-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/define.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { CacheStrategyDef } from './cache-strategy.js';
|
|
|
3
3
|
import type { ChannelDef } from './channel.js';
|
|
4
4
|
import type { CommandDef } from './command.js';
|
|
5
5
|
import type { CompactorDef } from './compactor.js';
|
|
6
|
+
import type { EmbedderDef } from './embedding.js';
|
|
6
7
|
import type { ModeDef } from './mode.js';
|
|
7
8
|
import type { PermissionRule } from './permission.js';
|
|
8
9
|
import type { Plugin, PluginSpec } from './plugin.js';
|
|
@@ -13,6 +14,7 @@ import type { ToolIsolationSpec } from './isolation.js';
|
|
|
13
14
|
import type { TranscriberDef } from './transcriber.js';
|
|
14
15
|
import type { ViewRendererDef } from './view-renderer.js';
|
|
15
16
|
import type { TunnelProviderDef } from './tunnel.js';
|
|
17
|
+
import type { WorkflowExecutorDef } from './workflow.js';
|
|
16
18
|
import type { z } from 'zod';
|
|
17
19
|
export declare function definePlugin(spec: PluginSpec): Plugin;
|
|
18
20
|
/**
|
|
@@ -46,6 +48,8 @@ export declare function defineSkill(spec: {
|
|
|
46
48
|
body: string;
|
|
47
49
|
}): SkillDef;
|
|
48
50
|
export declare function defineTranscriber(spec: TranscriberDef): TranscriberDef;
|
|
51
|
+
export declare function defineEmbedder(spec: EmbedderDef): EmbedderDef;
|
|
49
52
|
export declare function defineCommand(spec: CommandDef): CommandDef;
|
|
50
53
|
export declare function defineAgent(spec: AgentDef): AgentDef;
|
|
54
|
+
export declare function defineWorkflowExecutor(spec: WorkflowExecutorDef): WorkflowExecutorDef;
|
|
51
55
|
//# sourceMappingURL=define.d.ts.map
|
package/dist/define.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
|
package/dist/define.js
CHANGED
|
@@ -62,10 +62,16 @@ export function defineSkill(spec) {
|
|
|
62
62
|
export function defineTranscriber(spec) {
|
|
63
63
|
return Object.freeze(spec);
|
|
64
64
|
}
|
|
65
|
+
export function defineEmbedder(spec) {
|
|
66
|
+
return Object.freeze(spec);
|
|
67
|
+
}
|
|
65
68
|
export function defineCommand(spec) {
|
|
66
69
|
return Object.freeze(spec);
|
|
67
70
|
}
|
|
68
71
|
export function defineAgent(spec) {
|
|
69
72
|
return Object.freeze(spec);
|
|
70
73
|
}
|
|
74
|
+
export function defineWorkflowExecutor(spec) {
|
|
75
|
+
return Object.freeze(spec);
|
|
76
|
+
}
|
|
71
77
|
//# sourceMappingURL=define.js.map
|
package/dist/define.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,mEAAmE;IACnE,2EAA2E;IAC3E,sBAAsB;IACtB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,IAAI;QACP,OAAO,EAAE,QAAiB;QAC1B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO;KACjC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAsC,IAU/D;IACC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO,EAAE,IAAI,CAAC,OAA2E;QACzF,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,sEAAsE;AACtE,6DAA6D;AAC7D,+DAA+D;AAE/D,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAsB;IACxD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAuB;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAA4B;IAE5B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAqD;IAC/E,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAoB;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAyB;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/embedding.d.ts
CHANGED
|
@@ -18,4 +18,21 @@ export interface EmbeddingProvider {
|
|
|
18
18
|
/** Embed a batch of strings. Returns vectors in input order. */
|
|
19
19
|
embed(texts: ReadonlyArray<string>): Promise<ReadonlyArray<ReadonlyArray<number>>>;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Plugin-side definition of an embedder. Mirrors `TranscriberDef` / `ProviderDef`:
|
|
23
|
+
* a `createClient(config)` factory the `EmbedderRegistry` calls when the user
|
|
24
|
+
* activates this embedder by name. Plugins contribute these via
|
|
25
|
+
* `PluginSpec.embedders`, so a user can install a new embedder package and
|
|
26
|
+
* select it by config without forking the host.
|
|
27
|
+
*
|
|
28
|
+
* `createClient` MUST be cheap — defer heavy model loading (onnx, transformers,
|
|
29
|
+
* network clients) into the returned provider's `embed()` so that merely
|
|
30
|
+
* registering a discovered embedder plugin never pulls its runtime in.
|
|
31
|
+
*/
|
|
32
|
+
export interface EmbedderDef {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
/** Optional human-readable label for UI surfaces. */
|
|
35
|
+
readonly displayName?: string;
|
|
36
|
+
createClient(config: Record<string, unknown>): EmbeddingProvider;
|
|
37
|
+
}
|
|
21
38
|
//# sourceMappingURL=embedding.d.ts.map
|
package/dist/embedding.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../src/embedding.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC,gEAAgE;IAChE,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACpF"}
|
|
1
|
+
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../src/embedding.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC,gEAAgE;IAChE,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACpF;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAAC;CAClE"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* earn their place by mapping to a different recovery action than any
|
|
19
19
|
* existing one.
|
|
20
20
|
*/
|
|
21
|
-
export type MoxxyErrorCode = 'NETWORK_UNREACHABLE' | 'NETWORK_TIMEOUT' | 'NETWORK_TLS_FAILURE' | 'NETWORK_ABORTED' | 'AUTH_NO_CREDENTIALS' | 'AUTH_EXPIRED' | 'AUTH_INVALID' | 'AUTH_DENIED' | 'OAUTH_FLOW_TIMEOUT' | 'OAUTH_FLOW_DENIED' | 'OAUTH_FLOW_STATE_MISMATCH' | 'OAUTH_FLOW_PORT_BUSY' | 'OAUTH_FLOW_NOT_SUPPORTED' | 'PROVIDER_NOT_CONFIGURED' | 'PROVIDER_RATE_LIMITED' | 'PROVIDER_SERVER_ERROR' | 'PROVIDER_BAD_REQUEST' | 'PROVIDER_UNKNOWN_RESPONSE' | 'VAULT_PASSPHRASE' | 'VAULT_CORRUPT' | 'CONFIG_INVALID' | 'PLUGIN_LOAD_FAILED' | 'UNKNOWN_COMMAND' | 'INTERNAL';
|
|
21
|
+
export type MoxxyErrorCode = 'NETWORK_UNREACHABLE' | 'NETWORK_TIMEOUT' | 'NETWORK_TLS_FAILURE' | 'NETWORK_ABORTED' | 'AUTH_NO_CREDENTIALS' | 'AUTH_EXPIRED' | 'AUTH_INVALID' | 'AUTH_DENIED' | 'OAUTH_FLOW_TIMEOUT' | 'OAUTH_FLOW_DENIED' | 'OAUTH_FLOW_STATE_MISMATCH' | 'OAUTH_FLOW_PORT_BUSY' | 'OAUTH_FLOW_NOT_SUPPORTED' | 'PROVIDER_NOT_CONFIGURED' | 'PROVIDER_RATE_LIMITED' | 'PROVIDER_SERVER_ERROR' | 'PROVIDER_BAD_REQUEST' | 'PROVIDER_UNKNOWN_RESPONSE' | 'VAULT_PASSPHRASE' | 'VAULT_CORRUPT' | 'CONFIG_INVALID' | 'PLUGIN_LOAD_FAILED' | 'UNKNOWN_COMMAND' | 'TOOL_ERROR' | 'ABORTED' | 'INTERNAL';
|
|
22
22
|
export interface MoxxyErrorInit {
|
|
23
23
|
readonly code: MoxxyErrorCode;
|
|
24
24
|
readonly message: string;
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAEtB,qBAAqB,GACrB,iBAAiB,GACjB,qBAAqB,GACrB,iBAAiB,GAEjB,qBAAqB,GACrB,cAAc,GACd,cAAc,GACd,aAAa,GAEb,oBAAoB,GACpB,mBAAmB,GACnB,2BAA2B,GAC3B,sBAAsB,GACtB,0BAA0B,GAE1B,yBAAyB,GACzB,uBAAuB,GACvB,uBAAuB,GACvB,sBAAsB,GACtB,2BAA2B,GAE3B,kBAAkB,GAClB,eAAe,GAEf,gBAAgB,GAChB,oBAAoB,GACpB,iBAAiB,GAEjB,UAAU,CAAC;AAEf,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAC7D,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;gBAEjD,IAAI,EAAE,cAAc;IAQhC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU;IAOpD;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,UAAU;CAI3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9D,UAAU,GAAG,IAAI,CA6GnB;AAgBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACtF,UAAU,GAAG,IAAI,CAgDnB"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAEtB,qBAAqB,GACrB,iBAAiB,GACjB,qBAAqB,GACrB,iBAAiB,GAEjB,qBAAqB,GACrB,cAAc,GACd,cAAc,GACd,aAAa,GAEb,oBAAoB,GACpB,mBAAmB,GACnB,2BAA2B,GAC3B,sBAAsB,GACtB,0BAA0B,GAE1B,yBAAyB,GACzB,uBAAuB,GACvB,uBAAuB,GACvB,sBAAsB,GACtB,2BAA2B,GAE3B,kBAAkB,GAClB,eAAe,GAEf,gBAAgB,GAChB,oBAAoB,GACpB,iBAAiB,GAEjB,YAAY,GACZ,SAAS,GAET,UAAU,CAAC;AAEf,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAC7D,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;gBAEjD,IAAI,EAAE,cAAc;IAQhC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU;IAOpD;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,UAAU;CAI3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9D,UAAU,GAAG,IAAI,CA6GnB;AAgBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACtF,UAAU,GAAG,IAAI,CAgDnB"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA0DH;;;;;GAKG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAiB;IACrB,IAAI,CAAU;IACd,OAAO,CAA6C;IAE7D,YAAY,IAAoB;QAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAY;QAC9B,oEAAoE;QACpE,oEAAoE;QACpE,iDAAiD;QACjD,OAAO,GAAG,YAAY,UAAU,IAAI,CAAC,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC1F,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,GAAY,EAAE,IAAmC;QAC3D,IAAI,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;QAC7C,OAAO,IAAI,UAAU,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAY,EACZ,MAA6D,EAAE;IAE/D,IAAI,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC7C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,sBAAsB,CAAC,CAAC;IAClF,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,GAAG;QAAE,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC;IAC/B,IAAI,GAAG,CAAC,QAAQ;QAAE,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAEtD,iDAAiD;IACjD,IACE,GAAG,CAAC,IAAI,KAAK,YAAY;QACzB,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,aAAa,EACtB,CAAC;QACD,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,cAAc,MAAM,eAAe;YAC5C,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACjD,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,yBAAyB,MAAM,GAAG;YAC3C,IAAI,EACF,qEAAqE;gBACrE,sFAAsF;YACxF,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,yBAAyB,MAAM,GAAG;YAC3C,IAAI,EACF,0EAA0E;gBAC1E,qEAAqE;YACvE,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACtD,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,eAAe,MAAM,GAAG;YACjC,IAAI,EAAE,wCAAwC;YAC9C,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,yBAAyB,IAAI,IAAI,KAAK,yBAAyB,EAAE,CAAC;QACrG,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,cAAc,MAAM,aAAa;YAC1C,IAAI,EACF,uEAAuE;gBACvE,yDAAyD;YAC3D,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IACD,IACE,IAAI,KAAK,kBAAkB;QAC3B,IAAI,KAAK,6BAA6B;QACtC,IAAI,KAAK,iCAAiC;QAC1C,IAAI,KAAK,2BAA2B;QACpC,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EACxD,CAAC;QACD,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,sBAAsB,MAAM,YAAY,IAAI,IAAI;YACzD,IAAI,EACF,wEAAwE;gBACxE,oDAAoD;YACtD,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,iBAAiB,MAAM,aAAa;YAC7C,IAAI,EAAE,oFAAoF;YAC1F,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IAED,iEAAiE;IACjE,uEAAuE;IACvE,+BAA+B;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,kBAAkB,MAAM,GAAG;YACpC,IAAI,EAAE,gEAAgE;YACtE,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,GAAY,EAAE,KAAK,GAAG,CAAC;IACnD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,CAAC,GAAG,GAA0D,CAAC;IACrE,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACnE,IAAI,CAAC,CAAC,KAAK;QAAE,OAAO,oBAAoB,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,MAAqF,EAAE;IAEvF,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;IAC1F,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,OAAO,GAAoC,EAAE,MAAM,EAAE,CAAC;IAC5D,IAAI,GAAG,CAAC,GAAG;QAAE,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACnC,IAAI,GAAG,CAAC,QAAQ;QAAE,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAElD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,GAAG,MAAM,mCAAmC,IAAI,EAAE;YAC3D,IAAI,EACF,qBAAqB,GAAG,CAAC,QAAQ,IAAI,YAAY,mCAAmC;YACtF,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,GAAG,MAAM,6BAA6B,IAAI,EAAE;YACrD,IAAI,EAAE,mEAAmE;YACzE,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,GAAG,MAAM,oCAAoC,IAAI,EAAE;YAC5D,IAAI,EAAE,qEAAqE;YAC3E,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAClC,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,GAAG,MAAM,6BAA6B,MAAM,KAAK,IAAI,EAAE;YAChE,IAAI,EAAE,qEAAqE;YAC3E,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,GAAG,MAAM,4CAA4C,IAAI,EAAE;YACpE,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAW;IACtC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface WriteFileAtomicOptions {
|
|
2
|
+
/** Mode for the final file, e.g. `0o600` for secrets. Enforced past umask. */
|
|
3
|
+
readonly mode?: number;
|
|
4
|
+
/** Encoding when `data` is a string. Defaults to `'utf8'`. Ignored for bytes. */
|
|
5
|
+
readonly encoding?: BufferEncoding;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Crash-atomic file write: write a unique sibling temp file, then `rename` it
|
|
9
|
+
* over the target. POSIX `rename` is atomic on the same filesystem, so a crash
|
|
10
|
+
* (or full disk) mid-write leaves the previous file intact rather than a
|
|
11
|
+
* truncated one. The temp name carries pid + a random UUID so concurrent
|
|
12
|
+
* writers to the same target never collide on the temp path.
|
|
13
|
+
*
|
|
14
|
+
* This is the single home for the framework's "persist atomically" invariant —
|
|
15
|
+
* every file-state writer (vault, memory, permissions, sessions, the Write/Edit
|
|
16
|
+
* tools) should call this instead of hand-rolling tmp+rename or writing in place.
|
|
17
|
+
*/
|
|
18
|
+
export declare function writeFileAtomic(target: string, data: string | Uint8Array, opts?: WriteFileAtomicOptions): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* The moxxy home directory: `$MOXXY_HOME` when set, else `~/.moxxy`. Single
|
|
21
|
+
* source of truth so the env override is honored uniformly — previously half
|
|
22
|
+
* the plugins inlined `~/.moxxy` and ignored `MOXXY_HOME`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function moxxyHome(): string;
|
|
25
|
+
/** Join path segments under {@link moxxyHome}. */
|
|
26
|
+
export declare function moxxyPath(...segments: string[]): string;
|
|
27
|
+
//# sourceMappingURL=fs-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,sBAAsB;IACrC,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;CACpC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAEvD"}
|
package/dist/fs-utils.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { chmod, mkdir, rename, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
/**
|
|
6
|
+
* Crash-atomic file write: write a unique sibling temp file, then `rename` it
|
|
7
|
+
* over the target. POSIX `rename` is atomic on the same filesystem, so a crash
|
|
8
|
+
* (or full disk) mid-write leaves the previous file intact rather than a
|
|
9
|
+
* truncated one. The temp name carries pid + a random UUID so concurrent
|
|
10
|
+
* writers to the same target never collide on the temp path.
|
|
11
|
+
*
|
|
12
|
+
* This is the single home for the framework's "persist atomically" invariant —
|
|
13
|
+
* every file-state writer (vault, memory, permissions, sessions, the Write/Edit
|
|
14
|
+
* tools) should call this instead of hand-rolling tmp+rename or writing in place.
|
|
15
|
+
*/
|
|
16
|
+
export async function writeFileAtomic(target, data, opts = {}) {
|
|
17
|
+
await mkdir(dirname(target), { recursive: true });
|
|
18
|
+
const tmp = `${target}.${process.pid}.${randomUUID()}.tmp`;
|
|
19
|
+
try {
|
|
20
|
+
await writeFile(tmp, data, { encoding: opts.encoding ?? 'utf8' });
|
|
21
|
+
// chmod explicitly: writeFile's mode option is masked by umask, but a
|
|
22
|
+
// 0o600 secret file must be exactly 0o600 regardless of the host umask.
|
|
23
|
+
if (opts.mode != null)
|
|
24
|
+
await chmod(tmp, opts.mode);
|
|
25
|
+
await rename(tmp, target);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
await rm(tmp, { force: true }).catch(() => { });
|
|
29
|
+
throw err;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The moxxy home directory: `$MOXXY_HOME` when set, else `~/.moxxy`. Single
|
|
34
|
+
* source of truth so the env override is honored uniformly — previously half
|
|
35
|
+
* the plugins inlined `~/.moxxy` and ignored `MOXXY_HOME`.
|
|
36
|
+
*/
|
|
37
|
+
export function moxxyHome() {
|
|
38
|
+
return process.env.MOXXY_HOME ?? join(homedir(), '.moxxy');
|
|
39
|
+
}
|
|
40
|
+
/** Join path segments under {@link moxxyHome}. */
|
|
41
|
+
export function moxxyPath(...segments) {
|
|
42
|
+
return join(moxxyHome(), ...segments);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=fs-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAS1C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,IAAyB,EACzB,OAA+B,EAAE;IAEjC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,MAAM,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QAClE,sEAAsE;QACtE,wEAAwE;QACxE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;YAAE,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,SAAS,CAAC,GAAG,QAAkB;IAC7C,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;AACxC,CAAC"}
|