@directive-run/mcp 0.5.10 → 0.5.11

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/lz-string@1.5.0/node_modules/lz-string/libs/lz-string.js","../src/generated/package-registry.ts","../src/lint-runner.ts","../src/packages.ts","../src/playground.ts","../src/sandbox-runner.ts","../src/server.ts","../src/sse.ts"],"names":["require_lz_string","__commonJSMin","exports","module","LZString","f","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","i","input","res","a","index","compressed","uncompressed","buf","TotalLen","current_value","result","c","bitsPerChar","getCharFromInt","value","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","ii","length","resetValue","getNextValue","dictionary","enlargeIn","dictSize","numBits","entry","w","bits","resb","maxpower","power","data","PACKAGE_REGISTRY","PACKAGE_REGISTRY_BUILT_AT","MAX_SOURCE_BYTES","PARSE_BUDGET_MS","FILENAME_RE","LintRunnerError","message","code","validate","bytes","fileName","resolveWorkerPath","url","fileURLToPath","runInWorker","payload","workerPath","worker","Worker","timer","resolve","reject","resolved","msg","err","shouldUseWorker","runLintInWorker","runRules","applyFixInWorker","applyFix","VERSION_CACHE_TTL_MS","VERSION_FETCH_TIMEOUT_MS","versionCache","listPackages","getPackageInfo","name","e","liveVersion","stale","getLiveVersion","buildPackageInfo","cached","fetchLatestVersion","controller","json","import_lz_string","MAX_PLAYGROUND_SOURCE_BYTES","PREVIEW_BASE_URL","INSTANT_BASE_URL","PlaygroundLinkError","assertByteBudget","encodeHashTitle","title","baseUrlForMode","mode","buildSingleFileUrl","source","parts","buildMultiFileUrl","files","file","buildPlaygroundLink","hasSource","hasFiles","MAX_FILES","FILE_PATH_RE","SandboxRunnerError","validateBounds","totalBytes","runInSandboxTool","runInSandbox","PKG_VERSION","MAX_SEARCH_RESULTS","MAX_LINE_PREVIEW","MAX_QUERY_LENGTH","formatLinePreview","line","collectSearchHits","query","corpus","fileExtension","lowered","hits","content","lines","formatSearchResponse","bundledKnowledgeHash","computeBundledKnowledgeHash","hash","createHash","getAllKnowledge","b","serverInfoOptions","setServerInfo","options","renderDepSection","out","heading","deps","d","renderPackageInfo","info","createDirectiveServer","server","McpServer","knowledge","names","z","getKnowledge","examples","getAllExamples","getExample","packages","p","outgoing","getCompositionsFor","incoming","getReverseCompositionsFor","MODULE_SECTIONS","kind","sections","validation","validateModuleName","scaffold","generateOrchestrator","generateModule","testFileName","suggestFileNames","needed","requiredPackages","rules","getAntiPatterns","compact","r","id","rule","getAntiPatternById","MIGRATION_SOURCES","pattern","getMigrationPattern","row","s","ruleFilter","finding","skills","getAllSkills","skill","getSkill","timeoutMs","playgroundUrl","MESSAGES_PATH","SSE_PATH","HEALTHZ_PATH","DEFAULT_BODY_LIMIT_BYTES","DEFAULT_MAX_SESSIONS","DEFAULT_IDLE_TIMEOUT_MS","IDLE_SWEEP_INTERVAL_MS","LOOPBACK_HOSTS","SseConfigError","isLoopback","host","resolveConfig","port","logger","token","checkAuth","req","expected","header","checkOrigin","allow","origin","status","headers","updateSetServerInfo","sessions","authEnabled","pendingConnects","handleSseConnect","config","claimed","transport","SSEServerTransport","cleanup","handlePostMessage","declaredLength","sessionId","session","bytesSeen","overflowed","chunk","routeRequest","startIdleSweep","now","startSseServer","httpServer","createServer","sweeper"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.5\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n} else if( typeof angular !== 'undefined' && angular != null ) {\n angular.module('LZString', [])\n .factory('LZString', function () {\n return LZString;\n });\n}\n","// AUTO-GENERATED by packages/mcp/scripts/build-package-registry.ts\n// Do not edit by hand. Run `pnpm --filter @directive-run/mcp build:registry`.\nexport interface PackageRegistryEntry {\n name: string;\n version: string;\n description: string;\n homepage?: string;\n keywords: readonly string[];\n dependencies: readonly string[];\n peerDependencies: readonly string[];\n optionalDependencies: readonly string[];\n exports: readonly string[];\n directory: string;\n published: boolean;\n}\n\nexport const PACKAGE_REGISTRY: readonly PackageRegistryEntry[] = [\n {\n \"name\": \"@directive-run/ai\",\n \"version\": \"1.19.5\",\n \"description\": \"AI guardrails and orchestration for Directive. Prompt injection, PII detection, cost tracking, multi-agent patterns.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"ai\",\n \"agents\",\n \"guardrails\",\n \"orchestration\",\n \"llm\",\n \"constraint-driven\",\n \"ai-safety\",\n \"prompt-injection\",\n \"pii-detection\",\n \"cost-tracking\",\n \"multi-agent\",\n \"openai\",\n \"anthropic\",\n \"ollama\",\n \"gemini\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./anthropic\",\n \"./devtools\",\n \"./evals\",\n \"./gemini\",\n \"./guardrails\",\n \"./mcp\",\n \"./multi-agent\",\n \"./ollama\",\n \"./openai\",\n \"./predicate\",\n \"./testing\"\n ],\n \"directory\": \"ai\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/claude-plugin\",\n \"version\": \"1.19.5\",\n \"description\": \"Claude Code plugin for Directive — 12 skills covering modules, constraints, resolvers, derivations, AI orchestration, and adapters. Installable via Claude Code's plugin marketplace or consumable programmatically as an npm package.\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"claude\",\n \"claude-code\",\n \"skills\",\n \"ai-rules\",\n \"plugin\",\n \"agents\",\n \"knowledge\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"claude-plugin\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/cli\",\n \"version\": \"1.19.5\",\n \"description\": \"CLI tools for Directive — AI coding rules, scaffolding, and more.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"cli\",\n \"ai-rules\",\n \"cursor\",\n \"copilot\",\n \"claude\",\n \"windsurf\",\n \"cline\",\n \"llms-txt\"\n ],\n \"dependencies\": [\n \"@clack/prompts\",\n \"@directive-run/knowledge\",\n \"@directive-run/scaffold\",\n \"picocolors\"\n ],\n \"peerDependencies\": [\n \"@directive-run/timeline\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./llms.txt\"\n ],\n \"directory\": \"cli\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/core\",\n \"version\": \"1.19.5\",\n \"description\": \"The constraint-driven runtime for TypeScript. Declare what must be true — the runtime makes it happen.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"constraint-driven\",\n \"state-management\",\n \"constraints\",\n \"reactive\",\n \"runtime\",\n \"typescript\",\n \"ai-guardrails\",\n \"zero-dependencies\",\n \"auto-tracking\",\n \"framework-agnostic\",\n \"declarative\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./adapter-utils\",\n \"./internals\",\n \"./migration\",\n \"./plugins\",\n \"./testing\",\n \"./worker\"\n ],\n \"directory\": \"core\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/el\",\n \"version\": \"1.1.0\",\n \"description\": \"Vanilla DOM adapter for Directive. Typed element creation + reactive bindings + JSX runtime.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"vanilla\",\n \"dom\",\n \"elements\",\n \"jsx\",\n \"htm\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"htm\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./htm\",\n \"./jsx-dev-runtime\",\n \"./jsx-runtime\"\n ],\n \"directory\": \"el\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/knowledge\",\n \"version\": \"1.19.5\",\n \"description\": \"Knowledge files, examples, and validation for Directive — the constraint-driven TypeScript runtime.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"knowledge\",\n \"ai-rules\",\n \"examples\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"knowledge\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/lint\",\n \"version\": \"0.1.2\",\n \"description\": \"ts-morph-based static analysis for Directive code. Rule registry + executable checks + autofixes. Consumed by @directive-run/mcp (review_source, fix_code tools) and the future `directive doctor lint` CLI command. Anti-pattern data sourced from @directive-run/knowledge so rule IDs stay in lock-step.\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"lint\",\n \"ast\",\n \"ts-morph\",\n \"review\",\n \"anti-patterns\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [\n \"ts-morph\"\n ],\n \"exports\": [\n \".\",\n \"./executable\",\n \"./worker\"\n ],\n \"directory\": \"lint\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/lit\",\n \"version\": \"1.19.5\",\n \"description\": \"Lit web components adapter for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"lit\",\n \"web-components\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"lit\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"lit\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/mcp\",\n \"version\": \"0.5.10\",\n \"description\": \"Model Context Protocol server that exposes Directive to AI clients — knowledge files, code examples, and Claude Code skill bundles today, with room to grow into runtime introspection and tooling. stdio for local clients (Claude Desktop, Cursor, MCP Inspector), SSE for hosted deployments at mcp.directive.run.\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"mcp\",\n \"model-context-protocol\",\n \"knowledge\",\n \"ai-rules\",\n \"sse\",\n \"stdio\"\n ],\n \"dependencies\": [\n \"@directive-run/claude-plugin\",\n \"@directive-run/knowledge\",\n \"@directive-run/lint\",\n \"@directive-run/sandbox\",\n \"@directive-run/scaffold\",\n \"@modelcontextprotocol/sdk\",\n \"lz-string\",\n \"zod\"\n ],\n \"peerDependencies\": [],\n \"optionalDependencies\": [\n \"ts-morph\"\n ],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"mcp\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/mutator\",\n \"version\": \"0.3.1\",\n \"description\": \"Discriminated mutation helper for Directive — collapse the pendingAction ceremony to a typed handler map.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"mutator\",\n \"state-management\",\n \"discriminated-union\",\n \"optimistic-update\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"mutator\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/optimistic\",\n \"version\": \"0.2.0\",\n \"description\": \"Resolver-scope optimistic update + automatic rollback for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"optimistic\",\n \"rollback\",\n \"snapshot\",\n \"state-management\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"optimistic\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/query\",\n \"version\": \"1.2.0\",\n \"description\": \"Declarative data fetching for Directive. Constraint-driven queries with causal cache invalidation.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"data-fetching\",\n \"query\",\n \"cache\",\n \"stale-while-revalidate\",\n \"constraint-driven\",\n \"reactive\",\n \"typescript\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"query\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/react\",\n \"version\": \"1.19.5\",\n \"description\": \"React hooks and components for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"react\",\n \"hooks\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"@directive-run/query\",\n \"react\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"react\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/sandbox\",\n \"version\": \"0.3.8\",\n \"description\": \"Execute Directive snippets server-side and return a structured transcript (logs + facts + errors). Consumed by @directive-run/mcp's run_in_sandbox tool and directive.run/playground's live DevTools panel. Uses worker_threads + esbuild bundling + an AST allowlist validator so user-supplied TypeScript runs with a bounded surface (allowlisted imports, allowlisted API calls, 5s wall clock, 32 MB heap).\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"sandbox\",\n \"worker-threads\",\n \"execute\",\n \"transcript\"\n ],\n \"dependencies\": [\n \"@directive-run/core\"\n ],\n \"peerDependencies\": [],\n \"optionalDependencies\": [\n \"esbuild\",\n \"ts-morph\"\n ],\n \"exports\": [\n \".\",\n \"./worker\"\n ],\n \"directory\": \"sandbox\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/scaffold\",\n \"version\": \"0.2.0\",\n \"description\": \"Pure source-string generators for Directive modules and orchestrators. Shared substrate consumed by @directive-run/cli (its `directive new` command) and @directive-run/mcp (its `generate_module` tool). Zero runtime dependencies.\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"scaffold\",\n \"codegen\",\n \"module-generator\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"scaffold\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/solid\",\n \"version\": \"1.19.5\",\n \"description\": \"Solid.js signals adapter for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"solid\",\n \"solidjs\",\n \"signals\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"@directive-run/query\",\n \"solid-js\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"solid\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/sources\",\n \"version\": \"0.3.0\",\n \"description\": \"Source adapters for Directive — wrap Supabase realtime, Cloudflare DO alarms, WebSocket, Sentry, etc. as typed `source` primitives. One package, one install, subpath exports per vendor.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"source\",\n \"supabase\",\n \"cloudflare\",\n \"realtime\",\n \"websocket\",\n \"state-management\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@cloudflare/workers-types\",\n \"@directive-run/core\",\n \"@supabase/supabase-js\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./cloudflare\",\n \"./supabase\"\n ],\n \"directory\": \"sources\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/svelte\",\n \"version\": \"1.19.5\",\n \"description\": \"Svelte stores adapter for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"svelte\",\n \"stores\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"@directive-run/query\",\n \"svelte\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"svelte\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/timeline\",\n \"version\": \"0.3.2\",\n \"description\": \"Time-travel test REPL for Directive. Auto-renders the causal-graph timeline of any failing test.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"time-travel\",\n \"test-debugging\",\n \"vitest\",\n \"causal-graph\",\n \"state-management\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"vitest\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./matchers\",\n \"./reporter\"\n ],\n \"directory\": \"timeline\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/vite-plugin-api-proxy\",\n \"version\": \"0.1.1\",\n \"description\": \"\",\n \"keywords\": [],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"vite\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"vite-plugin-api-proxy\",\n \"published\": false\n },\n {\n \"name\": \"@directive-run/vue\",\n \"version\": \"1.19.5\",\n \"description\": \"Vue composition API adapter for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"vue\",\n \"composition-api\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"@directive-run/query\",\n \"vue\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"vue\",\n \"published\": true\n }\n] as const;\n\nexport const PACKAGE_REGISTRY_BUILT_AT = \"2026-06-10T13:39:45.321Z\";\n","// Lint shim for @directive-run/lint.\n//\n// AE Security review (P0 #3): synchronous ts-morph parsing cannot be\n// aborted via setTimeout on the main thread, so a hostile source\n// could in principle pin a CPU past our budget. Pre-parse byte caps\n// + a soft timeout are enforced here; worker_threads-based hard\n// termination is gated behind DIRECTIVE_MCP_USE_LINT_WORKER=1 (the\n// integration is sound but vitest's pool model + Worker spawning\n// don't co-exist cleanly, so the default is in-process for now —\n// see v0.3.0 candidates).\n//\n// Pre-parse caps are enforced HERE, not in the worker, so a hostile\n// source can't even reach the parser if it's over the size budget.\n\nimport { fileURLToPath } from \"node:url\";\nimport { Worker } from \"node:worker_threads\";\nimport { applyFix, runRules } from \"@directive-run/lint\";\nimport type { Finding, FixResult, RunResult } from \"@directive-run/lint\";\n\nconst MAX_SOURCE_BYTES = 200_000;\nconst PARSE_BUDGET_MS = 5_000;\nconst FILENAME_RE = /^[\\w./-]{1,128}$/;\n\nexport interface LintRunInput {\n source: string;\n fileName?: string;\n ruleFilter?: string[];\n}\n\nexport interface LintFixInput {\n source: string;\n finding: Finding;\n}\n\nexport class LintRunnerError extends Error {\n constructor(\n message: string,\n public readonly code:\n | \"source-too-large\"\n | \"bad-filename\"\n | \"worker-error\"\n | \"timeout\",\n ) {\n super(message);\n }\n}\n\nfunction validate(input: LintRunInput | LintFixInput): void {\n const bytes = Buffer.byteLength(input.source, \"utf8\");\n if (bytes > MAX_SOURCE_BYTES) {\n throw new LintRunnerError(\n `source is ${bytes} bytes (max ${MAX_SOURCE_BYTES})`,\n \"source-too-large\",\n );\n }\n const fileName = \"fileName\" in input ? input.fileName : undefined;\n if (fileName !== undefined && !FILENAME_RE.test(fileName)) {\n throw new LintRunnerError(\"invalid fileName\", \"bad-filename\");\n }\n}\n\nasync function resolveWorkerPath(): Promise<string> {\n // import.meta.resolve is ESM-native and respects the `import`-only\n // export at `@directive-run/lint/worker`. It returns a file: URL.\n const url = await import.meta.resolve(\"@directive-run/lint/worker\");\n return fileURLToPath(url);\n}\n\nasync function runInWorker<TIn, TOut>(payload: TIn): Promise<TOut> {\n const workerPath = await resolveWorkerPath();\n const worker = new Worker(workerPath, { stderr: false });\n let timer: NodeJS.Timeout | null = null;\n try {\n return await new Promise<TOut>((resolve, reject) => {\n let resolved = false;\n worker.once(\n \"message\",\n (msg: { ok: boolean; result?: TOut; error?: string }) => {\n resolved = true;\n if (msg.ok && msg.result !== undefined) {\n resolve(msg.result);\n } else {\n reject(\n new LintRunnerError(\n msg.error ?? \"worker returned without result\",\n \"worker-error\",\n ),\n );\n }\n },\n );\n worker.once(\"error\", (err: Error) => {\n resolved = true;\n reject(new LintRunnerError(err.message, \"worker-error\"));\n });\n worker.once(\"exit\", (code) => {\n if (!resolved && code !== 0 && code !== null) {\n reject(\n new LintRunnerError(\n `worker exited with code ${code} before responding`,\n \"worker-error\",\n ),\n );\n }\n });\n timer = setTimeout(() => {\n worker.terminate();\n reject(\n new LintRunnerError(\n `parse exceeded ${PARSE_BUDGET_MS}ms budget`,\n \"timeout\",\n ),\n );\n }, PARSE_BUDGET_MS);\n worker.postMessage(payload);\n });\n } finally {\n if (timer) {\n clearTimeout(timer);\n }\n await worker.terminate().catch(() => undefined);\n }\n}\n\nfunction shouldUseWorker(): boolean {\n // Default ON in production so synchronous ts-morph parses cannot pin\n // the event loop past the 5-second budget (AE v0.2.0 P0 #3). Disable\n // inside vitest (Vitest's pool model conflicts with spawned Workers)\n // or via explicit DIRECTIVE_MCP_USE_LINT_WORKER=0.\n if (process.env.DIRECTIVE_MCP_USE_LINT_WORKER === \"0\") {\n return false;\n }\n if (process.env.VITEST === \"true\") {\n return false;\n }\n return true;\n}\n\nexport async function runLintInWorker(input: LintRunInput): Promise<RunResult> {\n validate(input);\n if (shouldUseWorker()) {\n return runInWorker<\n {\n kind: \"run\";\n source: string;\n options?: { fileName?: string; ruleFilter?: string[] };\n },\n RunResult\n >({\n kind: \"run\",\n source: input.source,\n options: {\n fileName: input.fileName,\n ruleFilter: input.ruleFilter,\n },\n });\n }\n return runRules(input.source, {\n fileName: input.fileName,\n ruleFilter: input.ruleFilter,\n });\n}\n\nexport async function applyFixInWorker(\n input: LintFixInput,\n): Promise<FixResult> {\n validate(input);\n if (shouldUseWorker()) {\n return runInWorker<\n { kind: \"fix\"; source: string; finding: Finding },\n FixResult\n >({\n kind: \"fix\",\n source: input.source,\n finding: input.finding,\n });\n }\n return applyFix(input.source, input.finding);\n}\n","// Package metadata helpers for the MCP `list_packages` and\n// `get_package_info` tools.\n//\n// Strategy:\n// - Static metadata (name, description, deps, exports) comes from\n// the build-time-baked PACKAGE_REGISTRY (see scripts/build-package-registry.ts).\n// - Live version + dist-tags.latest is fetched from npm at tool-call\n// time and cached in-memory for 1 hour. On network failure (or\n// when the package was never published, as for private workspace\n// packages), the baked version is returned with a `stale: true`\n// flag so the agent can disambiguate.\n// - All inputs are normalized through the registry — there is no\n// code path where untrusted strings reach npm or the filesystem.\n\nimport {\n PACKAGE_REGISTRY,\n type PackageRegistryEntry,\n} from \"./generated/package-registry.js\";\n\nexport type { PackageRegistryEntry } from \"./generated/package-registry.js\";\n\ninterface VersionCacheEntry {\n fetchedAt: number;\n liveVersion?: string;\n latest?: string;\n error?: string;\n}\n\nconst VERSION_CACHE_TTL_MS = 60 * 60 * 1000;\nconst VERSION_FETCH_TIMEOUT_MS = 3_000;\nconst versionCache = new Map<string, VersionCacheEntry>();\n\nexport interface PackageSummary {\n name: string;\n summary: string;\n published: boolean;\n}\n\nexport interface PackageInfo {\n name: string;\n description: string;\n homepage?: string;\n keywords: readonly string[];\n dependencies: readonly string[];\n peerDependencies: readonly string[];\n optionalDependencies: readonly string[];\n exports: readonly string[];\n published: boolean;\n /** npm registry URL when published, otherwise undefined. */\n npmUrl?: string;\n /** Version as baked into mcp at publish time. */\n bakedVersion: string;\n /** Live version from registry.npmjs.org/<pkg>/latest. May be undefined on network failure or for private packages. */\n liveVersion?: string;\n /** True when the live fetch failed and we fell back to bakedVersion. */\n stale: boolean;\n}\n\n/** Every known package, returned in stable registry order. */\nexport function listPackages(): PackageSummary[] {\n return PACKAGE_REGISTRY.map((entry) => ({\n name: entry.name,\n summary: entry.description,\n published: entry.published,\n }));\n}\n\n/**\n * Detail for one package. Hits npm for the latest version (1h cache,\n * 3s timeout). Returns `undefined` when no such @directive-run/*\n * package is known to mcp.\n */\nexport async function getPackageInfo(\n name: string,\n): Promise<PackageInfo | undefined> {\n const entry = PACKAGE_REGISTRY.find((e) => e.name === name);\n if (!entry) {\n return undefined;\n }\n\n const { liveVersion, stale } = await getLiveVersion(entry);\n return buildPackageInfo(entry, liveVersion, stale);\n}\n\nfunction buildPackageInfo(\n entry: PackageRegistryEntry,\n liveVersion: string | undefined,\n stale: boolean,\n): PackageInfo {\n return {\n name: entry.name,\n description: entry.description,\n homepage: entry.homepage,\n keywords: entry.keywords,\n dependencies: entry.dependencies,\n peerDependencies: entry.peerDependencies,\n optionalDependencies: entry.optionalDependencies,\n exports: entry.exports,\n published: entry.published,\n npmUrl: entry.published\n ? `https://www.npmjs.com/package/${entry.name}`\n : undefined,\n bakedVersion: entry.version,\n liveVersion,\n stale,\n };\n}\n\ninterface LiveVersionResult {\n liveVersion?: string;\n stale: boolean;\n}\n\nasync function getLiveVersion(\n entry: PackageRegistryEntry,\n): Promise<LiveVersionResult> {\n if (!entry.published) {\n return { stale: true };\n }\n const cached = versionCache.get(entry.name);\n if (cached && Date.now() - cached.fetchedAt < VERSION_CACHE_TTL_MS) {\n return {\n liveVersion: cached.liveVersion,\n stale: cached.liveVersion === undefined,\n };\n }\n\n const result = await fetchLatestVersion(entry.name);\n versionCache.set(entry.name, {\n fetchedAt: Date.now(),\n liveVersion: result.liveVersion,\n latest: result.liveVersion,\n error: result.error,\n });\n return {\n liveVersion: result.liveVersion,\n stale: result.liveVersion === undefined,\n };\n}\n\nasync function fetchLatestVersion(\n name: string,\n): Promise<{ liveVersion?: string; error?: string }> {\n const url = `https://registry.npmjs.org/${encodeURIComponent(name).replace(/%2F/g, \"/\")}/latest`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), VERSION_FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, { signal: controller.signal });\n if (!res.ok) {\n return { error: `HTTP ${res.status}` };\n }\n const json = (await res.json()) as { version?: string };\n if (typeof json.version === \"string\") {\n return { liveVersion: json.version };\n }\n return { error: \"no version field\" };\n } catch (err) {\n return { error: (err as Error).message };\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** Test / dev helper. */\nexport function clearVersionCache(): void {\n versionCache.clear();\n}\n","// Builds shareable \"open this in a real editor\" links for code snippets\n// returned by other MCP tools (generate_module, get_example, fix_code, …).\n//\n// The link points at directive.run/playground — a route on the docs site\n// that decompresses the source from the URL hash, shows it in a syntax-\n// highlighted editor, and offers an \"Open in StackBlitz\" button wired to\n// the same @stackblitz/sdk flow the existing example demos use. The user\n// lands in a real running Directive project pre-populated with either a\n// single `src/main.ts` (when called with a single `source`) or a paired\n// `src/<name>.ts` + `src/main.ts` bundle (when called with a `files`\n// array, e.g. the output of `generate_module` which produces both a\n// library and a runner driver).\n//\n// Two modes:\n// - `mode: \"preview\"` (default) — directive.run/playground. Page shows\n// the code with syntax highlighting + an \"Open in StackBlitz\" button.\n// The only Directive-branded surface in the flow and the one a first-\n// time user is most likely to land on, so this stays the default.\n// - `mode: \"instant\"` — directive.run/run. Thin redirect that server-\n// renders the StackBlitz POST form and auto-submits it on load. Skips\n// the preview UI; lands the user in the StackBlitz editor in ~600ms.\n// Use when the user has already road-tested one link in this\n// conversation, or when they explicitly want \"just open it\".\n//\n// Payload travels in the URL hash (not the query string) for three\n// reasons: (1) hashes aren't sent to the server so the source never\n// hits server access logs; (2) most chat clients preserve hashes\n// faithfully; (3) it mirrors the TS Playground convention so future\n// tooling that reads either format can decode the same way.\n\nimport { compressToEncodedURIComponent } from \"lz-string\";\n\n// Hard cap on raw input the tool will encode. Chosen because:\n// - Most chat clients (Slack, Discord, Teams, iMessage) reliably\n// preserve URLs up to ~8 KB even after compression overhead.\n// - The biggest realistic snippet we ship (the full traffic-light\n// module in get_example) is ~4 KB raw → fits with headroom.\n// - Anything larger should be opened in a real sandbox directly\n// rather than embedded in a URL.\n//\n// Applied to single-source input directly, and to the JSON-encoded\n// files-array for multi-file input (the per-file boundary is fuzzier\n// but the post-compress URL stays bounded).\nexport const MAX_PLAYGROUND_SOURCE_BYTES = 8_000;\n\nconst PREVIEW_BASE_URL = \"https://directive.run/playground\";\nconst INSTANT_BASE_URL = \"https://directive.run/run\";\n\nexport type PlaygroundMode = \"preview\" | \"instant\";\n\nexport interface PlaygroundFile {\n /** Relative path inside the StackBlitz project, e.g. \"src/main.ts\". */\n path: string;\n /** File contents. */\n source: string;\n}\n\nexport interface BuildPlaygroundLinkInput {\n /**\n * Single-file shortcut. Mutually exclusive with `files`. Used by\n * tools whose output is already a runnable program (`get_example`,\n * `fix_code`). Mapped onto `src/main.ts` server-side.\n */\n source?: string;\n /**\n * Multi-file payload. Used by `generate_module`'s paired output\n * (library + runner) so the StackBlitz project boots a real demo.\n * The page treats one of these as `src/main.ts`; convention is\n * the runner.\n */\n files?: PlaygroundFile[];\n /**\n * Optional short label echoed back in the response so the LLM has\n * something descriptive to surface alongside the URL. Encoded into\n * the link via the `t=` hash field; the playground page reads it\n * and uses it as the editor tab title.\n */\n title?: string;\n /**\n * Which landing page the URL targets. Default `\"preview\"`.\n * - `\"preview\"` → directive.run/playground (code + Open-in-StackBlitz button)\n * - `\"instant\"` → directive.run/run (auto-submit form to StackBlitz)\n */\n mode?: PlaygroundMode;\n}\n\nexport interface BuildPlaygroundLinkResult {\n url: string;\n /** UTF-8 byte length of the canonical encoded payload. */\n sizeBytes: number;\n /** Final URL byte length, post-compression. */\n urlBytes: number;\n /** Number of files in the encoded payload. 1 for single-file input. */\n fileCount: number;\n /** Echoed mode. */\n mode: PlaygroundMode;\n title?: string;\n}\n\nexport class PlaygroundLinkError extends Error {\n constructor(\n message: string,\n public readonly code:\n | \"source-empty\"\n | \"source-too-large\"\n | \"no-input\"\n | \"both-source-and-files\"\n | \"invalid-file\",\n ) {\n super(message);\n }\n}\n\nfunction assertByteBudget(bytes: number): void {\n if (bytes > MAX_PLAYGROUND_SOURCE_BYTES) {\n throw new PlaygroundLinkError(\n `payload is ${bytes} bytes (max ${MAX_PLAYGROUND_SOURCE_BYTES}). Payloads larger than ${MAX_PLAYGROUND_SOURCE_BYTES} bytes don't fit reliably in a URL — copy the source into a fresh Stackblitz project instead.`,\n \"source-too-large\",\n );\n }\n}\n\nfunction encodeHashTitle(title: string): string {\n // RFC 3986 reserves a handful of characters in fragments; the\n // standard fragment grammar lets unreserved chars + `-._~` through\n // raw. encodeURIComponent is overzealous but always safe.\n return encodeURIComponent(title);\n}\n\nfunction baseUrlForMode(mode: PlaygroundMode): string {\n return mode === \"instant\" ? INSTANT_BASE_URL : PREVIEW_BASE_URL;\n}\n\nfunction buildSingleFileUrl(\n source: string,\n title: string | undefined,\n mode: PlaygroundMode,\n): BuildPlaygroundLinkResult {\n if (source.length === 0) {\n throw new PlaygroundLinkError(\"source is empty\", \"source-empty\");\n }\n const bytes = Buffer.byteLength(source, \"utf8\");\n assertByteBudget(bytes);\n\n const encoded = compressToEncodedURIComponent(source);\n const parts = [`src=${encoded}`];\n if (title) {\n parts.push(`t=${encodeHashTitle(title)}`);\n }\n const url = `${baseUrlForMode(mode)}#${parts.join(\"&\")}`;\n return {\n url,\n sizeBytes: bytes,\n urlBytes: Buffer.byteLength(url, \"utf8\"),\n fileCount: 1,\n mode,\n title,\n };\n}\n\nfunction buildMultiFileUrl(\n files: PlaygroundFile[],\n title: string | undefined,\n mode: PlaygroundMode,\n): BuildPlaygroundLinkResult {\n if (files.length === 0) {\n throw new PlaygroundLinkError(\"files array is empty\", \"source-empty\");\n }\n for (const file of files) {\n if (typeof file.path !== \"string\" || file.path.length === 0) {\n throw new PlaygroundLinkError(\n \"every file must have a non-empty path\",\n \"invalid-file\",\n );\n }\n if (typeof file.source !== \"string\" || file.source.length === 0) {\n throw new PlaygroundLinkError(\n `file '${file.path}' has empty source`,\n \"invalid-file\",\n );\n }\n }\n\n // JSON-encode the files array, then enforce the byte budget against\n // the JSON wrapper (not the per-file raw bytes), so the URL itself\n // stays within the 8 KB ceiling regardless of how the files split.\n const json = JSON.stringify(files);\n const bytes = Buffer.byteLength(json, \"utf8\");\n assertByteBudget(bytes);\n\n const encoded = compressToEncodedURIComponent(json);\n const parts = [`files=${encoded}`];\n if (title) {\n parts.push(`t=${encodeHashTitle(title)}`);\n }\n const url = `${baseUrlForMode(mode)}#${parts.join(\"&\")}`;\n return {\n url,\n sizeBytes: bytes,\n urlBytes: Buffer.byteLength(url, \"utf8\"),\n fileCount: files.length,\n mode,\n title,\n };\n}\n\nexport function buildPlaygroundLink(\n input: BuildPlaygroundLinkInput,\n): BuildPlaygroundLinkResult {\n const mode: PlaygroundMode = input.mode ?? \"preview\";\n\n const hasSource = typeof input.source === \"string\";\n const hasFiles = Array.isArray(input.files);\n if (hasSource && hasFiles) {\n throw new PlaygroundLinkError(\n \"pass either `source` or `files`, not both\",\n \"both-source-and-files\",\n );\n }\n if (!hasSource && !hasFiles) {\n throw new PlaygroundLinkError(\n \"pass either `source` (single file) or `files` (multi-file array)\",\n \"no-input\",\n );\n }\n\n if (hasFiles) {\n return buildMultiFileUrl(input.files!, input.title, mode);\n }\n return buildSingleFileUrl(input.source!, input.title, mode);\n}\n","// Wrapper around `@directive-run/sandbox`'s `runInSandbox` for the\n// `run_in_sandbox` MCP tool. Mirrors the shape of `lint-runner.ts` —\n// validates input bounds at the MCP boundary before delegating, maps\n// sandbox errors to structured tool responses so the LLM gets a\n// predictable error code instead of a stack trace.\n\nimport { runInSandbox } from \"@directive-run/sandbox\";\nimport type { PlaygroundFile, SandboxResult } from \"@directive-run/sandbox\";\n\nconst MAX_SOURCE_BYTES = 200_000;\nconst MAX_FILES = 10;\nconst FILE_PATH_RE = /^[\\w./-]{1,128}$/;\n\nexport class SandboxRunnerError extends Error {\n constructor(\n message: string,\n public readonly code: \"input-too-large\" | \"input-invalid\" | \"runtime-error\",\n ) {\n super(message);\n }\n}\n\nexport interface SandboxRunInput {\n source?: string;\n files?: PlaygroundFile[];\n timeoutMs?: number;\n}\n\nfunction validateBounds(input: SandboxRunInput): void {\n if (input.files) {\n if (input.files.length > MAX_FILES) {\n throw new SandboxRunnerError(\n `payload exceeds ${MAX_FILES} files`,\n \"input-invalid\",\n );\n }\n let totalBytes = 0;\n for (const file of input.files) {\n if (!FILE_PATH_RE.test(file.path)) {\n throw new SandboxRunnerError(\n `invalid file path: '${file.path}'`,\n \"input-invalid\",\n );\n }\n totalBytes += Buffer.byteLength(file.source, \"utf8\");\n }\n if (totalBytes > MAX_SOURCE_BYTES) {\n throw new SandboxRunnerError(\n `payload is ${totalBytes} bytes (max ${MAX_SOURCE_BYTES})`,\n \"input-too-large\",\n );\n }\n } else if (input.source) {\n const bytes = Buffer.byteLength(input.source, \"utf8\");\n if (bytes > MAX_SOURCE_BYTES) {\n throw new SandboxRunnerError(\n `source is ${bytes} bytes (max ${MAX_SOURCE_BYTES})`,\n \"input-too-large\",\n );\n }\n }\n}\n\nexport async function runInSandboxTool(\n input: SandboxRunInput,\n): Promise<SandboxResult> {\n validateBounds(input);\n return runInSandbox(input);\n}\n","/**\n * Build a Model Context Protocol server that exposes Directive to MCP\n * clients. Transport-agnostic — call `createDirectiveServer()` to get a\n * configured `McpServer`, then connect it to a stdio transport (local\n * clients) or an SSE transport (hosted at `mcp.directive.run`).\n *\n * This is the SERVER side of the protocol. For the CLIENT side —\n * Directive AI agents calling out to external MCP servers — see\n * `@directive-run/ai/mcp` (`createMCPAdapter`).\n *\n * Current tool surface (knowledge + skill bundles):\n *\n * - `list_knowledge` — every knowledge file name (core + AI + skeleton).\n * - `get_knowledge` — read one knowledge file by name.\n * - `list_examples` — every example file name.\n * - `get_example` — read one example by name.\n * - `search_knowledge` — case-insensitive substring search across all\n * knowledge files, returning the file name + matching lines.\n * - `list_skills` — every Claude Code skill bundled in the plugin.\n * - `get_skill` — read one skill's `SKILL.md` plus its supporting\n * files as a single concatenated document.\n *\n * The package is the umbrella for \"Directive as an MCP server\" — future\n * additions can expose runtime introspection, system state, CLI\n * commands, and debug snapshots through the same binary.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { getAllSkills, getSkill } from \"@directive-run/claude-plugin\";\nimport {\n MIGRATION_SOURCES,\n type MigrationSourceId,\n getAllExamples,\n getAllKnowledge,\n getAntiPatternById,\n getAntiPatterns,\n getCompositionsFor,\n getExample,\n getKnowledge,\n getMigrationPattern,\n getReverseCompositionsFor,\n} from \"@directive-run/knowledge\";\nimport {\n MODULE_SECTIONS,\n type ModuleSection,\n generateModule,\n generateOrchestrator,\n requiredPackages,\n suggestFileNames,\n validateModuleName,\n} from \"@directive-run/scaffold\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { PACKAGE_REGISTRY_BUILT_AT } from \"./generated/package-registry.js\";\nimport {\n LintRunnerError,\n applyFixInWorker,\n runLintInWorker,\n} from \"./lint-runner.js\";\nimport { getPackageInfo, listPackages } from \"./packages.js\";\nimport {\n MAX_PLAYGROUND_SOURCE_BYTES,\n PlaygroundLinkError,\n buildPlaygroundLink,\n} from \"./playground.js\";\nimport { SandboxRunnerError, runInSandboxTool } from \"./sandbox-runner.js\";\n\n// Injected at build time by tsup's `define` from package.json so the\n// MCP handshake + get_server_info always match the published version.\n// In dev (tsx, no build) falls back to a sentinel so handshakes don't\n// claim a real version.\nconst PKG_VERSION = process.env.DIRECTIVE_MCP_VERSION ?? \"0.0.0-dev\";\nconst MAX_SEARCH_RESULTS = 50;\nconst MAX_LINE_PREVIEW = 200;\nconst MAX_QUERY_LENGTH = 512;\n\nfunction formatLinePreview(line: string): string {\n return line.length > MAX_LINE_PREVIEW\n ? `${line.slice(0, MAX_LINE_PREVIEW)}…`\n : line;\n}\n\nfunction collectSearchHits(\n query: string,\n corpus: ReadonlyMap<string, string>,\n fileExtension: string,\n): string[] {\n const lowered = query.toLowerCase();\n const hits: string[] = [];\n\n for (const [name, content] of corpus) {\n const lines = content.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (!line.toLowerCase().includes(lowered)) {\n continue;\n }\n hits.push(`${name}${fileExtension}:${i + 1}: ${formatLinePreview(line)}`);\n if (hits.length >= MAX_SEARCH_RESULTS) {\n return hits;\n }\n }\n }\n\n return hits;\n}\n\nfunction formatSearchResponse(query: string, hits: string[]): string {\n if (hits.length === 0) {\n return `No matches for '${query}'.`;\n }\n const header =\n hits.length === MAX_SEARCH_RESULTS\n ? `${hits.length}+ matches (truncated):`\n : `${hits.length} matches:`;\n return `${header}\\n${hits.join(\"\\n\")}`;\n}\n\nlet bundledKnowledgeHash: string | null = null;\nfunction computeBundledKnowledgeHash(): string {\n if (bundledKnowledgeHash) {\n return bundledKnowledgeHash;\n }\n const hash = createHash(\"sha256\");\n for (const [name, content] of Array.from(getAllKnowledge()).sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n hash.update(name);\n hash.update(\"\\0\");\n hash.update(content);\n hash.update(\"\\0\");\n }\n bundledKnowledgeHash = hash.digest(\"hex\").slice(0, 16);\n return bundledKnowledgeHash;\n}\n\ninterface ServerInfoOptions {\n transport: \"stdio\" | \"sse\";\n authEnabled: boolean;\n sessionCount?: number;\n}\n\nlet serverInfoOptions: ServerInfoOptions = {\n transport: \"stdio\",\n authEnabled: false,\n};\n\n/** Set transport-specific server info shown by `get_server_info`. */\nexport function setServerInfo(options: ServerInfoOptions): void {\n serverInfoOptions = options;\n}\n\nfunction renderDepSection(\n out: string[],\n heading: string,\n deps: readonly string[],\n): void {\n if (deps.length === 0) {\n return;\n }\n out.push(\"\", `**${heading}:**`, ...deps.map((d) => `- ${d}`));\n}\n\nfunction renderPackageInfo(info: {\n name: string;\n description: string;\n homepage?: string;\n npmUrl?: string;\n bakedVersion: string;\n liveVersion?: string;\n stale: boolean;\n published: boolean;\n dependencies: readonly string[];\n peerDependencies: readonly string[];\n optionalDependencies: readonly string[];\n exports: readonly string[];\n}): string {\n const lines: string[] = [\n `# ${info.name}`,\n info.description,\n \"\",\n `**Version (live):** ${info.liveVersion ?? \"unknown\"}`,\n `**Version (baked):** ${info.bakedVersion}${info.stale ? \" (live fetch failed; using baked)\" : \"\"}`,\n `**Published to npm:** ${info.published ? \"yes\" : \"no (private workspace package)\"}`,\n ];\n if (info.homepage) {\n lines.push(`**Homepage:** ${info.homepage}`);\n }\n if (info.npmUrl) {\n lines.push(`**npm:** ${info.npmUrl}`);\n }\n renderDepSection(lines, \"Dependencies\", info.dependencies);\n renderDepSection(lines, \"Peer dependencies\", info.peerDependencies);\n renderDepSection(lines, \"Optional dependencies\", info.optionalDependencies);\n renderDepSection(lines, \"Exports\", info.exports);\n return lines.join(\"\\n\");\n}\n\n/**\n * Build the MCP server with every Directive tool registered.\n *\n * The returned server has no transport attached — connect it to\n * `StdioServerTransport` for local clients or an SSE transport for\n * hosted deployments.\n */\nexport function createDirectiveServer(): McpServer {\n const server = new McpServer({\n name: \"directive\",\n version: PKG_VERSION,\n });\n\n server.registerTool(\n \"list_knowledge\",\n {\n title: \"List Directive knowledge files\",\n description:\n \"List every knowledge file shipped in @directive-run/knowledge. Returns the file names (without .md) that can be passed to get_knowledge. Covers core docs (engine, facts, constraints, resolvers, derivations, effects, plugins, modules, systems, testing) and AI docs (orchestrator, agents, adapters, guardrails, memory, MCP, RAG, security, evals, budget, multi-agent).\",\n inputSchema: {},\n },\n async () => {\n const knowledge = getAllKnowledge();\n const names = Array.from(knowledge.keys()).sort();\n\n return {\n content: [\n {\n type: \"text\",\n text: `${names.length} knowledge files:\\n${names.join(\"\\n\")}`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_knowledge\",\n {\n title: \"Get a Directive knowledge file\",\n description:\n \"Fetch the full Markdown contents of one Directive knowledge file by name. Use list_knowledge first to discover available names. Names match the file stem (e.g. 'constraints', 'ai-orchestrator', 'api-skeleton').\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .describe(\n \"The knowledge file name (no .md suffix). Example: 'constraints', 'ai-orchestrator', 'api-skeleton'.\",\n ),\n },\n },\n async ({ name }) => {\n const content = getKnowledge(name);\n if (!content) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Knowledge file not found: '${name}'. Call list_knowledge to see available names.`,\n },\n ],\n };\n }\n\n return {\n content: [{ type: \"text\", text: content }],\n };\n },\n );\n\n server.registerTool(\n \"list_examples\",\n {\n title: \"List Directive code examples\",\n description:\n \"List every code example shipped in @directive-run/knowledge. Examples are minimal, working TypeScript files demonstrating one concept each. Pass the returned names to get_example.\",\n inputSchema: {},\n },\n async () => {\n const examples = getAllExamples();\n const names = Array.from(examples.keys()).sort();\n\n return {\n content: [\n {\n type: \"text\",\n text: `${names.length} examples:\\n${names.join(\"\\n\")}`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_example\",\n {\n title: \"Get a Directive code example\",\n description:\n \"Fetch the source of one Directive code example by name. Use list_examples first to discover available names. Returns raw TypeScript.\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .describe(\n \"The example file name (no .ts suffix). Example: 'basic-module', 'ai-orchestrator'.\",\n ),\n },\n },\n async ({ name }) => {\n const content = getExample(name);\n if (!content) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Example not found: '${name}'. Call list_examples to see available names.`,\n },\n ],\n };\n }\n\n return {\n content: [\n { type: \"text\", text: `\\`\\`\\`typescript\\n${content}\\n\\`\\`\\`` },\n ],\n };\n },\n );\n\n server.registerTool(\n \"search_knowledge\",\n {\n title: \"Search Directive knowledge files\",\n description:\n \"Case-insensitive substring search across every knowledge file. Returns existing reference material; does NOT generate code. Use this to find which knowledge file covers a topic before calling get_knowledge for the full document.\",\n inputSchema: {\n query: z\n .string()\n .min(1)\n .max(MAX_QUERY_LENGTH)\n .describe(\n \"The search string. Matched case-insensitively against every line of every knowledge file.\",\n ),\n },\n },\n async ({ query }) => {\n const hits = collectSearchHits(query, getAllKnowledge(), \".md\");\n return {\n content: [{ type: \"text\", text: formatSearchResponse(query, hits) }],\n };\n },\n );\n\n server.registerTool(\n \"search_examples\",\n {\n title: \"Search Directive code examples\",\n description:\n \"Case-insensitive substring search across every bundled code example (.ts files in @directive-run/knowledge). Returns existing reference material; does NOT generate code. Use this to find which example demonstrates a concept before calling get_example for the full source.\",\n inputSchema: {\n query: z\n .string()\n .min(1)\n .max(MAX_QUERY_LENGTH)\n .describe(\n \"The search string. Matched case-insensitively against every line of every example file.\",\n ),\n },\n },\n async ({ query }) => {\n const hits = collectSearchHits(query, getAllExamples(), \".ts\");\n return {\n content: [{ type: \"text\", text: formatSearchResponse(query, hits) }],\n };\n },\n );\n\n server.registerTool(\n \"list_packages\",\n {\n title: \"List @directive-run/* packages\",\n description:\n \"Enumerate every @directive-run/* package known to this MCP server. Returns name + one-line description. Use this to answer 'what should I install for X?' and to discover names to pass to get_package_info or get_composable_packages. Returns existing reference material; does NOT generate code.\",\n inputSchema: {},\n },\n async () => {\n const packages = listPackages();\n const lines = packages.map(\n (p) => `${p.name}${p.published ? \"\" : \" (private)\"} — ${p.summary}`,\n );\n return {\n content: [\n {\n type: \"text\",\n text: `${packages.length} packages:\\n${lines.join(\"\\n\")}`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_package_info\",\n {\n title: \"Get @directive-run/* package detail\",\n description:\n \"Fetch detailed info for one @directive-run/* package: description, dependencies, peerDependencies, exports, npm URL. Returns the version baked into this MCP build AND the live-from-npm version when available (1-hour cache, 3-second timeout, falls back to baked version on network failure). Returns existing reference material; does NOT generate code.\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .max(128)\n .describe(\n \"Package name (e.g. '@directive-run/core'). Call list_packages first to discover valid names.\",\n ),\n },\n },\n async ({ name }) => {\n const info = await getPackageInfo(name);\n if (!info) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Package not found: '${name}'. Call list_packages to see available names.`,\n },\n ],\n };\n }\n return {\n content: [{ type: \"text\", text: renderPackageInfo(info) }],\n };\n },\n );\n\n server.registerTool(\n \"get_composable_packages\",\n {\n title: \"Get composition siblings for a package\",\n description:\n \"Given a @directive-run/* package name, return the sibling packages it composes with (outgoing edges) AND the packages that compose with IT (incoming edges). Each edge carries a one-line reason. Returns existing reference material; does NOT generate code. Use this to answer 'what should I pair @directive-run/X with?' or 'who else uses @directive-run/Y?'.\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .max(128)\n .describe(\n \"Package name (e.g. '@directive-run/query'). Call list_packages first to discover valid names.\",\n ),\n },\n },\n async ({ name }) => {\n const outgoing = getCompositionsFor(name);\n const incoming = getReverseCompositionsFor(name);\n if (outgoing.length === 0 && incoming.length === 0) {\n // No edges either direction means the package name isn't known\n // to the graph at all (every shipped @directive-run/* package\n // has at least one edge). Surface as isError so LLM clients\n // can distinguish \"you typed it wrong\" from \"no data.\"\n const knownPackage = listPackages().some((p) => p.name === name);\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: knownPackage\n ? `NO_COMPOSITIONS: '${name}' is a known package but has no composition edges yet. This is a coverage gap in compositions.json.`\n : `NOT_FOUND: '${name}' is not a known @directive-run/* package. Call list_packages to see available names.`,\n },\n ],\n };\n }\n const lines: string[] = [`# ${name}`, \"\"];\n if (outgoing.length > 0) {\n lines.push(\"## Composes with:\");\n for (const e of outgoing) {\n lines.push(`- ${e.to} — ${e.reason}`);\n }\n lines.push(\"\");\n }\n if (incoming.length > 0) {\n lines.push(\"## Composed by:\");\n for (const e of incoming) {\n lines.push(`- ${e.from} — ${e.reason}`);\n }\n }\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${lines.join(\"\\n\")}\\n</directive-data>`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_server_info\",\n {\n title: \"Get directive MCP server info\",\n description:\n \"Return version manifest for this MCP server build — package version, transport (stdio or SSE), whether auth is enabled, bundled-knowledge hash, package-registry build timestamp, and (for SSE) the current session count. Returns existing reference material; does NOT generate code. Use this to verify the client is talking to the expected build.\",\n inputSchema: {},\n },\n async () => {\n const lines = [\n `# @directive-run/mcp@${PKG_VERSION}`,\n `**Transport:** ${serverInfoOptions.transport}`,\n `**Auth enabled:** ${serverInfoOptions.authEnabled ? \"yes\" : \"no\"}`,\n `**Bundled knowledge hash:** ${computeBundledKnowledgeHash()}`,\n `**Package registry built at:** ${PACKAGE_REGISTRY_BUILT_AT}`,\n ];\n if (serverInfoOptions.sessionCount !== undefined) {\n lines.push(\n `**Active SSE sessions:** ${serverInfoOptions.sessionCount}`,\n );\n }\n return {\n content: [{ type: \"text\", text: lines.join(\"\\n\") }],\n };\n },\n );\n\n server.registerTool(\n \"list_module_sections\",\n {\n title: \"List valid module sections for generate_module\",\n description:\n \"Enumerate the valid `sections` values that `generate_module` accepts: derive, events, constraints, resolvers, effects. Call this before generate_module so the section list comes from the server (no hallucination risk). Returns existing reference material; does NOT generate code.\",\n inputSchema: {},\n },\n async () => ({\n content: [\n {\n type: \"text\",\n text: `${MODULE_SECTIONS.length} module sections:\\n${MODULE_SECTIONS.join(\"\\n\")}`,\n },\n ],\n }),\n );\n\n server.registerTool(\n \"generate_module\",\n {\n title:\n \"Generate NEW Directive module source code (paired with a runnable driver)\",\n description:\n 'Generate a new Directive module or AI orchestrator as a paired source bundle: a library `moduleSource` (the `createModule(...)` definition) AND a `runnerSource` that wraps it in `createSystem` + `start()` + dispatch + settle + log so the playground boots a project that actually demonstrates behavior. Pipe BOTH into `playground_link` as a `files` array for a clickable runnable URL. Never writes to disk — the caller decides. Strict regex on `name` (kebab-case, ≤64 chars). For `kind: \"module\"`, optionally pass `sections` to pick which blocks to include. Discover valid section values via list_module_sections.',\n inputSchema: {\n name: z\n .string()\n .min(1)\n .max(64)\n .describe(\n \"Kebab-case identifier (e.g. 'traffic-light'). Must start with a lowercase letter and contain only lowercase letters, digits, and hyphens.\",\n ),\n kind: z\n .enum([\"module\", \"orchestrator\"])\n .default(\"module\")\n .describe(\n \"What to generate. 'module' for a plain Directive module; 'orchestrator' for an AI agent orchestrator module with memory + guardrails scaffolding.\",\n ),\n sections: z\n .array(z.enum(MODULE_SECTIONS))\n .optional()\n .describe(\n \"Which module sections to include. Defaults to every section. Only honored when kind === 'module'. Discover valid values via list_module_sections.\",\n ),\n },\n },\n async ({ name, kind, sections }) => {\n const validation = validateModuleName(name);\n if (validation !== true) {\n return {\n isError: true,\n content: [\n { type: \"text\", text: `Invalid name '${name}': ${validation}` },\n ],\n };\n }\n try {\n const scaffold =\n kind === \"orchestrator\"\n ? generateOrchestrator(name)\n : generateModule(\n name,\n (sections as readonly ModuleSection[]) ?? MODULE_SECTIONS,\n );\n const { testFileName } = suggestFileNames(name, kind);\n const needed = requiredPackages(kind);\n const payload = {\n moduleSource: scaffold.moduleSource,\n runnerSource: scaffold.runnerSource,\n suggestedFilenames: {\n module: `src/${scaffold.suggestedFilenames.module}`,\n runner: `src/${scaffold.suggestedFilenames.runner}`,\n test: `src/${testFileName}`,\n },\n runnable: scaffold.runnable,\n requiredPackages: needed,\n installCommand: `pnpm add ${needed.join(\" \")}`,\n nextStep:\n \"Pipe `moduleSource` AND `runnerSource` into `playground_link` as a `files` array to give the user a runnable URL.\",\n };\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(payload, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n return {\n isError: true,\n content: [{ type: \"text\", text: (err as Error).message }],\n };\n }\n },\n );\n\n server.registerTool(\n \"list_review_rules\",\n {\n title: \"List Directive code-review rules\",\n description:\n \"Enumerate every anti-pattern Directive code can violate, parsed from @directive-run/knowledge. Each entry carries an id, severity, category, title, badExample, goodExample, and explanation. Use this to discover rule ids before calling get_review_rule or before passing ruleFilter to review_source. Returns existing reference material; does NOT generate code.\",\n inputSchema: {},\n },\n async () => {\n const rules = getAntiPatterns();\n const compact = rules.map((r) => ({\n id: r.id,\n severity: r.severity,\n category: r.category,\n title: r.title,\n }));\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${rules.length} review rules:\\n${JSON.stringify(compact, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_review_rule\",\n {\n title: \"Get a Directive code-review rule\",\n description:\n \"Fetch one anti-pattern's full detail: title, severity, category, explanation, and the WRONG/CORRECT code-example pair. Use list_review_rules first to discover valid ids. Returns existing reference material; does NOT generate code.\",\n inputSchema: {\n id: z\n .string()\n .min(1)\n .max(128)\n .describe(\n \"Rule id (a kebab-case slug — e.g. 'flat-schema-missing-facts-wrapper'). Call list_review_rules first to discover valid ids.\",\n ),\n },\n },\n async ({ id }) => {\n const rule = getAntiPatternById(id);\n if (!rule) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Rule not found: '${id}'. Call list_review_rules to see available ids.`,\n },\n ],\n };\n }\n const lines: string[] = [\n `# ${rule.title}`,\n `**id:** ${rule.id}`,\n `**severity:** ${rule.severity}`,\n `**category:** ${rule.category}`,\n ];\n if (rule.explanation) {\n lines.push(\"\", rule.explanation);\n }\n if (rule.badExample) {\n lines.push(\"\", \"## Wrong\", \"```typescript\", rule.badExample, \"```\");\n }\n if (rule.goodExample) {\n lines.push(\"\", \"## Correct\", \"```typescript\", rule.goodExample, \"```\");\n }\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${lines.join(\"\\n\")}\\n</directive-data>`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"list_migration_sources\",\n {\n title: \"List supported migration source libraries\",\n description:\n \"Enumerate the source libraries get_migration_pattern accepts: redux, zustand, xstate, mobx, jotai, recoil. Call this before get_migration_pattern so the source list comes from the server (no hallucination risk). Returns existing reference material; does NOT generate code.\",\n inputSchema: {},\n },\n async () => ({\n content: [\n {\n type: \"text\",\n text: `${MIGRATION_SOURCES.length} sources:\\n${MIGRATION_SOURCES.join(\"\\n\")}`,\n },\n ],\n }),\n );\n\n server.registerTool(\n \"get_migration_pattern\",\n {\n title: \"Get migration pattern from a state-management library\",\n description:\n \"Fetch the concept-mapping table + step list + before/after exemplars for migrating from a popular state-management library to Directive. Use this when a user asks 'how do I migrate from Redux / Zustand / XState / MobX / Jotai / Recoil'. Returns existing reference material; does NOT generate code.\",\n inputSchema: {\n source: z\n .enum(MIGRATION_SOURCES)\n .describe(\n \"Source library. Discover valid values via list_migration_sources.\",\n ),\n },\n },\n async ({ source }) => {\n const pattern = getMigrationPattern(source as MigrationSourceId);\n if (!pattern) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Migration pattern not found: '${source}'. Call list_migration_sources to see valid values.`,\n },\n ],\n };\n }\n const lines: string[] = [\n `# Migrating from ${pattern.name} to Directive`,\n \"\",\n \"## Concept map\",\n \"\",\n \"| From | To | Note |\",\n \"|---|---|---|\",\n ...pattern.conceptMap.map(\n (row) => `| ${row.from} | ${row.to} | ${row.note} |`,\n ),\n \"\",\n \"## Steps\",\n ...pattern.steps.map((s, i) => `${i + 1}. ${s}`),\n \"\",\n \"## Before\",\n \"```typescript\",\n pattern.before,\n \"```\",\n \"\",\n \"## After\",\n \"```typescript\",\n pattern.after,\n \"```\",\n ];\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${lines.join(\"\\n\")}\\n</directive-data>`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"review_source\",\n {\n title: \"Review Directive code with ts-morph rules\",\n description:\n \"Run the @directive-run/lint rule registry against a TypeScript source string. Returns structured findings (line, column, severity, message, fixable) for every match. Use this when the user asks 'review this Directive code' or 'lint this'. Source is parsed in a worker thread with a 5-second budget and 200 KB cap.\",\n inputSchema: {\n source: z\n .string()\n .min(1)\n .max(200_000)\n .describe(\n \"TypeScript source to review. Max 200,000 bytes; longer inputs are rejected pre-parse.\",\n ),\n fileName: z\n .string()\n .regex(/^[\\w./-]{1,128}$/)\n .optional()\n .describe(\n \"Optional file name shown in findings. Must match /^[\\\\w./-]{1,128}$/.\",\n ),\n ruleFilter: z\n .array(z.string().max(64))\n .max(32)\n .optional()\n .describe(\n \"Optional whitelist of rule ids to run. Discover valid ids via list_review_rules.\",\n ),\n },\n },\n async ({ source, fileName, ruleFilter }) => {\n try {\n const result = await runLintInWorker({ source, fileName, ruleFilter });\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(result, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n const reason =\n err instanceof LintRunnerError\n ? `${err.code}: ${err.message}`\n : (err as Error).message;\n return {\n isError: true,\n content: [{ type: \"text\", text: `review_source failed — ${reason}` }],\n };\n }\n },\n );\n\n server.registerTool(\n \"fix_code\",\n {\n title: \"Apply a mechanical fix for a Directive review finding\",\n description:\n \"Given a source string and a Finding returned by review_source, run the rule's mechanical fix and return { ok, diff, fixedSource, explanation } — or { ok: false, reason } when the rule has no fix. Useful for closing the loop: review_source → user picks → fix_code. The fixed source is NOT written to disk — the caller decides.\",\n inputSchema: {\n source: z\n .string()\n .min(1)\n .max(200_000)\n .describe(\"The same source you passed to review_source.\"),\n finding: z\n .object({\n ruleId: z.string().min(1).max(64),\n severity: z.enum([\"error\", \"warning\", \"info\"]),\n line: z.number().int().nonnegative(),\n column: z.number().int().nonnegative(),\n message: z.string(),\n findingId: z.string(),\n suggestion: z.string().optional(),\n })\n .describe(\n \"The Finding returned by review_source. Pass the WHOLE object — the worker uses ruleId + line + column to locate the AST node.\",\n ),\n },\n },\n async ({ source, finding }) => {\n try {\n const result = await applyFixInWorker({ source, finding });\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(result, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n const reason =\n err instanceof LintRunnerError\n ? `${err.code}: ${err.message}`\n : (err as Error).message;\n return {\n isError: true,\n content: [{ type: \"text\", text: `fix_code failed — ${reason}` }],\n };\n }\n },\n );\n\n server.registerTool(\n \"list_skills\",\n {\n title: \"List Directive Claude Code skills\",\n description:\n \"List every skill bundled in @directive-run/claude-plugin. Each skill is a gerund-named bundle of one SKILL.md plus supporting knowledge files. Pass a returned name to get_skill.\",\n inputSchema: {},\n },\n async () => {\n const skills = getAllSkills();\n const names = Array.from(skills.keys()).sort();\n\n return {\n content: [\n {\n type: \"text\",\n text: `${names.length} skills:\\n${names.join(\"\\n\")}`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_skill\",\n {\n title: \"Get a Directive Claude Code skill\",\n description:\n \"Fetch one skill bundle: the SKILL.md manifest plus every supporting knowledge file concatenated into a single document. Use list_skills to discover names.\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .describe(\n \"The skill name (e.g. 'building-ai-orchestrators', 'writing-directive-constraints').\",\n ),\n },\n },\n async ({ name }) => {\n const skill = getSkill(name);\n if (!skill) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Skill not found: '${name}'. Call list_skills to see available names.`,\n },\n ],\n };\n }\n\n const parts = [`# Skill: ${skill.name}\\n\\n${skill.manifest}`];\n for (const [fileName, content] of skill.files) {\n parts.push(`---\\n\\n## ${fileName}.md\\n\\n${content}`);\n }\n\n return {\n content: [{ type: \"text\", text: parts.join(\"\\n\\n\") }],\n };\n },\n );\n\n server.registerTool(\n \"playground_link\",\n {\n title:\n \"Build a shareable playground link for a Directive snippet (single- or multi-file)\",\n description:\n \"Turn TypeScript source into a directive.run URL the user can click to open a real running project. Two input shapes:\\n\\n• `source` (single string) — for snippets that are already runnable (`get_example`, `fix_code` output, hand-written demos). Lands as `src/main.ts` in a StackBlitz project preloaded with @directive-run/core.\\n\\n• `files` (array of {path, source}) — for paired output from `generate_module` (which returns both a library `moduleSource` AND a runnable `runnerSource`). Pass `[{path: 'src/<name>.ts', source: moduleSource}, {path: 'src/main.ts', source: runnerSource}]` so the playground boots a project that actually demonstrates behavior. THIS IS THE NORMAL WAY TO HAND OFF `generate_module` OUTPUT.\\n\\nOptional `mode`: `'preview'` (default — code + Open-in-StackBlitz button, the only Directive-branded surface, recommended for first-time users) or `'instant'` (thin auto-submit redirect, lands in StackBlitz in ~600ms with no preview UI). Use `'instant'` after the user has road-tested one link, or when they explicitly want 'just open it'.\\n\\nPayload travels in the URL hash so it never reaches server logs. 8 KB cap on raw input.\",\n inputSchema: {\n source: z\n .string()\n .min(1)\n .max(MAX_PLAYGROUND_SOURCE_BYTES)\n .optional()\n .describe(\n `Single-file source (mutually exclusive with \\`files\\`). Use for already-runnable code from \\`get_example\\` / \\`fix_code\\`. Max ${MAX_PLAYGROUND_SOURCE_BYTES} bytes.`,\n ),\n files: z\n .array(\n z.object({\n path: z\n .string()\n .min(1)\n .max(120)\n .describe(\n \"Relative path inside the StackBlitz project, e.g. 'src/counter.ts' or 'src/main.ts'. One file should be 'src/main.ts' (the entry point tsx runs).\",\n ),\n source: z.string().min(1).describe(\"File contents.\"),\n }),\n )\n .min(1)\n .max(10)\n .optional()\n .describe(\n `Multi-file payload (mutually exclusive with \\`source\\`). Use for \\`generate_module\\` paired output. JSON-encoded array gets compressed; the encoded payload must stay under ${MAX_PLAYGROUND_SOURCE_BYTES} bytes.`,\n ),\n title: z\n .string()\n .min(1)\n .max(120)\n .optional()\n .describe(\n \"Optional short label shown as the editor tab title on the playground page. Defaults to 'Untitled snippet'.\",\n ),\n mode: z\n .enum([\"preview\", \"instant\"])\n .optional()\n .describe(\n \"URL flavor: 'preview' (default) routes via directive.run/playground (preview + Open-in-StackBlitz button). 'instant' routes via directive.run/run (thin auto-submit redirect, lands directly in StackBlitz).\",\n ),\n },\n },\n async ({ source, files, title, mode }) => {\n try {\n const result = buildPlaygroundLink({\n source,\n files: files as { path: string; source: string }[] | undefined,\n title,\n mode,\n });\n const payload = {\n url: result.url,\n mode: result.mode,\n fileCount: result.fileCount,\n sizeBytes: result.sizeBytes,\n urlBytes: result.urlBytes,\n title: result.title ?? null,\n };\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(payload, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n const reason =\n err instanceof PlaygroundLinkError\n ? `${err.code}: ${err.message}`\n : (err as Error).message;\n return {\n isError: true,\n content: [\n { type: \"text\", text: `playground_link failed — ${reason}` },\n ],\n };\n }\n },\n );\n\n server.registerTool(\n \"run_in_sandbox\",\n {\n title: \"Execute a Directive snippet and return its observed behavior\",\n description:\n \"Execute a Directive snippet and return its observed behavior. Use `run_in_sandbox` when you want the transcript IN-CHAT (so you or your next reasoning step can see what happened). Use `playground_link` instead when you want to hand the USER an interactive URL. Both accept identical `source` / `files` shapes — copy the same payload across if you want both.\\n\\nResponse payload: `logs[]` (captured console.log/warn/error), `facts` (post-settle snapshot), `errors[]` (validation/bundle/runtime/timeout messages), `durationMs`, `timedOut`, and `playgroundUrl` (click-through to StackBlitz for the same snippet).\\n\\nDecoding errors:\\n• `'<path>:<line>:<col> — <reason>'` → validation rejection (snippet hit the AST allowlist). REWRITE the snippet; re-running with the same input will reject again.\\n• `'wall-clock budget of Nms elapsed'` plus `timedOut: true` → likely infinite loop or unawaited promise. Don't retry; surface to user.\\n• `'cannot resolve \\\"./X\\\" from \\\"./Y\\\"'` or any `esbuild ...` → bundle failure; check file paths and imports.\\n• Any other string → runtime throw (may be intentional from the module's logic; check `facts` to confirm).\\n\\nSandbox boundary (v0.3.0): the AST allowlist validator rejects (a) imports outside `@directive-run/{core, ai, query, react, vue, svelte, solid, lit, el, optimistic, timeline, mutator, knowledge, scaffold, claude-plugin, lint}` plus relative `./*.js` paths inside the payload, (b) free-identifier references to FS / network / eval surfaces (`process`, `require`, `fetch`, `eval`, `Buffer`, `setTimeout`, etc.), (c) `globalThis.process` / `Reflect.get(globalThis, ...)` / `.constructor` / `Function(...)` and other property-access bypass chains, (d) `@directive-run/{cli, mcp, sandbox, vite-plugin-api-proxy}` (build/CLI/sandbox tooling). The worker has a 5-second wall-clock budget (clamped to [100ms, 10s]) and a 32 MB heap ceiling.\\n\\nNote: `react/vue/svelte/solid/lit` import OK, but their runtime hooks (`useState`, etc.) need a DOM and throw in this Node sandbox. For UI demos, prefer `playground_link` (StackBlitz has a DOM).\\n\\nValidator rejection, bundle failure, runtime error, and timeout all return structured results in `errors` rather than throwing.\",\n inputSchema: {\n source: z\n .string()\n .min(1)\n .max(MAX_PLAYGROUND_SOURCE_BYTES)\n .optional()\n .describe(\n `Single-file source (mutually exclusive with \\`files\\`). Use for already-runnable code. Max ${MAX_PLAYGROUND_SOURCE_BYTES} bytes.`,\n ),\n files: z\n .array(\n z.object({\n path: z\n .string()\n .min(1)\n .max(120)\n .describe(\n \"Relative path inside the sandbox, e.g. 'src/counter.ts'. One file MUST be 'src/main.ts' — that's the entry point the worker imports.\",\n ),\n source: z.string().min(1).describe(\"File contents.\"),\n }),\n )\n .min(1)\n .max(10)\n .optional()\n .describe(\n \"Multi-file payload (mutually exclusive with `source`). Use for `generate_module` paired output.\",\n ),\n timeoutMs: z\n .number()\n .int()\n .min(100)\n .max(10_000)\n .optional()\n .describe(\n \"Wall-clock execution budget in milliseconds. Default 5000. Clamped to [100, 10000].\",\n ),\n },\n },\n async ({ source, files, timeoutMs }) => {\n try {\n const result = await runInSandboxTool({\n source,\n files: files as { path: string; source: string }[] | undefined,\n timeoutMs,\n });\n // Build a playgroundUrl alongside the transcript so the LLM can\n // hand the user a click-through to edit the same snippet in\n // StackBlitz if the transcript is interesting (or if it errored\n // and the user wants to debug interactively).\n let playgroundUrl: string | null = null;\n try {\n const link = buildPlaygroundLink({\n source,\n files: files as { path: string; source: string }[] | undefined,\n });\n playgroundUrl = link.url;\n } catch {\n // Playground URL is a convenience; failing to build one\n // shouldn't gate the transcript response.\n }\n const payload = {\n logs: result.logs,\n facts: result.facts,\n errors: result.errors,\n durationMs: result.durationMs,\n timedOut: result.timedOut,\n playgroundUrl,\n };\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(payload, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n const reason =\n err instanceof SandboxRunnerError\n ? `${err.code}: ${err.message}`\n : (err as Error).message;\n return {\n isError: true,\n content: [\n { type: \"text\", text: `run_in_sandbox failed — ${reason}` },\n ],\n };\n }\n },\n );\n\n return server;\n}\n","/**\n * SSE (Server-Sent Events) transport for the Directive MCP server.\n * Hosts the server over HTTP so remote clients can call tools at\n * retrieval time.\n *\n * AE Security review (P0 #4) hardened the public-facing surface:\n *\n * - **Token auth** is REQUIRED when the bind host is not loopback.\n * `Authorization: Bearer <token>` must match `--token <value>` (or\n * the `DIRECTIVE_MCP_TOKEN` env var). Loopback hosts may run\n * unauthenticated for local dev.\n * - **Body cap** at 1 MB on `/messages` POSTs (`Content-Length`\n * pre-check + streaming guard). Anything larger gets 413.\n * - **Session cap** at 64 concurrent SSE connections. Past the cap\n * the next SSE GET returns 429.\n * - **Idle timeout** at 5 minutes per session. Idle transports are\n * pruned at a 30-second sweep.\n * - **Origin allowlist** via `--allow-origin` (repeatable). When set,\n * requests with an `Origin` header not in the list are rejected.\n *\n * Endpoints:\n *\n * - `GET /sse` — establish the SSE stream. One session per client.\n * - `POST /messages?sessionId=…` — client→server JSON-RPC messages.\n * - `GET /healthz` — liveness probe returning 200 + `ok`.\n */\n\nimport {\n type IncomingMessage,\n type Server,\n type ServerResponse,\n createServer,\n} from \"node:http\";\nimport { SSEServerTransport } from \"@modelcontextprotocol/sdk/server/sse.js\";\nimport { createDirectiveServer, setServerInfo } from \"./server.js\";\n\nconst MESSAGES_PATH = \"/messages\";\nconst SSE_PATH = \"/sse\";\nconst HEALTHZ_PATH = \"/healthz\";\n\nconst DEFAULT_BODY_LIMIT_BYTES = 1_000_000;\nconst DEFAULT_MAX_SESSIONS = 64;\nconst DEFAULT_IDLE_TIMEOUT_MS = 5 * 60 * 1000;\nconst IDLE_SWEEP_INTERVAL_MS = 30_000;\n\nconst LOOPBACK_HOSTS = new Set([\n \"127.0.0.1\",\n \"localhost\",\n \"::1\",\n \"0:0:0:0:0:0:0:1\",\n]);\n\nexport interface SseServerOptions {\n /** Port to listen on. Default: 3000. */\n port?: number;\n /** Host to bind to. Default: `127.0.0.1`. Use `0.0.0.0` for public deployments. */\n host?: string;\n /** Optional logger. Default: `console`. */\n logger?: Pick<Console, \"log\" | \"warn\" | \"error\">;\n /**\n * Bearer token required on every request to /sse and /messages.\n * MANDATORY when host is not loopback; rejected if both omitted.\n */\n token?: string;\n /** Allowed values for the request `Origin` header. Empty/undefined = no check. */\n allowOrigins?: string[];\n /** Max bytes accepted on a single /messages POST. Default: 1 MB. */\n bodyLimitBytes?: number;\n /** Max concurrent SSE sessions. Default: 64. */\n maxSessions?: number;\n /** Idle-timeout pruning threshold. Default: 5 minutes. */\n idleTimeoutMs?: number;\n}\n\ninterface ActiveSession {\n transport: SSEServerTransport;\n lastActivity: number;\n}\n\ntype Sessions = Map<string, ActiveSession>;\ntype Logger = Pick<Console, \"log\" | \"warn\" | \"error\">;\n\ninterface ResolvedConfig {\n port: number;\n host: string;\n logger: Logger;\n token?: string;\n allowOrigins: string[];\n bodyLimitBytes: number;\n maxSessions: number;\n idleTimeoutMs: number;\n}\n\nclass SseConfigError extends Error {}\n\nfunction isLoopback(host: string): boolean {\n return LOOPBACK_HOSTS.has(host.toLowerCase());\n}\n\nfunction resolveConfig(options: SseServerOptions): ResolvedConfig {\n const port = options.port ?? 3000;\n const host = options.host ?? \"127.0.0.1\";\n const logger = options.logger ?? console;\n const token = options.token ?? process.env.DIRECTIVE_MCP_TOKEN ?? undefined;\n\n if (!isLoopback(host) && !token) {\n throw new SseConfigError(\n \"Public hosts require a token. Pass --token <value> or set DIRECTIVE_MCP_TOKEN, or bind to 127.0.0.1 for local dev.\",\n );\n }\n\n return {\n port,\n host,\n logger,\n token,\n allowOrigins: options.allowOrigins ?? [],\n bodyLimitBytes: options.bodyLimitBytes ?? DEFAULT_BODY_LIMIT_BYTES,\n maxSessions: options.maxSessions ?? DEFAULT_MAX_SESSIONS,\n idleTimeoutMs: options.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS,\n };\n}\n\nfunction checkAuth(\n req: IncomingMessage,\n expected: string | undefined,\n): boolean {\n if (!expected) {\n return true;\n }\n const header = req.headers.authorization;\n if (typeof header !== \"string\") {\n return false;\n }\n const match = /^Bearer\\s+(.+)$/i.exec(header);\n return match?.[1]?.trim() === expected;\n}\n\nfunction checkOrigin(req: IncomingMessage, allow: string[]): boolean {\n if (allow.length === 0) {\n return true;\n }\n const origin = req.headers.origin;\n if (typeof origin !== \"string\") {\n return false;\n }\n return allow.includes(origin);\n}\n\nfunction reject(\n res: ServerResponse,\n status: number,\n message: string,\n headers: Record<string, string> = {},\n): void {\n res.writeHead(status, { \"Content-Type\": \"text/plain\", ...headers });\n res.end(message);\n}\n\nfunction updateSetServerInfo(sessions: Sessions, authEnabled: boolean): void {\n setServerInfo({\n transport: \"sse\",\n authEnabled,\n sessionCount: sessions.size,\n });\n}\n\n// Synchronous claim counter — every connect path that has not yet hit\n// `sessions.set` increments this BEFORE any code that could yield. The\n// cap check sums sessions.size + pendingConnects, so even if a future\n// SDK version makes SSEServerTransport's constructor async-leaky, the\n// count is correctly reserved.\nlet pendingConnects = 0;\n\nasync function handleSseConnect(\n req: IncomingMessage,\n res: ServerResponse,\n sessions: Sessions,\n config: ResolvedConfig,\n): Promise<void> {\n if (!checkAuth(req, config.token)) {\n reject(res, 401, \"unauthorized\");\n return;\n }\n if (!checkOrigin(req, config.allowOrigins)) {\n reject(res, 403, \"origin not allowed\");\n return;\n }\n if (sessions.size + pendingConnects >= config.maxSessions) {\n reject(res, 429, \"session cap reached\", { \"Retry-After\": \"60\" });\n return;\n }\n pendingConnects += 1;\n\n let claimed = false;\n try {\n const transport = new SSEServerTransport(MESSAGES_PATH, res);\n const server = createDirectiveServer();\n sessions.set(transport.sessionId, {\n transport,\n lastActivity: Date.now(),\n });\n claimed = true;\n updateSetServerInfo(sessions, Boolean(config.token));\n\n const cleanup = () => {\n sessions.delete(transport.sessionId);\n updateSetServerInfo(sessions, Boolean(config.token));\n };\n res.on(\"close\", cleanup);\n transport.onclose = cleanup;\n\n await server.connect(transport);\n config.logger.log(\n `[directive-mcp] sse session opened: ${transport.sessionId}`,\n );\n } finally {\n pendingConnects -= 1;\n if (!claimed) {\n // Connection rejected before sessions.set ran; nothing to clean up.\n }\n }\n}\n\nasync function handlePostMessage(\n req: IncomingMessage,\n res: ServerResponse,\n url: URL,\n sessions: Sessions,\n config: ResolvedConfig,\n): Promise<void> {\n if (!checkAuth(req, config.token)) {\n reject(res, 401, \"unauthorized\");\n return;\n }\n if (!checkOrigin(req, config.allowOrigins)) {\n reject(res, 403, \"origin not allowed\");\n return;\n }\n\n const declaredLength = Number(req.headers[\"content-length\"] ?? \"0\");\n if (\n Number.isFinite(declaredLength) &&\n declaredLength > config.bodyLimitBytes\n ) {\n reject(res, 413, `body exceeds ${config.bodyLimitBytes} bytes`);\n return;\n }\n\n const sessionId = url.searchParams.get(\"sessionId\");\n if (!sessionId) {\n reject(res, 400, \"missing sessionId query parameter\");\n return;\n }\n\n const session = sessions.get(sessionId);\n if (!session) {\n reject(res, 404, `unknown session: ${sessionId}`);\n return;\n }\n session.lastActivity = Date.now();\n\n let bytesSeen = 0;\n let overflowed = false;\n req.on(\"data\", (chunk: Buffer | string) => {\n bytesSeen += Buffer.byteLength(chunk);\n if (bytesSeen > config.bodyLimitBytes && !overflowed) {\n overflowed = true;\n reject(res, 413, `body exceeds ${config.bodyLimitBytes} bytes`);\n req.destroy();\n }\n });\n\n if (overflowed) {\n return;\n }\n\n await session.transport.handlePostMessage(req, res);\n}\n\nasync function routeRequest(\n req: IncomingMessage,\n res: ServerResponse,\n sessions: Sessions,\n config: ResolvedConfig,\n): Promise<void> {\n const url = new URL(\n req.url ?? \"/\",\n `http://${req.headers.host ?? config.host}`,\n );\n\n if (req.method === \"GET\" && url.pathname === HEALTHZ_PATH) {\n res.writeHead(200, { \"Content-Type\": \"text/plain\" });\n res.end(\"ok\");\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === SSE_PATH) {\n await handleSseConnect(req, res, sessions, config);\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === MESSAGES_PATH) {\n await handlePostMessage(req, res, url, sessions, config);\n return;\n }\n\n reject(res, 404, \"not found\");\n}\n\nfunction startIdleSweep(\n sessions: Sessions,\n config: ResolvedConfig,\n): NodeJS.Timeout {\n return setInterval(() => {\n const now = Date.now();\n for (const [id, session] of sessions) {\n if (now - session.lastActivity > config.idleTimeoutMs) {\n sessions.delete(id);\n session.transport.close().catch(() => undefined);\n updateSetServerInfo(sessions, Boolean(config.token));\n config.logger.log(`[directive-mcp] pruned idle session: ${id}`);\n }\n }\n }, IDLE_SWEEP_INTERVAL_MS).unref();\n}\n\n/**\n * Start an HTTP server that hosts the Directive MCP server over SSE.\n * Returns the underlying Node `http.Server` so callers can `close()`\n * it on shutdown. Throws `SseConfigError` when a non-loopback host\n * is configured without a token.\n */\nexport async function startSseServer(\n options: SseServerOptions = {},\n): Promise<Server> {\n const config = resolveConfig(options);\n const sessions: Sessions = new Map();\n\n const httpServer = createServer(async (req, res) => {\n try {\n await routeRequest(req, res, sessions, config);\n } catch (err) {\n config.logger.error(\"[directive-mcp] request error:\", err);\n if (!res.headersSent) {\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n }\n res.end(\"internal server error\");\n }\n });\n\n const sweeper = startIdleSweep(sessions, config);\n httpServer.on(\"close\", () => {\n clearInterval(sweeper);\n });\n\n await new Promise<void>((resolve) => {\n httpServer.listen(config.port, config.host, () => {\n config.logger.log(\n `[directive-mcp] sse server listening at http://${config.host}:${config.port}${SSE_PATH}${\n config.token\n ? \" (auth: bearer-token)\"\n : \" (auth: none, loopback only)\"\n }`,\n );\n resolve();\n });\n });\n\n return httpServer;\n}\n\nexport { SseConfigError };\n"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/lz-string@1.5.0/node_modules/lz-string/libs/lz-string.js","../src/generated/package-registry.ts","../src/lint-runner.ts","../src/packages.ts","../src/playground.ts","../src/sandbox-runner.ts","../src/server.ts","../src/sse.ts"],"names":["require_lz_string","__commonJSMin","exports","module","LZString","f","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","i","input","res","a","index","compressed","uncompressed","buf","TotalLen","current_value","result","c","bitsPerChar","getCharFromInt","value","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","ii","length","resetValue","getNextValue","dictionary","enlargeIn","dictSize","numBits","entry","w","bits","resb","maxpower","power","data","PACKAGE_REGISTRY","PACKAGE_REGISTRY_BUILT_AT","MAX_SOURCE_BYTES","PARSE_BUDGET_MS","FILENAME_RE","LintRunnerError","message","code","validate","bytes","fileName","resolveWorkerPath","url","fileURLToPath","runInWorker","payload","workerPath","worker","Worker","timer","resolve","reject","resolved","msg","err","shouldUseWorker","runLintInWorker","runRules","applyFixInWorker","applyFix","VERSION_CACHE_TTL_MS","VERSION_FETCH_TIMEOUT_MS","versionCache","listPackages","getPackageInfo","name","e","liveVersion","stale","getLiveVersion","buildPackageInfo","cached","fetchLatestVersion","controller","json","import_lz_string","MAX_PLAYGROUND_SOURCE_BYTES","PREVIEW_BASE_URL","INSTANT_BASE_URL","PlaygroundLinkError","assertByteBudget","encodeHashTitle","title","baseUrlForMode","mode","buildSingleFileUrl","source","parts","buildMultiFileUrl","files","file","buildPlaygroundLink","hasSource","hasFiles","MAX_FILES","FILE_PATH_RE","SandboxRunnerError","validateBounds","totalBytes","runInSandboxTool","runInSandbox","PKG_VERSION","MAX_SEARCH_RESULTS","MAX_LINE_PREVIEW","MAX_QUERY_LENGTH","formatLinePreview","line","collectSearchHits","query","corpus","fileExtension","lowered","hits","content","lines","formatSearchResponse","bundledKnowledgeHash","computeBundledKnowledgeHash","hash","createHash","getAllKnowledge","b","serverInfoOptions","setServerInfo","options","renderDepSection","out","heading","deps","d","renderPackageInfo","info","createDirectiveServer","server","McpServer","knowledge","names","z","getKnowledge","examples","getAllExamples","getExample","packages","p","outgoing","getCompositionsFor","incoming","getReverseCompositionsFor","MODULE_SECTIONS","kind","sections","validation","validateModuleName","scaffold","generateOrchestrator","generateModule","testFileName","suggestFileNames","needed","requiredPackages","rules","getAntiPatterns","compact","r","id","rule","getAntiPatternById","MIGRATION_SOURCES","pattern","getMigrationPattern","row","s","ruleFilter","finding","skills","getAllSkills","skill","getSkill","timeoutMs","playgroundUrl","MESSAGES_PATH","SSE_PATH","HEALTHZ_PATH","DEFAULT_BODY_LIMIT_BYTES","DEFAULT_MAX_SESSIONS","DEFAULT_IDLE_TIMEOUT_MS","IDLE_SWEEP_INTERVAL_MS","LOOPBACK_HOSTS","SseConfigError","isLoopback","host","resolveConfig","port","logger","token","checkAuth","req","expected","header","checkOrigin","allow","origin","status","headers","updateSetServerInfo","sessions","authEnabled","pendingConnects","handleSseConnect","config","claimed","transport","SSEServerTransport","cleanup","handlePostMessage","declaredLength","sessionId","session","bytesSeen","overflowed","chunk","routeRequest","startIdleSweep","now","startSseServer","httpServer","createServer","sweeper"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.5\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n} else if( typeof angular !== 'undefined' && angular != null ) {\n angular.module('LZString', [])\n .factory('LZString', function () {\n return LZString;\n });\n}\n","// AUTO-GENERATED by packages/mcp/scripts/build-package-registry.ts\n// Do not edit by hand. Run `pnpm --filter @directive-run/mcp build:registry`.\nexport interface PackageRegistryEntry {\n name: string;\n version: string;\n description: string;\n homepage?: string;\n keywords: readonly string[];\n dependencies: readonly string[];\n peerDependencies: readonly string[];\n optionalDependencies: readonly string[];\n exports: readonly string[];\n directory: string;\n published: boolean;\n}\n\nexport const PACKAGE_REGISTRY: readonly PackageRegistryEntry[] = [\n {\n \"name\": \"@directive-run/ai\",\n \"version\": \"1.19.6\",\n \"description\": \"AI guardrails and orchestration for Directive. Prompt injection, PII detection, cost tracking, multi-agent patterns.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"ai\",\n \"agents\",\n \"guardrails\",\n \"orchestration\",\n \"llm\",\n \"constraint-driven\",\n \"ai-safety\",\n \"prompt-injection\",\n \"pii-detection\",\n \"cost-tracking\",\n \"multi-agent\",\n \"openai\",\n \"anthropic\",\n \"ollama\",\n \"gemini\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./anthropic\",\n \"./devtools\",\n \"./evals\",\n \"./gemini\",\n \"./guardrails\",\n \"./mcp\",\n \"./multi-agent\",\n \"./ollama\",\n \"./openai\",\n \"./predicate\",\n \"./testing\"\n ],\n \"directory\": \"ai\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/claude-plugin\",\n \"version\": \"1.19.6\",\n \"description\": \"Claude Code plugin for Directive — 12 skills covering modules, constraints, resolvers, derivations, AI orchestration, and adapters. Installable via Claude Code's plugin marketplace or consumable programmatically as an npm package.\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"claude\",\n \"claude-code\",\n \"skills\",\n \"ai-rules\",\n \"plugin\",\n \"agents\",\n \"knowledge\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"claude-plugin\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/cli\",\n \"version\": \"1.19.6\",\n \"description\": \"CLI tools for Directive — AI coding rules, scaffolding, and more.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"cli\",\n \"ai-rules\",\n \"cursor\",\n \"copilot\",\n \"claude\",\n \"windsurf\",\n \"cline\",\n \"llms-txt\"\n ],\n \"dependencies\": [\n \"@clack/prompts\",\n \"@directive-run/knowledge\",\n \"@directive-run/scaffold\",\n \"picocolors\"\n ],\n \"peerDependencies\": [\n \"@directive-run/timeline\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./llms.txt\"\n ],\n \"directory\": \"cli\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/core\",\n \"version\": \"1.19.6\",\n \"description\": \"The constraint-driven runtime for TypeScript. Declare what must be true — the runtime makes it happen.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"constraint-driven\",\n \"state-management\",\n \"constraints\",\n \"reactive\",\n \"runtime\",\n \"typescript\",\n \"ai-guardrails\",\n \"zero-dependencies\",\n \"auto-tracking\",\n \"framework-agnostic\",\n \"declarative\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./adapter-utils\",\n \"./internals\",\n \"./migration\",\n \"./plugins\",\n \"./testing\",\n \"./worker\"\n ],\n \"directory\": \"core\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/el\",\n \"version\": \"1.1.0\",\n \"description\": \"Vanilla DOM adapter for Directive. Typed element creation + reactive bindings + JSX runtime.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"vanilla\",\n \"dom\",\n \"elements\",\n \"jsx\",\n \"htm\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"htm\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./htm\",\n \"./jsx-dev-runtime\",\n \"./jsx-runtime\"\n ],\n \"directory\": \"el\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/knowledge\",\n \"version\": \"1.19.6\",\n \"description\": \"Knowledge files, examples, and validation for Directive — the constraint-driven TypeScript runtime.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"knowledge\",\n \"ai-rules\",\n \"examples\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"knowledge\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/lint\",\n \"version\": \"0.1.2\",\n \"description\": \"ts-morph-based static analysis for Directive code. Rule registry + executable checks + autofixes. Consumed by @directive-run/mcp (review_source, fix_code tools) and the future `directive doctor lint` CLI command. Anti-pattern data sourced from @directive-run/knowledge so rule IDs stay in lock-step.\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"lint\",\n \"ast\",\n \"ts-morph\",\n \"review\",\n \"anti-patterns\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [\n \"ts-morph\"\n ],\n \"exports\": [\n \".\",\n \"./executable\",\n \"./worker\"\n ],\n \"directory\": \"lint\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/lit\",\n \"version\": \"1.19.6\",\n \"description\": \"Lit web components adapter for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"lit\",\n \"web-components\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"lit\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"lit\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/mcp\",\n \"version\": \"0.5.11\",\n \"description\": \"Model Context Protocol server that exposes Directive to AI clients — knowledge files, code examples, and Claude Code skill bundles today, with room to grow into runtime introspection and tooling. stdio for local clients (Claude Desktop, Cursor, MCP Inspector), SSE for hosted deployments at mcp.directive.run.\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"mcp\",\n \"model-context-protocol\",\n \"knowledge\",\n \"ai-rules\",\n \"sse\",\n \"stdio\"\n ],\n \"dependencies\": [\n \"@directive-run/claude-plugin\",\n \"@directive-run/knowledge\",\n \"@directive-run/lint\",\n \"@directive-run/sandbox\",\n \"@directive-run/scaffold\",\n \"@modelcontextprotocol/sdk\",\n \"lz-string\",\n \"zod\"\n ],\n \"peerDependencies\": [],\n \"optionalDependencies\": [\n \"ts-morph\"\n ],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"mcp\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/mutator\",\n \"version\": \"0.3.1\",\n \"description\": \"Discriminated mutation helper for Directive — collapse the pendingAction ceremony to a typed handler map.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"mutator\",\n \"state-management\",\n \"discriminated-union\",\n \"optimistic-update\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"mutator\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/optimistic\",\n \"version\": \"0.2.0\",\n \"description\": \"Resolver-scope optimistic update + automatic rollback for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"optimistic\",\n \"rollback\",\n \"snapshot\",\n \"state-management\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"optimistic\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/query\",\n \"version\": \"1.2.0\",\n \"description\": \"Declarative data fetching for Directive. Constraint-driven queries with causal cache invalidation.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"data-fetching\",\n \"query\",\n \"cache\",\n \"stale-while-revalidate\",\n \"constraint-driven\",\n \"reactive\",\n \"typescript\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"query\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/react\",\n \"version\": \"1.19.6\",\n \"description\": \"React hooks and components for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"react\",\n \"hooks\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"@directive-run/query\",\n \"react\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"react\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/sandbox\",\n \"version\": \"0.3.9\",\n \"description\": \"Execute Directive snippets server-side and return a structured transcript (logs + facts + errors). Consumed by @directive-run/mcp's run_in_sandbox tool and directive.run/playground's live DevTools panel. Uses worker_threads + esbuild bundling + an AST allowlist validator so user-supplied TypeScript runs with a bounded surface (allowlisted imports, allowlisted API calls, 5s wall clock, 32 MB heap).\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"sandbox\",\n \"worker-threads\",\n \"execute\",\n \"transcript\"\n ],\n \"dependencies\": [\n \"@directive-run/core\"\n ],\n \"peerDependencies\": [],\n \"optionalDependencies\": [\n \"esbuild\",\n \"ts-morph\"\n ],\n \"exports\": [\n \".\",\n \"./worker\"\n ],\n \"directory\": \"sandbox\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/scaffold\",\n \"version\": \"0.2.0\",\n \"description\": \"Pure source-string generators for Directive modules and orchestrators. Shared substrate consumed by @directive-run/cli (its `directive new` command) and @directive-run/mcp (its `generate_module` tool). Zero runtime dependencies.\",\n \"homepage\": \"https://directive.run/docs/ide-integration\",\n \"keywords\": [\n \"directive\",\n \"scaffold\",\n \"codegen\",\n \"module-generator\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"scaffold\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/solid\",\n \"version\": \"1.19.6\",\n \"description\": \"Solid.js signals adapter for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"solid\",\n \"solidjs\",\n \"signals\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"@directive-run/query\",\n \"solid-js\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"solid\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/sources\",\n \"version\": \"0.3.0\",\n \"description\": \"Source adapters for Directive — wrap Supabase realtime, Cloudflare DO alarms, WebSocket, Sentry, etc. as typed `source` primitives. One package, one install, subpath exports per vendor.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"source\",\n \"supabase\",\n \"cloudflare\",\n \"realtime\",\n \"websocket\",\n \"state-management\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@cloudflare/workers-types\",\n \"@directive-run/core\",\n \"@supabase/supabase-js\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./cloudflare\",\n \"./supabase\"\n ],\n \"directory\": \"sources\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/svelte\",\n \"version\": \"1.19.6\",\n \"description\": \"Svelte stores adapter for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"svelte\",\n \"stores\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"@directive-run/query\",\n \"svelte\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"svelte\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/timeline\",\n \"version\": \"0.3.2\",\n \"description\": \"Time-travel test REPL for Directive. Auto-renders the causal-graph timeline of any failing test.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"time-travel\",\n \"test-debugging\",\n \"vitest\",\n \"causal-graph\",\n \"state-management\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"vitest\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\",\n \"./matchers\",\n \"./reporter\"\n ],\n \"directory\": \"timeline\",\n \"published\": true\n },\n {\n \"name\": \"@directive-run/vite-plugin-api-proxy\",\n \"version\": \"0.1.1\",\n \"description\": \"\",\n \"keywords\": [],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"vite\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"vite-plugin-api-proxy\",\n \"published\": false\n },\n {\n \"name\": \"@directive-run/vue\",\n \"version\": \"1.19.6\",\n \"description\": \"Vue composition API adapter for Directive.\",\n \"homepage\": \"https://directive.run\",\n \"keywords\": [\n \"directive\",\n \"vue\",\n \"composition-api\",\n \"state-management\",\n \"reactive\",\n \"constraint-driven\"\n ],\n \"dependencies\": [],\n \"peerDependencies\": [\n \"@directive-run/core\",\n \"@directive-run/query\",\n \"vue\"\n ],\n \"optionalDependencies\": [],\n \"exports\": [\n \".\"\n ],\n \"directory\": \"vue\",\n \"published\": true\n }\n] as const;\n\nexport const PACKAGE_REGISTRY_BUILT_AT = \"2026-06-10T14:21:08.177Z\";\n","// Lint shim for @directive-run/lint.\n//\n// AE Security review (P0 #3): synchronous ts-morph parsing cannot be\n// aborted via setTimeout on the main thread, so a hostile source\n// could in principle pin a CPU past our budget. Pre-parse byte caps\n// + a soft timeout are enforced here; worker_threads-based hard\n// termination is gated behind DIRECTIVE_MCP_USE_LINT_WORKER=1 (the\n// integration is sound but vitest's pool model + Worker spawning\n// don't co-exist cleanly, so the default is in-process for now —\n// see v0.3.0 candidates).\n//\n// Pre-parse caps are enforced HERE, not in the worker, so a hostile\n// source can't even reach the parser if it's over the size budget.\n\nimport { fileURLToPath } from \"node:url\";\nimport { Worker } from \"node:worker_threads\";\nimport { applyFix, runRules } from \"@directive-run/lint\";\nimport type { Finding, FixResult, RunResult } from \"@directive-run/lint\";\n\nconst MAX_SOURCE_BYTES = 200_000;\nconst PARSE_BUDGET_MS = 5_000;\nconst FILENAME_RE = /^[\\w./-]{1,128}$/;\n\nexport interface LintRunInput {\n source: string;\n fileName?: string;\n ruleFilter?: string[];\n}\n\nexport interface LintFixInput {\n source: string;\n finding: Finding;\n}\n\nexport class LintRunnerError extends Error {\n constructor(\n message: string,\n public readonly code:\n | \"source-too-large\"\n | \"bad-filename\"\n | \"worker-error\"\n | \"timeout\",\n ) {\n super(message);\n }\n}\n\nfunction validate(input: LintRunInput | LintFixInput): void {\n const bytes = Buffer.byteLength(input.source, \"utf8\");\n if (bytes > MAX_SOURCE_BYTES) {\n throw new LintRunnerError(\n `source is ${bytes} bytes (max ${MAX_SOURCE_BYTES})`,\n \"source-too-large\",\n );\n }\n const fileName = \"fileName\" in input ? input.fileName : undefined;\n if (fileName !== undefined && !FILENAME_RE.test(fileName)) {\n throw new LintRunnerError(\"invalid fileName\", \"bad-filename\");\n }\n}\n\nasync function resolveWorkerPath(): Promise<string> {\n // import.meta.resolve is ESM-native and respects the `import`-only\n // export at `@directive-run/lint/worker`. It returns a file: URL.\n const url = await import.meta.resolve(\"@directive-run/lint/worker\");\n return fileURLToPath(url);\n}\n\nasync function runInWorker<TIn, TOut>(payload: TIn): Promise<TOut> {\n const workerPath = await resolveWorkerPath();\n const worker = new Worker(workerPath, { stderr: false });\n let timer: NodeJS.Timeout | null = null;\n try {\n return await new Promise<TOut>((resolve, reject) => {\n let resolved = false;\n worker.once(\n \"message\",\n (msg: { ok: boolean; result?: TOut; error?: string }) => {\n resolved = true;\n if (msg.ok && msg.result !== undefined) {\n resolve(msg.result);\n } else {\n reject(\n new LintRunnerError(\n msg.error ?? \"worker returned without result\",\n \"worker-error\",\n ),\n );\n }\n },\n );\n worker.once(\"error\", (err: Error) => {\n resolved = true;\n reject(new LintRunnerError(err.message, \"worker-error\"));\n });\n worker.once(\"exit\", (code) => {\n if (!resolved && code !== 0 && code !== null) {\n reject(\n new LintRunnerError(\n `worker exited with code ${code} before responding`,\n \"worker-error\",\n ),\n );\n }\n });\n timer = setTimeout(() => {\n worker.terminate();\n reject(\n new LintRunnerError(\n `parse exceeded ${PARSE_BUDGET_MS}ms budget`,\n \"timeout\",\n ),\n );\n }, PARSE_BUDGET_MS);\n worker.postMessage(payload);\n });\n } finally {\n if (timer) {\n clearTimeout(timer);\n }\n await worker.terminate().catch(() => undefined);\n }\n}\n\nfunction shouldUseWorker(): boolean {\n // Default ON in production so synchronous ts-morph parses cannot pin\n // the event loop past the 5-second budget (AE v0.2.0 P0 #3). Disable\n // inside vitest (Vitest's pool model conflicts with spawned Workers)\n // or via explicit DIRECTIVE_MCP_USE_LINT_WORKER=0.\n if (process.env.DIRECTIVE_MCP_USE_LINT_WORKER === \"0\") {\n return false;\n }\n if (process.env.VITEST === \"true\") {\n return false;\n }\n return true;\n}\n\nexport async function runLintInWorker(input: LintRunInput): Promise<RunResult> {\n validate(input);\n if (shouldUseWorker()) {\n return runInWorker<\n {\n kind: \"run\";\n source: string;\n options?: { fileName?: string; ruleFilter?: string[] };\n },\n RunResult\n >({\n kind: \"run\",\n source: input.source,\n options: {\n fileName: input.fileName,\n ruleFilter: input.ruleFilter,\n },\n });\n }\n return runRules(input.source, {\n fileName: input.fileName,\n ruleFilter: input.ruleFilter,\n });\n}\n\nexport async function applyFixInWorker(\n input: LintFixInput,\n): Promise<FixResult> {\n validate(input);\n if (shouldUseWorker()) {\n return runInWorker<\n { kind: \"fix\"; source: string; finding: Finding },\n FixResult\n >({\n kind: \"fix\",\n source: input.source,\n finding: input.finding,\n });\n }\n return applyFix(input.source, input.finding);\n}\n","// Package metadata helpers for the MCP `list_packages` and\n// `get_package_info` tools.\n//\n// Strategy:\n// - Static metadata (name, description, deps, exports) comes from\n// the build-time-baked PACKAGE_REGISTRY (see scripts/build-package-registry.ts).\n// - Live version + dist-tags.latest is fetched from npm at tool-call\n// time and cached in-memory for 1 hour. On network failure (or\n// when the package was never published, as for private workspace\n// packages), the baked version is returned with a `stale: true`\n// flag so the agent can disambiguate.\n// - All inputs are normalized through the registry — there is no\n// code path where untrusted strings reach npm or the filesystem.\n\nimport {\n PACKAGE_REGISTRY,\n type PackageRegistryEntry,\n} from \"./generated/package-registry.js\";\n\nexport type { PackageRegistryEntry } from \"./generated/package-registry.js\";\n\ninterface VersionCacheEntry {\n fetchedAt: number;\n liveVersion?: string;\n latest?: string;\n error?: string;\n}\n\nconst VERSION_CACHE_TTL_MS = 60 * 60 * 1000;\nconst VERSION_FETCH_TIMEOUT_MS = 3_000;\nconst versionCache = new Map<string, VersionCacheEntry>();\n\nexport interface PackageSummary {\n name: string;\n summary: string;\n published: boolean;\n}\n\nexport interface PackageInfo {\n name: string;\n description: string;\n homepage?: string;\n keywords: readonly string[];\n dependencies: readonly string[];\n peerDependencies: readonly string[];\n optionalDependencies: readonly string[];\n exports: readonly string[];\n published: boolean;\n /** npm registry URL when published, otherwise undefined. */\n npmUrl?: string;\n /** Version as baked into mcp at publish time. */\n bakedVersion: string;\n /** Live version from registry.npmjs.org/<pkg>/latest. May be undefined on network failure or for private packages. */\n liveVersion?: string;\n /** True when the live fetch failed and we fell back to bakedVersion. */\n stale: boolean;\n}\n\n/** Every known package, returned in stable registry order. */\nexport function listPackages(): PackageSummary[] {\n return PACKAGE_REGISTRY.map((entry) => ({\n name: entry.name,\n summary: entry.description,\n published: entry.published,\n }));\n}\n\n/**\n * Detail for one package. Hits npm for the latest version (1h cache,\n * 3s timeout). Returns `undefined` when no such @directive-run/*\n * package is known to mcp.\n */\nexport async function getPackageInfo(\n name: string,\n): Promise<PackageInfo | undefined> {\n const entry = PACKAGE_REGISTRY.find((e) => e.name === name);\n if (!entry) {\n return undefined;\n }\n\n const { liveVersion, stale } = await getLiveVersion(entry);\n return buildPackageInfo(entry, liveVersion, stale);\n}\n\nfunction buildPackageInfo(\n entry: PackageRegistryEntry,\n liveVersion: string | undefined,\n stale: boolean,\n): PackageInfo {\n return {\n name: entry.name,\n description: entry.description,\n homepage: entry.homepage,\n keywords: entry.keywords,\n dependencies: entry.dependencies,\n peerDependencies: entry.peerDependencies,\n optionalDependencies: entry.optionalDependencies,\n exports: entry.exports,\n published: entry.published,\n npmUrl: entry.published\n ? `https://www.npmjs.com/package/${entry.name}`\n : undefined,\n bakedVersion: entry.version,\n liveVersion,\n stale,\n };\n}\n\ninterface LiveVersionResult {\n liveVersion?: string;\n stale: boolean;\n}\n\nasync function getLiveVersion(\n entry: PackageRegistryEntry,\n): Promise<LiveVersionResult> {\n if (!entry.published) {\n return { stale: true };\n }\n const cached = versionCache.get(entry.name);\n if (cached && Date.now() - cached.fetchedAt < VERSION_CACHE_TTL_MS) {\n return {\n liveVersion: cached.liveVersion,\n stale: cached.liveVersion === undefined,\n };\n }\n\n const result = await fetchLatestVersion(entry.name);\n versionCache.set(entry.name, {\n fetchedAt: Date.now(),\n liveVersion: result.liveVersion,\n latest: result.liveVersion,\n error: result.error,\n });\n return {\n liveVersion: result.liveVersion,\n stale: result.liveVersion === undefined,\n };\n}\n\nasync function fetchLatestVersion(\n name: string,\n): Promise<{ liveVersion?: string; error?: string }> {\n const url = `https://registry.npmjs.org/${encodeURIComponent(name).replace(/%2F/g, \"/\")}/latest`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), VERSION_FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, { signal: controller.signal });\n if (!res.ok) {\n return { error: `HTTP ${res.status}` };\n }\n const json = (await res.json()) as { version?: string };\n if (typeof json.version === \"string\") {\n return { liveVersion: json.version };\n }\n return { error: \"no version field\" };\n } catch (err) {\n return { error: (err as Error).message };\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** Test / dev helper. */\nexport function clearVersionCache(): void {\n versionCache.clear();\n}\n","// Builds shareable \"open this in a real editor\" links for code snippets\n// returned by other MCP tools (generate_module, get_example, fix_code, …).\n//\n// The link points at directive.run/playground — a route on the docs site\n// that decompresses the source from the URL hash, shows it in a syntax-\n// highlighted editor, and offers an \"Open in StackBlitz\" button wired to\n// the same @stackblitz/sdk flow the existing example demos use. The user\n// lands in a real running Directive project pre-populated with either a\n// single `src/main.ts` (when called with a single `source`) or a paired\n// `src/<name>.ts` + `src/main.ts` bundle (when called with a `files`\n// array, e.g. the output of `generate_module` which produces both a\n// library and a runner driver).\n//\n// Two modes:\n// - `mode: \"preview\"` (default) — directive.run/playground. Page shows\n// the code with syntax highlighting + an \"Open in StackBlitz\" button.\n// The only Directive-branded surface in the flow and the one a first-\n// time user is most likely to land on, so this stays the default.\n// - `mode: \"instant\"` — directive.run/run. Thin redirect that server-\n// renders the StackBlitz POST form and auto-submits it on load. Skips\n// the preview UI; lands the user in the StackBlitz editor in ~600ms.\n// Use when the user has already road-tested one link in this\n// conversation, or when they explicitly want \"just open it\".\n//\n// Payload travels in the URL hash (not the query string) for three\n// reasons: (1) hashes aren't sent to the server so the source never\n// hits server access logs; (2) most chat clients preserve hashes\n// faithfully; (3) it mirrors the TS Playground convention so future\n// tooling that reads either format can decode the same way.\n\nimport { compressToEncodedURIComponent } from \"lz-string\";\n\n// Hard cap on raw input the tool will encode. Chosen because:\n// - Most chat clients (Slack, Discord, Teams, iMessage) reliably\n// preserve URLs up to ~8 KB even after compression overhead.\n// - The biggest realistic snippet we ship (the full traffic-light\n// module in get_example) is ~4 KB raw → fits with headroom.\n// - Anything larger should be opened in a real sandbox directly\n// rather than embedded in a URL.\n//\n// Applied to single-source input directly, and to the JSON-encoded\n// files-array for multi-file input (the per-file boundary is fuzzier\n// but the post-compress URL stays bounded).\nexport const MAX_PLAYGROUND_SOURCE_BYTES = 8_000;\n\nconst PREVIEW_BASE_URL = \"https://directive.run/playground\";\nconst INSTANT_BASE_URL = \"https://directive.run/run\";\n\nexport type PlaygroundMode = \"preview\" | \"instant\";\n\nexport interface PlaygroundFile {\n /** Relative path inside the StackBlitz project, e.g. \"src/main.ts\". */\n path: string;\n /** File contents. */\n source: string;\n}\n\nexport interface BuildPlaygroundLinkInput {\n /**\n * Single-file shortcut. Mutually exclusive with `files`. Used by\n * tools whose output is already a runnable program (`get_example`,\n * `fix_code`). Mapped onto `src/main.ts` server-side.\n */\n source?: string;\n /**\n * Multi-file payload. Used by `generate_module`'s paired output\n * (library + runner) so the StackBlitz project boots a real demo.\n * The page treats one of these as `src/main.ts`; convention is\n * the runner.\n */\n files?: PlaygroundFile[];\n /**\n * Optional short label echoed back in the response so the LLM has\n * something descriptive to surface alongside the URL. Encoded into\n * the link via the `t=` hash field; the playground page reads it\n * and uses it as the editor tab title.\n */\n title?: string;\n /**\n * Which landing page the URL targets. Default `\"preview\"`.\n * - `\"preview\"` → directive.run/playground (code + Open-in-StackBlitz button)\n * - `\"instant\"` → directive.run/run (auto-submit form to StackBlitz)\n */\n mode?: PlaygroundMode;\n}\n\nexport interface BuildPlaygroundLinkResult {\n url: string;\n /** UTF-8 byte length of the canonical encoded payload. */\n sizeBytes: number;\n /** Final URL byte length, post-compression. */\n urlBytes: number;\n /** Number of files in the encoded payload. 1 for single-file input. */\n fileCount: number;\n /** Echoed mode. */\n mode: PlaygroundMode;\n title?: string;\n}\n\nexport class PlaygroundLinkError extends Error {\n constructor(\n message: string,\n public readonly code:\n | \"source-empty\"\n | \"source-too-large\"\n | \"no-input\"\n | \"both-source-and-files\"\n | \"invalid-file\",\n ) {\n super(message);\n }\n}\n\nfunction assertByteBudget(bytes: number): void {\n if (bytes > MAX_PLAYGROUND_SOURCE_BYTES) {\n throw new PlaygroundLinkError(\n `payload is ${bytes} bytes (max ${MAX_PLAYGROUND_SOURCE_BYTES}). Payloads larger than ${MAX_PLAYGROUND_SOURCE_BYTES} bytes don't fit reliably in a URL — copy the source into a fresh Stackblitz project instead.`,\n \"source-too-large\",\n );\n }\n}\n\nfunction encodeHashTitle(title: string): string {\n // RFC 3986 reserves a handful of characters in fragments; the\n // standard fragment grammar lets unreserved chars + `-._~` through\n // raw. encodeURIComponent is overzealous but always safe.\n return encodeURIComponent(title);\n}\n\nfunction baseUrlForMode(mode: PlaygroundMode): string {\n return mode === \"instant\" ? INSTANT_BASE_URL : PREVIEW_BASE_URL;\n}\n\nfunction buildSingleFileUrl(\n source: string,\n title: string | undefined,\n mode: PlaygroundMode,\n): BuildPlaygroundLinkResult {\n if (source.length === 0) {\n throw new PlaygroundLinkError(\"source is empty\", \"source-empty\");\n }\n const bytes = Buffer.byteLength(source, \"utf8\");\n assertByteBudget(bytes);\n\n const encoded = compressToEncodedURIComponent(source);\n const parts = [`src=${encoded}`];\n if (title) {\n parts.push(`t=${encodeHashTitle(title)}`);\n }\n const url = `${baseUrlForMode(mode)}#${parts.join(\"&\")}`;\n return {\n url,\n sizeBytes: bytes,\n urlBytes: Buffer.byteLength(url, \"utf8\"),\n fileCount: 1,\n mode,\n title,\n };\n}\n\nfunction buildMultiFileUrl(\n files: PlaygroundFile[],\n title: string | undefined,\n mode: PlaygroundMode,\n): BuildPlaygroundLinkResult {\n if (files.length === 0) {\n throw new PlaygroundLinkError(\"files array is empty\", \"source-empty\");\n }\n for (const file of files) {\n if (typeof file.path !== \"string\" || file.path.length === 0) {\n throw new PlaygroundLinkError(\n \"every file must have a non-empty path\",\n \"invalid-file\",\n );\n }\n if (typeof file.source !== \"string\" || file.source.length === 0) {\n throw new PlaygroundLinkError(\n `file '${file.path}' has empty source`,\n \"invalid-file\",\n );\n }\n }\n\n // JSON-encode the files array, then enforce the byte budget against\n // the JSON wrapper (not the per-file raw bytes), so the URL itself\n // stays within the 8 KB ceiling regardless of how the files split.\n const json = JSON.stringify(files);\n const bytes = Buffer.byteLength(json, \"utf8\");\n assertByteBudget(bytes);\n\n const encoded = compressToEncodedURIComponent(json);\n const parts = [`files=${encoded}`];\n if (title) {\n parts.push(`t=${encodeHashTitle(title)}`);\n }\n const url = `${baseUrlForMode(mode)}#${parts.join(\"&\")}`;\n return {\n url,\n sizeBytes: bytes,\n urlBytes: Buffer.byteLength(url, \"utf8\"),\n fileCount: files.length,\n mode,\n title,\n };\n}\n\nexport function buildPlaygroundLink(\n input: BuildPlaygroundLinkInput,\n): BuildPlaygroundLinkResult {\n const mode: PlaygroundMode = input.mode ?? \"preview\";\n\n const hasSource = typeof input.source === \"string\";\n const hasFiles = Array.isArray(input.files);\n if (hasSource && hasFiles) {\n throw new PlaygroundLinkError(\n \"pass either `source` or `files`, not both\",\n \"both-source-and-files\",\n );\n }\n if (!hasSource && !hasFiles) {\n throw new PlaygroundLinkError(\n \"pass either `source` (single file) or `files` (multi-file array)\",\n \"no-input\",\n );\n }\n\n if (hasFiles) {\n return buildMultiFileUrl(input.files!, input.title, mode);\n }\n return buildSingleFileUrl(input.source!, input.title, mode);\n}\n","// Wrapper around `@directive-run/sandbox`'s `runInSandbox` for the\n// `run_in_sandbox` MCP tool. Mirrors the shape of `lint-runner.ts` —\n// validates input bounds at the MCP boundary before delegating, maps\n// sandbox errors to structured tool responses so the LLM gets a\n// predictable error code instead of a stack trace.\n\nimport { runInSandbox } from \"@directive-run/sandbox\";\nimport type { PlaygroundFile, SandboxResult } from \"@directive-run/sandbox\";\n\nconst MAX_SOURCE_BYTES = 200_000;\nconst MAX_FILES = 10;\nconst FILE_PATH_RE = /^[\\w./-]{1,128}$/;\n\nexport class SandboxRunnerError extends Error {\n constructor(\n message: string,\n public readonly code: \"input-too-large\" | \"input-invalid\" | \"runtime-error\",\n ) {\n super(message);\n }\n}\n\nexport interface SandboxRunInput {\n source?: string;\n files?: PlaygroundFile[];\n timeoutMs?: number;\n}\n\nfunction validateBounds(input: SandboxRunInput): void {\n if (input.files) {\n if (input.files.length > MAX_FILES) {\n throw new SandboxRunnerError(\n `payload exceeds ${MAX_FILES} files`,\n \"input-invalid\",\n );\n }\n let totalBytes = 0;\n for (const file of input.files) {\n if (!FILE_PATH_RE.test(file.path)) {\n throw new SandboxRunnerError(\n `invalid file path: '${file.path}'`,\n \"input-invalid\",\n );\n }\n totalBytes += Buffer.byteLength(file.source, \"utf8\");\n }\n if (totalBytes > MAX_SOURCE_BYTES) {\n throw new SandboxRunnerError(\n `payload is ${totalBytes} bytes (max ${MAX_SOURCE_BYTES})`,\n \"input-too-large\",\n );\n }\n } else if (input.source) {\n const bytes = Buffer.byteLength(input.source, \"utf8\");\n if (bytes > MAX_SOURCE_BYTES) {\n throw new SandboxRunnerError(\n `source is ${bytes} bytes (max ${MAX_SOURCE_BYTES})`,\n \"input-too-large\",\n );\n }\n }\n}\n\nexport async function runInSandboxTool(\n input: SandboxRunInput,\n): Promise<SandboxResult> {\n validateBounds(input);\n return runInSandbox(input);\n}\n","/**\n * Build a Model Context Protocol server that exposes Directive to MCP\n * clients. Transport-agnostic — call `createDirectiveServer()` to get a\n * configured `McpServer`, then connect it to a stdio transport (local\n * clients) or an SSE transport (hosted at `mcp.directive.run`).\n *\n * This is the SERVER side of the protocol. For the CLIENT side —\n * Directive AI agents calling out to external MCP servers — see\n * `@directive-run/ai/mcp` (`createMCPAdapter`).\n *\n * Current tool surface (knowledge + skill bundles):\n *\n * - `list_knowledge` — every knowledge file name (core + AI + skeleton).\n * - `get_knowledge` — read one knowledge file by name.\n * - `list_examples` — every example file name.\n * - `get_example` — read one example by name.\n * - `search_knowledge` — case-insensitive substring search across all\n * knowledge files, returning the file name + matching lines.\n * - `list_skills` — every Claude Code skill bundled in the plugin.\n * - `get_skill` — read one skill's `SKILL.md` plus its supporting\n * files as a single concatenated document.\n *\n * The package is the umbrella for \"Directive as an MCP server\" — future\n * additions can expose runtime introspection, system state, CLI\n * commands, and debug snapshots through the same binary.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { getAllSkills, getSkill } from \"@directive-run/claude-plugin\";\nimport {\n MIGRATION_SOURCES,\n type MigrationSourceId,\n getAllExamples,\n getAllKnowledge,\n getAntiPatternById,\n getAntiPatterns,\n getCompositionsFor,\n getExample,\n getKnowledge,\n getMigrationPattern,\n getReverseCompositionsFor,\n} from \"@directive-run/knowledge\";\nimport {\n MODULE_SECTIONS,\n type ModuleSection,\n generateModule,\n generateOrchestrator,\n requiredPackages,\n suggestFileNames,\n validateModuleName,\n} from \"@directive-run/scaffold\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { PACKAGE_REGISTRY_BUILT_AT } from \"./generated/package-registry.js\";\nimport {\n LintRunnerError,\n applyFixInWorker,\n runLintInWorker,\n} from \"./lint-runner.js\";\nimport { getPackageInfo, listPackages } from \"./packages.js\";\nimport {\n MAX_PLAYGROUND_SOURCE_BYTES,\n PlaygroundLinkError,\n buildPlaygroundLink,\n} from \"./playground.js\";\nimport { SandboxRunnerError, runInSandboxTool } from \"./sandbox-runner.js\";\n\n// Injected at build time by tsup's `define` from package.json so the\n// MCP handshake + get_server_info always match the published version.\n// In dev (tsx, no build) falls back to a sentinel so handshakes don't\n// claim a real version.\nconst PKG_VERSION = process.env.DIRECTIVE_MCP_VERSION ?? \"0.0.0-dev\";\nconst MAX_SEARCH_RESULTS = 50;\nconst MAX_LINE_PREVIEW = 200;\nconst MAX_QUERY_LENGTH = 512;\n\nfunction formatLinePreview(line: string): string {\n return line.length > MAX_LINE_PREVIEW\n ? `${line.slice(0, MAX_LINE_PREVIEW)}…`\n : line;\n}\n\nfunction collectSearchHits(\n query: string,\n corpus: ReadonlyMap<string, string>,\n fileExtension: string,\n): string[] {\n const lowered = query.toLowerCase();\n const hits: string[] = [];\n\n for (const [name, content] of corpus) {\n const lines = content.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (!line.toLowerCase().includes(lowered)) {\n continue;\n }\n hits.push(`${name}${fileExtension}:${i + 1}: ${formatLinePreview(line)}`);\n if (hits.length >= MAX_SEARCH_RESULTS) {\n return hits;\n }\n }\n }\n\n return hits;\n}\n\nfunction formatSearchResponse(query: string, hits: string[]): string {\n if (hits.length === 0) {\n return `No matches for '${query}'.`;\n }\n const header =\n hits.length === MAX_SEARCH_RESULTS\n ? `${hits.length}+ matches (truncated):`\n : `${hits.length} matches:`;\n return `${header}\\n${hits.join(\"\\n\")}`;\n}\n\nlet bundledKnowledgeHash: string | null = null;\nfunction computeBundledKnowledgeHash(): string {\n if (bundledKnowledgeHash) {\n return bundledKnowledgeHash;\n }\n const hash = createHash(\"sha256\");\n for (const [name, content] of Array.from(getAllKnowledge()).sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n hash.update(name);\n hash.update(\"\\0\");\n hash.update(content);\n hash.update(\"\\0\");\n }\n bundledKnowledgeHash = hash.digest(\"hex\").slice(0, 16);\n return bundledKnowledgeHash;\n}\n\ninterface ServerInfoOptions {\n transport: \"stdio\" | \"sse\";\n authEnabled: boolean;\n sessionCount?: number;\n}\n\nlet serverInfoOptions: ServerInfoOptions = {\n transport: \"stdio\",\n authEnabled: false,\n};\n\n/** Set transport-specific server info shown by `get_server_info`. */\nexport function setServerInfo(options: ServerInfoOptions): void {\n serverInfoOptions = options;\n}\n\nfunction renderDepSection(\n out: string[],\n heading: string,\n deps: readonly string[],\n): void {\n if (deps.length === 0) {\n return;\n }\n out.push(\"\", `**${heading}:**`, ...deps.map((d) => `- ${d}`));\n}\n\nfunction renderPackageInfo(info: {\n name: string;\n description: string;\n homepage?: string;\n npmUrl?: string;\n bakedVersion: string;\n liveVersion?: string;\n stale: boolean;\n published: boolean;\n dependencies: readonly string[];\n peerDependencies: readonly string[];\n optionalDependencies: readonly string[];\n exports: readonly string[];\n}): string {\n const lines: string[] = [\n `# ${info.name}`,\n info.description,\n \"\",\n `**Version (live):** ${info.liveVersion ?? \"unknown\"}`,\n `**Version (baked):** ${info.bakedVersion}${info.stale ? \" (live fetch failed; using baked)\" : \"\"}`,\n `**Published to npm:** ${info.published ? \"yes\" : \"no (private workspace package)\"}`,\n ];\n if (info.homepage) {\n lines.push(`**Homepage:** ${info.homepage}`);\n }\n if (info.npmUrl) {\n lines.push(`**npm:** ${info.npmUrl}`);\n }\n renderDepSection(lines, \"Dependencies\", info.dependencies);\n renderDepSection(lines, \"Peer dependencies\", info.peerDependencies);\n renderDepSection(lines, \"Optional dependencies\", info.optionalDependencies);\n renderDepSection(lines, \"Exports\", info.exports);\n return lines.join(\"\\n\");\n}\n\n/**\n * Build the MCP server with every Directive tool registered.\n *\n * The returned server has no transport attached — connect it to\n * `StdioServerTransport` for local clients or an SSE transport for\n * hosted deployments.\n */\nexport function createDirectiveServer(): McpServer {\n const server = new McpServer({\n name: \"directive\",\n version: PKG_VERSION,\n });\n\n server.registerTool(\n \"list_knowledge\",\n {\n title: \"List Directive knowledge files\",\n description:\n \"List every knowledge file shipped in @directive-run/knowledge. Returns the file names (without .md) that can be passed to get_knowledge. Covers core docs (engine, facts, constraints, resolvers, derivations, effects, plugins, modules, systems, testing) and AI docs (orchestrator, agents, adapters, guardrails, memory, MCP, RAG, security, evals, budget, multi-agent).\",\n inputSchema: {},\n },\n async () => {\n const knowledge = getAllKnowledge();\n const names = Array.from(knowledge.keys()).sort();\n\n return {\n content: [\n {\n type: \"text\",\n text: `${names.length} knowledge files:\\n${names.join(\"\\n\")}`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_knowledge\",\n {\n title: \"Get a Directive knowledge file\",\n description:\n \"Fetch the full Markdown contents of one Directive knowledge file by name. Use list_knowledge first to discover available names. Names match the file stem (e.g. 'constraints', 'ai-orchestrator', 'api-skeleton').\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .describe(\n \"The knowledge file name (no .md suffix). Example: 'constraints', 'ai-orchestrator', 'api-skeleton'.\",\n ),\n },\n },\n async ({ name }) => {\n const content = getKnowledge(name);\n if (!content) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Knowledge file not found: '${name}'. Call list_knowledge to see available names.`,\n },\n ],\n };\n }\n\n return {\n content: [{ type: \"text\", text: content }],\n };\n },\n );\n\n server.registerTool(\n \"list_examples\",\n {\n title: \"List Directive code examples\",\n description:\n \"List every code example shipped in @directive-run/knowledge. Examples are minimal, working TypeScript files demonstrating one concept each. Pass the returned names to get_example.\",\n inputSchema: {},\n },\n async () => {\n const examples = getAllExamples();\n const names = Array.from(examples.keys()).sort();\n\n return {\n content: [\n {\n type: \"text\",\n text: `${names.length} examples:\\n${names.join(\"\\n\")}`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_example\",\n {\n title: \"Get a Directive code example\",\n description:\n \"Fetch the source of one Directive code example by name. Use list_examples first to discover available names. Returns raw TypeScript.\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .describe(\n \"The example file name (no .ts suffix). Example: 'basic-module', 'ai-orchestrator'.\",\n ),\n },\n },\n async ({ name }) => {\n const content = getExample(name);\n if (!content) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Example not found: '${name}'. Call list_examples to see available names.`,\n },\n ],\n };\n }\n\n return {\n content: [\n { type: \"text\", text: `\\`\\`\\`typescript\\n${content}\\n\\`\\`\\`` },\n ],\n };\n },\n );\n\n server.registerTool(\n \"search_knowledge\",\n {\n title: \"Search Directive knowledge files\",\n description:\n \"Case-insensitive substring search across every knowledge file. Returns existing reference material; does NOT generate code. Use this to find which knowledge file covers a topic before calling get_knowledge for the full document.\",\n inputSchema: {\n query: z\n .string()\n .min(1)\n .max(MAX_QUERY_LENGTH)\n .describe(\n \"The search string. Matched case-insensitively against every line of every knowledge file.\",\n ),\n },\n },\n async ({ query }) => {\n const hits = collectSearchHits(query, getAllKnowledge(), \".md\");\n return {\n content: [{ type: \"text\", text: formatSearchResponse(query, hits) }],\n };\n },\n );\n\n server.registerTool(\n \"search_examples\",\n {\n title: \"Search Directive code examples\",\n description:\n \"Case-insensitive substring search across every bundled code example (.ts files in @directive-run/knowledge). Returns existing reference material; does NOT generate code. Use this to find which example demonstrates a concept before calling get_example for the full source.\",\n inputSchema: {\n query: z\n .string()\n .min(1)\n .max(MAX_QUERY_LENGTH)\n .describe(\n \"The search string. Matched case-insensitively against every line of every example file.\",\n ),\n },\n },\n async ({ query }) => {\n const hits = collectSearchHits(query, getAllExamples(), \".ts\");\n return {\n content: [{ type: \"text\", text: formatSearchResponse(query, hits) }],\n };\n },\n );\n\n server.registerTool(\n \"list_packages\",\n {\n title: \"List @directive-run/* packages\",\n description:\n \"Enumerate every @directive-run/* package known to this MCP server. Returns name + one-line description. Use this to answer 'what should I install for X?' and to discover names to pass to get_package_info or get_composable_packages. Returns existing reference material; does NOT generate code.\",\n inputSchema: {},\n },\n async () => {\n const packages = listPackages();\n const lines = packages.map(\n (p) => `${p.name}${p.published ? \"\" : \" (private)\"} — ${p.summary}`,\n );\n return {\n content: [\n {\n type: \"text\",\n text: `${packages.length} packages:\\n${lines.join(\"\\n\")}`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_package_info\",\n {\n title: \"Get @directive-run/* package detail\",\n description:\n \"Fetch detailed info for one @directive-run/* package: description, dependencies, peerDependencies, exports, npm URL. Returns the version baked into this MCP build AND the live-from-npm version when available (1-hour cache, 3-second timeout, falls back to baked version on network failure). Returns existing reference material; does NOT generate code.\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .max(128)\n .describe(\n \"Package name (e.g. '@directive-run/core'). Call list_packages first to discover valid names.\",\n ),\n },\n },\n async ({ name }) => {\n const info = await getPackageInfo(name);\n if (!info) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Package not found: '${name}'. Call list_packages to see available names.`,\n },\n ],\n };\n }\n return {\n content: [{ type: \"text\", text: renderPackageInfo(info) }],\n };\n },\n );\n\n server.registerTool(\n \"get_composable_packages\",\n {\n title: \"Get composition siblings for a package\",\n description:\n \"Given a @directive-run/* package name, return the sibling packages it composes with (outgoing edges) AND the packages that compose with IT (incoming edges). Each edge carries a one-line reason. Returns existing reference material; does NOT generate code. Use this to answer 'what should I pair @directive-run/X with?' or 'who else uses @directive-run/Y?'.\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .max(128)\n .describe(\n \"Package name (e.g. '@directive-run/query'). Call list_packages first to discover valid names.\",\n ),\n },\n },\n async ({ name }) => {\n const outgoing = getCompositionsFor(name);\n const incoming = getReverseCompositionsFor(name);\n if (outgoing.length === 0 && incoming.length === 0) {\n // No edges either direction means the package name isn't known\n // to the graph at all (every shipped @directive-run/* package\n // has at least one edge). Surface as isError so LLM clients\n // can distinguish \"you typed it wrong\" from \"no data.\"\n const knownPackage = listPackages().some((p) => p.name === name);\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: knownPackage\n ? `NO_COMPOSITIONS: '${name}' is a known package but has no composition edges yet. This is a coverage gap in compositions.json.`\n : `NOT_FOUND: '${name}' is not a known @directive-run/* package. Call list_packages to see available names.`,\n },\n ],\n };\n }\n const lines: string[] = [`# ${name}`, \"\"];\n if (outgoing.length > 0) {\n lines.push(\"## Composes with:\");\n for (const e of outgoing) {\n lines.push(`- ${e.to} — ${e.reason}`);\n }\n lines.push(\"\");\n }\n if (incoming.length > 0) {\n lines.push(\"## Composed by:\");\n for (const e of incoming) {\n lines.push(`- ${e.from} — ${e.reason}`);\n }\n }\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${lines.join(\"\\n\")}\\n</directive-data>`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_server_info\",\n {\n title: \"Get directive MCP server info\",\n description:\n \"Return version manifest for this MCP server build — package version, transport (stdio or SSE), whether auth is enabled, bundled-knowledge hash, package-registry build timestamp, and (for SSE) the current session count. Returns existing reference material; does NOT generate code. Use this to verify the client is talking to the expected build.\",\n inputSchema: {},\n },\n async () => {\n const lines = [\n `# @directive-run/mcp@${PKG_VERSION}`,\n `**Transport:** ${serverInfoOptions.transport}`,\n `**Auth enabled:** ${serverInfoOptions.authEnabled ? \"yes\" : \"no\"}`,\n `**Bundled knowledge hash:** ${computeBundledKnowledgeHash()}`,\n `**Package registry built at:** ${PACKAGE_REGISTRY_BUILT_AT}`,\n ];\n if (serverInfoOptions.sessionCount !== undefined) {\n lines.push(\n `**Active SSE sessions:** ${serverInfoOptions.sessionCount}`,\n );\n }\n return {\n content: [{ type: \"text\", text: lines.join(\"\\n\") }],\n };\n },\n );\n\n server.registerTool(\n \"list_module_sections\",\n {\n title: \"List valid module sections for generate_module\",\n description:\n \"Enumerate the valid `sections` values that `generate_module` accepts: derive, events, constraints, resolvers, effects. Call this before generate_module so the section list comes from the server (no hallucination risk). Returns existing reference material; does NOT generate code.\",\n inputSchema: {},\n },\n async () => ({\n content: [\n {\n type: \"text\",\n text: `${MODULE_SECTIONS.length} module sections:\\n${MODULE_SECTIONS.join(\"\\n\")}`,\n },\n ],\n }),\n );\n\n server.registerTool(\n \"generate_module\",\n {\n title:\n \"Generate NEW Directive module source code (paired with a runnable driver)\",\n description:\n 'Generate a new Directive module or AI orchestrator as a paired source bundle: a library `moduleSource` (the `createModule(...)` definition) AND a `runnerSource` that wraps it in `createSystem` + `start()` + dispatch + settle + log so the playground boots a project that actually demonstrates behavior. Pipe BOTH into `playground_link` as a `files` array for a clickable runnable URL. Never writes to disk — the caller decides. Strict regex on `name` (kebab-case, ≤64 chars). For `kind: \"module\"`, optionally pass `sections` to pick which blocks to include. Discover valid section values via list_module_sections.',\n inputSchema: {\n name: z\n .string()\n .min(1)\n .max(64)\n .describe(\n \"Kebab-case identifier (e.g. 'traffic-light'). Must start with a lowercase letter and contain only lowercase letters, digits, and hyphens.\",\n ),\n kind: z\n .enum([\"module\", \"orchestrator\"])\n .default(\"module\")\n .describe(\n \"What to generate. 'module' for a plain Directive module; 'orchestrator' for an AI agent orchestrator module with memory + guardrails scaffolding.\",\n ),\n sections: z\n .array(z.enum(MODULE_SECTIONS))\n .optional()\n .describe(\n \"Which module sections to include. Defaults to every section. Only honored when kind === 'module'. Discover valid values via list_module_sections.\",\n ),\n },\n },\n async ({ name, kind, sections }) => {\n const validation = validateModuleName(name);\n if (validation !== true) {\n return {\n isError: true,\n content: [\n { type: \"text\", text: `Invalid name '${name}': ${validation}` },\n ],\n };\n }\n try {\n const scaffold =\n kind === \"orchestrator\"\n ? generateOrchestrator(name)\n : generateModule(\n name,\n (sections as readonly ModuleSection[]) ?? MODULE_SECTIONS,\n );\n const { testFileName } = suggestFileNames(name, kind);\n const needed = requiredPackages(kind);\n const payload = {\n moduleSource: scaffold.moduleSource,\n runnerSource: scaffold.runnerSource,\n suggestedFilenames: {\n module: `src/${scaffold.suggestedFilenames.module}`,\n runner: `src/${scaffold.suggestedFilenames.runner}`,\n test: `src/${testFileName}`,\n },\n runnable: scaffold.runnable,\n requiredPackages: needed,\n installCommand: `pnpm add ${needed.join(\" \")}`,\n nextStep:\n \"Pipe `moduleSource` AND `runnerSource` into `playground_link` as a `files` array to give the user a runnable URL.\",\n };\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(payload, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n return {\n isError: true,\n content: [{ type: \"text\", text: (err as Error).message }],\n };\n }\n },\n );\n\n server.registerTool(\n \"list_review_rules\",\n {\n title: \"List Directive code-review rules\",\n description:\n \"Enumerate every anti-pattern Directive code can violate, parsed from @directive-run/knowledge. Each entry carries an id, severity, category, title, badExample, goodExample, and explanation. Use this to discover rule ids before calling get_review_rule or before passing ruleFilter to review_source. Returns existing reference material; does NOT generate code.\",\n inputSchema: {},\n },\n async () => {\n const rules = getAntiPatterns();\n const compact = rules.map((r) => ({\n id: r.id,\n severity: r.severity,\n category: r.category,\n title: r.title,\n }));\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${rules.length} review rules:\\n${JSON.stringify(compact, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_review_rule\",\n {\n title: \"Get a Directive code-review rule\",\n description:\n \"Fetch one anti-pattern's full detail: title, severity, category, explanation, and the WRONG/CORRECT code-example pair. Use list_review_rules first to discover valid ids. Returns existing reference material; does NOT generate code.\",\n inputSchema: {\n id: z\n .string()\n .min(1)\n .max(128)\n .describe(\n \"Rule id (a kebab-case slug — e.g. 'flat-schema-missing-facts-wrapper'). Call list_review_rules first to discover valid ids.\",\n ),\n },\n },\n async ({ id }) => {\n const rule = getAntiPatternById(id);\n if (!rule) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Rule not found: '${id}'. Call list_review_rules to see available ids.`,\n },\n ],\n };\n }\n const lines: string[] = [\n `# ${rule.title}`,\n `**id:** ${rule.id}`,\n `**severity:** ${rule.severity}`,\n `**category:** ${rule.category}`,\n ];\n if (rule.explanation) {\n lines.push(\"\", rule.explanation);\n }\n if (rule.badExample) {\n lines.push(\"\", \"## Wrong\", \"```typescript\", rule.badExample, \"```\");\n }\n if (rule.goodExample) {\n lines.push(\"\", \"## Correct\", \"```typescript\", rule.goodExample, \"```\");\n }\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${lines.join(\"\\n\")}\\n</directive-data>`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"list_migration_sources\",\n {\n title: \"List supported migration source libraries\",\n description:\n \"Enumerate the source libraries get_migration_pattern accepts: redux, zustand, xstate, mobx, jotai, recoil. Call this before get_migration_pattern so the source list comes from the server (no hallucination risk). Returns existing reference material; does NOT generate code.\",\n inputSchema: {},\n },\n async () => ({\n content: [\n {\n type: \"text\",\n text: `${MIGRATION_SOURCES.length} sources:\\n${MIGRATION_SOURCES.join(\"\\n\")}`,\n },\n ],\n }),\n );\n\n server.registerTool(\n \"get_migration_pattern\",\n {\n title: \"Get migration pattern from a state-management library\",\n description:\n \"Fetch the concept-mapping table + step list + before/after exemplars for migrating from a popular state-management library to Directive. Use this when a user asks 'how do I migrate from Redux / Zustand / XState / MobX / Jotai / Recoil'. Returns existing reference material; does NOT generate code.\",\n inputSchema: {\n source: z\n .enum(MIGRATION_SOURCES)\n .describe(\n \"Source library. Discover valid values via list_migration_sources.\",\n ),\n },\n },\n async ({ source }) => {\n const pattern = getMigrationPattern(source as MigrationSourceId);\n if (!pattern) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Migration pattern not found: '${source}'. Call list_migration_sources to see valid values.`,\n },\n ],\n };\n }\n const lines: string[] = [\n `# Migrating from ${pattern.name} to Directive`,\n \"\",\n \"## Concept map\",\n \"\",\n \"| From | To | Note |\",\n \"|---|---|---|\",\n ...pattern.conceptMap.map(\n (row) => `| ${row.from} | ${row.to} | ${row.note} |`,\n ),\n \"\",\n \"## Steps\",\n ...pattern.steps.map((s, i) => `${i + 1}. ${s}`),\n \"\",\n \"## Before\",\n \"```typescript\",\n pattern.before,\n \"```\",\n \"\",\n \"## After\",\n \"```typescript\",\n pattern.after,\n \"```\",\n ];\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${lines.join(\"\\n\")}\\n</directive-data>`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"review_source\",\n {\n title: \"Review Directive code with ts-morph rules\",\n description:\n \"Run the @directive-run/lint rule registry against a TypeScript source string. Returns structured findings (line, column, severity, message, fixable) for every match. Use this when the user asks 'review this Directive code' or 'lint this'. Source is parsed in a worker thread with a 5-second budget and 200 KB cap.\",\n inputSchema: {\n source: z\n .string()\n .min(1)\n .max(200_000)\n .describe(\n \"TypeScript source to review. Max 200,000 bytes; longer inputs are rejected pre-parse.\",\n ),\n fileName: z\n .string()\n .regex(/^[\\w./-]{1,128}$/)\n .optional()\n .describe(\n \"Optional file name shown in findings. Must match /^[\\\\w./-]{1,128}$/.\",\n ),\n ruleFilter: z\n .array(z.string().max(64))\n .max(32)\n .optional()\n .describe(\n \"Optional whitelist of rule ids to run. Discover valid ids via list_review_rules.\",\n ),\n },\n },\n async ({ source, fileName, ruleFilter }) => {\n try {\n const result = await runLintInWorker({ source, fileName, ruleFilter });\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(result, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n const reason =\n err instanceof LintRunnerError\n ? `${err.code}: ${err.message}`\n : (err as Error).message;\n return {\n isError: true,\n content: [{ type: \"text\", text: `review_source failed — ${reason}` }],\n };\n }\n },\n );\n\n server.registerTool(\n \"fix_code\",\n {\n title: \"Apply a mechanical fix for a Directive review finding\",\n description:\n \"Given a source string and a Finding returned by review_source, run the rule's mechanical fix and return { ok, diff, fixedSource, explanation } — or { ok: false, reason } when the rule has no fix. Useful for closing the loop: review_source → user picks → fix_code. The fixed source is NOT written to disk — the caller decides.\",\n inputSchema: {\n source: z\n .string()\n .min(1)\n .max(200_000)\n .describe(\"The same source you passed to review_source.\"),\n finding: z\n .object({\n ruleId: z.string().min(1).max(64),\n severity: z.enum([\"error\", \"warning\", \"info\"]),\n line: z.number().int().nonnegative(),\n column: z.number().int().nonnegative(),\n message: z.string(),\n findingId: z.string(),\n suggestion: z.string().optional(),\n })\n .describe(\n \"The Finding returned by review_source. Pass the WHOLE object — the worker uses ruleId + line + column to locate the AST node.\",\n ),\n },\n },\n async ({ source, finding }) => {\n try {\n const result = await applyFixInWorker({ source, finding });\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(result, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n const reason =\n err instanceof LintRunnerError\n ? `${err.code}: ${err.message}`\n : (err as Error).message;\n return {\n isError: true,\n content: [{ type: \"text\", text: `fix_code failed — ${reason}` }],\n };\n }\n },\n );\n\n server.registerTool(\n \"list_skills\",\n {\n title: \"List Directive Claude Code skills\",\n description:\n \"List every skill bundled in @directive-run/claude-plugin. Each skill is a gerund-named bundle of one SKILL.md plus supporting knowledge files. Pass a returned name to get_skill.\",\n inputSchema: {},\n },\n async () => {\n const skills = getAllSkills();\n const names = Array.from(skills.keys()).sort();\n\n return {\n content: [\n {\n type: \"text\",\n text: `${names.length} skills:\\n${names.join(\"\\n\")}`,\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_skill\",\n {\n title: \"Get a Directive Claude Code skill\",\n description:\n \"Fetch one skill bundle: the SKILL.md manifest plus every supporting knowledge file concatenated into a single document. Use list_skills to discover names.\",\n inputSchema: {\n name: z\n .string()\n .min(1)\n .describe(\n \"The skill name (e.g. 'building-ai-orchestrators', 'writing-directive-constraints').\",\n ),\n },\n },\n async ({ name }) => {\n const skill = getSkill(name);\n if (!skill) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Skill not found: '${name}'. Call list_skills to see available names.`,\n },\n ],\n };\n }\n\n const parts = [`# Skill: ${skill.name}\\n\\n${skill.manifest}`];\n for (const [fileName, content] of skill.files) {\n parts.push(`---\\n\\n## ${fileName}.md\\n\\n${content}`);\n }\n\n return {\n content: [{ type: \"text\", text: parts.join(\"\\n\\n\") }],\n };\n },\n );\n\n server.registerTool(\n \"playground_link\",\n {\n title:\n \"Build a shareable playground link for a Directive snippet (single- or multi-file)\",\n description:\n \"Turn TypeScript source into a directive.run URL the user can click to open a real running project. Two input shapes:\\n\\n• `source` (single string) — for snippets that are already runnable (`get_example`, `fix_code` output, hand-written demos). Lands as `src/main.ts` in a StackBlitz project preloaded with @directive-run/core.\\n\\n• `files` (array of {path, source}) — for paired output from `generate_module` (which returns both a library `moduleSource` AND a runnable `runnerSource`). Pass `[{path: 'src/<name>.ts', source: moduleSource}, {path: 'src/main.ts', source: runnerSource}]` so the playground boots a project that actually demonstrates behavior. THIS IS THE NORMAL WAY TO HAND OFF `generate_module` OUTPUT.\\n\\nOptional `mode`: `'preview'` (default — code + Open-in-StackBlitz button, the only Directive-branded surface, recommended for first-time users) or `'instant'` (thin auto-submit redirect, lands in StackBlitz in ~600ms with no preview UI). Use `'instant'` after the user has road-tested one link, or when they explicitly want 'just open it'.\\n\\nPayload travels in the URL hash so it never reaches server logs. 8 KB cap on raw input.\",\n inputSchema: {\n source: z\n .string()\n .min(1)\n .max(MAX_PLAYGROUND_SOURCE_BYTES)\n .optional()\n .describe(\n `Single-file source (mutually exclusive with \\`files\\`). Use for already-runnable code from \\`get_example\\` / \\`fix_code\\`. Max ${MAX_PLAYGROUND_SOURCE_BYTES} bytes.`,\n ),\n files: z\n .array(\n z.object({\n path: z\n .string()\n .min(1)\n .max(120)\n .describe(\n \"Relative path inside the StackBlitz project, e.g. 'src/counter.ts' or 'src/main.ts'. One file should be 'src/main.ts' (the entry point tsx runs).\",\n ),\n source: z.string().min(1).describe(\"File contents.\"),\n }),\n )\n .min(1)\n .max(10)\n .optional()\n .describe(\n `Multi-file payload (mutually exclusive with \\`source\\`). Use for \\`generate_module\\` paired output. JSON-encoded array gets compressed; the encoded payload must stay under ${MAX_PLAYGROUND_SOURCE_BYTES} bytes.`,\n ),\n title: z\n .string()\n .min(1)\n .max(120)\n .optional()\n .describe(\n \"Optional short label shown as the editor tab title on the playground page. Defaults to 'Untitled snippet'.\",\n ),\n mode: z\n .enum([\"preview\", \"instant\"])\n .optional()\n .describe(\n \"URL flavor: 'preview' (default) routes via directive.run/playground (preview + Open-in-StackBlitz button). 'instant' routes via directive.run/run (thin auto-submit redirect, lands directly in StackBlitz).\",\n ),\n },\n },\n async ({ source, files, title, mode }) => {\n try {\n const result = buildPlaygroundLink({\n source,\n files: files as { path: string; source: string }[] | undefined,\n title,\n mode,\n });\n const payload = {\n url: result.url,\n mode: result.mode,\n fileCount: result.fileCount,\n sizeBytes: result.sizeBytes,\n urlBytes: result.urlBytes,\n title: result.title ?? null,\n };\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(payload, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n const reason =\n err instanceof PlaygroundLinkError\n ? `${err.code}: ${err.message}`\n : (err as Error).message;\n return {\n isError: true,\n content: [\n { type: \"text\", text: `playground_link failed — ${reason}` },\n ],\n };\n }\n },\n );\n\n server.registerTool(\n \"run_in_sandbox\",\n {\n title: \"Execute a Directive snippet and return its observed behavior\",\n description:\n \"Execute a Directive snippet and return its observed behavior. Use `run_in_sandbox` when you want the transcript IN-CHAT (so you or your next reasoning step can see what happened). Use `playground_link` instead when you want to hand the USER an interactive URL. Both accept identical `source` / `files` shapes — copy the same payload across if you want both.\\n\\nResponse payload: `logs[]` (captured console.log/warn/error), `facts` (post-settle snapshot), `errors[]` (validation/bundle/runtime/timeout messages), `durationMs`, `timedOut`, and `playgroundUrl` (click-through to StackBlitz for the same snippet).\\n\\nDecoding errors:\\n• `'<path>:<line>:<col> — <reason>'` → validation rejection (snippet hit the AST allowlist). REWRITE the snippet; re-running with the same input will reject again.\\n• `'wall-clock budget of Nms elapsed'` plus `timedOut: true` → likely infinite loop or unawaited promise. Don't retry; surface to user.\\n• `'cannot resolve \\\"./X\\\" from \\\"./Y\\\"'` or any `esbuild ...` → bundle failure; check file paths and imports.\\n• Any other string → runtime throw (may be intentional from the module's logic; check `facts` to confirm).\\n\\nSandbox boundary (v0.3.0): the AST allowlist validator rejects (a) imports outside `@directive-run/{core, ai, query, react, vue, svelte, solid, lit, el, optimistic, timeline, mutator, knowledge, scaffold, claude-plugin, lint}` plus relative `./*.js` paths inside the payload, (b) free-identifier references to FS / network / eval surfaces (`process`, `require`, `fetch`, `eval`, `Buffer`, `setTimeout`, etc.), (c) `globalThis.process` / `Reflect.get(globalThis, ...)` / `.constructor` / `Function(...)` and other property-access bypass chains, (d) `@directive-run/{cli, mcp, sandbox, vite-plugin-api-proxy}` (build/CLI/sandbox tooling). The worker has a 5-second wall-clock budget (clamped to [100ms, 10s]) and a 32 MB heap ceiling.\\n\\nNote: `react/vue/svelte/solid/lit` import OK, but their runtime hooks (`useState`, etc.) need a DOM and throw in this Node sandbox. For UI demos, prefer `playground_link` (StackBlitz has a DOM).\\n\\nValidator rejection, bundle failure, runtime error, and timeout all return structured results in `errors` rather than throwing.\",\n inputSchema: {\n source: z\n .string()\n .min(1)\n .max(MAX_PLAYGROUND_SOURCE_BYTES)\n .optional()\n .describe(\n `Single-file source (mutually exclusive with \\`files\\`). Use for already-runnable code. Max ${MAX_PLAYGROUND_SOURCE_BYTES} bytes.`,\n ),\n files: z\n .array(\n z.object({\n path: z\n .string()\n .min(1)\n .max(120)\n .describe(\n \"Relative path inside the sandbox, e.g. 'src/counter.ts'. One file MUST be 'src/main.ts' — that's the entry point the worker imports.\",\n ),\n source: z.string().min(1).describe(\"File contents.\"),\n }),\n )\n .min(1)\n .max(10)\n .optional()\n .describe(\n \"Multi-file payload (mutually exclusive with `source`). Use for `generate_module` paired output.\",\n ),\n timeoutMs: z\n .number()\n .int()\n .min(100)\n .max(10_000)\n .optional()\n .describe(\n \"Wall-clock execution budget in milliseconds. Default 5000. Clamped to [100, 10000].\",\n ),\n },\n },\n async ({ source, files, timeoutMs }) => {\n try {\n const result = await runInSandboxTool({\n source,\n files: files as { path: string; source: string }[] | undefined,\n timeoutMs,\n });\n // Build a playgroundUrl alongside the transcript so the LLM can\n // hand the user a click-through to edit the same snippet in\n // StackBlitz if the transcript is interesting (or if it errored\n // and the user wants to debug interactively).\n let playgroundUrl: string | null = null;\n try {\n const link = buildPlaygroundLink({\n source,\n files: files as { path: string; source: string }[] | undefined,\n });\n playgroundUrl = link.url;\n } catch {\n // Playground URL is a convenience; failing to build one\n // shouldn't gate the transcript response.\n }\n const payload = {\n logs: result.logs,\n facts: result.facts,\n errors: result.errors,\n durationMs: result.durationMs,\n timedOut: result.timedOut,\n playgroundUrl,\n };\n return {\n content: [\n {\n type: \"text\",\n text: `<directive-data>\\n${JSON.stringify(payload, null, 2)}\\n</directive-data>`,\n },\n ],\n };\n } catch (err) {\n const reason =\n err instanceof SandboxRunnerError\n ? `${err.code}: ${err.message}`\n : (err as Error).message;\n return {\n isError: true,\n content: [\n { type: \"text\", text: `run_in_sandbox failed — ${reason}` },\n ],\n };\n }\n },\n );\n\n return server;\n}\n","/**\n * SSE (Server-Sent Events) transport for the Directive MCP server.\n * Hosts the server over HTTP so remote clients can call tools at\n * retrieval time.\n *\n * AE Security review (P0 #4) hardened the public-facing surface:\n *\n * - **Token auth** is REQUIRED when the bind host is not loopback.\n * `Authorization: Bearer <token>` must match `--token <value>` (or\n * the `DIRECTIVE_MCP_TOKEN` env var). Loopback hosts may run\n * unauthenticated for local dev.\n * - **Body cap** at 1 MB on `/messages` POSTs (`Content-Length`\n * pre-check + streaming guard). Anything larger gets 413.\n * - **Session cap** at 64 concurrent SSE connections. Past the cap\n * the next SSE GET returns 429.\n * - **Idle timeout** at 5 minutes per session. Idle transports are\n * pruned at a 30-second sweep.\n * - **Origin allowlist** via `--allow-origin` (repeatable). When set,\n * requests with an `Origin` header not in the list are rejected.\n *\n * Endpoints:\n *\n * - `GET /sse` — establish the SSE stream. One session per client.\n * - `POST /messages?sessionId=…` — client→server JSON-RPC messages.\n * - `GET /healthz` — liveness probe returning 200 + `ok`.\n */\n\nimport {\n type IncomingMessage,\n type Server,\n type ServerResponse,\n createServer,\n} from \"node:http\";\nimport { SSEServerTransport } from \"@modelcontextprotocol/sdk/server/sse.js\";\nimport { createDirectiveServer, setServerInfo } from \"./server.js\";\n\nconst MESSAGES_PATH = \"/messages\";\nconst SSE_PATH = \"/sse\";\nconst HEALTHZ_PATH = \"/healthz\";\n\nconst DEFAULT_BODY_LIMIT_BYTES = 1_000_000;\nconst DEFAULT_MAX_SESSIONS = 64;\nconst DEFAULT_IDLE_TIMEOUT_MS = 5 * 60 * 1000;\nconst IDLE_SWEEP_INTERVAL_MS = 30_000;\n\nconst LOOPBACK_HOSTS = new Set([\n \"127.0.0.1\",\n \"localhost\",\n \"::1\",\n \"0:0:0:0:0:0:0:1\",\n]);\n\nexport interface SseServerOptions {\n /** Port to listen on. Default: 3000. */\n port?: number;\n /** Host to bind to. Default: `127.0.0.1`. Use `0.0.0.0` for public deployments. */\n host?: string;\n /** Optional logger. Default: `console`. */\n logger?: Pick<Console, \"log\" | \"warn\" | \"error\">;\n /**\n * Bearer token required on every request to /sse and /messages.\n * MANDATORY when host is not loopback; rejected if both omitted.\n */\n token?: string;\n /** Allowed values for the request `Origin` header. Empty/undefined = no check. */\n allowOrigins?: string[];\n /** Max bytes accepted on a single /messages POST. Default: 1 MB. */\n bodyLimitBytes?: number;\n /** Max concurrent SSE sessions. Default: 64. */\n maxSessions?: number;\n /** Idle-timeout pruning threshold. Default: 5 minutes. */\n idleTimeoutMs?: number;\n}\n\ninterface ActiveSession {\n transport: SSEServerTransport;\n lastActivity: number;\n}\n\ntype Sessions = Map<string, ActiveSession>;\ntype Logger = Pick<Console, \"log\" | \"warn\" | \"error\">;\n\ninterface ResolvedConfig {\n port: number;\n host: string;\n logger: Logger;\n token?: string;\n allowOrigins: string[];\n bodyLimitBytes: number;\n maxSessions: number;\n idleTimeoutMs: number;\n}\n\nclass SseConfigError extends Error {}\n\nfunction isLoopback(host: string): boolean {\n return LOOPBACK_HOSTS.has(host.toLowerCase());\n}\n\nfunction resolveConfig(options: SseServerOptions): ResolvedConfig {\n const port = options.port ?? 3000;\n const host = options.host ?? \"127.0.0.1\";\n const logger = options.logger ?? console;\n const token = options.token ?? process.env.DIRECTIVE_MCP_TOKEN ?? undefined;\n\n if (!isLoopback(host) && !token) {\n throw new SseConfigError(\n \"Public hosts require a token. Pass --token <value> or set DIRECTIVE_MCP_TOKEN, or bind to 127.0.0.1 for local dev.\",\n );\n }\n\n return {\n port,\n host,\n logger,\n token,\n allowOrigins: options.allowOrigins ?? [],\n bodyLimitBytes: options.bodyLimitBytes ?? DEFAULT_BODY_LIMIT_BYTES,\n maxSessions: options.maxSessions ?? DEFAULT_MAX_SESSIONS,\n idleTimeoutMs: options.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS,\n };\n}\n\nfunction checkAuth(\n req: IncomingMessage,\n expected: string | undefined,\n): boolean {\n if (!expected) {\n return true;\n }\n const header = req.headers.authorization;\n if (typeof header !== \"string\") {\n return false;\n }\n const match = /^Bearer\\s+(.+)$/i.exec(header);\n return match?.[1]?.trim() === expected;\n}\n\nfunction checkOrigin(req: IncomingMessage, allow: string[]): boolean {\n if (allow.length === 0) {\n return true;\n }\n const origin = req.headers.origin;\n if (typeof origin !== \"string\") {\n return false;\n }\n return allow.includes(origin);\n}\n\nfunction reject(\n res: ServerResponse,\n status: number,\n message: string,\n headers: Record<string, string> = {},\n): void {\n res.writeHead(status, { \"Content-Type\": \"text/plain\", ...headers });\n res.end(message);\n}\n\nfunction updateSetServerInfo(sessions: Sessions, authEnabled: boolean): void {\n setServerInfo({\n transport: \"sse\",\n authEnabled,\n sessionCount: sessions.size,\n });\n}\n\n// Synchronous claim counter — every connect path that has not yet hit\n// `sessions.set` increments this BEFORE any code that could yield. The\n// cap check sums sessions.size + pendingConnects, so even if a future\n// SDK version makes SSEServerTransport's constructor async-leaky, the\n// count is correctly reserved.\nlet pendingConnects = 0;\n\nasync function handleSseConnect(\n req: IncomingMessage,\n res: ServerResponse,\n sessions: Sessions,\n config: ResolvedConfig,\n): Promise<void> {\n if (!checkAuth(req, config.token)) {\n reject(res, 401, \"unauthorized\");\n return;\n }\n if (!checkOrigin(req, config.allowOrigins)) {\n reject(res, 403, \"origin not allowed\");\n return;\n }\n if (sessions.size + pendingConnects >= config.maxSessions) {\n reject(res, 429, \"session cap reached\", { \"Retry-After\": \"60\" });\n return;\n }\n pendingConnects += 1;\n\n let claimed = false;\n try {\n const transport = new SSEServerTransport(MESSAGES_PATH, res);\n const server = createDirectiveServer();\n sessions.set(transport.sessionId, {\n transport,\n lastActivity: Date.now(),\n });\n claimed = true;\n updateSetServerInfo(sessions, Boolean(config.token));\n\n const cleanup = () => {\n sessions.delete(transport.sessionId);\n updateSetServerInfo(sessions, Boolean(config.token));\n };\n res.on(\"close\", cleanup);\n transport.onclose = cleanup;\n\n await server.connect(transport);\n config.logger.log(\n `[directive-mcp] sse session opened: ${transport.sessionId}`,\n );\n } finally {\n pendingConnects -= 1;\n if (!claimed) {\n // Connection rejected before sessions.set ran; nothing to clean up.\n }\n }\n}\n\nasync function handlePostMessage(\n req: IncomingMessage,\n res: ServerResponse,\n url: URL,\n sessions: Sessions,\n config: ResolvedConfig,\n): Promise<void> {\n if (!checkAuth(req, config.token)) {\n reject(res, 401, \"unauthorized\");\n return;\n }\n if (!checkOrigin(req, config.allowOrigins)) {\n reject(res, 403, \"origin not allowed\");\n return;\n }\n\n const declaredLength = Number(req.headers[\"content-length\"] ?? \"0\");\n if (\n Number.isFinite(declaredLength) &&\n declaredLength > config.bodyLimitBytes\n ) {\n reject(res, 413, `body exceeds ${config.bodyLimitBytes} bytes`);\n return;\n }\n\n const sessionId = url.searchParams.get(\"sessionId\");\n if (!sessionId) {\n reject(res, 400, \"missing sessionId query parameter\");\n return;\n }\n\n const session = sessions.get(sessionId);\n if (!session) {\n reject(res, 404, `unknown session: ${sessionId}`);\n return;\n }\n session.lastActivity = Date.now();\n\n let bytesSeen = 0;\n let overflowed = false;\n req.on(\"data\", (chunk: Buffer | string) => {\n bytesSeen += Buffer.byteLength(chunk);\n if (bytesSeen > config.bodyLimitBytes && !overflowed) {\n overflowed = true;\n reject(res, 413, `body exceeds ${config.bodyLimitBytes} bytes`);\n req.destroy();\n }\n });\n\n if (overflowed) {\n return;\n }\n\n await session.transport.handlePostMessage(req, res);\n}\n\nasync function routeRequest(\n req: IncomingMessage,\n res: ServerResponse,\n sessions: Sessions,\n config: ResolvedConfig,\n): Promise<void> {\n const url = new URL(\n req.url ?? \"/\",\n `http://${req.headers.host ?? config.host}`,\n );\n\n if (req.method === \"GET\" && url.pathname === HEALTHZ_PATH) {\n res.writeHead(200, { \"Content-Type\": \"text/plain\" });\n res.end(\"ok\");\n return;\n }\n\n if (req.method === \"GET\" && url.pathname === SSE_PATH) {\n await handleSseConnect(req, res, sessions, config);\n return;\n }\n\n if (req.method === \"POST\" && url.pathname === MESSAGES_PATH) {\n await handlePostMessage(req, res, url, sessions, config);\n return;\n }\n\n reject(res, 404, \"not found\");\n}\n\nfunction startIdleSweep(\n sessions: Sessions,\n config: ResolvedConfig,\n): NodeJS.Timeout {\n return setInterval(() => {\n const now = Date.now();\n for (const [id, session] of sessions) {\n if (now - session.lastActivity > config.idleTimeoutMs) {\n sessions.delete(id);\n session.transport.close().catch(() => undefined);\n updateSetServerInfo(sessions, Boolean(config.token));\n config.logger.log(`[directive-mcp] pruned idle session: ${id}`);\n }\n }\n }, IDLE_SWEEP_INTERVAL_MS).unref();\n}\n\n/**\n * Start an HTTP server that hosts the Directive MCP server over SSE.\n * Returns the underlying Node `http.Server` so callers can `close()`\n * it on shutdown. Throws `SseConfigError` when a non-loopback host\n * is configured without a token.\n */\nexport async function startSseServer(\n options: SseServerOptions = {},\n): Promise<Server> {\n const config = resolveConfig(options);\n const sessions: Sessions = new Map();\n\n const httpServer = createServer(async (req, res) => {\n try {\n await routeRequest(req, res, sessions, config);\n } catch (err) {\n config.logger.error(\"[directive-mcp] request error:\", err);\n if (!res.headersSent) {\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n }\n res.end(\"internal server error\");\n }\n });\n\n const sweeper = startIdleSweep(sessions, config);\n httpServer.on(\"close\", () => {\n clearInterval(sweeper);\n });\n\n await new Promise<void>((resolve) => {\n httpServer.listen(config.port, config.host, () => {\n config.logger.log(\n `[directive-mcp] sse server listening at http://${config.host}:${config.port}${SSE_PATH}${\n config.token\n ? \" (auth: bearer-token)\"\n : \" (auth: none, loopback only)\"\n }`,\n );\n resolve();\n });\n });\n\n return httpServer;\n}\n\nexport { SseConfigError };\n"]}