@geohar/pi-svg-mcp 0.7.0 → 0.7.2
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.map +1 -1
- package/dist/index.js +105 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +117 -11
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAER,YAAY,EAIf,MAAM,SAAS,CAAA;AAmIhB,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAqGrD"}
|
package/dist/index.js
CHANGED
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
// entry — see mcp.json.example and the README; static, and unnecessary when
|
|
27
27
|
// combiner-served. The sharedserver resolution is ported from plugins/opencode.
|
|
28
28
|
import { spawnSync } from "node:child_process";
|
|
29
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
29
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
30
|
+
import { homedir } from "node:os";
|
|
30
31
|
import { dirname, join } from "node:path";
|
|
31
32
|
import { fileURLToPath } from "node:url";
|
|
32
33
|
import { resolveSharedserver } from "./sharedserver-resolve.js";
|
|
@@ -114,17 +115,28 @@ function resolveServeArgv(port) {
|
|
|
114
115
|
return { argv: ["uvx", spec, "--transport", "streamable-http", "--port", port] };
|
|
115
116
|
}
|
|
116
117
|
let attachment = null;
|
|
117
|
-
|
|
118
|
+
/** Process-global guard — jiti loads extensions with moduleCache:false, so every
|
|
119
|
+
* session bind (parent + each subagent child) re-instantiates this module with
|
|
120
|
+
* fresh state; a module-level flag resets and stacks another handler per bind.
|
|
121
|
+
* Symbol.for survives the isolation, installing the handlers once per process. */
|
|
122
|
+
const CLEANUP_GUARD = Symbol.for("pi-svg-mcp:cleanup-installed");
|
|
118
123
|
function installProcessCleanup() {
|
|
119
|
-
|
|
124
|
+
const g = globalThis;
|
|
125
|
+
if (g[CLEANUP_GUARD])
|
|
120
126
|
return;
|
|
121
|
-
|
|
127
|
+
g[CLEANUP_GUARD] = true;
|
|
122
128
|
process.on("exit", () => detach());
|
|
123
129
|
for (const sig of ["SIGINT", "SIGTERM", "SIGHUP"]) {
|
|
124
|
-
|
|
130
|
+
const handler = () => {
|
|
125
131
|
detach();
|
|
132
|
+
// Remove our listener before re-raising: re-killing with the handler
|
|
133
|
+
// still installed re-delivers the signal to it forever (loop verified —
|
|
134
|
+
// ctrl+c wedged pi instead of exiting). Gone, the re-raise falls
|
|
135
|
+
// through to the default disposition and terminates.
|
|
136
|
+
process.removeListener(sig, handler);
|
|
126
137
|
process.kill(process.pid, sig);
|
|
127
|
-
}
|
|
138
|
+
};
|
|
139
|
+
process.on(sig, handler);
|
|
128
140
|
}
|
|
129
141
|
}
|
|
130
142
|
function detach() {
|
|
@@ -151,15 +163,19 @@ export default function svgMcp(pi) {
|
|
|
151
163
|
});
|
|
152
164
|
// ── /svg-mcp command: inspect the extension (verb: system-prompt) ──
|
|
153
165
|
pi.registerCommand("svg-mcp", {
|
|
154
|
-
description: "svg-mcp extension —
|
|
166
|
+
description: "svg-mcp extension — verbs: system-prompt (show the injected directive), install-config [path] (write mcp.json)",
|
|
155
167
|
getArgumentCompletions: (prefix) => completeVerbs(prefix),
|
|
156
168
|
handler: (args, ctx) => {
|
|
157
|
-
const verb = args.trim();
|
|
169
|
+
const [verb, ...rest] = args.trim().split(/\s+/);
|
|
158
170
|
if (verb === "" || verb === "system-prompt") {
|
|
159
171
|
showDirective(ctx, "svg-mcp", SVG_DIAGRAM_DIRECTIVE, wantInstructions);
|
|
160
172
|
return;
|
|
161
173
|
}
|
|
162
|
-
|
|
174
|
+
if (verb === "install-config") {
|
|
175
|
+
installConfig(ctx, rest.join(" ") || undefined);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
ctx.ui?.notify?.(`svg-mcp: unknown verb "${verb}". Try: system-prompt, install-config`, "warn");
|
|
163
179
|
},
|
|
164
180
|
});
|
|
165
181
|
// Combiner-served or manage=false: nothing to launch. The directive still applies.
|
|
@@ -224,12 +240,91 @@ export default function svgMcp(pi) {
|
|
|
224
240
|
// directive this extension injects — the show-command pattern from pi-custom-system-prompt,
|
|
225
241
|
// since `before_agent_start` injections are per-turn and never appear in Pi's own
|
|
226
242
|
// `/system-prompt` (which reports the base prompt only).
|
|
227
|
-
const COMMAND_VERBS = ["system-prompt"];
|
|
243
|
+
const COMMAND_VERBS = ["system-prompt", "install-config"];
|
|
228
244
|
function completeVerbs(prefix) {
|
|
229
245
|
const p = prefix.trim();
|
|
230
246
|
const matches = COMMAND_VERBS.filter((v) => v.startsWith(p));
|
|
231
247
|
return matches.length ? matches.map((v) => ({ value: v, label: v })) : null;
|
|
232
248
|
}
|
|
249
|
+
// ── /svg-mcp install-config: write the pi-mcp-adapter mcp.json entry ──
|
|
250
|
+
// A USER-INVOKED write — on request, merge the svg-mcp entry into pi-mcp-adapter's
|
|
251
|
+
// mcp.json, wired for svg-mcp's optional inbound bearer auth:
|
|
252
|
+
//
|
|
253
|
+
// { "url": "…/mcp", "auth": "bearer", "bearerTokenEnv": "SVG_MCP_AUTH_TOKEN" }
|
|
254
|
+
//
|
|
255
|
+
// - auth:"bearer" → the adapter attaches `Authorization: Bearer <token>` (it gates the
|
|
256
|
+
// header on `auth === "bearer"`, NOT on bearerTokenEnv alone), AND makes
|
|
257
|
+
// supportsOAuth() false so a wrong/missing token surfaces as an honest 401 rather
|
|
258
|
+
// than a Dynamic-Client-Registration 404.
|
|
259
|
+
// - bearerTokenEnv → names the env var the token is read from at connect (nothing
|
|
260
|
+
// written to disk). The backend enforces only when SVG_MCP_AUTH_TOKEN is set on ITS
|
|
261
|
+
// side; unset ⇒ open, the env var is unset here too so no header is sent. The one
|
|
262
|
+
// shape is correct whether or not auth is enabled. Ported from mcp-companion's
|
|
263
|
+
// /mcp-combiner install-config.
|
|
264
|
+
function expandHome(p) {
|
|
265
|
+
if (p === "~")
|
|
266
|
+
return homedir();
|
|
267
|
+
if (p.startsWith("~/"))
|
|
268
|
+
return join(homedir(), p.slice(2));
|
|
269
|
+
return p;
|
|
270
|
+
}
|
|
271
|
+
/** The URL the adapter should reach svg-mcp at — 127.0.0.1:<port>/mcp with the same
|
|
272
|
+
* port defaults the backend serves on ($SVG_MCP_PORT, else 7731). */
|
|
273
|
+
function defaultSvgUrl() {
|
|
274
|
+
let port = DEFAULT_PORT;
|
|
275
|
+
const raw = env("SVG_MCP_PORT");
|
|
276
|
+
if (raw !== undefined) {
|
|
277
|
+
const n = Number(raw);
|
|
278
|
+
if (Number.isInteger(n) && n > 0)
|
|
279
|
+
port = n;
|
|
280
|
+
}
|
|
281
|
+
return `http://127.0.0.1:${port}/mcp`;
|
|
282
|
+
}
|
|
283
|
+
function installConfig(ctx, pathArg) {
|
|
284
|
+
const target = pathArg ? expandHome(pathArg) : join(homedir(), ".config", "mcp", "mcp.json");
|
|
285
|
+
const key = DEFAULT_NAME;
|
|
286
|
+
// Read + parse existing (tolerate absence; refuse to clobber non-JSON).
|
|
287
|
+
let doc = {};
|
|
288
|
+
if (existsSync(target)) {
|
|
289
|
+
try {
|
|
290
|
+
const parsed = JSON.parse(readFileSync(target, "utf8"));
|
|
291
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
292
|
+
ctx.ui?.notify?.(`svg-mcp: ${target} is not a JSON object; not overwriting`, "error");
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
doc = parsed;
|
|
296
|
+
}
|
|
297
|
+
catch (e) {
|
|
298
|
+
ctx.ui?.notify?.(`svg-mcp: ${target} is not valid JSON; not overwriting (${e})`, "error");
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const servers = (doc.mcpServers ??= {});
|
|
303
|
+
const prev = (servers[key] ?? {});
|
|
304
|
+
const before = JSON.stringify(prev);
|
|
305
|
+
// Preserve any existing url and other fields; only ensure the auth-wiring keys.
|
|
306
|
+
servers[key] = {
|
|
307
|
+
...prev,
|
|
308
|
+
url: typeof prev.url === "string" && prev.url ? prev.url : defaultSvgUrl(),
|
|
309
|
+
auth: "bearer",
|
|
310
|
+
bearerTokenEnv: "SVG_MCP_AUTH_TOKEN",
|
|
311
|
+
};
|
|
312
|
+
const existed = before !== "{}" && Object.keys(prev).length > 0;
|
|
313
|
+
const changed = before !== JSON.stringify(servers[key]);
|
|
314
|
+
try {
|
|
315
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
316
|
+
writeFileSync(target, `${JSON.stringify(doc, null, 2)}\n`, "utf8");
|
|
317
|
+
}
|
|
318
|
+
catch (e) {
|
|
319
|
+
ctx.ui?.notify?.(`svg-mcp: failed to write ${target} (${e})`, "error");
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
const what = !existed ? "added" : changed ? "updated" : "already configured";
|
|
323
|
+
ctx.ui?.notify?.(`svg-mcp: ${what} "${key}" in ${target}\n` +
|
|
324
|
+
`Sends "Authorization: Bearer $SVG_MCP_AUTH_TOKEN" when that env var is set ` +
|
|
325
|
+
`(auth:"bearer" both sends the token and suppresses OAuth probing). ` +
|
|
326
|
+
`Run /reload so pi-mcp-adapter re-reads mcp.json.`, "info");
|
|
327
|
+
}
|
|
233
328
|
const SHOW_LIMIT = 1600;
|
|
234
329
|
function showDirective(ctx, label, directive, enabled) {
|
|
235
330
|
if (!directive) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geohar/pi-svg-mcp",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "Pi extension: run the svg-mcp MCP server via sharedserver and inject the diagram-authoring directive. Pairs with pi-mcp-adapter, which makes svg-mcp's tools reachable from Pi.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/src/index.ts
CHANGED
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
// combiner-served. The sharedserver resolution is ported from plugins/opencode.
|
|
28
28
|
|
|
29
29
|
import { spawnSync } from "node:child_process"
|
|
30
|
-
import { existsSync, readFileSync } from "node:fs"
|
|
30
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"
|
|
31
|
+
import { homedir } from "node:os"
|
|
31
32
|
import { dirname, join } from "node:path"
|
|
32
33
|
import { fileURLToPath } from "node:url"
|
|
33
34
|
import type {
|
|
@@ -132,17 +133,29 @@ function resolveServeArgv(port: string): { argv: string[]; missing?: string } {
|
|
|
132
133
|
|
|
133
134
|
type Attachment = { binary: string; name: string }
|
|
134
135
|
let attachment: Attachment | null = null
|
|
135
|
-
|
|
136
|
+
|
|
137
|
+
/** Process-global guard — jiti loads extensions with moduleCache:false, so every
|
|
138
|
+
* session bind (parent + each subagent child) re-instantiates this module with
|
|
139
|
+
* fresh state; a module-level flag resets and stacks another handler per bind.
|
|
140
|
+
* Symbol.for survives the isolation, installing the handlers once per process. */
|
|
141
|
+
const CLEANUP_GUARD = Symbol.for("pi-svg-mcp:cleanup-installed")
|
|
136
142
|
|
|
137
143
|
function installProcessCleanup() {
|
|
138
|
-
|
|
139
|
-
|
|
144
|
+
const g = globalThis as Record<symbol, boolean | undefined>
|
|
145
|
+
if (g[CLEANUP_GUARD]) return
|
|
146
|
+
g[CLEANUP_GUARD] = true
|
|
140
147
|
process.on("exit", () => detach())
|
|
141
148
|
for (const sig of ["SIGINT", "SIGTERM", "SIGHUP"] as NodeJS.Signals[]) {
|
|
142
|
-
|
|
149
|
+
const handler = () => {
|
|
143
150
|
detach()
|
|
151
|
+
// Remove our listener before re-raising: re-killing with the handler
|
|
152
|
+
// still installed re-delivers the signal to it forever (loop verified —
|
|
153
|
+
// ctrl+c wedged pi instead of exiting). Gone, the re-raise falls
|
|
154
|
+
// through to the default disposition and terminates.
|
|
155
|
+
process.removeListener(sig, handler)
|
|
144
156
|
process.kill(process.pid, sig)
|
|
145
|
-
}
|
|
157
|
+
}
|
|
158
|
+
process.on(sig, handler)
|
|
146
159
|
}
|
|
147
160
|
}
|
|
148
161
|
|
|
@@ -171,15 +184,20 @@ export default function svgMcp(pi: ExtensionAPI): void {
|
|
|
171
184
|
|
|
172
185
|
// ── /svg-mcp command: inspect the extension (verb: system-prompt) ──
|
|
173
186
|
pi.registerCommand("svg-mcp", {
|
|
174
|
-
description:
|
|
187
|
+
description:
|
|
188
|
+
"svg-mcp extension — verbs: system-prompt (show the injected directive), install-config [path] (write mcp.json)",
|
|
175
189
|
getArgumentCompletions: (prefix) => completeVerbs(prefix),
|
|
176
190
|
handler: (args, ctx) => {
|
|
177
|
-
const verb = args.trim()
|
|
191
|
+
const [verb, ...rest] = args.trim().split(/\s+/)
|
|
178
192
|
if (verb === "" || verb === "system-prompt") {
|
|
179
193
|
showDirective(ctx, "svg-mcp", SVG_DIAGRAM_DIRECTIVE, wantInstructions)
|
|
180
194
|
return
|
|
181
195
|
}
|
|
182
|
-
|
|
196
|
+
if (verb === "install-config") {
|
|
197
|
+
installConfig(ctx, rest.join(" ") || undefined)
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
ctx.ui?.notify?.(`svg-mcp: unknown verb "${verb}". Try: system-prompt, install-config`, "warn")
|
|
183
201
|
},
|
|
184
202
|
})
|
|
185
203
|
|
|
@@ -210,7 +228,10 @@ export default function svgMcp(pi: ExtensionAPI): void {
|
|
|
210
228
|
const port = env("SVG_MCP_PORT") ?? String(DEFAULT_PORT)
|
|
211
229
|
const { argv, missing } = resolveServeArgv(port)
|
|
212
230
|
if (missing) {
|
|
213
|
-
log(
|
|
231
|
+
log(
|
|
232
|
+
"error",
|
|
233
|
+
`\`${missing}\` not on PATH; install uv (https://docs.astral.sh/uv/), or PI_SVG_MCP_MANAGE=false`,
|
|
234
|
+
)
|
|
214
235
|
return
|
|
215
236
|
}
|
|
216
237
|
|
|
@@ -256,13 +277,98 @@ export default function svgMcp(pi: ExtensionAPI): void {
|
|
|
256
277
|
// directive this extension injects — the show-command pattern from pi-custom-system-prompt,
|
|
257
278
|
// since `before_agent_start` injections are per-turn and never appear in Pi's own
|
|
258
279
|
// `/system-prompt` (which reports the base prompt only).
|
|
259
|
-
const COMMAND_VERBS = ["system-prompt"]
|
|
280
|
+
const COMMAND_VERBS = ["system-prompt", "install-config"]
|
|
260
281
|
function completeVerbs(prefix: string): AutocompleteItem[] | null {
|
|
261
282
|
const p = prefix.trim()
|
|
262
283
|
const matches = COMMAND_VERBS.filter((v) => v.startsWith(p))
|
|
263
284
|
return matches.length ? matches.map((v) => ({ value: v, label: v })) : null
|
|
264
285
|
}
|
|
265
286
|
|
|
287
|
+
// ── /svg-mcp install-config: write the pi-mcp-adapter mcp.json entry ──
|
|
288
|
+
// A USER-INVOKED write — on request, merge the svg-mcp entry into pi-mcp-adapter's
|
|
289
|
+
// mcp.json, wired for svg-mcp's optional inbound bearer auth:
|
|
290
|
+
//
|
|
291
|
+
// { "url": "…/mcp", "auth": "bearer", "bearerTokenEnv": "SVG_MCP_AUTH_TOKEN" }
|
|
292
|
+
//
|
|
293
|
+
// - auth:"bearer" → the adapter attaches `Authorization: Bearer <token>` (it gates the
|
|
294
|
+
// header on `auth === "bearer"`, NOT on bearerTokenEnv alone), AND makes
|
|
295
|
+
// supportsOAuth() false so a wrong/missing token surfaces as an honest 401 rather
|
|
296
|
+
// than a Dynamic-Client-Registration 404.
|
|
297
|
+
// - bearerTokenEnv → names the env var the token is read from at connect (nothing
|
|
298
|
+
// written to disk). The backend enforces only when SVG_MCP_AUTH_TOKEN is set on ITS
|
|
299
|
+
// side; unset ⇒ open, the env var is unset here too so no header is sent. The one
|
|
300
|
+
// shape is correct whether or not auth is enabled. Ported from mcp-companion's
|
|
301
|
+
// /mcp-combiner install-config.
|
|
302
|
+
|
|
303
|
+
function expandHome(p: string): string {
|
|
304
|
+
if (p === "~") return homedir()
|
|
305
|
+
if (p.startsWith("~/")) return join(homedir(), p.slice(2))
|
|
306
|
+
return p
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/** The URL the adapter should reach svg-mcp at — 127.0.0.1:<port>/mcp with the same
|
|
310
|
+
* port defaults the backend serves on ($SVG_MCP_PORT, else 7731). */
|
|
311
|
+
function defaultSvgUrl(): string {
|
|
312
|
+
let port = DEFAULT_PORT
|
|
313
|
+
const raw = env("SVG_MCP_PORT")
|
|
314
|
+
if (raw !== undefined) {
|
|
315
|
+
const n = Number(raw)
|
|
316
|
+
if (Number.isInteger(n) && n > 0) port = n
|
|
317
|
+
}
|
|
318
|
+
return `http://127.0.0.1:${port}/mcp`
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function installConfig(ctx: ExtensionCommandContext, pathArg?: string): void {
|
|
322
|
+
const target = pathArg ? expandHome(pathArg) : join(homedir(), ".config", "mcp", "mcp.json")
|
|
323
|
+
const key = DEFAULT_NAME
|
|
324
|
+
|
|
325
|
+
// Read + parse existing (tolerate absence; refuse to clobber non-JSON).
|
|
326
|
+
let doc: Record<string, unknown> = {}
|
|
327
|
+
if (existsSync(target)) {
|
|
328
|
+
try {
|
|
329
|
+
const parsed = JSON.parse(readFileSync(target, "utf8"))
|
|
330
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
331
|
+
ctx.ui?.notify?.(`svg-mcp: ${target} is not a JSON object; not overwriting`, "error")
|
|
332
|
+
return
|
|
333
|
+
}
|
|
334
|
+
doc = parsed as Record<string, unknown>
|
|
335
|
+
} catch (e) {
|
|
336
|
+
ctx.ui?.notify?.(`svg-mcp: ${target} is not valid JSON; not overwriting (${e})`, "error")
|
|
337
|
+
return
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const servers = (doc.mcpServers ??= {}) as Record<string, Record<string, unknown>>
|
|
342
|
+
const prev = (servers[key] ?? {}) as Record<string, unknown>
|
|
343
|
+
const before = JSON.stringify(prev)
|
|
344
|
+
// Preserve any existing url and other fields; only ensure the auth-wiring keys.
|
|
345
|
+
servers[key] = {
|
|
346
|
+
...prev,
|
|
347
|
+
url: typeof prev.url === "string" && prev.url ? prev.url : defaultSvgUrl(),
|
|
348
|
+
auth: "bearer",
|
|
349
|
+
bearerTokenEnv: "SVG_MCP_AUTH_TOKEN",
|
|
350
|
+
}
|
|
351
|
+
const existed = before !== "{}" && Object.keys(prev).length > 0
|
|
352
|
+
const changed = before !== JSON.stringify(servers[key])
|
|
353
|
+
|
|
354
|
+
try {
|
|
355
|
+
mkdirSync(dirname(target), { recursive: true })
|
|
356
|
+
writeFileSync(target, `${JSON.stringify(doc, null, 2)}\n`, "utf8")
|
|
357
|
+
} catch (e) {
|
|
358
|
+
ctx.ui?.notify?.(`svg-mcp: failed to write ${target} (${e})`, "error")
|
|
359
|
+
return
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
const what = !existed ? "added" : changed ? "updated" : "already configured"
|
|
363
|
+
ctx.ui?.notify?.(
|
|
364
|
+
`svg-mcp: ${what} "${key}" in ${target}\n` +
|
|
365
|
+
`Sends "Authorization: Bearer $SVG_MCP_AUTH_TOKEN" when that env var is set ` +
|
|
366
|
+
`(auth:"bearer" both sends the token and suppresses OAuth probing). ` +
|
|
367
|
+
`Run /reload so pi-mcp-adapter re-reads mcp.json.`,
|
|
368
|
+
"info",
|
|
369
|
+
)
|
|
370
|
+
}
|
|
371
|
+
|
|
266
372
|
const SHOW_LIMIT = 1600
|
|
267
373
|
function showDirective(ctx: ExtensionCommandContext, label: string, directive: string, enabled: boolean): void {
|
|
268
374
|
if (!directive) {
|