@moxxy/core 0.25.0 → 0.27.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/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/host-options.d.ts +2 -0
- package/dist/plugins/host-options.d.ts.map +1 -1
- package/dist/plugins/host.d.ts +8 -0
- package/dist/plugins/host.d.ts.map +1 -1
- package/dist/plugins/host.js +14 -0
- package/dist/plugins/host.js.map +1 -1
- package/dist/plugins/registry-kinds.d.ts +1 -0
- package/dist/plugins/registry-kinds.d.ts.map +1 -1
- package/dist/plugins/registry-kinds.js +11 -0
- package/dist/plugins/registry-kinds.js.map +1 -1
- package/dist/registries/reflectors.d.ts +15 -0
- package/dist/registries/reflectors.d.ts.map +1 -0
- package/dist/registries/reflectors.js +16 -0
- package/dist/registries/reflectors.js.map +1 -0
- package/dist/session.d.ts +10 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +18 -0
- package/dist/session.js.map +1 -1
- package/dist/sessions/event-shape.d.ts +68 -0
- package/dist/sessions/event-shape.d.ts.map +1 -0
- package/dist/sessions/event-shape.js +171 -0
- package/dist/sessions/event-shape.js.map +1 -0
- package/dist/sessions/persistence.d.ts +7 -5
- package/dist/sessions/persistence.d.ts.map +1 -1
- package/dist/sessions/persistence.js +39 -13
- package/dist/sessions/persistence.js.map +1 -1
- package/dist/skill-usage.d.ts +62 -0
- package/dist/skill-usage.d.ts.map +1 -0
- package/dist/skill-usage.js +106 -0
- package/dist/skill-usage.js.map +1 -0
- package/dist/skills/synthesize.d.ts.map +1 -1
- package/dist/skills/synthesize.js +42 -0
- package/dist/skills/synthesize.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +11 -0
- package/src/plugins/host-options.ts +2 -0
- package/src/plugins/host.ts +14 -0
- package/src/plugins/registry-kinds.test.ts +4 -0
- package/src/plugins/registry-kinds.ts +13 -0
- package/src/registries/reflectors.test.ts +50 -0
- package/src/registries/reflectors.ts +17 -0
- package/src/session.ts +20 -0
- package/src/sessions/event-shape.test.ts +207 -0
- package/src/sessions/event-shape.ts +196 -0
- package/src/sessions/persistence.test.ts +132 -0
- package/src/sessions/persistence.ts +39 -13
- package/src/skill-usage.test.ts +102 -0
- package/src/skill-usage.ts +165 -0
- package/src/skills/synthesize.ts +42 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { createMutex } from '@moxxy/sdk';
|
|
3
|
+
import { moxxyPath, writeFileAtomic } from '@moxxy/sdk/server';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export function skillsUsagePath() {
|
|
6
|
+
// Route through `moxxyPath` so a `$MOXXY_HOME` override relocates the skill
|
|
7
|
+
// usage aggregate alongside the rest of the data dir. Identical to
|
|
8
|
+
// `~/.moxxy/skills/.meta/usage.json` when MOXXY_HOME is unset.
|
|
9
|
+
return moxxyPath('skills/.meta/usage.json');
|
|
10
|
+
}
|
|
11
|
+
function emptyUsage() {
|
|
12
|
+
return { version: 1, updatedAt: new Date().toISOString(), skills: {} };
|
|
13
|
+
}
|
|
14
|
+
// Validates the on-disk shape so a hand-edited or partially-written file with a
|
|
15
|
+
// non-numeric counter (e.g. `invocations: "3"`) can't flow into the additive
|
|
16
|
+
// merge and corrupt the persisted aggregate via string concatenation. A failed
|
|
17
|
+
// parse falls through to `emptyUsage()`, exactly like malformed JSON.
|
|
18
|
+
const skillUsageSchema = z.object({
|
|
19
|
+
invocations: z.number(),
|
|
20
|
+
lastInvokedAt: z.string().optional(),
|
|
21
|
+
createdAt: z.string().optional(),
|
|
22
|
+
});
|
|
23
|
+
const skillUsageFileSchema = z.object({
|
|
24
|
+
version: z.literal(1),
|
|
25
|
+
updatedAt: z.string(),
|
|
26
|
+
skills: z.record(z.string(), skillUsageSchema),
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Read the skill usage aggregate. Returns an empty file when missing or
|
|
30
|
+
* unparseable — skill usage is an optional, non-load-blocking layer.
|
|
31
|
+
*/
|
|
32
|
+
export async function loadSkillUsage(filePath = skillsUsagePath()) {
|
|
33
|
+
try {
|
|
34
|
+
const raw = await fs.readFile(filePath, 'utf8');
|
|
35
|
+
const result = skillUsageFileSchema.safeParse(JSON.parse(raw));
|
|
36
|
+
if (result.success)
|
|
37
|
+
return result.data;
|
|
38
|
+
// shape-invalid (e.g. a non-numeric counter) — start fresh rather than let
|
|
39
|
+
// a corrupt entry poison the aggregate via string-concat addition.
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// missing or malformed JSON — start fresh
|
|
43
|
+
}
|
|
44
|
+
return emptyUsage();
|
|
45
|
+
}
|
|
46
|
+
async function writeAtomic(file, filePath) {
|
|
47
|
+
await writeFileAtomic(filePath, JSON.stringify(file, null, 2) + '\n');
|
|
48
|
+
}
|
|
49
|
+
// Serializes the read-modify-write in `mergeSkillUsage` so two concurrent merges
|
|
50
|
+
// (e.g. overlapping shutdowns) can't both read the same snapshot and have the
|
|
51
|
+
// second write clobber the first's delta.
|
|
52
|
+
const mergeMutex = createMutex();
|
|
53
|
+
/** Later of two ISO timestamps (lexicographic sort is correct for same-format
|
|
54
|
+
* UTC `toISOString()` output). Either may be absent. */
|
|
55
|
+
function laterIso(a, b) {
|
|
56
|
+
if (!a)
|
|
57
|
+
return b;
|
|
58
|
+
if (!b)
|
|
59
|
+
return a;
|
|
60
|
+
return a >= b ? a : b;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Merge a session's per-skill delta into the persisted aggregate and write it
|
|
64
|
+
* back. Reads the current file, adds each `invocations` field-wise, keeps the
|
|
65
|
+
* earliest `createdAt` and the latest `lastInvokedAt`, and writes atomically.
|
|
66
|
+
* Returns the updated file.
|
|
67
|
+
*
|
|
68
|
+
* Best-effort: a write failure logs to stderr but does not throw — losing one
|
|
69
|
+
* session's stats must never block shutdown.
|
|
70
|
+
*/
|
|
71
|
+
export async function mergeSkillUsage(delta, filePath = skillsUsagePath()) {
|
|
72
|
+
// An empty delta writes nothing, so there's no read-modify-write to serialize:
|
|
73
|
+
// skip the mutex and read the current file directly. A session that exercised
|
|
74
|
+
// no skills produces an empty delta on every shutdown, so this avoids needless
|
|
75
|
+
// I/O + contention on the common no-op path.
|
|
76
|
+
const keys = Object.keys(delta);
|
|
77
|
+
if (keys.length === 0)
|
|
78
|
+
return loadSkillUsage(filePath);
|
|
79
|
+
return mergeMutex.run(async () => {
|
|
80
|
+
const current = await loadSkillUsage(filePath);
|
|
81
|
+
const now = new Date().toISOString();
|
|
82
|
+
const skills = { ...current.skills };
|
|
83
|
+
for (const key of keys) {
|
|
84
|
+
const d = delta[key];
|
|
85
|
+
const existing = skills[key];
|
|
86
|
+
const invocations = (existing?.invocations ?? 0) + d.invocations;
|
|
87
|
+
const lastInvokedAt = laterIso(existing?.lastInvokedAt, d.lastInvokedAt);
|
|
88
|
+
const createdAt = existing?.createdAt ?? d.createdAt;
|
|
89
|
+
skills[key] = {
|
|
90
|
+
invocations,
|
|
91
|
+
...(lastInvokedAt ? { lastInvokedAt } : {}),
|
|
92
|
+
...(createdAt ? { createdAt } : {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const next = { version: 1, updatedAt: now, skills };
|
|
96
|
+
try {
|
|
97
|
+
await writeAtomic(next, filePath);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
process.stderr.write(`moxxy: failed to persist skill usage to ${filePath}: ` +
|
|
101
|
+
`${err instanceof Error ? err.message : String(err)}\n`);
|
|
102
|
+
}
|
|
103
|
+
return next;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=skill-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-usage.js","sourceRoot":"","sources":["../src/skill-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/skills/synthesize.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AAIpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,GAAE,iBAAsB;AAC5B;;;;;;GAMG;AACH,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CA2F3B;AAoED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE,iBAAsB,GAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/skills/synthesize.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AAIpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,GAAE,iBAAsB;AAC5B;;;;;;GAMG;AACH,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CA2F3B;AAoED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE,iBAAsB,GAC3B,MAAM,CAwLR"}
|
|
@@ -155,6 +155,14 @@ async function rotateAuditIfNeeded(filePath) {
|
|
|
155
155
|
await fs.writeFile(filePath, kept.join('\n') + '\n', 'utf8');
|
|
156
156
|
}
|
|
157
157
|
export function buildSynthesizeSkillPlugin(session, opts = {}) {
|
|
158
|
+
// Capability fs globs for the tools below, resolved from the same option
|
|
159
|
+
// fallbacks the handlers use. The audit JSONL defaults under the DEFAULT
|
|
160
|
+
// user skills dir even when `userDir` is overridden (see synthesizeSkill).
|
|
161
|
+
const userSkillsGlob = `${opts.userDir ?? defaultUserSkillsDir()}/**`;
|
|
162
|
+
const projectSkillsGlob = `${opts.projectDir ?? defaultProjectSkillsDir(session.cwd)}/**`;
|
|
163
|
+
const auditGlob = opts.auditPath
|
|
164
|
+
? `${path.dirname(opts.auditPath)}/**`
|
|
165
|
+
: `${defaultUserSkillsDir()}/**`;
|
|
158
166
|
return definePlugin({
|
|
159
167
|
name: '@moxxy/synthesize-skill',
|
|
160
168
|
version: '0.0.0',
|
|
@@ -178,6 +186,19 @@ export function buildSynthesizeSkillPlugin(session, opts = {}) {
|
|
|
178
186
|
'"project" → <cwd>/.moxxy/skills/ — ONLY when the user explicitly asks for a project-scoped skill.'),
|
|
179
187
|
}),
|
|
180
188
|
permission: { action: 'prompt' },
|
|
189
|
+
// Drafts the skill body via the active LLMProvider (host is
|
|
190
|
+
// provider-config dependent, hence net: any), then writes the skill
|
|
191
|
+
// file + the audit JSONL.
|
|
192
|
+
isolation: {
|
|
193
|
+
capabilities: {
|
|
194
|
+
fs: {
|
|
195
|
+
read: [auditGlob],
|
|
196
|
+
write: [userSkillsGlob, projectSkillsGlob, auditGlob],
|
|
197
|
+
},
|
|
198
|
+
net: { mode: 'any' },
|
|
199
|
+
timeMs: 120_000,
|
|
200
|
+
},
|
|
201
|
+
},
|
|
181
202
|
handler: async ({ intent, scope }, ctx) => {
|
|
182
203
|
const result = await synthesizeSkill(session, intent, scope, opts, ctx.turnId);
|
|
183
204
|
return {
|
|
@@ -200,6 +221,8 @@ export function buildSynthesizeSkillPlugin(session, opts = {}) {
|
|
|
200
221
|
.min(1)
|
|
201
222
|
.describe('The exact skill name from the "Available skills" list in the system prompt.'),
|
|
202
223
|
}),
|
|
224
|
+
// Registry lookup — the skill body is already in memory.
|
|
225
|
+
isolation: { capabilities: { net: { mode: 'none' }, timeMs: 10_000 } },
|
|
203
226
|
handler: async ({ name }, ctx) => {
|
|
204
227
|
const skill = session.skills.byName(name);
|
|
205
228
|
if (!skill) {
|
|
@@ -242,6 +265,23 @@ export function buildSynthesizeSkillPlugin(session, opts = {}) {
|
|
|
242
265
|
// tool inherits the channel resolver's default, which denies in
|
|
243
266
|
// headless runs (the skill-author flow couldn't activate a new skill).
|
|
244
267
|
permission: { action: 'allow' },
|
|
268
|
+
// Rescans every skill source the boot loader used — the builtin and
|
|
269
|
+
// plugin dirs live wherever those packages are installed, so they're
|
|
270
|
+
// covered explicitly from the configured options.
|
|
271
|
+
isolation: {
|
|
272
|
+
capabilities: {
|
|
273
|
+
fs: {
|
|
274
|
+
read: [
|
|
275
|
+
userSkillsGlob,
|
|
276
|
+
projectSkillsGlob,
|
|
277
|
+
...(opts.builtinDir ? [`${opts.builtinDir}/**`] : []),
|
|
278
|
+
...(opts.pluginDirs ?? []).map((d) => `${d}/**`),
|
|
279
|
+
],
|
|
280
|
+
},
|
|
281
|
+
net: { mode: 'none' },
|
|
282
|
+
timeMs: 30_000,
|
|
283
|
+
},
|
|
284
|
+
},
|
|
245
285
|
handler: async () => {
|
|
246
286
|
const { discoverSkills } = await import('./loader.js');
|
|
247
287
|
// Discover first, swap second: never empty the registry while
|
|
@@ -271,6 +311,8 @@ export function buildSynthesizeSkillPlugin(session, opts = {}) {
|
|
|
271
311
|
name: z.string().min(1).describe('Exact tool name from the "Loadable tools" index.'),
|
|
272
312
|
}),
|
|
273
313
|
permission: { action: 'allow' },
|
|
314
|
+
// Registry lookup — the schema inclusion happens on later requests.
|
|
315
|
+
isolation: { capabilities: { net: { mode: 'none' }, timeMs: 10_000 } },
|
|
274
316
|
handler: ({ name }) => {
|
|
275
317
|
// The call itself is recorded in the log; `applyLazyTools` reads that
|
|
276
318
|
// to include the tool's schema on subsequent requests. Here we just
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthesize.js","sourceRoot":"","sources":["../../src/skills/synthesize.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"synthesize.js","sourceRoot":"","sources":["../../src/skills/synthesize.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moxxy/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "The moxxy runtime as a programmatic library: the agentic Session + runTurn loop, the event log, the plugin host, every block registry (providers, tools, modes, compactors, cache strategies, channels, …), session persistence, and the permission engine. Pair with @moxxy/sdk to build and embed moxxy agents in your own code.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"moxxy",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"jiti": "^2.4.2",
|
|
43
43
|
"ulid": "^2.3.0",
|
|
44
44
|
"zod": "^3.24.0",
|
|
45
|
-
"@moxxy/sdk": "0.
|
|
45
|
+
"@moxxy/sdk": "0.27.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/node": "^22.10.0",
|
package/src/index.ts
CHANGED
|
@@ -21,6 +21,14 @@ export {
|
|
|
21
21
|
type UsageStatsFile,
|
|
22
22
|
type StoredModelUsage,
|
|
23
23
|
} from './usage-stats.js';
|
|
24
|
+
export {
|
|
25
|
+
loadSkillUsage,
|
|
26
|
+
mergeSkillUsage,
|
|
27
|
+
skillsUsagePath,
|
|
28
|
+
type SkillUsageFile,
|
|
29
|
+
type SkillUsage,
|
|
30
|
+
type SkillUsageDelta,
|
|
31
|
+
} from './skill-usage.js';
|
|
24
32
|
export { SkillRegistryImpl } from './registries/skills.js';
|
|
25
33
|
export {
|
|
26
34
|
parseSkillFile,
|
|
@@ -57,6 +65,7 @@ export { SynthesizerRegistry } from './registries/synthesizers.js';
|
|
|
57
65
|
export { EmbedderRegistry } from './registries/embedders.js';
|
|
58
66
|
export { IsolatorRegistry as ContributedIsolatorRegistry } from './registries/isolators.js';
|
|
59
67
|
export { EventStoreRegistry } from './registries/event-stores.js';
|
|
68
|
+
export { ReflectorRegistry } from './registries/reflectors.js';
|
|
60
69
|
export { jsonlEventStore } from './sessions/jsonl-event-store.js';
|
|
61
70
|
export type {
|
|
62
71
|
EventStoreDef,
|
|
@@ -78,11 +87,13 @@ export {
|
|
|
78
87
|
setSessionGroup,
|
|
79
88
|
seedSessionMeta,
|
|
80
89
|
SESSION_META_VERSION,
|
|
90
|
+
SESSION_SOURCES,
|
|
81
91
|
type SessionMeta,
|
|
82
92
|
type SessionSource,
|
|
83
93
|
type SessionPersistenceOpts,
|
|
84
94
|
type EventPage,
|
|
85
95
|
} from './sessions/persistence.js';
|
|
96
|
+
export { isMoxxyEventShape } from './sessions/event-shape.js';
|
|
86
97
|
export {
|
|
87
98
|
PluginHost,
|
|
88
99
|
PluginRequirementError,
|
|
@@ -25,6 +25,7 @@ import type { EmbedderRegistry } from '../registries/embedders.js';
|
|
|
25
25
|
import type { IsolatorRegistry } from '../registries/isolators.js';
|
|
26
26
|
import type { WorkflowExecutorRegistry } from '../registries/workflow-executors.js';
|
|
27
27
|
import type { EventStoreRegistry } from '../registries/event-stores.js';
|
|
28
|
+
import type { ReflectorRegistry } from '../registries/reflectors.js';
|
|
28
29
|
import type { HookDispatcherImpl } from './lifecycle.js';
|
|
29
30
|
import type { RequirementRegistry } from '../requirements.js';
|
|
30
31
|
|
|
@@ -48,6 +49,7 @@ export interface PluginHostOptions {
|
|
|
48
49
|
readonly isolators: IsolatorRegistry;
|
|
49
50
|
readonly workflowExecutors: WorkflowExecutorRegistry;
|
|
50
51
|
readonly eventStores: EventStoreRegistry;
|
|
52
|
+
readonly reflectors: ReflectorRegistry;
|
|
51
53
|
readonly requirements: RequirementRegistry;
|
|
52
54
|
readonly dispatcher: HookDispatcherImpl;
|
|
53
55
|
readonly loader?: PluginLoader;
|
package/src/plugins/host.ts
CHANGED
|
@@ -92,6 +92,20 @@ export class PluginHost implements PluginHostHandle {
|
|
|
92
92
|
return [...this.skipped.values()];
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
+
/**
|
|
96
|
+
* The plugin that contributed the named tool — the `loaded` map key, i.e.
|
|
97
|
+
* the package name for discovered plugins and the declared plugin name for
|
|
98
|
+
* statically bundled ones. Linear scan over per-plugin name lists: the
|
|
99
|
+
* registries are small (~40 plugins × a handful of tools) and callers
|
|
100
|
+
* (security routing, audit views) are not hot paths.
|
|
101
|
+
*/
|
|
102
|
+
ownerOfTool(toolName: string): string | undefined {
|
|
103
|
+
for (const [key, record] of this.loaded) {
|
|
104
|
+
if (record.toolNames.includes(toolName)) return key;
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
|
|
95
109
|
registerStatic(plugin: Plugin, opts: RegisterStaticOptions = {}): void {
|
|
96
110
|
if (this.loaded.has(plugin.name)) {
|
|
97
111
|
throw new Error(`Plugin already registered: ${plugin.name}`);
|
|
@@ -37,6 +37,7 @@ import { EmbedderRegistry } from '../registries/embedders.js';
|
|
|
37
37
|
import { IsolatorRegistry } from '../registries/isolators.js';
|
|
38
38
|
import { WorkflowExecutorRegistry } from '../registries/workflow-executors.js';
|
|
39
39
|
import { EventStoreRegistry } from '../registries/event-stores.js';
|
|
40
|
+
import { ReflectorRegistry } from '../registries/reflectors.js';
|
|
40
41
|
import { RequirementRegistry } from '../requirements.js';
|
|
41
42
|
import { HookDispatcherImpl } from './lifecycle.js';
|
|
42
43
|
import { PluginHost } from './host.js';
|
|
@@ -87,6 +88,7 @@ const everyKindPlugin = definePlugin({
|
|
|
87
88
|
readPage: async () => ({ events: [], prevCursor: null }),
|
|
88
89
|
},
|
|
89
90
|
],
|
|
91
|
+
reflectors: [{ name: 'refl-1', reflect: async () => [] }],
|
|
90
92
|
});
|
|
91
93
|
|
|
92
94
|
function makeHost() {
|
|
@@ -108,6 +110,7 @@ function makeHost() {
|
|
|
108
110
|
isolators: new IsolatorRegistry(),
|
|
109
111
|
workflowExecutors: new WorkflowExecutorRegistry(),
|
|
110
112
|
eventStores: new EventStoreRegistry(),
|
|
113
|
+
reflectors: new ReflectorRegistry(),
|
|
111
114
|
};
|
|
112
115
|
const requirements = new RequirementRegistry({
|
|
113
116
|
tools: registries.tools,
|
|
@@ -147,6 +150,7 @@ function makeHost() {
|
|
|
147
150
|
isolator: registries.isolators,
|
|
148
151
|
workflowExecutor: registries.workflowExecutors,
|
|
149
152
|
eventStore: registries.eventStores,
|
|
153
|
+
reflector: registries.reflectors,
|
|
150
154
|
};
|
|
151
155
|
return { host, byKind };
|
|
152
156
|
}
|
|
@@ -17,6 +17,7 @@ import type {
|
|
|
17
17
|
TunnelProviderDef,
|
|
18
18
|
WorkflowExecutorDef,
|
|
19
19
|
EventStoreDef,
|
|
20
|
+
ReflectorDef,
|
|
20
21
|
} from '@moxxy/sdk';
|
|
21
22
|
import type { PluginHostOptions } from './host-options.js';
|
|
22
23
|
|
|
@@ -44,6 +45,7 @@ export interface RegistryNameRecord {
|
|
|
44
45
|
readonly isolatorNames: ReadonlyArray<string>;
|
|
45
46
|
readonly workflowExecutorNames: ReadonlyArray<string>;
|
|
46
47
|
readonly eventStoreNames: ReadonlyArray<string>;
|
|
48
|
+
readonly reflectorNames: ReadonlyArray<string>;
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
/**
|
|
@@ -243,4 +245,15 @@ export const REGISTRY_KINDS: ReadonlyArray<RegistryKind<unknown>> = [
|
|
|
243
245
|
register: (o, e: EventStoreDef) => o.eventStores.register(e),
|
|
244
246
|
unregister: (o, n) => o.eventStores.unregister(n),
|
|
245
247
|
} satisfies RegistryKind<EventStoreDef>,
|
|
248
|
+
{
|
|
249
|
+
kind: 'reflector',
|
|
250
|
+
recordField: 'reflectorNames',
|
|
251
|
+
defs: (p) => p.reflectors ?? [],
|
|
252
|
+
nameOf: (r: ReflectorDef) => r.name,
|
|
253
|
+
// Throw-on-duplicate `register` (NOT `replace`): a discovered reflector is
|
|
254
|
+
// added but auto-adopts only when nothing is active yet (the registry is
|
|
255
|
+
// nullable — no core floor). The user swaps via `plugins.reflector.default`.
|
|
256
|
+
register: (o, r: ReflectorDef) => o.reflectors.register(r),
|
|
257
|
+
unregister: (o, n) => o.reflectors.unregister(n),
|
|
258
|
+
} satisfies RegistryKind<ReflectorDef>,
|
|
246
259
|
] as ReadonlyArray<RegistryKind<unknown>>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import type { ReflectorDef } from '@moxxy/sdk';
|
|
3
|
+
import { Session, autoAllowResolver, silentLogger } from '../index.js';
|
|
4
|
+
|
|
5
|
+
function makeSession(): Session {
|
|
6
|
+
return new Session({ cwd: '/tmp', logger: silentLogger, permissionResolver: autoAllowResolver });
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const def = (name: string): ReflectorDef => ({ name, reflect: async () => [] });
|
|
10
|
+
|
|
11
|
+
describe('Reflector registry (nullable, no floor)', () => {
|
|
12
|
+
it('starts empty — no core-seeded floor, reflection is off by default', () => {
|
|
13
|
+
const session = makeSession();
|
|
14
|
+
expect(session.reflectors.getActiveName()).toBeNull();
|
|
15
|
+
expect(session.reflectors.getFloorName()).toBeNull();
|
|
16
|
+
expect(session.reflectors.list()).toEqual([]);
|
|
17
|
+
expect(session.reflectors.getActive()).toBeNull();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('publishes the registry on the service registry for the driver to resolve', () => {
|
|
21
|
+
const session = makeSession();
|
|
22
|
+
expect(session.services.get('reflectors')).toBe(session.reflectors);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('auto-adopts the first registered reflector as active', () => {
|
|
26
|
+
const session = makeSession();
|
|
27
|
+
session.reflectors.register(def('default'));
|
|
28
|
+
expect(session.reflectors.getActiveName()).toBe('default');
|
|
29
|
+
expect(session.reflectors.getActive()?.name).toBe('default');
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('throws on a duplicate name and swaps via setActive', () => {
|
|
33
|
+
const session = makeSession();
|
|
34
|
+
session.reflectors.register(def('default'));
|
|
35
|
+
expect(() => session.reflectors.register(def('default'))).toThrow(/already registered/);
|
|
36
|
+
session.reflectors.register(def('smart'));
|
|
37
|
+
// Second registration does NOT steal active from the first.
|
|
38
|
+
expect(session.reflectors.getActiveName()).toBe('default');
|
|
39
|
+
session.reflectors.setActive('smart');
|
|
40
|
+
expect(session.reflectors.getActiveName()).toBe('smart');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('reverts to null (no floor) when the active reflector is unregistered', () => {
|
|
44
|
+
const session = makeSession();
|
|
45
|
+
session.reflectors.register(def('default'));
|
|
46
|
+
session.reflectors.unregister('default');
|
|
47
|
+
expect(session.reflectors.getActiveName()).toBeNull();
|
|
48
|
+
expect(session.reflectors.getActive()).toBeNull();
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ReflectorDef } from '@moxxy/sdk';
|
|
2
|
+
import { ActiveDefRegistry } from './active-def-registry.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The single-active Reflector registry (the learning-loop block that watches a
|
|
6
|
+
* finished turn and proposes memory/skill improvements). NULLABLE by design:
|
|
7
|
+
* unlike the event-store/compactor registries there is NO core-seeded protected
|
|
8
|
+
* floor, so `getActive()` returns null until a plugin registers one — reflection
|
|
9
|
+
* is opt-in exactly like transcriber/synthesizer. `autoAdoptFirst` (the default)
|
|
10
|
+
* means the first registered reflector becomes active, and `unregister` reverts
|
|
11
|
+
* to null (no floor to fall back to). Uses throw-on-duplicate `register`.
|
|
12
|
+
*/
|
|
13
|
+
export class ReflectorRegistry extends ActiveDefRegistry<ReflectorDef> {
|
|
14
|
+
constructor() {
|
|
15
|
+
super({ noun: 'Reflector', autoAdoptFirst: true });
|
|
16
|
+
}
|
|
17
|
+
}
|
package/src/session.ts
CHANGED
|
@@ -35,6 +35,7 @@ import { EmbedderRegistry } from './registries/embedders.js';
|
|
|
35
35
|
import { IsolatorRegistry } from './registries/isolators.js';
|
|
36
36
|
import { WorkflowExecutorRegistry } from './registries/workflow-executors.js';
|
|
37
37
|
import { EventStoreRegistry } from './registries/event-stores.js';
|
|
38
|
+
import { ReflectorRegistry } from './registries/reflectors.js';
|
|
38
39
|
import { ServiceRegistryImpl } from './registries/services.js';
|
|
39
40
|
import { jsonlEventStore } from './sessions/jsonl-event-store.js';
|
|
40
41
|
import { RequirementRegistry } from './requirements.js';
|
|
@@ -49,6 +50,8 @@ import type {
|
|
|
49
50
|
ProviderAdminView,
|
|
50
51
|
WorkflowsView,
|
|
51
52
|
PluginsAdminView,
|
|
53
|
+
ProviderSetupView,
|
|
54
|
+
SessionLike,
|
|
52
55
|
PendingToolCall,
|
|
53
56
|
PermissionContext,
|
|
54
57
|
PermissionDecision,
|
|
@@ -135,6 +138,12 @@ export class Session implements ClientSession, SessionRuntime {
|
|
|
135
138
|
readonly isolators: IsolatorRegistry;
|
|
136
139
|
readonly workflowExecutors: WorkflowExecutorRegistry;
|
|
137
140
|
readonly eventStores: EventStoreRegistry;
|
|
141
|
+
/**
|
|
142
|
+
* The learning-loop block: watches finished turns and proposes memory/skill
|
|
143
|
+
* improvements. NULLABLE — no core-seeded floor, so it stays empty until a
|
|
144
|
+
* reflector plugin (e.g. @moxxy/reflector-default) registers one.
|
|
145
|
+
*/
|
|
146
|
+
readonly reflectors: ReflectorRegistry;
|
|
138
147
|
/** Inter-plugin service registry — plugins publish/consume services in onInit. */
|
|
139
148
|
readonly services: ServiceRegistryImpl;
|
|
140
149
|
readonly requirements: RequirementRegistry;
|
|
@@ -184,6 +193,8 @@ export class Session implements ClientSession, SessionRuntime {
|
|
|
184
193
|
credentialResolver?: CredentialResolver;
|
|
185
194
|
workflows?: WorkflowsView;
|
|
186
195
|
pluginsAdmin?: PluginsAdminView;
|
|
196
|
+
providerSetup?: ProviderSetupView;
|
|
197
|
+
configAdmin?: SessionLike['configAdmin'];
|
|
187
198
|
readonly dispatcher: HookDispatcherImpl;
|
|
188
199
|
readonly pluginHost: PluginHost;
|
|
189
200
|
private readonly controller = new AbortController();
|
|
@@ -239,6 +250,8 @@ export class Session implements ClientSession, SessionRuntime {
|
|
|
239
250
|
this.services.register('synthesizers', this.synthesizers);
|
|
240
251
|
this.services.register('skills', this.skills);
|
|
241
252
|
this.services.register('tunnelProviders', this.tunnelProviders);
|
|
253
|
+
// The memory plugin (discovery-loadable) resolves its lazy embedder here.
|
|
254
|
+
this.services.register('embedders', this.embedders);
|
|
242
255
|
// A stable accessor for the active provider's stored credentials. The
|
|
243
256
|
// resolver itself is installed late (by activateProvider, after plugins are
|
|
244
257
|
// built), so close over `this` and read it lazily at call time — lets
|
|
@@ -268,6 +281,12 @@ export class Session implements ClientSession, SessionRuntime {
|
|
|
268
281
|
// Seed the built-in JSONL store as the protected floor — the storage backend
|
|
269
282
|
// behind the event log always exists and can be swapped but never removed.
|
|
270
283
|
this.eventStores.register(jsonlEventStore, { protected: true });
|
|
284
|
+
// Reflectors are nullable — no core floor is seeded, so reflection stays off
|
|
285
|
+
// until a reflector plugin registers one. Published on the service registry
|
|
286
|
+
// so a discovery-loaded driver (the reflector plugin's own hooks) can resolve
|
|
287
|
+
// the active reflector in onTurnEnd without importing @moxxy/core.
|
|
288
|
+
this.reflectors = new ReflectorRegistry();
|
|
289
|
+
this.services.register('reflectors', this.reflectors);
|
|
271
290
|
this.requirements = new RequirementRegistry({
|
|
272
291
|
tools: this.tools,
|
|
273
292
|
providers: this.providers,
|
|
@@ -315,6 +334,7 @@ export class Session implements ClientSession, SessionRuntime {
|
|
|
315
334
|
isolators: this.isolators,
|
|
316
335
|
workflowExecutors: this.workflowExecutors,
|
|
317
336
|
eventStores: this.eventStores,
|
|
337
|
+
reflectors: this.reflectors,
|
|
318
338
|
requirements: this.requirements,
|
|
319
339
|
dispatcher: this.dispatcher,
|
|
320
340
|
loader: opts.pluginLoader,
|