@stigmer/plugin-package 3.15.3-dev.20260916211208
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +66 -0
- package/detect.d.ts +50 -0
- package/detect.d.ts.map +1 -0
- package/detect.js +164 -0
- package/detect.js.map +1 -0
- package/dialects/claude.d.ts +30 -0
- package/dialects/claude.d.ts.map +1 -0
- package/dialects/claude.js +71 -0
- package/dialects/claude.js.map +1 -0
- package/dialects/codex.d.ts +18 -0
- package/dialects/codex.d.ts.map +1 -0
- package/dialects/codex.js +19 -0
- package/dialects/codex.js.map +1 -0
- package/dialects/cursor.d.ts +23 -0
- package/dialects/cursor.d.ts.map +1 -0
- package/dialects/cursor.js +63 -0
- package/dialects/cursor.js.map +1 -0
- package/dialects/manifest.d.ts +109 -0
- package/dialects/manifest.d.ts.map +1 -0
- package/dialects/manifest.js +194 -0
- package/dialects/manifest.js.map +1 -0
- package/dialects/open.d.ts +18 -0
- package/dialects/open.d.ts.map +1 -0
- package/dialects/open.js +47 -0
- package/dialects/open.js.map +1 -0
- package/documents.d.ts +43 -0
- package/documents.d.ts.map +1 -0
- package/documents.js +111 -0
- package/documents.js.map +1 -0
- package/files.d.ts +114 -0
- package/files.d.ts.map +1 -0
- package/files.js +187 -0
- package/files.js.map +1 -0
- package/frontmatter.d.ts +51 -0
- package/frontmatter.d.ts.map +1 -0
- package/frontmatter.js +61 -0
- package/frontmatter.js.map +1 -0
- package/index.d.ts +19 -0
- package/index.d.ts.map +1 -0
- package/index.js +17 -0
- package/index.js.map +1 -0
- package/messages.d.ts +39 -0
- package/messages.d.ts.map +1 -0
- package/messages.js +135 -0
- package/messages.js.map +1 -0
- package/normalise/ignored.d.ts +24 -0
- package/normalise/ignored.d.ts.map +1 -0
- package/normalise/ignored.js +68 -0
- package/normalise/ignored.js.map +1 -0
- package/normalise/mcp-servers.d.ts +47 -0
- package/normalise/mcp-servers.d.ts.map +1 -0
- package/normalise/mcp-servers.js +397 -0
- package/normalise/mcp-servers.js.map +1 -0
- package/normalise/overlay.d.ts +27 -0
- package/normalise/overlay.d.ts.map +1 -0
- package/normalise/overlay.js +67 -0
- package/normalise/overlay.js.map +1 -0
- package/normalise/skills.d.ts +31 -0
- package/normalise/skills.d.ts.map +1 -0
- package/normalise/skills.js +116 -0
- package/normalise/skills.js.map +1 -0
- package/normalise/sub-agents.d.ts +44 -0
- package/normalise/sub-agents.d.ts.map +1 -0
- package/normalise/sub-agents.js +168 -0
- package/normalise/sub-agents.js.map +1 -0
- package/normalise/variables.d.ts +27 -0
- package/normalise/variables.d.ts.map +1 -0
- package/normalise/variables.js +155 -0
- package/normalise/variables.js.map +1 -0
- package/outcome.d.ts +46 -0
- package/outcome.d.ts.map +1 -0
- package/outcome.js +21 -0
- package/outcome.js.map +1 -0
- package/package.json +40 -0
- package/placeholders.d.ts +41 -0
- package/placeholders.d.ts.map +1 -0
- package/placeholders.js +68 -0
- package/placeholders.js.map +1 -0
- package/read-plugin-package.d.ts +19 -0
- package/read-plugin-package.d.ts.map +1 -0
- package/read-plugin-package.js +67 -0
- package/read-plugin-package.js.map +1 -0
- package/src/__test-utils__/directory-files.ts +29 -0
- package/src/__test-utils__/read.ts +55 -0
- package/src/__tests__/adversarial.test.ts +434 -0
- package/src/__tests__/detect.test.ts +133 -0
- package/src/__tests__/files.test.ts +119 -0
- package/src/__tests__/fixtures/cursor-plugins/NOTICE +22 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/.cursor-plugin/plugin.json +33 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/CHANGELOG.md +8 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/LICENSE +21 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/README.md +87 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/agents/advisor-subagent.md +48 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/assets/avatar.png +0 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/capture-response.sh +20 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/hooks.json +27 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/lib.sh +61 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/mark-pending.sh +27 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/record-consult.sh +41 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/stop-hook.sh +48 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/skills/advisor/SKILL.md +123 -0
- package/src/__tests__/fixtures/cursor-plugins/advisor/skills/advisor/references/briefing-template.md +44 -0
- package/src/__tests__/fixtures/cursor-plugins/github/.cursor-plugin/plugin.json +45 -0
- package/src/__tests__/fixtures/cursor-plugins/github/CHANGELOG.md +9 -0
- package/src/__tests__/fixtures/cursor-plugins/github/LICENSE +21 -0
- package/src/__tests__/fixtures/cursor-plugins/github/README.md +64 -0
- package/src/__tests__/fixtures/cursor-plugins/github/assets/logo.svg +0 -0
- package/src/__tests__/fixtures/cursor-plugins/github/mcp.json +11 -0
- package/src/__tests__/fixtures/cursor-plugins/playwright/.cursor-plugin/plugin.json +35 -0
- package/src/__tests__/fixtures/cursor-plugins/playwright/CHANGELOG.md +8 -0
- package/src/__tests__/fixtures/cursor-plugins/playwright/LICENSE +21 -0
- package/src/__tests__/fixtures/cursor-plugins/playwright/README.md +46 -0
- package/src/__tests__/fixtures/cursor-plugins/playwright/assets/logo.svg +0 -0
- package/src/__tests__/fixtures/cursor-plugins/playwright/mcp.json +8 -0
- package/src/__tests__/fixtures/cursor-plugins/salesforce/.cursor-plugin/plugin.json +48 -0
- package/src/__tests__/fixtures/cursor-plugins/salesforce/CHANGELOG.md +10 -0
- package/src/__tests__/fixtures/cursor-plugins/salesforce/LICENSE +21 -0
- package/src/__tests__/fixtures/cursor-plugins/salesforce/README.md +95 -0
- package/src/__tests__/fixtures/cursor-plugins/salesforce/assets/logo.svg +0 -0
- package/src/__tests__/fixtures/cursor-plugins/salesforce/mcp.json +12 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/.cursor-plugin/plugin.json +32 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/CHANGELOG.md +8 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/LICENSE +21 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/README.md +70 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/agents/thermo-nuclear-code-quality-review-subagent.md +23 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/agents/thermo-nuclear-review-subagent.md +28 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/assets/logo.png +0 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/skills/thermo-nuclear-code-quality-review/SKILL.md +192 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/skills/thermo-nuclear-review/SKILL.md +51 -0
- package/src/__tests__/fixtures/cursor-plugins/thermos/skills/thermos/SKILL.md +21 -0
- package/src/__tests__/fixtures/cursor-plugins/xero/.cursor-plugin/plugin.json +53 -0
- package/src/__tests__/fixtures/cursor-plugins/xero/CHANGELOG.md +9 -0
- package/src/__tests__/fixtures/cursor-plugins/xero/LICENSE +21 -0
- package/src/__tests__/fixtures/cursor-plugins/xero/README.md +79 -0
- package/src/__tests__/fixtures/cursor-plugins/xero/assets/logo.png +0 -0
- package/src/__tests__/fixtures/cursor-plugins/xero/mcp.json +16 -0
- package/src/__tests__/fixtures.test.ts +198 -0
- package/src/__tests__/mcp-servers.test.ts +120 -0
- package/src/__tests__/overlay-and-ignored.test.ts +65 -0
- package/src/__tests__/skills.test.ts +89 -0
- package/src/__tests__/sub-agents.test.ts +111 -0
- package/src/__tests__/variables.test.ts +94 -0
- package/src/detect.ts +189 -0
- package/src/dialects/claude.ts +90 -0
- package/src/dialects/codex.ts +24 -0
- package/src/dialects/cursor.ts +73 -0
- package/src/dialects/manifest.ts +237 -0
- package/src/dialects/open.ts +48 -0
- package/src/documents.ts +145 -0
- package/src/files.ts +213 -0
- package/src/frontmatter.ts +70 -0
- package/src/index.ts +59 -0
- package/src/messages.ts +206 -0
- package/src/normalise/ignored.ts +70 -0
- package/src/normalise/mcp-servers.ts +427 -0
- package/src/normalise/overlay.ts +71 -0
- package/src/normalise/skills.ts +126 -0
- package/src/normalise/sub-agents.ts +184 -0
- package/src/normalise/variables.ts +161 -0
- package/src/outcome.ts +122 -0
- package/src/placeholders.ts +74 -0
- package/src/read-plugin-package.ts +74 -0
- package/src/testing.ts +258 -0
- package/src/types.ts +189 -0
- package/testing.d.ts +106 -0
- package/testing.d.ts.map +1 -0
- package/testing.js +182 -0
- package/testing.js.map +1 -0
- package/types.d.ts +152 -0
- package/types.d.ts.map +1 -0
- package/types.js +19 -0
- package/types.js.map +1 -0
package/messages.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one sentence for every finding kind, and the collector that composes
|
|
3
|
+
* findings from a kind and its context.
|
|
4
|
+
*
|
|
5
|
+
* Copy lives here and nowhere else: the CLI and the server print these
|
|
6
|
+
* sentences verbatim, so a plugin refused offline is refused by the server
|
|
7
|
+
* with the same words, and a consumer never composes refusal copy of its
|
|
8
|
+
* own. Every sentence says what is wrong and, where the fix is not obvious,
|
|
9
|
+
* what Stigmer needs instead. Identifiers are single-quoted (the ts-server
|
|
10
|
+
* quoting rule for new copy). The `Record` types are exhaustive over the
|
|
11
|
+
* kind unions, so a kind without a sentence does not compile.
|
|
12
|
+
*/
|
|
13
|
+
/** The canonical `$schema` identifiers the open format pins per version. */
|
|
14
|
+
export const AGENT_PLUGINS_MANIFEST_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
|
|
15
|
+
export const AGENT_PLUGINS_MCP_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json";
|
|
16
|
+
/** The four manifest locations, in the precedence the reader applies when there is no root manifest. */
|
|
17
|
+
export const MANIFEST_LOCATIONS = {
|
|
18
|
+
"agent-plugins": "plugin.json",
|
|
19
|
+
claude: ".claude-plugin/plugin.json",
|
|
20
|
+
cursor: ".cursor-plugin/plugin.json",
|
|
21
|
+
codex: ".codex-plugin/plugin.json",
|
|
22
|
+
};
|
|
23
|
+
const q = (value) => `'${value ?? ""}'`;
|
|
24
|
+
const at = (path) => (path === undefined ? "" : ` in ${q(path)}`);
|
|
25
|
+
const ERROR_MESSAGES = {
|
|
26
|
+
"no-manifest": () => `no plugin manifest found: expected one of ${Object.values(MANIFEST_LOCATIONS)
|
|
27
|
+
.map((p) => q(p))
|
|
28
|
+
.join(", ")}`,
|
|
29
|
+
"manifest-unreadable": (c) => `manifest ${q(c.path)} is not valid JSON: ${c.detail ?? "parse error"}`,
|
|
30
|
+
"manifest-schema-missing": (c) => `manifest ${q(c.path)} is missing the required '$schema' field; an Agent Plugins manifest declares ${q(AGENT_PLUGINS_MANIFEST_SCHEMA)}`,
|
|
31
|
+
"manifest-schema-unsupported": (c) => `manifest ${q(c.path)} declares an unsupported '$schema' ${q(c.detail)}; this reader supports ${q(AGENT_PLUGINS_MANIFEST_SCHEMA)}`,
|
|
32
|
+
"manifest-name-missing": (c) => `manifest ${q(c.path)} is missing the required 'name' field`,
|
|
33
|
+
"manifest-name-invalid": (c) => `plugin name ${q(c.subject)}${at(c.path)} is invalid: 1 to 64 characters of lowercase letters, digits, hyphens and periods, starting and ending alphanumeric, with no '--' or '..'`,
|
|
34
|
+
"manifest-name-conflict": (c) => `manifests disagree on the plugin name: ${q(c.subject)} in ${q(c.path)} versus ${c.detail ?? "another manifest"}`,
|
|
35
|
+
"manifest-field-type": (c) => `field ${q(c.subject)}${at(c.path)} has the wrong type: expected ${c.detail ?? "a different type"}`,
|
|
36
|
+
"path-not-relative": (c) => `path ${q(c.subject)}${at(c.path)} must be plugin-relative and begin with './'`,
|
|
37
|
+
"path-escapes-root": (c) => `path ${q(c.subject)}${at(c.path)} escapes the plugin root`,
|
|
38
|
+
"path-glob-unsupported": (c) => `path ${q(c.subject)}${at(c.path)} is a glob pattern; declare directories and files by path`,
|
|
39
|
+
"path-uncontained": (c) => `the reader listed a path outside the plugin root: ${q(c.path)}`,
|
|
40
|
+
"document-too-large": (c) => `${q(c.path)} is ${c.subject ?? "too many"} bytes, over the ${c.detail ?? ""}-byte limit for this kind of document`,
|
|
41
|
+
"skill-frontmatter-missing": (c) => `${q(c.path)} must start with YAML frontmatter ('---')`,
|
|
42
|
+
"skill-frontmatter-unclosed": (c) => `${q(c.path)} frontmatter is not closed (missing the closing '---')`,
|
|
43
|
+
"skill-frontmatter-unreadable": (c) => `${q(c.path)} frontmatter is not valid YAML: ${c.detail ?? "parse error"}`,
|
|
44
|
+
"skill-name-invalid": (c) => `skill name ${q(c.subject)}${at(c.path)} is invalid: lowercase letters, digits and hyphens, optionally dot-scoped, with every segment alphanumeric`,
|
|
45
|
+
"skill-name-duplicate": (c) => `skill name ${q(c.subject)} appears more than once (again${at(c.path)})`,
|
|
46
|
+
"mcp-config-unreadable": (c) => `MCP configuration ${q(c.path)} is not valid JSON: ${c.detail ?? "parse error"}`,
|
|
47
|
+
"mcp-config-shape": (c) => `MCP configuration ${q(c.path)} must be an object with an 'mcpServers' object`,
|
|
48
|
+
"mcp-config-schema-missing": (c) => `MCP configuration ${q(c.path)} is missing the required '$schema' field; an Agent Plugins configuration declares ${q(AGENT_PLUGINS_MCP_SCHEMA)}`,
|
|
49
|
+
"mcp-config-schema-unsupported": (c) => `MCP configuration ${q(c.path)} declares an unsupported '$schema' ${q(c.detail)}; this reader supports ${q(AGENT_PLUGINS_MCP_SCHEMA)}`,
|
|
50
|
+
"mcp-config-field-unknown": (c) => `MCP configuration ${q(c.path)} has an unexpected top-level field ${q(c.subject)}; only '$schema' and 'mcpServers' are allowed`,
|
|
51
|
+
"mcp-server-shape": (c) => `MCP server ${q(c.subject)}${at(c.path)} must be an object`,
|
|
52
|
+
"mcp-server-type-missing": (c) => `MCP server ${q(c.subject)}${at(c.path)} is missing the 'type' field the Agent Plugins format requires ('stdio', 'streamable-http' or 'sse')`,
|
|
53
|
+
"mcp-server-transport-unknown": (c) => `MCP server ${q(c.subject)}${at(c.path)} has no 'type' and neither a 'command' nor a 'url' to infer it from`,
|
|
54
|
+
"mcp-server-type-ambiguous": (c) => `MCP server ${q(c.subject)}${at(c.path)} declares both 'command' and 'url'; a server is either stdio or HTTP`,
|
|
55
|
+
"mcp-server-type-unknown": (c) => `MCP server ${q(c.subject)}${at(c.path)} has an unknown 'type' ${q(c.detail)}; expected 'stdio', 'http', 'streamable-http' or 'sse'`,
|
|
56
|
+
"mcp-server-field-unknown": (c) => `MCP server ${q(c.subject)}${at(c.path)} has a field ${q(c.detail)} that its transport does not define`,
|
|
57
|
+
"mcp-server-field-type": (c) => `MCP server ${q(c.subject)}${at(c.path)} field ${q(c.detail)} has the wrong type`,
|
|
58
|
+
"mcp-server-url-missing": (c) => `MCP server ${q(c.subject)}${at(c.path)} is missing the 'url' its HTTP transport requires`,
|
|
59
|
+
"mcp-server-url-invalid": (c) => `MCP server ${q(c.subject)}${at(c.path)} has an invalid 'url' ${q(c.detail)}: expected an absolute HTTPS URL (HTTP only for localhost) with no user information or fragment`,
|
|
60
|
+
"mcp-server-url-variable": (c) => `MCP server ${q(c.subject)}${at(c.path)} has a variable in its 'url'; Stigmer sends the URL as written, so write the URL out and put variables in 'headers'`,
|
|
61
|
+
"mcp-server-command-missing": (c) => `MCP server ${q(c.subject)}${at(c.path)} is missing the 'command' its stdio transport requires`,
|
|
62
|
+
"mcp-server-command-invalid": (c) => `MCP server ${q(c.subject)}${at(c.path)} has a 'command' that is not a single executable name; put arguments in 'args'`,
|
|
63
|
+
"mcp-server-command-relative": (c) => `MCP server ${q(c.subject)}${at(c.path)} runs a command bundled in the plugin ${q(c.detail)}; Stigmer runs only commands on the runner's PATH (for example 'npx' or 'uvx')`,
|
|
64
|
+
"mcp-server-plugin-root-reference": (c) => `MCP server ${q(c.subject)}${at(c.path)} references the plugin's own files through ${q(c.detail)}; Stigmer does not mount plugin files into the runner`,
|
|
65
|
+
"mcp-server-cwd-unsupported": (c) => `MCP server ${q(c.subject)}${at(c.path)} sets a working directory; Stigmer does not mount plugin files, so a bundled directory cannot be reached`,
|
|
66
|
+
"mcp-server-env-literal": (c) => `MCP server ${q(c.subject)}${at(c.path)} sets environment variable ${q(c.detail)} to a literal value; Stigmer passes declared variables by name, so write ${q(`${c.detail ?? "KEY"}: "\${${c.detail ?? "KEY"}}"`)} and declare the variable`,
|
|
67
|
+
"mcp-server-env-rename": (c) => `MCP server ${q(c.subject)}${at(c.path)} maps environment variable ${q(c.detail)} to a differently named variable; Stigmer passes declared variables by name, so use the same name on both sides`,
|
|
68
|
+
"mcp-server-name-duplicate": (c) => `MCP server name ${q(c.subject)} appears more than once (again${at(c.path)})`,
|
|
69
|
+
"mcp-server-header-duplicate": (c) => `MCP server ${q(c.subject)}${at(c.path)} declares header ${q(c.detail)} more than once (header names are case-insensitive)`,
|
|
70
|
+
"mcp-server-header-invalid": (c) => `MCP server ${q(c.subject)}${at(c.path)} has an invalid header name ${q(c.detail)}`,
|
|
71
|
+
"sub-agent-frontmatter-unreadable": (c) => `${q(c.path)} frontmatter is not valid YAML: ${c.detail ?? "parse error"}`,
|
|
72
|
+
"sub-agent-instructions-short": (c) => `sub-agent ${q(c.subject)}${at(c.path)} has instructions under ${c.detail ?? ""} characters; the body of the file is the sub-agent's prompt`,
|
|
73
|
+
"sub-agent-name-duplicate": (c) => `sub-agent name ${q(c.subject)} appears more than once (again${at(c.path)})`,
|
|
74
|
+
"variable-name-invalid": (c) => `variable name ${q(c.subject)}${at(c.path)} is invalid: an environment variable name is letters, digits and underscores, not starting with a digit`,
|
|
75
|
+
"overlay-server-unknown": (c) => `${q(c.path)} overlays MCP server ${q(c.subject)}, which the plugin does not declare`,
|
|
76
|
+
"overlay-document-unknown": (c) => `${q(c.path)} is not a document Stigmer reads; the 'ai.stigmer/' folder holds 'agent.yaml', 'workflows/<name>.yaml' and 'mcp-servers/<server>.yaml'`,
|
|
77
|
+
};
|
|
78
|
+
const WARNING_MESSAGES = {
|
|
79
|
+
"manifest-field-unknown": (c) => `manifest ${q(c.path)} has an unknown field ${q(c.subject)}, ignored`,
|
|
80
|
+
"manifest-extensions-invalid": (c) => `manifest ${q(c.path)} has an 'extensions' field that is not an object, ignored`,
|
|
81
|
+
"path-missing": (c) => `path ${q(c.subject)} declared${at(c.path)} does not exist in the plugin`,
|
|
82
|
+
"skill-name-defaulted": (c) => `${q(c.path)} has no 'name' in its frontmatter; the skill is named after its directory, ${q(c.subject)}`,
|
|
83
|
+
"skill-name-differs-from-directory": (c) => `skill ${q(c.subject)}${at(c.path)} is named differently from its directory ${q(c.detail)}`,
|
|
84
|
+
"skill-description-missing": (c) => `skill ${q(c.subject)}${at(c.path)} has no 'description'`,
|
|
85
|
+
"mcp-config-field-ignored": (c) => `MCP configuration ${q(c.path)} has a top-level field ${q(c.subject)} Stigmer does not read, ignored`,
|
|
86
|
+
"mcp-server-sse-mapped": (c) => `MCP server ${q(c.subject)}${at(c.path)} declares the legacy 'sse' transport; Stigmer connects over Streamable HTTP and falls back to SSE only when the server rejects it`,
|
|
87
|
+
"mcp-server-field-ignored": (c) => `MCP server ${q(c.subject)}${at(c.path)} has a field ${q(c.detail)} Stigmer does not read, ignored`,
|
|
88
|
+
"mcp-server-auth-ignored": (c) => `MCP server ${q(c.subject)}${at(c.path)} has an 'auth' block Stigmer does not read; OAuth for a server is declared in 'ai.stigmer/mcp-servers/${c.subject ?? "<server>"}.yaml'`,
|
|
89
|
+
"variable-inferred": (c) => `variable ${q(c.subject)} is referenced by MCP server ${q(c.detail)} but not declared; it is declared as a required secret`,
|
|
90
|
+
"variable-unreferenced": (c) => `variable ${q(c.subject)}${at(c.path)} is declared but no MCP server references it`,
|
|
91
|
+
"variable-default-dropped": (c) => `variable ${q(c.subject)}${at(c.path)} has a default value, which Stigmer does not carry; the user supplies the value`,
|
|
92
|
+
"variable-type-narrowed": (c) => `variable ${q(c.subject)}${at(c.path)} is typed ${q(c.detail)}; Stigmer variables are strings`,
|
|
93
|
+
"variable-option-dropped": (c) => `variable ${q(c.subject)}${at(c.path)} has a ${q(c.detail)} constraint, which Stigmer does not carry`,
|
|
94
|
+
"sub-agent-name-defaulted": (c) => `${q(c.path)} has no 'name' in its frontmatter; the sub-agent is named after the file, ${q(c.subject)}`,
|
|
95
|
+
"sub-agent-skill-unknown": (c) => `sub-agent ${q(c.subject)}${at(c.path)} asks for skill ${q(c.detail)}, which the plugin does not ship`,
|
|
96
|
+
"sub-agent-model-unknown": (c) => `sub-agent ${q(c.subject)}${at(c.path)} names model ${q(c.detail)}, which Stigmer cannot map; the sub-agent runs on the session's model`,
|
|
97
|
+
"sub-agent-field-ignored": (c) => `sub-agent ${q(c.subject)}${at(c.path)} has a field ${q(c.detail)} Stigmer does not read, ignored`,
|
|
98
|
+
};
|
|
99
|
+
export function errorMessage(kind, ctx) {
|
|
100
|
+
return ERROR_MESSAGES[kind](ctx);
|
|
101
|
+
}
|
|
102
|
+
export function warningMessage(kind, ctx) {
|
|
103
|
+
return WARNING_MESSAGES[kind](ctx);
|
|
104
|
+
}
|
|
105
|
+
/** True for the kinds that refuse a package. */
|
|
106
|
+
export function isErrorKind(kind) {
|
|
107
|
+
return kind in ERROR_MESSAGES;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Collects findings while a read proceeds. The reader never throws on a
|
|
111
|
+
* plugin's content: every problem becomes a finding here, and the read
|
|
112
|
+
* continues so the outcome carries them all.
|
|
113
|
+
*/
|
|
114
|
+
export class Findings {
|
|
115
|
+
errors = [];
|
|
116
|
+
warnings = [];
|
|
117
|
+
error(kind, ctx = {}) {
|
|
118
|
+
this.errors.push(compose(kind, ctx, errorMessage(kind, ctx)));
|
|
119
|
+
}
|
|
120
|
+
warn(kind, ctx = {}) {
|
|
121
|
+
this.warnings.push(compose(kind, ctx, warningMessage(kind, ctx)));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Optional fields are omitted rather than set to `undefined` so a finding
|
|
125
|
+
// serialises to JSON without `null`s and compares structurally in tests.
|
|
126
|
+
function compose(kind, ctx, message) {
|
|
127
|
+
return {
|
|
128
|
+
kind,
|
|
129
|
+
...(ctx.path !== undefined && { path: ctx.path }),
|
|
130
|
+
...(ctx.subject !== undefined && { subject: ctx.subject }),
|
|
131
|
+
...(ctx.detail !== undefined && { detail: ctx.detail }),
|
|
132
|
+
message,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=messages.js.map
|
package/messages.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The components Stigmer reads past, found on disk.
|
|
3
|
+
*
|
|
4
|
+
* Every dialect ships things that configure the IDE rather than describe
|
|
5
|
+
* knowledge or tools: rules, hooks, slash commands, canvases, output styles,
|
|
6
|
+
* themes, monitors, LSP servers, Codex apps, bundled binaries, a settings
|
|
7
|
+
* file, a logo. Stigmer installs none of them, and says so once per
|
|
8
|
+
* component (a directory or a file, never per file inside), so an author
|
|
9
|
+
* knows what an install leaves behind. Manifest fields that name the same
|
|
10
|
+
* components are recorded by the dialect readers; the two lists are merged
|
|
11
|
+
* and deduplicated by kind and path in `read-plugin-package.ts`.
|
|
12
|
+
*
|
|
13
|
+
* `agents/` joins the list only when no vendor manifest is present: the
|
|
14
|
+
* open format defines no sub-agent component, so a root-manifest-only
|
|
15
|
+
* plugin with an `agents/` folder is told the folder is not read rather
|
|
16
|
+
* than having semantics assigned to it. `README`, `CHANGELOG`, `LICENSE`
|
|
17
|
+
* and dotfiles are not components and pass silently.
|
|
18
|
+
*/
|
|
19
|
+
import type { PluginFileIndex } from "../files.js";
|
|
20
|
+
import type { IgnoredComponent } from "../types.js";
|
|
21
|
+
export declare function ignoredOnDisk(index: PluginFileIndex, readsAgents: boolean): readonly IgnoredComponent[];
|
|
22
|
+
/** One entry per (kind, path), in first-seen order. */
|
|
23
|
+
export declare function dedupeIgnored(lists: readonly (readonly IgnoredComponent[])[]): readonly IgnoredComponent[];
|
|
24
|
+
//# sourceMappingURL=ignored.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignored.d.ts","sourceRoot":"","sources":["../../src/normalise/ignored.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,aAAa,CAAC;AAsB1E,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,GAAG,SAAS,gBAAgB,EAAE,CAYvG;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,gBAAgB,EAAE,CAAC,EAAE,GAAG,SAAS,gBAAgB,EAAE,CAY1G"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The components Stigmer reads past, found on disk.
|
|
3
|
+
*
|
|
4
|
+
* Every dialect ships things that configure the IDE rather than describe
|
|
5
|
+
* knowledge or tools: rules, hooks, slash commands, canvases, output styles,
|
|
6
|
+
* themes, monitors, LSP servers, Codex apps, bundled binaries, a settings
|
|
7
|
+
* file, a logo. Stigmer installs none of them, and says so once per
|
|
8
|
+
* component (a directory or a file, never per file inside), so an author
|
|
9
|
+
* knows what an install leaves behind. Manifest fields that name the same
|
|
10
|
+
* components are recorded by the dialect readers; the two lists are merged
|
|
11
|
+
* and deduplicated by kind and path in `read-plugin-package.ts`.
|
|
12
|
+
*
|
|
13
|
+
* `agents/` joins the list only when no vendor manifest is present: the
|
|
14
|
+
* open format defines no sub-agent component, so a root-manifest-only
|
|
15
|
+
* plugin with an `agents/` folder is told the folder is not read rather
|
|
16
|
+
* than having semantics assigned to it. `README`, `CHANGELOG`, `LICENSE`
|
|
17
|
+
* and dotfiles are not components and pass silently.
|
|
18
|
+
*/
|
|
19
|
+
const IGNORED_DIRECTORIES = {
|
|
20
|
+
rules: "rules",
|
|
21
|
+
hooks: "hooks",
|
|
22
|
+
commands: "commands",
|
|
23
|
+
canvases: "canvases",
|
|
24
|
+
workflows: "workflows",
|
|
25
|
+
"output-styles": "output-styles",
|
|
26
|
+
themes: "themes",
|
|
27
|
+
monitors: "monitors",
|
|
28
|
+
bin: "bin",
|
|
29
|
+
assets: "assets",
|
|
30
|
+
evals: "evals",
|
|
31
|
+
};
|
|
32
|
+
const IGNORED_FILES = {
|
|
33
|
+
".lsp.json": "lsp-servers",
|
|
34
|
+
"settings.json": "settings",
|
|
35
|
+
".app.json": "apps",
|
|
36
|
+
};
|
|
37
|
+
export function ignoredOnDisk(index, readsAgents) {
|
|
38
|
+
const ignored = [];
|
|
39
|
+
for (const dir of index.childDirectories("")) {
|
|
40
|
+
const kind = IGNORED_DIRECTORIES[dir];
|
|
41
|
+
if (kind !== undefined)
|
|
42
|
+
ignored.push({ kind, path: `${dir}/` });
|
|
43
|
+
if (dir === "agents" && !readsAgents)
|
|
44
|
+
ignored.push({ kind: "agents", path: `${dir}/` });
|
|
45
|
+
}
|
|
46
|
+
for (const file of index.childFiles("")) {
|
|
47
|
+
const kind = IGNORED_FILES[file];
|
|
48
|
+
if (kind !== undefined)
|
|
49
|
+
ignored.push({ kind, path: file });
|
|
50
|
+
}
|
|
51
|
+
return ignored;
|
|
52
|
+
}
|
|
53
|
+
/** One entry per (kind, path), in first-seen order. */
|
|
54
|
+
export function dedupeIgnored(lists) {
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
const out = [];
|
|
57
|
+
for (const list of lists) {
|
|
58
|
+
for (const component of list) {
|
|
59
|
+
const key = `${component.kind}\u0000${component.path}`;
|
|
60
|
+
if (seen.has(key))
|
|
61
|
+
continue;
|
|
62
|
+
seen.add(key);
|
|
63
|
+
out.push(component);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=ignored.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignored.js","sourceRoot":"","sources":["../../src/normalise/ignored.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,MAAM,mBAAmB,GAAmD;IAC1E,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,eAAe,EAAE,eAAe;IAChC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,aAAa,GAAmD;IACpE,WAAW,EAAE,aAAa;IAC1B,eAAe,EAAE,UAAU;IAC3B,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,KAAsB,EAAE,WAAoB;IACxE,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;QAChE,IAAI,GAAG,KAAK,QAAQ,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,aAAa,CAAC,KAA+C;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,SAAS,CAAC,IAAI,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP server entries, from every configuration source, into the two shapes
|
|
3
|
+
* `McpServerSpec` takes.
|
|
4
|
+
*
|
|
5
|
+
* The open format and the vendor dialects differ on strictness and the
|
|
6
|
+
* source's dialect decides: an open `mcp.json` requires `type` and closes
|
|
7
|
+
* each transport's field set (an unknown field refuses the entry), while a
|
|
8
|
+
* vendor `.mcp.json` infers the transport from `command` or `url` and
|
|
9
|
+
* carries fields Stigmer does not read as warnings (Cursor's undocumented
|
|
10
|
+
* `auth` block has its own, because OAuth on Stigmer has its own home in the
|
|
11
|
+
* `ai.stigmer/` overlay). `streamable-http` and `http` are one transport;
|
|
12
|
+
* the legacy `sse` maps to it with a warning, because the runner connects
|
|
13
|
+
* both with Streamable HTTP and its adapter falls back to SSE when the
|
|
14
|
+
* server rejects that.
|
|
15
|
+
*
|
|
16
|
+
* Four refusals are facts about the runner, not preferences: it mounts no
|
|
17
|
+
* plugin files (so a `./`-relative command, any plugin-root placeholder,
|
|
18
|
+
* and any `cwd` can never resolve); it sends a server's `url` as written
|
|
19
|
+
* (so a `${VAR}` there would be sent literally); and it hands a stdio
|
|
20
|
+
* subprocess exactly the variables the spec declares, by name (so an `env`
|
|
21
|
+
* entry is representable only as `KEY: "${KEY}"`).
|
|
22
|
+
*
|
|
23
|
+
* Every `${VAR}` in a header, an argument, an `env` value or an `auth` value
|
|
24
|
+
* is a reference to the caller's Environment, listed on the server's `env`;
|
|
25
|
+
* the variables module declares the undeclared ones. Claude's
|
|
26
|
+
* `${user_config.KEY}` is rewritten to `${KEY}` before anything is scanned.
|
|
27
|
+
*/
|
|
28
|
+
import type { McpConfigSource } from "../dialects/manifest.js";
|
|
29
|
+
import type { PluginFileIndex } from "../files.js";
|
|
30
|
+
import { type Findings } from "../messages.js";
|
|
31
|
+
import type { PluginMcpServer } from "../types.js";
|
|
32
|
+
export interface McpServersResult {
|
|
33
|
+
readonly servers: readonly PluginMcpServer[];
|
|
34
|
+
/**
|
|
35
|
+
* How many entries were refused. The variables stage reads it: a refused
|
|
36
|
+
* server's references are unknown, so "declared but unreferenced" would be
|
|
37
|
+
* a consequence of the refusal rather than advice, and is not warned.
|
|
38
|
+
*/
|
|
39
|
+
readonly refused: number;
|
|
40
|
+
/**
|
|
41
|
+
* Every server name the sources declared, accepted or refused. The overlay
|
|
42
|
+
* checks against this, so a refused server's overlay is not a second refusal.
|
|
43
|
+
*/
|
|
44
|
+
readonly declaredNames: ReadonlySet<string>;
|
|
45
|
+
}
|
|
46
|
+
export declare function normaliseMcpServers(index: PluginFileIndex, sources: readonly McpConfigSource[], findings: Findings): McpServersResult;
|
|
47
|
+
//# sourceMappingURL=mcp-servers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-servers.d.ts","sourceRoot":"","sources":["../../src/normalise/mcp-servers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAW/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AASzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAanD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,eAAe,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CAuBrI"}
|