@anionex/dsh-tool-search 0.1.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.
Files changed (62) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +160 -0
  4. package/README.zh.md +160 -0
  5. package/cordis.patch.yml +3 -0
  6. package/docs/benchmark-results.json +51 -0
  7. package/lib/bm25.js +83 -0
  8. package/lib/bm25.js.map +1 -0
  9. package/lib/catalog.js +53 -0
  10. package/lib/catalog.js.map +1 -0
  11. package/lib/client.js +388 -0
  12. package/lib/client.js.map +1 -0
  13. package/lib/index.js +24 -0
  14. package/lib/index.js.map +1 -0
  15. package/lib/runtime.js +286 -0
  16. package/lib/runtime.js.map +1 -0
  17. package/lib/settings.js +50 -0
  18. package/lib/settings.js.map +1 -0
  19. package/lib/shared.js +40 -0
  20. package/lib/shared.js.map +1 -0
  21. package/lib/types/bm25.d.ts +20 -0
  22. package/lib/types/bm25.d.ts.map +1 -0
  23. package/lib/types/catalog.d.ts +26 -0
  24. package/lib/types/catalog.d.ts.map +1 -0
  25. package/lib/types/client/index.d.ts +65 -0
  26. package/lib/types/client/index.d.ts.map +1 -0
  27. package/lib/types/index.d.ts +14 -0
  28. package/lib/types/index.d.ts.map +1 -0
  29. package/lib/types/runtime.d.ts +37 -0
  30. package/lib/types/runtime.d.ts.map +1 -0
  31. package/lib/types/settings.d.ts +16 -0
  32. package/lib/types/settings.d.ts.map +1 -0
  33. package/lib/types/shared.d.ts +31 -0
  34. package/lib/types/shared.d.ts.map +1 -0
  35. package/lib/types/web.d.ts +5 -0
  36. package/lib/types/web.d.ts.map +1 -0
  37. package/lib/web.js +28 -0
  38. package/lib/web.js.map +1 -0
  39. package/package.json +149 -0
  40. package/pnpm-workspace.yaml +11 -0
  41. package/scripts/benchmark.mjs +124 -0
  42. package/scripts/profile-e2e.mjs +366 -0
  43. package/scripts/validate.mjs +170 -0
  44. package/src/bm25.ts +104 -0
  45. package/src/catalog.ts +72 -0
  46. package/src/client/index.tsx +344 -0
  47. package/src/index.ts +32 -0
  48. package/src/runtime.ts +326 -0
  49. package/src/settings.ts +63 -0
  50. package/src/shared.ts +63 -0
  51. package/src/web.ts +34 -0
  52. package/src/wink-porter2-stemmer.d.ts +3 -0
  53. package/tests/bm25.spec.ts +75 -0
  54. package/tests/catalog.spec.ts +63 -0
  55. package/tests/client.spec.tsx +39 -0
  56. package/tests/execution-regression.spec.ts +200 -0
  57. package/tests/runtime.spec.ts +271 -0
  58. package/tests/settings.spec.ts +33 -0
  59. package/tsconfig.client.json +31 -0
  60. package/tsconfig.json +30 -0
  61. package/tsconfig.test.json +23 -0
  62. package/tsdown.config.mjs +37 -0
