@lvy-jsd/dsh-tool-manager 0.0.0-stage → 0.2.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 +205 -2
- package/cordis.patch.yml +16 -0
- package/lib/catalog.d.ts +35 -0
- package/lib/catalog.d.ts.map +1 -0
- package/lib/catalog.js +311 -0
- package/lib/catalog.js.map +1 -0
- package/lib/index.d.ts +23 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +588 -0
- package/lib/index.js.map +1 -0
- package/lib/service.d.ts +51 -0
- package/lib/service.d.ts.map +1 -0
- package/lib/service.js +199 -0
- package/lib/service.js.map +1 -0
- package/lib/types.d.ts +317 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +7 -0
- package/lib/types.js.map +1 -0
- package/lib/visibility.d.ts +33 -0
- package/lib/visibility.d.ts.map +1 -0
- package/lib/visibility.js +305 -0
- package/lib/visibility.js.map +1 -0
- package/package.json +50 -4
- package/src/catalog.ts +305 -0
- package/src/index.ts +595 -0
- package/src/service.ts +207 -0
- package/src/types.ts +319 -0
- package/src/visibility.ts +317 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
// Per-agent visibility: an allowlist installed with `agent.ctx.tools.restrict`.
|
|
2
|
+
//
|
|
3
|
+
// allow(agent) = (pinned ∪ loaded tools ∪ tools of subscribed groups) − excluded
|
|
4
|
+
// ∩ names the host currently lets this agent's scope restrict
|
|
5
|
+
//
|
|
6
|
+
// An allowlist (not a denylist) means a tool that appears later — an MCP server
|
|
7
|
+
// reconnecting, a plugin installed, a tool renamed — stays hidden until loaded.
|
|
8
|
+
// Restrictions from other plugins (connector governance deny) intersect with
|
|
9
|
+
// ours, so a hard deny always wins.
|
|
10
|
+
const STATE_KEYS = ['loaded', 'groups', 'excluded', 'handoffGroups', 'handoffTools'];
|
|
11
|
+
function emptyState() {
|
|
12
|
+
return {
|
|
13
|
+
loaded: new Set(), // individual tool names
|
|
14
|
+
groups: new Set(), // subscribed group names (future tools included)
|
|
15
|
+
excluded: new Set(), // tools unloaded from inside a subscribed group
|
|
16
|
+
handoffGroups: new Set(),
|
|
17
|
+
handoffTools: new Set(),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** Plain JSON form of one agent's state (sorted arrays). */
|
|
21
|
+
export function serializeState(state) {
|
|
22
|
+
const out = {};
|
|
23
|
+
for (const key of STATE_KEYS)
|
|
24
|
+
out[key] = [...state[key]].sort();
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
/** Inverse of serializeState; unknown keys are ignored, values coerced to strings. */
|
|
28
|
+
export function deserializeState(raw) {
|
|
29
|
+
const state = emptyState();
|
|
30
|
+
for (const key of STATE_KEYS)
|
|
31
|
+
for (const value of raw?.[key] ?? [])
|
|
32
|
+
state[key].add(String(value));
|
|
33
|
+
return state;
|
|
34
|
+
}
|
|
35
|
+
export function createVisibilityController(ctx, { pinned, entryTools = [], getFilters = () => [], getCatalog, invalidate, onStateChange, isExempt = () => false, logger }) {
|
|
36
|
+
const states = new Map();
|
|
37
|
+
const installed = new Map();
|
|
38
|
+
const providers = []; // state providers (persistence plugins)
|
|
39
|
+
const touched = new Set(); // agents mutated by a load/unload
|
|
40
|
+
let agentsApi = null;
|
|
41
|
+
let syncing = false;
|
|
42
|
+
let disposed = false;
|
|
43
|
+
// --- names the host will accept in restrict() for this agent ------------
|
|
44
|
+
function restrictableNames(agent) {
|
|
45
|
+
try {
|
|
46
|
+
if (typeof ctx.tools.view === 'function')
|
|
47
|
+
return new Set(ctx.tools.view(agent).restrictableNames);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
logger?.debug?.(`tool-manager: view() unavailable: ${error.message}`);
|
|
51
|
+
}
|
|
52
|
+
return new Set(ctx.tools.schemas().map((s) => s.name));
|
|
53
|
+
}
|
|
54
|
+
function allowFor(agent) {
|
|
55
|
+
const state = states.get(agent);
|
|
56
|
+
const catalog = getCatalog(agent);
|
|
57
|
+
const wanted = new Set(pinned());
|
|
58
|
+
for (const name of state.loaded)
|
|
59
|
+
wanted.add(name);
|
|
60
|
+
for (const group of state.groups) {
|
|
61
|
+
for (const tool of catalog.groups.get(group)?.tools ?? []) {
|
|
62
|
+
if (!tool.highRisk && !state.excluded.has(tool.name))
|
|
63
|
+
wanted.add(tool.name);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const known = restrictableNames(agent);
|
|
67
|
+
let allow = [...wanted].filter((name) => known.has(name));
|
|
68
|
+
// Extension filters may only narrow, and never hide the entry tools (the
|
|
69
|
+
// model's way back to the directory).
|
|
70
|
+
for (const { name, filter } of getFilters()) {
|
|
71
|
+
try {
|
|
72
|
+
const kept = new Set(filter(agent, [...allow]) ?? allow);
|
|
73
|
+
allow = allow.filter((n) => kept.has(n) || entryTools.includes(n));
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
logger?.warn?.(`tool-manager: visibility filter ${name} failed: ${error.message}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return allow.sort();
|
|
80
|
+
}
|
|
81
|
+
// restrict() emits tools/change synchronously, which re-enters install()
|
|
82
|
+
// for the same agent before the outer call has recorded its disposer. A
|
|
83
|
+
// nested install must not stack a second restriction (restrictions
|
|
84
|
+
// intersect, and an orphan would hide every later load), so it only marks
|
|
85
|
+
// the agent dirty and the outer call loops.
|
|
86
|
+
const busy = new Set();
|
|
87
|
+
const dirty = new Set();
|
|
88
|
+
function install(agent) {
|
|
89
|
+
if (!states.has(agent) || agent?.ctx?.tools?.restrict === undefined)
|
|
90
|
+
return;
|
|
91
|
+
if (busy.has(agent)) {
|
|
92
|
+
dirty.add(agent);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
busy.add(agent);
|
|
96
|
+
try {
|
|
97
|
+
do {
|
|
98
|
+
dirty.delete(agent);
|
|
99
|
+
installOnce(agent);
|
|
100
|
+
} while (dirty.has(agent));
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
busy.delete(agent);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function installOnce(agent) {
|
|
107
|
+
// An exempt agent (e.g. a Claude Code route, whose tool list is handed over
|
|
108
|
+
// once at session start and never refreshed) gets no restriction at all; a
|
|
109
|
+
// restriction installed before it switched route is lifted.
|
|
110
|
+
if (isExempt(agent)) {
|
|
111
|
+
installed.get(agent)?.dispose?.();
|
|
112
|
+
installed.delete(agent);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const allow = allowFor(agent);
|
|
116
|
+
const key = allow.join('\n');
|
|
117
|
+
const current = installed.get(agent);
|
|
118
|
+
if (current?.key === key)
|
|
119
|
+
return;
|
|
120
|
+
try {
|
|
121
|
+
// New restriction first, then release the old one, so there is never a
|
|
122
|
+
// moment with no restriction (which would expose every tool).
|
|
123
|
+
const dispose = agent.ctx.tools.restrict({ allow });
|
|
124
|
+
installed.set(agent, { key, dispose });
|
|
125
|
+
current?.dispose?.();
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
logger?.warn?.(`tool-manager: restrict agent ${String(agent?.id)} failed: ${error.message}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function syncAll() {
|
|
132
|
+
if (disposed || !agentsApi || syncing)
|
|
133
|
+
return;
|
|
134
|
+
// restrict() emits tools/change synchronously; the nested event would only
|
|
135
|
+
// rescan the same state.
|
|
136
|
+
syncing = true;
|
|
137
|
+
try {
|
|
138
|
+
for (const agent of agentsApi.list()) {
|
|
139
|
+
if (!states.has(agent))
|
|
140
|
+
adopt(agent);
|
|
141
|
+
install(agent);
|
|
142
|
+
}
|
|
143
|
+
const live = agentsApi.list();
|
|
144
|
+
for (const agent of [...states.keys()])
|
|
145
|
+
if (!live.includes(agent))
|
|
146
|
+
forget(agent);
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
syncing = false;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function parentOf(agent) {
|
|
153
|
+
const api = agentsApi;
|
|
154
|
+
if (typeof api?.isOwnedBy !== 'function')
|
|
155
|
+
return undefined;
|
|
156
|
+
return api.list().find((candidate) => candidate !== agent && api.isOwnedBy(agent.id, candidate));
|
|
157
|
+
}
|
|
158
|
+
/** State handed back by a provider, or null when none has any. */
|
|
159
|
+
function stateFromProviders(agent) {
|
|
160
|
+
for (const { name, load } of providers) {
|
|
161
|
+
try {
|
|
162
|
+
const raw = load(agent);
|
|
163
|
+
if (raw)
|
|
164
|
+
return deserializeState(raw);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
logger?.warn?.(`tool-manager: state provider ${name} failed to load: ${error.message}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
/** What an agent starts from: pinned tools plus the parent's handoff. */
|
|
173
|
+
function fallbackState(agent) {
|
|
174
|
+
const state = emptyState();
|
|
175
|
+
const parent = parentOf(agent);
|
|
176
|
+
const parentState = parent && states.get(parent);
|
|
177
|
+
if (parentState) {
|
|
178
|
+
for (const group of parentState.handoffGroups)
|
|
179
|
+
state.groups.add(group);
|
|
180
|
+
for (const tool of parentState.handoffTools)
|
|
181
|
+
state.loaded.add(tool);
|
|
182
|
+
}
|
|
183
|
+
return state;
|
|
184
|
+
}
|
|
185
|
+
function adopt(agent) {
|
|
186
|
+
states.set(agent, stateFromProviders(agent) ?? fallbackState(agent));
|
|
187
|
+
}
|
|
188
|
+
/** Save a state change through every provider (fire and forget). */
|
|
189
|
+
function broadcast(agent, state) {
|
|
190
|
+
for (const { name, save } of providers) {
|
|
191
|
+
try {
|
|
192
|
+
save(agent, state);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
logger?.warn?.(`tool-manager: state provider ${name} failed to save: ${error.message}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Register a state provider so loaded state can outlive the process (DSH
|
|
201
|
+
* restart). `load(agent)` returns a serialized state or null; `save(agent,
|
|
202
|
+
* state)` receives plain JSON. Returns a disposer.
|
|
203
|
+
*/
|
|
204
|
+
function registerStateProvider(provider = {}) {
|
|
205
|
+
const entry = { name: provider.name ?? 'anonymous', load: provider.load ?? (() => null), save: provider.save ?? (() => { }) };
|
|
206
|
+
providers.push(entry);
|
|
207
|
+
// A persistence plugin normally mounts after this controller's first sync,
|
|
208
|
+
// so agents already adopted from the fallback state (nothing loaded yet)
|
|
209
|
+
// get one more chance to restore. An agent the user already changed is
|
|
210
|
+
// never overwritten.
|
|
211
|
+
for (const agent of [...states.keys()]) {
|
|
212
|
+
if (touched.has(agent))
|
|
213
|
+
continue;
|
|
214
|
+
const restored = stateFromProviders(agent);
|
|
215
|
+
if (restored) {
|
|
216
|
+
states.set(agent, restored);
|
|
217
|
+
install(agent);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return () => {
|
|
221
|
+
const i = providers.indexOf(entry);
|
|
222
|
+
if (i >= 0)
|
|
223
|
+
providers.splice(i, 1);
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function forget(agent) {
|
|
227
|
+
states.delete(agent);
|
|
228
|
+
touched.delete(agent);
|
|
229
|
+
installed.get(agent)?.dispose?.();
|
|
230
|
+
installed.delete(agent);
|
|
231
|
+
}
|
|
232
|
+
function mount(agentCtx) {
|
|
233
|
+
agentsApi = agentCtx.agents;
|
|
234
|
+
const stops = [
|
|
235
|
+
agentCtx.on('agent/created', ({ agent }) => {
|
|
236
|
+
invalidate?.();
|
|
237
|
+
if (!states.has(agent))
|
|
238
|
+
adopt(agent);
|
|
239
|
+
install(agent);
|
|
240
|
+
}),
|
|
241
|
+
agentCtx.on('agent/disposed', ({ agent }) => forget(agent)),
|
|
242
|
+
agentCtx.on('tools/change', () => { invalidate?.(); syncAll(); }),
|
|
243
|
+
// A route switch (model/selection) can make an agent exempt or not; it is
|
|
244
|
+
// appended before the next request, so re-evaluate right away.
|
|
245
|
+
agentCtx.on('session/event', (session, event) => {
|
|
246
|
+
if (event?.type !== 'model/selection' && event?.type !== 'request/context')
|
|
247
|
+
return;
|
|
248
|
+
const agent = agentsApi?.get?.(session?.id);
|
|
249
|
+
if (agent && states.has(agent))
|
|
250
|
+
install(agent);
|
|
251
|
+
}),
|
|
252
|
+
];
|
|
253
|
+
// Agents that already exist (resumed before this plugin mounted).
|
|
254
|
+
syncAll();
|
|
255
|
+
return () => {
|
|
256
|
+
for (const stop of stops)
|
|
257
|
+
stop?.();
|
|
258
|
+
for (const agent of [...installed.keys()])
|
|
259
|
+
forget(agent);
|
|
260
|
+
agentsApi = null;
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
function stateOf(agent) {
|
|
264
|
+
if (!states.has(agent))
|
|
265
|
+
adopt(agent);
|
|
266
|
+
return states.get(agent);
|
|
267
|
+
}
|
|
268
|
+
/** Apply a mutation to one agent's state, reinstall, and notify listeners. */
|
|
269
|
+
function update(agent, mutate) {
|
|
270
|
+
const state = stateOf(agent);
|
|
271
|
+
touched.add(agent);
|
|
272
|
+
const result = mutate(state);
|
|
273
|
+
install(agent);
|
|
274
|
+
const plain = serializeState(state);
|
|
275
|
+
broadcast(agent, plain);
|
|
276
|
+
onStateChange?.(agent, plain);
|
|
277
|
+
return result;
|
|
278
|
+
}
|
|
279
|
+
/** Replace one agent's state (e.g. restored by a persistence plugin). */
|
|
280
|
+
function importState(agent, raw) {
|
|
281
|
+
states.set(agent, deserializeState(raw));
|
|
282
|
+
install(agent);
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
mount,
|
|
286
|
+
update,
|
|
287
|
+
agents: () => agentsApi?.list() ?? [],
|
|
288
|
+
parentOf,
|
|
289
|
+
stateOf,
|
|
290
|
+
registerStateProvider,
|
|
291
|
+
stateProviders: () => providers.map((p) => p.name),
|
|
292
|
+
exportState: (agent) => serializeState(stateOf(agent)),
|
|
293
|
+
importState,
|
|
294
|
+
// null for an agent this plugin does not restrict (untracked or exempt).
|
|
295
|
+
allowFor: (agent) => (states.has(agent) && !isExempt(agent) ? allowFor(agent) : null),
|
|
296
|
+
isExempt: (agent) => isExempt(agent),
|
|
297
|
+
refresh: syncAll,
|
|
298
|
+
dispose() {
|
|
299
|
+
disposed = true;
|
|
300
|
+
for (const agent of [...installed.keys()])
|
|
301
|
+
forget(agent);
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=visibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility.js","sourceRoot":"","sources":["../src/visibility.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,52 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvy-jsd/dsh-tool-manager",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Browse every DeepSeek Harness tool as a directory (category -> group -> tool) and load tools on demand per agent. Provides the toolCatalog service for classifier, metadata, hook and visibility extensions.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "lvy-jsd",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "lib/index.js",
|
|
9
|
+
"types": "lib/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./lib/index.d.ts",
|
|
13
|
+
"default": "./lib/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"lib",
|
|
19
|
+
"!lib/.tsbuildinfo",
|
|
20
|
+
"src",
|
|
21
|
+
"cordis.patch.yml",
|
|
22
|
+
"README.md",
|
|
23
|
+
"LICENSE"
|
|
24
|
+
],
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc -p .",
|
|
30
|
+
"prepack": "tsc -b ."
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"dsh",
|
|
34
|
+
"deepseek-harness",
|
|
35
|
+
"tools",
|
|
36
|
+
"mcp",
|
|
37
|
+
"lazy-loading"
|
|
38
|
+
],
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"@deepseek-ai/dsh-tools": ">=0.1.5-rc.2 <0.3.0-0"
|
|
41
|
+
},
|
|
42
|
+
"dsh": {
|
|
43
|
+
"bundle": {
|
|
44
|
+
"patch": "./cordis.patch.yml"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "https://github.com/lvy-jsd/dsh-tool-manager.git",
|
|
50
|
+
"directory": "packages/dsh-tool-manager"
|
|
51
|
+
}
|
|
52
|
+
}
|