package/lib/runtime.js ADDED
@@ -0,0 +1,286 @@
1
+ /** Agent-local selected sets and model-visible tool filtering. */
2
+ import { defineTool, } from '@deepseek-ai/dsh-tools';
3
+ import { Bm25Index } from "./bm25.js";
4
+ import { buildCatalog } from "./catalog.js";
5
+ import { ToolPolicyResolver, normalizeSettings } from "./settings.js";
6
+ import { MAX_RESULT_LIMIT, TOOL_SEARCH_NAME, } from "./shared.js";
7
+ const RESULT_SCHEMA_VERSION = 1;
8
+ const MAX_QUERY_LENGTH = 4096;
9
+ const MAX_DESCRIPTION_LENGTH = 240;
10
+ function compareNames(left, right) {
11
+ return left < right ? -1 : left > right ? 1 : 0;
12
+ }
13
+ function summarize(description) {
14
+ const normalized = description.replace(/\s+/gu, ' ').trim();
15
+ if (normalized.length <= MAX_DESCRIPTION_LENGTH)
16
+ return normalized;
17
+ return `${normalized.slice(0, MAX_DESCRIPTION_LENGTH - 3)}...`;
18
+ }
19
+ function parseSelectionResult(value) {
20
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
21
+ return [];
22
+ const record = value;
23
+ if (record['schemaVersion'] !== RESULT_SCHEMA_VERSION || !Array.isArray(record['tools']))
24
+ return [];
25
+ const names = [];
26
+ for (const candidate of record['tools']) {
27
+ if (typeof candidate !== 'object' || candidate === null || Array.isArray(candidate))
28
+ continue;
29
+ const name = candidate['name'];
30
+ if (typeof name === 'string' && name.length > 0)
31
+ names.push(name);
32
+ }
33
+ return names;
34
+ }
35
+ function sessionEvents(agent) {
36
+ const session = agent.session;
37
+ if (typeof session.snapshotEvents === 'function')
38
+ return session.snapshotEvents();
39
+ return Array.isArray(session.events) ? session.events : [];
40
+ }
41
+ function selectedFromSession(agent) {
42
+ const searchCalls = new Set();
43
+ const selected = new Set();
44
+ for (const rawEvent of sessionEvents(agent)) {
45
+ if (typeof rawEvent !== 'object' || rawEvent === null || Array.isArray(rawEvent))
46
+ continue;
47
+ const event = rawEvent;
48
+ if (event.type === 'tool/call' && event.data?.['name'] === TOOL_SEARCH_NAME) {
49
+ searchCalls.add(String(event.data['callId']));
50
+ continue;
51
+ }
52
+ if (event.type !== 'tool/result' || typeof event.data?.['message'] !== 'object' || event.data['message'] === null)
53
+ continue;
54
+ const content = event.data['message'].content;
55
+ const result = Array.isArray(content) ? content[0] : undefined;
56
+ if (typeof result !== 'object' || result === null || Array.isArray(result))
57
+ continue;
58
+ const resultRecord = result;
59
+ if (!searchCalls.has(String(resultRecord['toolCallId'])) || resultRecord['isError'] === true)
60
+ continue;
61
+ const blocks = resultRecord['content'];
62
+ if (!Array.isArray(blocks))
63
+ continue;
64
+ const text = blocks
65
+ .filter((block) => (typeof block === 'object'
66
+ && block !== null
67
+ && !Array.isArray(block)
68
+ && block['type'] === 'text'
69
+ && typeof block['text'] === 'string'))
70
+ .map(block => block.text)
71
+ .join('');
72
+ try {
73
+ for (const name of parseSelectionResult(JSON.parse(text)))
74
+ selected.add(name);
75
+ }
76
+ catch {
77
+ // Failed and legacy tool results are not successful selection transitions.
78
+ }
79
+ }
80
+ return selected;
81
+ }
82
+ function toolSectionName(sectionName) {
83
+ if (!sectionName.startsWith('tool:'))
84
+ return undefined;
85
+ const name = sectionName.slice('tool:'.length);
86
+ return name.length > 0 ? name : undefined;
87
+ }
88
+ export class ToolSearchRuntime {
89
+ ctx;
90
+ definition;
91
+ states = new Map();
92
+ policy;
93
+ settings;
94
+ generation = 0;
95
+ constructor(ctx, settings) {
96
+ this.ctx = ctx;
97
+ this.settings = normalizeSettings(settings);
98
+ this.policy = new ToolPolicyResolver(this.settings);
99
+ this.definition = this.createDefinition();
100
+ }
101
+ install() {
102
+ const disposers = [
103
+ this.ctx.on('agent/created', ({ agent }) => { this.attach(agent); }),
104
+ this.ctx.on('agent/disposed', ({ agent }) => { this.detach(agent); }),
105
+ this.ctx.on('tools/result', (exec, result) => { this.commitSelection(exec, result); }),
106
+ this.ctx.on('tools/change', () => { this.generation += 1; }),
107
+ this.ctx.on('system-prompt/change', () => { this.generation += 1; }),
108
+ ];
109
+ for (const agent of this.ctx.agents.list())
110
+ this.attach(agent);
111
+ return () => {
112
+ for (const state of this.states.values())
113
+ state.disposeAssembly();
114
+ this.states.clear();
115
+ for (const dispose of disposers.reverse())
116
+ dispose();
117
+ };
118
+ }
119
+ updateSettings(value) {
120
+ this.settings = normalizeSettings(value);
121
+ this.policy.update(this.settings);
122
+ }
123
+ snapshot() {
124
+ const tools = new Map();
125
+ for (const entry of buildCatalog(this.ctx.tools.schemas()))
126
+ tools.set(entry.name, entry);
127
+ for (const state of this.states.values()) {
128
+ this.refreshCatalog(state);
129
+ for (const entry of state.catalog)
130
+ tools.set(entry.name, entry);
131
+ }
132
+ return {
133
+ schemaVersion: 1,
134
+ generation: this.generation,
135
+ tools: [...tools.values()].sort((left, right) => compareNames(left.name, right.name)).map(tool => ({
136
+ name: tool.name,
137
+ description: summarize(tool.description),
138
+ policy: this.policy.classify(tool.name),
139
+ selectedBy: [...this.states.values()]
140
+ .filter(state => state.selected.has(tool.name))
141
+ .map(state => String(state.agent.id))
142
+ .sort(compareNames),
143
+ })),
144
+ };
145
+ }
146
+ selectedFor(agent) {
147
+ return this.requireState(agent).selected;
148
+ }
149
+ createDefinition() {
150
+ return defineTool({
151
+ name: TOOL_SEARCH_NAME,
152
+ description: 'Search deferred tool metadata with deterministic local BM25. Matching tools become available by their real names on the next model call. Results contain summaries, not full schemas.',
153
+ parameters: {
154
+ query: {
155
+ type: 'string',
156
+ required: true,
157
+ description: 'Search query for deferred tools.',
158
+ },
159
+ limit: {
160
+ type: 'integer',
161
+ description: 'Maximum number of tools to return. Defaults to 5.',
162
+ },
163
+ },
164
+ output: {
165
+ schema: {
166
+ type: 'object',
167
+ additionalProperties: false,
168
+ properties: {
169
+ schemaVersion: { type: 'integer', const: RESULT_SCHEMA_VERSION, required: true },
170
+ query: { type: 'string', required: true },
171
+ tools: {
172
+ type: 'array',
173
+ required: true,
174
+ items: {
175
+ type: 'object',
176
+ additionalProperties: false,
177
+ properties: {
178
+ name: { type: 'string', required: true },
179
+ description: { type: 'string', required: true },
180
+ score: { type: 'number', required: true },
181
+ },
182
+ },
183
+ },
184
+ },
185
+ },
186
+ render: (_args, value) => [{ type: 'text', text: JSON.stringify(value) }],
187
+ },
188
+ execute: (args, exec) => Promise.resolve(this.search(args, exec)),
189
+ finalizeContent: (_exec, result) => result.isError
190
+ ? undefined
191
+ : [{ type: 'text', text: JSON.stringify(result.value) }],
192
+ presentCall: args => ({
193
+ card: 'generic',
194
+ title: 'Search deferred tools',
195
+ kind: 'read',
196
+ rawInput: typeof args === 'object' && args !== null && 'query' in args
197
+ ? String(args.query)
198
+ : undefined,
199
+ }),
200
+ });
201
+ }
202
+ search(args, exec) {
203
+ const agent = exec.agent;
204
+ if (agent === undefined)
205
+ throw new Error(`${TOOL_SEARCH_NAME}: an Agent Session is required`);
206
+ const query = args.query.trim();
207
+ if (query.length === 0)
208
+ throw new Error(`${TOOL_SEARCH_NAME}: query must not be empty`);
209
+ if (query.length > MAX_QUERY_LENGTH)
210
+ throw new Error(`${TOOL_SEARCH_NAME}: query exceeds ${MAX_QUERY_LENGTH} characters`);
211
+ if (args.limit !== undefined && (!Number.isSafeInteger(args.limit) || args.limit < 1 || args.limit > MAX_RESULT_LIMIT)) {
212
+ throw new Error(`${TOOL_SEARCH_NAME}: limit must be an integer between 1 and ${MAX_RESULT_LIMIT}`);
213
+ }
214
+ const state = this.requireState(agent);
215
+ this.refreshCatalog(state);
216
+ const deferred = state.catalog.filter(tool => this.policy.classify(tool.name, state.selected) === 'deferred');
217
+ const index = new Bm25Index(deferred.map(tool => ({ id: tool, name: tool.name, text: tool.searchText })));
218
+ const limit = args.limit ?? this.settings.defaultLimit;
219
+ const tools = index.search(query, limit).map(match => ({
220
+ name: match.id.name,
221
+ description: summarize(match.id.description),
222
+ score: Number(match.score.toFixed(6)),
223
+ }));
224
+ return { schemaVersion: RESULT_SCHEMA_VERSION, query, tools };
225
+ }
226
+ commitSelection(exec, result) {
227
+ if (exec.name !== TOOL_SEARCH_NAME || exec.agent === undefined || result.isError)
228
+ return;
229
+ const state = this.requireState(exec.agent);
230
+ for (const name of parseSelectionResult(result.value))
231
+ state.selected.add(name);
232
+ }
233
+ attach(agent) {
234
+ if (this.states.has(agent))
235
+ return;
236
+ const selected = selectedFromSession(agent);
237
+ const state = {
238
+ agent,
239
+ selected,
240
+ catalog: [],
241
+ catalogGeneration: -1,
242
+ disposeAssembly: () => { },
243
+ };
244
+ state.disposeAssembly = agent.ctx.on('system-prompt/assemble', async (_assembly, _context, next) => this.filterAssembly(state, await next()), { prepend: true });
245
+ this.states.set(agent, state);
246
+ }
247
+ detach(agent) {
248
+ const state = this.states.get(agent);
249
+ if (state === undefined)
250
+ return;
251
+ this.states.delete(agent);
252
+ }
253
+ requireState(agent) {
254
+ this.attach(agent);
255
+ const state = this.states.get(agent);
256
+ if (state === undefined)
257
+ throw new Error(`${TOOL_SEARCH_NAME}: Agent state could not be initialized`);
258
+ return state;
259
+ }
260
+ refreshCatalog(state) {
261
+ if (state.catalogGeneration === this.generation)
262
+ return;
263
+ state.catalog = buildCatalog(this.ctx.tools.schemas(state.agent));
264
+ state.catalogGeneration = this.generation;
265
+ }
266
+ filterAssembly(state, assembly) {
267
+ if (assembly.sections.some(section => section.name === 'tools:sdk' && section.text.trim().length > 0)) {
268
+ throw new Error('dsh-tool-search requires native tool presentation; code/PTC and both modes are unsupported');
269
+ }
270
+ state.catalog = buildCatalog(assembly.tools);
271
+ state.catalogGeneration = this.generation;
272
+ const visible = new Set(assembly.tools
273
+ .map(tool => tool.name)
274
+ .filter(name => this.policy.classify(name, state.selected) === 'always'));
275
+ const hidden = new Set(assembly.tools.map(tool => tool.name).filter(name => !visible.has(name)));
276
+ return {
277
+ ...assembly,
278
+ tools: assembly.tools.filter(tool => visible.has(tool.name)),
279
+ sections: assembly.sections.filter(section => {
280
+ const name = toolSectionName(section.name);
281
+ return name === undefined || !hidden.has(name);
282
+ }),
283
+ };
284
+ }
285
+ }
286
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAKlE,OAAO,EACL,UAAU,GAKX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,YAAY,EAA8C,MAAM,cAAc,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,aAAa,CAAA;AAEpB,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAC7B,MAAM,sBAAsB,GAAG,GAAG,CAAA;AAsBlC,SAAS,YAAY,CAAC,IAAY,EAAE,KAAa;IAC/C,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB;IACpC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAC3D,IAAI,UAAU,CAAC,MAAM,IAAI,sBAAsB;QAAE,OAAO,UAAU,CAAA;IAClE,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAA;AAChE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAClF,MAAM,MAAM,GAAG,KAAgC,CAAA;IAC/C,IAAI,MAAM,CAAC,eAAe,CAAC,KAAK,qBAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,EAAE,CAAA;IACnG,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,SAAQ;QAC7F,MAAM,IAAI,GAAI,SAAqC,CAAC,MAAM,CAAC,CAAA;QAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,aAAa,CAAC,KAAY;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAGrB,CAAA;IACD,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,cAAc,EAAE,CAAA;IACjF,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;AAC5D,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAY;IACvC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,SAAQ;QAC1F,MAAM,KAAK,GAAG,QAA8D,CAAA;QAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAC5E,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC7C,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI;YAAE,SAAQ;QAC3H,MAAM,OAAO,GAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAA2B,CAAC,OAAO,CAAA;QACxE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC9D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,SAAQ;QACpF,MAAM,YAAY,GAAG,MAAiC,CAAA;QACtD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,IAAI;YAAE,SAAQ;QACtG,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,SAAQ;QACpC,MAAM,IAAI,GAAG,MAAM;aAChB,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CAAC,CAC1D,OAAO,KAAK,KAAK,QAAQ;eACtB,KAAK,KAAK,IAAI;eACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;eACpB,KAAiC,CAAC,MAAM,CAAC,KAAK,MAAM;eACrD,OAAQ,KAAiC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAClE,CAAC;aACD,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aACxB,IAAI,CAAC,EAAE,CAAC,CAAA;QACX,IAAI,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC/E,CAAC;QAAC,MAAM,CAAC;YACP,2EAA2E;QAC7E,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB;IAC1C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAA;IACtD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;AAC3C,CAAC;AAED,MAAM,OAAO,iBAAiB;IAQT;IAPV,UAAU,CAAgB;IAClB,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAA;IACrC,MAAM,CAAoB;IACnC,QAAQ,CAAoB;IAC5B,UAAU,GAAG,CAAC,CAAA;IAEtB,YACmB,GAAY,EAC7B,QAA4B;QADX,QAAG,GAAH,GAAG,CAAS;QAG7B,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;IAC3C,CAAC;IAED,OAAO;QACL,MAAM,SAAS,GAAG;YAChB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC;SACpE,CAAA;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9D,OAAO,GAAG,EAAE;YACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,eAAe,EAAE,CAAA;YACjE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;YACnB,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE;gBAAE,OAAO,EAAE,CAAA;QACtD,CAAC,CAAA;IACH,CAAC;IAED,cAAc,CAAC,KAAyB;QACtC,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAA;QACjD,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAsB,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC5G,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;YAC1B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO;gBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACjE,CAAC;QACD,OAAO;YACL,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjG,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;gBACxC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;qBAClC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBAC9C,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;qBACpC,IAAI,CAAC,YAAY,CAAC;aACtB,CAAC,CAAC;SACJ,CAAA;IACH,CAAC;IAED,WAAW,CAAC,KAAY;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAA;IAC1C,CAAC;IAEO,gBAAgB;QACtB,OAAO,UAAU,CAAC;YAChB,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,uLAAuL;YACpM,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,kCAAkC;iBAChD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,mDAAmD;iBACjE;aACF;YACD,MAAM,EAAE;gBACN,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,KAAK;oBAC3B,UAAU,EAAE;wBACV,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE;wBAChF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;wBACzC,KAAK,EAAE;4BACL,IAAI,EAAE,OAAO;4BACb,QAAQ,EAAE,IAAI;4BACd,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,oBAAoB,EAAE,KAAK;gCAC3B,UAAU,EAAE;oCACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oCACxC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oCAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iCAC1C;6BACF;yBACF;qBACF;iBACF;gBACD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;aAC1E;YACD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACjE,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO;gBAChD,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,IAAI;oBACpE,CAAC,CAAC,MAAM,CAAE,IAA2B,CAAC,KAAK,CAAC;oBAC5C,CAAC,CAAC,SAAS;aACd,CAAC;SACH,CAAC,CAAA;IACJ,CAAC;IAEO,MAAM,CAAC,IAAuC,EAAE,IAAoB;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,gCAAgC,CAAC,CAAA;QAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,2BAA2B,CAAC,CAAA;QACvF,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,mBAAmB,gBAAgB,aAAa,CAAC,CAAA;QACzH,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC;YACvH,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,4CAA4C,gBAAgB,EAAE,CAAC,CAAA;QACpG,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,CAAA;QAC7G,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;QACzG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAA;QACtD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI;YACnB,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC;YAC5C,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACtC,CAAC,CAAC,CAAA;QACH,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IAC/D,CAAC;IAEO,eAAe,CAAC,IAA6B,EAAE,MAAqC;QAC1F,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO;YAAE,OAAM;QACxF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3C,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACjF,CAAC;IAEO,MAAM,CAAC,KAAY;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAM;QAClC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;QAC3C,MAAM,KAAK,GAAG;YACZ,KAAK;YACL,QAAQ;YACR,OAAO,EAAE,EAAE;YACX,iBAAiB,EAAE,CAAC,CAAC;YACrB,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;SAC1B,CAAA;QACD,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAClC,wBAAwB,EACxB,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,EAC7E,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/B,CAAC;IAEO,MAAM,CAAC,KAAY;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAEO,YAAY,CAAC,KAAY;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,wCAAwC,CAAC,CAAA;QACrG,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,cAAc,CAAC,KAAiB;QACtC,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI,CAAC,UAAU;YAAE,OAAM;QACvD,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAqB,CAAC,CAAA;QACrF,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAA;IAC3C,CAAC;IAEO,cAAc,CAAC,KAAiB,EAAE,QAAwB;QAChE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YACtG,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAA;QAC/G,CAAC;QACD,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAyB,CAAC,CAAA;QAChE,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAA;QACzC,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,QAAQ,CAAC,KAAK;aACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;aACtB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAC3E,CAAA;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAChG,OAAO;YACL,GAAG,QAAQ;YACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;gBAC3C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC1C,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAChD,CAAC,CAAC;SACH,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ /** Validated Host settings and policy resolution. */
2
+ import z from '@deepseek-ai/schemastery';
3
+ import { DEFAULT_CORE_TOOLS, DEFAULT_RESULT_LIMIT, MAX_RESULT_LIMIT, TOOL_SEARCH_NAME, TOOL_SEARCH_SETTINGS_NAMESPACE, } from "./shared.js";
4
+ export const TOOL_SEARCH_SETTINGS_NS = TOOL_SEARCH_SETTINGS_NAMESPACE;
5
+ export const Config = z.object({
6
+ defaultLimit: z.number().step(1).min(1).max(MAX_RESULT_LIMIT).default(DEFAULT_RESULT_LIMIT),
7
+ alwaysVisible: z.array(z.string()).default([]),
8
+ neverSearch: z.array(z.string()).default([]),
9
+ });
10
+ function normalizeNames(names) {
11
+ const normalized = new Set();
12
+ for (const value of names) {
13
+ const name = value.trim();
14
+ if (name.length > 0)
15
+ normalized.add(name);
16
+ }
17
+ return [...normalized].sort();
18
+ }
19
+ export function normalizeSettings(value) {
20
+ const defaultLimit = Number.isSafeInteger(value.defaultLimit)
21
+ ? Math.min(MAX_RESULT_LIMIT, Math.max(1, value.defaultLimit))
22
+ : DEFAULT_RESULT_LIMIT;
23
+ return {
24
+ defaultLimit,
25
+ alwaysVisible: normalizeNames(value.alwaysVisible),
26
+ neverSearch: normalizeNames(value.neverSearch).filter(name => name !== TOOL_SEARCH_NAME),
27
+ };
28
+ }
29
+ export class ToolPolicyResolver {
30
+ core = new Set(DEFAULT_CORE_TOOLS);
31
+ always = new Set();
32
+ blocked = new Set();
33
+ constructor(settings) {
34
+ this.update(settings);
35
+ }
36
+ update(settings) {
37
+ this.always = new Set(settings.alwaysVisible);
38
+ this.blocked = new Set(settings.neverSearch);
39
+ }
40
+ classify(name, selected) {
41
+ if (name === TOOL_SEARCH_NAME)
42
+ return 'always';
43
+ if (this.blocked.has(name))
44
+ return 'blocked';
45
+ if (this.core.has(name) || this.always.has(name) || selected?.has(name) === true)
46
+ return 'always';
47
+ return 'deferred';
48
+ }
49
+ }
50
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,8BAA8B,GAG/B,MAAM,aAAa,CAAA;AAEpB,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAAmD,CAAA;AAE1F,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,CAAC,MAAM,CAAC;IACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAC3F,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAA;AAEF,SAAS,cAAc,CAAC,KAAwB;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;IACpC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QACzB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;QAC3D,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7D,CAAC,CAAC,oBAAoB,CAAA;IACxB,OAAO;QACL,YAAY;QACZ,aAAa,EAAE,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC;QAClD,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC;KACzF,CAAA;AACH,CAAC;AAED,MAAM,OAAO,kBAAkB;IACZ,IAAI,GAAG,IAAI,GAAG,CAAS,kBAAkB,CAAC,CAAA;IACnD,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;IAC1B,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IAEnC,YAAY,QAA4B;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,CAAC,QAA4B;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC9C,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,QAA8B;QACnD,IAAI,IAAI,KAAK,gBAAgB;YAAE,OAAO,QAAQ,CAAA;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAA;QAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,QAAQ,CAAA;QACjG,OAAO,UAAU,CAAA;IACnB,CAAC;CACF"}
package/lib/shared.js ADDED
@@ -0,0 +1,40 @@
1
+ /** Values shared by the Host runtime and Web settings client. */
2
+ export const TOOL_SEARCH_NAME = 'tool_search';
3
+ export const TOOL_SEARCH_SETTINGS_NAMESPACE = 'tool-search';
4
+ export const TOOL_SEARCH_CATALOG_ROUTE = '/_dsh/tool-search/catalog';
5
+ export const DEFAULT_RESULT_LIMIT = 5;
6
+ export const MAX_RESULT_LIMIT = 20;
7
+ /**
8
+ * Stable bootstrap surface for current DSH releases. Unknown future first-party
9
+ * names are deferred until this list or the user allowlist is updated because
10
+ * ToolDefinition does not expose package provenance.
11
+ */
12
+ export const DEFAULT_CORE_TOOLS = Object.freeze([
13
+ 'apply_patch',
14
+ 'ask_user_question',
15
+ 'bash',
16
+ 'create_goal',
17
+ 'dsh_im_return_file',
18
+ 'exit_plan_mode',
19
+ 'get_goal',
20
+ 'interrupt_agent',
21
+ 'job_kill',
22
+ 'job_list',
23
+ 'job_output',
24
+ 'list_agents',
25
+ 'ralph',
26
+ 'report',
27
+ 'send_message',
28
+ 'skill',
29
+ 'subagent',
30
+ 'subagent_fork',
31
+ 'todo_write',
32
+ 'update_goal',
33
+ 'workflow',
34
+ ]);
35
+ export const DEFAULT_SETTINGS = Object.freeze({
36
+ defaultLimit: DEFAULT_RESULT_LIMIT,
37
+ alwaysVisible: [],
38
+ neverSearch: [],
39
+ });
40
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAA;AAC7C,MAAM,CAAC,MAAM,8BAA8B,GAAG,aAAa,CAAA;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAA;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAA;AACrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,aAAa;IACb,mBAAmB;IACnB,MAAM;IACN,aAAa;IACb,oBAAoB;IACpB,gBAAgB;IAChB,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,UAAU;IACV,YAAY;IACZ,aAAa;IACb,OAAO;IACP,QAAQ;IACR,cAAc;IACd,OAAO;IACP,UAAU;IACV,eAAe;IACf,YAAY;IACZ,aAAa;IACb,UAAU;CACF,CAAC,CAAA;AAQX,MAAM,CAAC,MAAM,gBAAgB,GAAiC,MAAM,CAAC,MAAM,CAAC;IAC1E,YAAY,EAAE,oBAAoB;IAClC,aAAa,EAAE,EAAE;IACjB,WAAW,EAAE,EAAE;CAChB,CAAC,CAAA"}
@@ -0,0 +1,20 @@
1
+ /** Deterministic local BM25, aligned with Codex's bm25 2.3.2 defaults. */
2
+ export declare function tokenize(value: string): string[];
3
+ export interface Bm25Document<T> {
4
+ id: T;
5
+ name: string;
6
+ text: string;
7
+ }
8
+ export interface Bm25Match<T> {
9
+ id: T;
10
+ name: string;
11
+ score: number;
12
+ }
13
+ export declare class Bm25Index<T> {
14
+ private readonly documents;
15
+ private readonly frequencies;
16
+ private readonly averageLength;
17
+ constructor(documents: readonly Bm25Document<T>[]);
18
+ search(query: string, limit: number): Bm25Match<T>[];
19
+ }
20
+ //# sourceMappingURL=bm25.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bm25.d.ts","sourceRoot":"","sources":["../../src/bm25.ts"],"names":[],"mappings":"AAAA,0EAA0E;AA8B1E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAGhD;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,EAAE,EAAE,CAAC,CAAA;IACL,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,EAAE,EAAE,CAAC,CAAA;IACL,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAQD,qBAAa,SAAS,CAAC,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;gBAE1B,SAAS,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE;IAajD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE;CAgCrD"}
@@ -0,0 +1,26 @@
1
+ /** Codex-compatible tool search document construction. */
2
+ export interface JsonSchemaLike {
3
+ description?: unknown;
4
+ properties?: unknown;
5
+ items?: unknown;
6
+ anyOf?: unknown;
7
+ }
8
+ export interface ToolSchemaLike {
9
+ name: string;
10
+ description?: string;
11
+ parameters: unknown;
12
+ }
13
+ export interface ToolCatalogEntry {
14
+ name: string;
15
+ description: string;
16
+ parameters: unknown;
17
+ searchText: string;
18
+ }
19
+ /**
20
+ * Append descriptions and property names in the same recursive shape used by
21
+ * Codex: description, sorted object properties, array items, then anyOf.
22
+ */
23
+ export declare function appendSchemaSearchText(schema: unknown, parts: string[]): void;
24
+ export declare function toolSearchText(tool: ToolSchemaLike): string;
25
+ export declare function buildCatalog(tools: readonly ToolSchemaLike[]): ToolCatalogEntry[];
26
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/catalog.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAQD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAgB7E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAO3D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAYjF"}
@@ -0,0 +1,65 @@
1
+ /** DSH Web settings surface for deferred tool policy. */
2
+ import { type ReactNode } from 'react';
3
+ import { type ToolSearchSettings } from '../shared.ts';
4
+ interface SettingsScopeSnapshot<T> {
5
+ status: 'loading' | 'ready' | 'unavailable';
6
+ value: T | undefined;
7
+ writable: boolean;
8
+ }
9
+ interface SettingsScope<T> {
10
+ getSnapshot(): SettingsScopeSnapshot<T>;
11
+ subscribe(listener: () => void): () => void;
12
+ set(field: string, value: unknown): Promise<void>;
13
+ }
14
+ type Disposer = () => void;
15
+ interface ClientContext {
16
+ effect(setup: () => Disposer | void, label: string): void;
17
+ locale: {
18
+ register(namespace: string, catalogs: Record<string, Record<string, string>>): Disposer;
19
+ bind(namespace: string): (key: string) => string;
20
+ };
21
+ settingsScope: {
22
+ bind<T>(options: {
23
+ namespace: string;
24
+ }): SettingsScope<T>;
25
+ };
26
+ slots: {
27
+ inject(name: string, callback: () => Disposer): Disposer;
28
+ register<P>(options: {
29
+ name: string;
30
+ id: string;
31
+ order: number;
32
+ label: () => string;
33
+ inject: () => P;
34
+ }, component: (props: P) => ReactNode): Disposer;
35
+ };
36
+ }
37
+ type Translate = (key: keyof typeof en) => string;
38
+ declare const en: {
39
+ nav: string;
40
+ topK: string;
41
+ alwaysVisible: string;
42
+ neverSearch: string;
43
+ catalog: string;
44
+ filter: string;
45
+ refresh: string;
46
+ tool: string;
47
+ policy: string;
48
+ selected: string;
49
+ defaultPolicy: string;
50
+ alwaysPolicy: string;
51
+ blockedPolicy: string;
52
+ loading: string;
53
+ empty: string;
54
+ saved: string;
55
+ onePerLine: string;
56
+ };
57
+ type SettingsProps = {
58
+ scope?: SettingsScope<ToolSearchSettings>;
59
+ t?: Translate;
60
+ };
61
+ export declare function ToolSearchSettingsSection({ scope, t }: SettingsProps): ReactNode;
62
+ export declare const inject: string[];
63
+ export declare function apply(ctx: ClientContext): void;
64
+ export {};
65
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AACd,OAAO,EASL,KAAK,kBAAkB,EACxB,MAAM,cAAc,CAAA;AAErB,UAAU,qBAAqB,CAAC,CAAC;IAC/B,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,aAAa,CAAA;IAC3C,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,UAAU,aAAa,CAAC,CAAC;IACvB,WAAW,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAA;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClD;AAED,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAA;AAE1B,UAAU,aAAa;IACrB,MAAM,CAAC,KAAK,EAAE,MAAM,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzD,MAAM,EAAE;QACN,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAA;QACvF,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;KACjD,CAAA;IACD,aAAa,EAAE;QACb,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;KAC1D,CAAA;IACD,KAAK,EAAE;QACL,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,GAAG,QAAQ,CAAA;QACxD,QAAQ,CAAC,CAAC,EACR,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAA;YACZ,EAAE,EAAE,MAAM,CAAA;YACV,KAAK,EAAE,MAAM,CAAA;YACb,KAAK,EAAE,MAAM,MAAM,CAAA;YACnB,MAAM,EAAE,MAAM,CAAC,CAAA;SAChB,EACD,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,SAAS,GACjC,QAAQ,CAAA;KACZ,CAAA;CACF;AAED,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,OAAO,EAAE,KAAK,MAAM,CAAA;AAEjD,QAAA,MAAM,EAAE;;;;;;;;;;;;;;;;;;CAkBP,CAAA;AAsED,KAAK,aAAa,GAAG;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;IACzC,CAAC,CAAC,EAAE,SAAS,CAAA;CACd,CAAA;AAED,wBAAgB,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,aAAa,GAAG,SAAS,CAqKhF;AAED,eAAO,MAAM,MAAM,UAAuC,CAAA;AAE1D,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAmB9C"}
@@ -0,0 +1,14 @@
1
+ /** DSH bundle entry for Codex-style deferred tool loading. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import { Config } from './settings.ts';
4
+ import type { ToolSearchSettings } from './shared.ts';
5
+ export declare const name = "@anionex/dsh-tool-search";
6
+ export declare const inject: string[];
7
+ export { Config };
8
+ export declare function apply(ctx: Context, config: ToolSearchSettings): void;
9
+ export { Bm25Index, tokenize } from './bm25.ts';
10
+ export { appendSchemaSearchText, buildCatalog, toolSearchText } from './catalog.ts';
11
+ export { ToolSearchRuntime } from './runtime.ts';
12
+ export { normalizeSettings, ToolPolicyResolver } from './settings.ts';
13
+ export * from './shared.ts';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,EAAE,MAAM,EAA2B,MAAM,eAAe,CAAA;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGrD,eAAO,MAAM,IAAI,6BAA6B,CAAA;AAC9C,eAAO,MAAM,MAAM,UAAkD,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,CAAA;AAEjB,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAUpE;AAED,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACrE,cAAc,aAAa,CAAA"}
@@ -0,0 +1,37 @@
1
+ /** Agent-local selected sets and model-visible tool filtering. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import type { Agent } from '@deepseek-ai/dsh-agent';
4
+ import { type ToolDefinition } from '@deepseek-ai/dsh-tools';
5
+ import { type CatalogSnapshot, type ToolSearchSettings } from './shared.ts';
6
+ export interface ToolSearchMatch {
7
+ name: string;
8
+ description: string;
9
+ score: number;
10
+ }
11
+ export interface ToolSearchResult {
12
+ schemaVersion: 1;
13
+ query: string;
14
+ tools: ToolSearchMatch[];
15
+ }
16
+ export declare class ToolSearchRuntime {
17
+ private readonly ctx;
18
+ readonly definition: ToolDefinition;
19
+ private readonly states;
20
+ private readonly policy;
21
+ private settings;
22
+ private generation;
23
+ constructor(ctx: Context, settings: ToolSearchSettings);
24
+ install(): () => void;
25
+ updateSettings(value: ToolSearchSettings): void;
26
+ snapshot(): CatalogSnapshot;
27
+ selectedFor(agent: Agent): ReadonlySet<string>;
28
+ private createDefinition;
29
+ private search;
30
+ private commitSelection;
31
+ private attach;
32
+ private detach;
33
+ private requireState;
34
+ private refreshCatalog;
35
+ private filterAssembly;
36
+ }
37
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,wBAAwB,CAAA;AAI/B,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAA;AAMpB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,CAAC,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,eAAe,EAAE,CAAA;CACzB;AAqFD,qBAAa,iBAAiB;IAQ1B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAPtB,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAA;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,UAAU,CAAI;gBAGH,GAAG,EAAE,OAAO,EAC7B,QAAQ,EAAE,kBAAkB;IAO9B,OAAO,IAAI,MAAM,IAAI;IAgBrB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAK/C,QAAQ,IAAI,eAAe;IAsB3B,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;IAI9C,OAAO,CAAC,gBAAgB;IAsDxB,OAAO,CAAC,MAAM;IAuBd,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,MAAM;IAkBd,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,cAAc;CAqBvB"}
@@ -0,0 +1,16 @@
1
+ /** Validated Host settings and policy resolution. */
2
+ import z from '@deepseek-ai/schemastery';
3
+ import type { SettingsNamespace } from '@deepseek-ai/dsh-settings';
4
+ import { type ToolPolicy, type ToolSearchSettings } from './shared.ts';
5
+ export declare const TOOL_SEARCH_SETTINGS_NS: SettingsNamespace;
6
+ export declare const Config: z<ToolSearchSettings>;
7
+ export declare function normalizeSettings(value: ToolSearchSettings): ToolSearchSettings;
8
+ export declare class ToolPolicyResolver {
9
+ private readonly core;
10
+ private always;
11
+ private blocked;
12
+ constructor(settings: ToolSearchSettings);
13
+ update(settings: ToolSearchSettings): void;
14
+ classify(name: string, selected?: ReadonlySet<string>): ToolPolicy;
15
+ }
16
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/settings.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAML,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAA;AAEpB,eAAO,MAAM,uBAAuB,EAAqC,iBAAiB,CAAA;AAE1F,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,kBAAkB,CAIvC,CAAA;AAWF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAS/E;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAAoB;gBAEvB,QAAQ,EAAE,kBAAkB;IAIxC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAK1C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,UAAU;CAMnE"}