@noodleseed/one 0.66.0 → 0.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents.d.ts +2 -1
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +73 -20
- package/dist/agents.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/catalog.d.ts.map +1 -1
- package/dist/commands/catalog.js +1 -0
- package/dist/commands/catalog.js.map +1 -1
- package/dist/plugin-mode/plugin-mcp-bootstrap.d.ts.map +1 -1
- package/dist/plugin-mode/plugin-mcp-bootstrap.js +4 -0
- package/dist/plugin-mode/plugin-mcp-bootstrap.js.map +1 -1
- package/dist/skills-update.d.ts +7 -0
- package/dist/skills-update.d.ts.map +1 -1
- package/dist/skills-update.js +9 -3
- package/dist/skills-update.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +2 -2
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/index.js +12 -17
- package/node_modules/@noodle-borg/agent-kit/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts +7 -3
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js +89 -38
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.d.ts +15 -2
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.js +45 -12
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.js +31 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.d.ts +2 -2
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.js +19 -7
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +19 -3
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-app-playbook-ref.d.ts +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-app-playbook-ref.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-app-playbook-ref.js +59 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-app-playbook-ref.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +3 -3
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-connect-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-connect-refs.js +60 -20
- package/node_modules/@noodle-borg/agent-kit/dist/skill-connect-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.d.ts +1 -8
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +17 -86
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js +2 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +3 -3
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js +18 -12
- package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.d.ts +2 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js +114 -155
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts +17 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +160 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.d.ts +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.js +61 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-verification-ref.d.ts +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-verification-ref.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-verification-ref.js +72 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-verification-ref.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/package.json +1 -1
|
@@ -3,20 +3,15 @@
|
|
|
3
3
|
// prompt in any directory the agent knows to reach for the exact compatible CLI through the bundled
|
|
4
4
|
// managed launcher, scaffold with `noodle init`, and then defer to the project-local `noodle-seed` skill
|
|
5
5
|
// that init
|
|
6
|
-
// installs. One shared plugin directory serves
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// The bundle deliberately excludes the project-local extras: no bundled examples (project-local
|
|
10
|
-
// rationale; `noodle init` ships them) and no legacy `commands/` (official docs: use `skills/` for
|
|
11
|
-
// new plugins). Host-specific MCP configuration projections connect the same authenticated Developer
|
|
12
|
-
// MCP: Claude reads the wrapped root `.mcp.json`; Codex follows its manifest to a direct server map.
|
|
6
|
+
// installs. One shared plugin directory serves all hosts. The global bundle stays intentionally
|
|
7
|
+
// lean: manifests, MCP projections, managed launchers, and one cold-start router. Rich references and
|
|
8
|
+
// examples are generated into each project, where they can match that project's SDK and CLI contract.
|
|
13
9
|
import { AGENT_KIT_VERSION, contentHash } from './index.js';
|
|
14
10
|
import { createPluginCompatibility, renderPluginCompatibilityJson, } from './plugin-compatibility.js';
|
|
15
11
|
import { renderPluginLauncher } from './plugin-launcher.js';
|
|
16
12
|
import { renderClaudeDeveloperMcpConfig, renderCodexDeveloperMcpConfig, renderCursorDeveloperMcpConfig, renderPluginHostManifests, } from './plugin-manifests.js';
|
|
17
13
|
import { renderPluginMarketplaceDocs } from './plugin-marketplace-docs.js';
|
|
18
14
|
import { renderChatGptSubmission, renderClaudeSubmission, renderCursorSubmission, renderSubmissionReadme, } from './plugin-submission.js';
|
|
19
|
-
import { REFERENCE_INDEX_LINES, SKILL_REFERENCES } from './skill-content.js';
|
|
20
15
|
/** The plugin identifier — matches the skill name so the defer-to-project rule reads coherently. */
|
|
21
16
|
export const PLUGIN_NAME = 'noodle-seed';
|
|
22
17
|
/** The public marketplace identifier (`/plugin install noodle-seed@noodleseed`). */
|
|
@@ -31,29 +26,28 @@ const PLUGIN_DESCRIPTION = 'Build production MCP servers and apps with Noodle Se
|
|
|
31
26
|
'works in ChatGPT, Claude, Codex, Cursor, Gemini, and every MCP client.';
|
|
32
27
|
/**
|
|
33
28
|
* The skill frontmatter description. It must auto-trigger on cold intents ("build an MCP app",
|
|
34
|
-
* "make a ChatGPT app", "ship
|
|
29
|
+
* "make a ChatGPT app", "ship an MCP app for Claude Code") from developers who have never heard of
|
|
35
30
|
* Noodle Seed — this is the whole point of the global plugin.
|
|
36
31
|
*/
|
|
37
32
|
export const BOOTSTRAP_SKILL_DESCRIPTION = 'Use when asked to build, create, or ship an MCP server or MCP app, a ChatGPT app, a Claude or ' +
|
|
38
|
-
'Gemini connector,
|
|
39
|
-
'reachable by AI agents. Bootstraps Noodle Seed — TypeScript authoring with the noodle
|
|
40
|
-
'local validation and testing, and governed hosted deployment.';
|
|
33
|
+
'Gemini connector, an MCP server or app for Codex or Claude Code, or to make a product, API, ' +
|
|
34
|
+
'or SaaS reachable by AI agents. Bootstraps Noodle Seed — TypeScript authoring with the noodle ' +
|
|
35
|
+
'CLI, local validation and testing, and governed hosted deployment.';
|
|
41
36
|
/** Starter prompts surfaced by the Codex install UI (mirrors the website starter intents). */
|
|
42
37
|
const DEFAULT_PROMPTS = [
|
|
43
38
|
'Create a ChatGPT app for my support workflow',
|
|
44
39
|
'Create a Claude connector for my SaaS',
|
|
45
40
|
'Create an MCP app with a small UI',
|
|
46
|
-
'Create a Codex or Claude Code plugin for this repo',
|
|
47
41
|
];
|
|
48
42
|
function bootstrapRouterBody() {
|
|
49
43
|
return [
|
|
50
44
|
'# Noodle Seed bootstrap',
|
|
51
45
|
'',
|
|
52
|
-
'Noodle Seed turns one TypeScript file (`server.ts`) into a production MCP server or app: authored locally with the `noodle` CLI, validated and tested offline, and deployed to a governed hosted MCP endpoint reachable from ChatGPT, Claude, Codex, Cursor, Gemini, and every MCP client. Use this skill whenever the user wants an MCP server or app, a ChatGPT app, a Claude connector,
|
|
46
|
+
'Noodle Seed turns one TypeScript file (`server.ts`) into a production MCP server or app: authored locally with the `noodle` CLI, validated and tested offline, and deployed to a governed hosted MCP endpoint reachable from ChatGPT, Claude, Codex, Cursor, Gemini, and every MCP client. Use this skill whenever the user wants an MCP server or app, a ChatGPT app, a Claude connector, an MCP server or app for Codex or Claude Code, or wants their product, API, or SaaS reachable by AI agents.',
|
|
53
47
|
'',
|
|
54
48
|
'## Defer to the project-local skill',
|
|
55
49
|
'',
|
|
56
|
-
'`<managed-launcher> init` and `<managed-launcher> agents setup --write` install
|
|
50
|
+
'`<managed-launcher> init` and `<managed-launcher> agents setup --write` install the fuller, project-configured `noodle-seed` skill into the project (`.claude/skills/noodle-seed/` for Claude Code, `.agents/skills/noodle-seed/` for Codex) plus a managed context block in `CLAUDE.md`/`AGENTS.md`. When that project-local skill exists, read it and follow it instead of this one. The project-local skill owns the detailed commands, references, examples, and project defaults and is self-updating (`<managed-launcher> agents doctor --json`). This plugin skill is only the cold-start bootstrap.',
|
|
57
51
|
'',
|
|
58
52
|
'## Cold start (no project yet)',
|
|
59
53
|
'',
|
|
@@ -61,23 +55,18 @@ function bootstrapRouterBody() {
|
|
|
61
55
|
'2. **Scaffold or reconcile.**',
|
|
62
56
|
' - New or empty directory: `<managed-launcher> init` — scaffolds `noodle.json`, `src/server.ts`, tests, and the project-local agent files (the full skill + managed context).',
|
|
63
57
|
' - Existing project: run `<managed-launcher> setup --write` and `<managed-launcher> agents setup --write` instead of overwriting unrelated files.',
|
|
64
|
-
'3. **Switch to the project skill.** Read the newly installed project-local `noodle-seed` `SKILL.md
|
|
58
|
+
'3. **Switch to the project skill.** Read the newly installed project-local `noodle-seed` `SKILL.md`, select its route for the user-requested outcome, and stop bootstrap discovery. This handoff is the bootstrap stop condition.',
|
|
65
59
|
'',
|
|
66
|
-
'##
|
|
60
|
+
'## Bootstrap boundary',
|
|
67
61
|
'',
|
|
68
|
-
|
|
69
|
-
'',
|
|
70
|
-
'## References',
|
|
71
|
-
'',
|
|
72
|
-
'The same reference set the project-local skill ships, readable before any project exists:',
|
|
73
|
-
'',
|
|
74
|
-
...REFERENCE_INDEX_LINES,
|
|
62
|
+
'The bootstrap installs and hands off; it does not prescribe an end-to-end lifecycle. The project-local route owns authoring, validation, local testing, hosted inspection, and any separately authorized hosted action. Application source remains with the coding agent. Scaffold or setup permission does not authorize hosted mutation.',
|
|
75
63
|
'',
|
|
76
64
|
'## Safety',
|
|
77
65
|
'',
|
|
78
66
|
'- Keep secrets, bearer tokens, refresh tokens, static access keys, `.env.noodle` values, and `~/.noodle/config.json` out of prompts, logs, docs, tests, and generated files. Reference managed secrets as `secret("NAME")` in TypeScript and set them with `noodle secrets set`.',
|
|
79
67
|
'- Do not hand-author manifest JSON/YAML, runtime artifacts, connector IR, or hosted asset metadata — the SDK emits them.',
|
|
80
68
|
'- Do not add static data-plane credential paths; hosted access is identity-based.',
|
|
69
|
+
'- This bootstrap does not authorize hosted mutation. Never link, change hosted config/access, deploy, roll back, write host configuration, or submit to a directory unless the current user request explicitly asks for the exact action and target.',
|
|
81
70
|
].join('\n');
|
|
82
71
|
}
|
|
83
72
|
function stampBootstrapRouter(version) {
|
|
@@ -86,10 +75,10 @@ function stampBootstrapRouter(version) {
|
|
|
86
75
|
'---',
|
|
87
76
|
`name: ${PLUGIN_NAME}`,
|
|
88
77
|
`description: ${BOOTSTRAP_SKILL_DESCRIPTION}`,
|
|
89
|
-
`version: ${version}`,
|
|
90
|
-
`hash: ${contentHash(body)}`,
|
|
91
78
|
'---',
|
|
92
79
|
'',
|
|
80
|
+
`<!-- noodle-skill version:${version} hash:${contentHash(body)} -->`,
|
|
81
|
+
'',
|
|
93
82
|
body,
|
|
94
83
|
'',
|
|
95
84
|
].join('\n');
|
|
@@ -97,11 +86,75 @@ function stampBootstrapRouter(version) {
|
|
|
97
86
|
function json(value) {
|
|
98
87
|
return `${JSON.stringify(value, null, 2)}\n`;
|
|
99
88
|
}
|
|
100
|
-
|
|
89
|
+
function pluginReadme(compatibility) {
|
|
90
|
+
if (compatibility.schemaVersion !== 2) {
|
|
91
|
+
throw new Error('plugin README requires current compatibility provenance');
|
|
92
|
+
}
|
|
93
|
+
return [
|
|
94
|
+
'# Noodle Seed plugin',
|
|
95
|
+
'',
|
|
96
|
+
'This is the installable Noodle Seed bootstrap for Claude Code, Codex, and Cursor. It connects',
|
|
97
|
+
'the host to Noodle Seed MCP services and invokes one exact CLI package through a managed',
|
|
98
|
+
'launcher. Project-specific guidance is generated into each project by `noodle init`.',
|
|
99
|
+
'',
|
|
100
|
+
'## Installed compatibility',
|
|
101
|
+
'',
|
|
102
|
+
`- Plugin version: \`${compatibility.pluginVersion}\``,
|
|
103
|
+
`- Agent Kit: \`${compatibility.agentKitVersion}\``,
|
|
104
|
+
`- CLI: \`@noodleseed/one@${compatibility.cliVersion}\``,
|
|
105
|
+
`- MCP capability: \`${compatibility.developerMcpCapabilityVersion}\``,
|
|
106
|
+
'',
|
|
107
|
+
'These values are generated and released as one verified compatibility set. Do not edit them',
|
|
108
|
+
'inside an installed plugin.',
|
|
109
|
+
'',
|
|
110
|
+
'## Trust boundary',
|
|
111
|
+
'',
|
|
112
|
+
'- The managed launcher may download the exact CLI package from the npm registry on first use.',
|
|
113
|
+
'- The plugin connects only to the declared Noodle Seed MCP endpoints and does not forward host',
|
|
114
|
+
' bearer tokens to business backends.',
|
|
115
|
+
'- The plugin does not collect or send feedback without explicit approval for the disclosed',
|
|
116
|
+
' command and payload.',
|
|
117
|
+
'- Secrets stay in Noodle Seed managed secret storage; they must not be placed in prompts, source,',
|
|
118
|
+
' generated files, or logs.',
|
|
119
|
+
'',
|
|
120
|
+
'Read [security and permissions](https://github.com/NoodleSeed-com/plugins/blob/main/docs/security-and-permissions.md) before enabling access.',
|
|
121
|
+
'',
|
|
122
|
+
'## Recovery',
|
|
123
|
+
'',
|
|
124
|
+
'If the managed launcher cannot resolve its pinned CLI, preserve the npm diagnostic, verify npm',
|
|
125
|
+
'registry access, then update or reinstall the plugin. See the',
|
|
126
|
+
'[troubleshooting guide](https://github.com/NoodleSeed-com/plugins/blob/main/docs/troubleshooting.md) for the canonical checks.',
|
|
127
|
+
'',
|
|
128
|
+
].join('\n');
|
|
129
|
+
}
|
|
130
|
+
function pluginChangelog(compatibility) {
|
|
131
|
+
if (compatibility.schemaVersion !== 2) {
|
|
132
|
+
throw new Error('plugin changelog requires current compatibility provenance');
|
|
133
|
+
}
|
|
134
|
+
return [
|
|
135
|
+
'# Plugin changelog',
|
|
136
|
+
'',
|
|
137
|
+
`## ${compatibility.pluginVersion}`,
|
|
138
|
+
'',
|
|
139
|
+
`- Generated by Agent Kit \`${compatibility.agentKitVersion}\``,
|
|
140
|
+
`- Uses CLI \`@noodleseed/one@${compatibility.cliVersion}\``,
|
|
141
|
+
`- MCP capability \`${compatibility.developerMcpCapabilityVersion}\``,
|
|
142
|
+
`- Content fingerprint \`${compatibility.pluginContentHash}\``,
|
|
143
|
+
'',
|
|
144
|
+
'The generated marketplace root changelog and System Release history are the authoritative',
|
|
145
|
+
'cross-version record for this plugin.',
|
|
146
|
+
'',
|
|
147
|
+
].join('\n');
|
|
148
|
+
}
|
|
149
|
+
/** The shared plugin directory: host manifests, MCP projections, launchers, and one bootstrap router. */
|
|
101
150
|
export function renderPluginBundle(options = {}) {
|
|
102
151
|
const version = options.version ?? AGENT_KIT_VERSION;
|
|
103
152
|
const compatibility = createPluginCompatibility({
|
|
104
153
|
pluginVersion: version,
|
|
154
|
+
...(options.agentKitVersion === undefined ? {} : { agentKitVersion: options.agentKitVersion }),
|
|
155
|
+
...(options.pluginContentHash === undefined
|
|
156
|
+
? {}
|
|
157
|
+
: { pluginContentHash: options.pluginContentHash }),
|
|
105
158
|
...(options.mode === undefined ? {} : { mode: options.mode }),
|
|
106
159
|
...(options.cliVersion === undefined ? {} : { cliVersion: options.cliVersion }),
|
|
107
160
|
...(options.developerMcpUrl === undefined ? {} : { developerMcpUrl: options.developerMcpUrl }),
|
|
@@ -121,12 +174,14 @@ export function renderPluginBundle(options = {}) {
|
|
|
121
174
|
});
|
|
122
175
|
return [
|
|
123
176
|
...hostManifests.map(({ path, value }) => ({ path, content: json(value) })),
|
|
177
|
+
{ path: 'CHANGELOG.md', content: pluginChangelog(compatibility) },
|
|
178
|
+
{ path: 'README.md', content: pluginReadme(compatibility) },
|
|
124
179
|
{
|
|
125
180
|
path: '.mcp.json',
|
|
126
181
|
content: json(renderClaudeDeveloperMcpConfig(compatibility)),
|
|
127
182
|
},
|
|
128
183
|
{
|
|
129
|
-
path: '.
|
|
184
|
+
path: '.mcp.codex.json',
|
|
130
185
|
content: json(renderCodexDeveloperMcpConfig(compatibility)),
|
|
131
186
|
},
|
|
132
187
|
{
|
|
@@ -150,10 +205,6 @@ export function renderPluginBundle(options = {}) {
|
|
|
150
205
|
path: `skills/${PLUGIN_NAME}/scripts/noodle-plugin-cursor.mjs`,
|
|
151
206
|
content: renderPluginLauncher({ host: 'cursor', cliVersion: compatibility.cliVersion }),
|
|
152
207
|
},
|
|
153
|
-
...SKILL_REFERENCES.map((ref) => ({
|
|
154
|
-
path: `skills/${PLUGIN_NAME}/${ref.relPath}`,
|
|
155
|
-
content: ref.render(),
|
|
156
|
-
})),
|
|
157
208
|
];
|
|
158
209
|
}
|
|
159
210
|
/**
|
|
@@ -190,7 +241,7 @@ export function renderMarketplaceCatalogs(options = {}) {
|
|
|
190
241
|
{
|
|
191
242
|
...entryMetadata,
|
|
192
243
|
source: { source: 'local', path: PLUGIN_SOURCE_PATH },
|
|
193
|
-
policy: { installation: 'AVAILABLE' },
|
|
244
|
+
policy: { installation: 'AVAILABLE', authentication: 'ON_INSTALL' },
|
|
194
245
|
category: 'Developer Tools',
|
|
195
246
|
},
|
|
196
247
|
],
|
|
@@ -250,10 +301,9 @@ function marketplaceReadme(version) {
|
|
|
250
301
|
'',
|
|
251
302
|
'## What you get',
|
|
252
303
|
'',
|
|
253
|
-
`- The \`${PLUGIN_NAME}\` skill
|
|
254
|
-
'
|
|
255
|
-
'
|
|
256
|
-
' defers to it.',
|
|
304
|
+
`- The lean \`${PLUGIN_NAME}\` bootstrap skill plus pinned launchers and MCP connections.`,
|
|
305
|
+
'- After `noodle init`, the plugin defers to the self-updating project-local skill, which carries',
|
|
306
|
+
' the compatible command guidance, references, examples, and project defaults.',
|
|
257
307
|
'',
|
|
258
308
|
'## Guides',
|
|
259
309
|
'',
|
|
@@ -273,9 +323,10 @@ function marketplaceReadme(version) {
|
|
|
273
323
|
/** The full public marketplace repo layout: catalogs + README + the plugin under plugins/<name>/. */
|
|
274
324
|
export function renderMarketplaceRepo(options = {}) {
|
|
275
325
|
const version = options.version ?? AGENT_KIT_VERSION;
|
|
326
|
+
const agentKitVersion = options.agentKitVersion ?? AGENT_KIT_VERSION;
|
|
276
327
|
return [
|
|
277
328
|
...renderMarketplaceCatalogs(options),
|
|
278
|
-
{ path: 'README.md', content: marketplaceReadme(
|
|
329
|
+
{ path: 'README.md', content: marketplaceReadme(agentKitVersion) },
|
|
279
330
|
...renderPluginMarketplaceDocs({
|
|
280
331
|
version,
|
|
281
332
|
pluginName: PLUGIN_NAME,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-bundle.js","sourceRoot":"","sources":["../src/plugin-bundle.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,mGAAmG;AACnG,oGAAoG;AACpG,yGAAyG;AACzG,YAAY;AACZ,
|
|
1
|
+
{"version":3,"file":"plugin-bundle.js","sourceRoot":"","sources":["../src/plugin-bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,34 @@
|
|
|
1
|
-
export declare const PLUGIN_COMPATIBILITY_SCHEMA_VERSION:
|
|
1
|
+
export declare const PLUGIN_COMPATIBILITY_SCHEMA_VERSION: 2;
|
|
2
2
|
export declare const DEVELOPMENT_CLI_VERSION = "0.0.0";
|
|
3
3
|
export declare const DEVELOPMENT_MCP_CAPABILITY_VERSION = "0.0.0";
|
|
4
4
|
export declare const DEFAULT_DEVELOPER_MCP_URL = "https://cloud.noodleseed.dev/developer/mcp";
|
|
5
|
-
export interface
|
|
5
|
+
export interface LegacyPluginCompatibilityManifest {
|
|
6
6
|
readonly schemaVersion: 1;
|
|
7
7
|
readonly pluginVersion: string;
|
|
8
8
|
readonly cliVersion: string;
|
|
9
9
|
readonly developerMcpUrl: string;
|
|
10
10
|
readonly developerMcpCapabilityVersion: string;
|
|
11
11
|
}
|
|
12
|
+
export interface CurrentPluginCompatibilityManifest {
|
|
13
|
+
readonly schemaVersion: 2;
|
|
14
|
+
readonly pluginVersion: string;
|
|
15
|
+
readonly agentKitVersion: string;
|
|
16
|
+
readonly pluginContentHash: string;
|
|
17
|
+
readonly cliVersion: string;
|
|
18
|
+
readonly developerMcpUrl: string;
|
|
19
|
+
readonly developerMcpCapabilityVersion: string;
|
|
20
|
+
}
|
|
21
|
+
export type PluginCompatibilityManifest = LegacyPluginCompatibilityManifest | CurrentPluginCompatibilityManifest;
|
|
12
22
|
export interface CreatePluginCompatibilityOptions {
|
|
13
23
|
readonly mode?: 'development' | 'release';
|
|
14
24
|
readonly pluginVersion: string;
|
|
25
|
+
readonly agentKitVersion?: string;
|
|
26
|
+
readonly pluginContentHash?: string;
|
|
15
27
|
readonly cliVersion?: string;
|
|
16
28
|
readonly developerMcpUrl?: string;
|
|
17
29
|
readonly developerMcpCapabilityVersion?: string;
|
|
18
30
|
}
|
|
31
|
+
export declare const DEVELOPMENT_CONTENT_HASH: string;
|
|
19
32
|
export declare function createPluginCompatibility(options: CreatePluginCompatibilityOptions): PluginCompatibilityManifest;
|
|
20
33
|
export declare function parsePluginCompatibility(value: unknown): PluginCompatibilityManifest;
|
|
21
34
|
export declare function renderPluginCompatibilityJson(manifest: PluginCompatibilityManifest): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-compatibility.d.ts","sourceRoot":"","sources":["../src/plugin-compatibility.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,EAAG,CAAU,CAAC;AAC9D,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,kCAAkC,UAAU,CAAC;AAC1D,eAAO,MAAM,yBAAyB,+CAA+C,CAAC;AAEtF,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"plugin-compatibility.d.ts","sourceRoot":"","sources":["../src/plugin-compatibility.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,EAAG,CAAU,CAAC;AAC9D,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,kCAAkC,UAAU,CAAC;AAC1D,eAAO,MAAM,yBAAyB,+CAA+C,CAAC;AAEtF,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;CAChD;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;CAChD;AAED,MAAM,MAAM,2BAA2B,GACnC,iCAAiC,GACjC,kCAAkC,CAAC;AAEvC,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,MAAM,CAAC;CACjD;AAeD,eAAO,MAAM,wBAAwB,QAA6B,CAAC;AAEnE,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,2BAA2B,CAoC7B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,2BAA2B,CAgCpF;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,2BAA2B,GAAG,MAAM,CAuB3F"}
|
|
@@ -1,21 +1,27 @@
|
|
|
1
|
-
export const PLUGIN_COMPATIBILITY_SCHEMA_VERSION =
|
|
1
|
+
export const PLUGIN_COMPATIBILITY_SCHEMA_VERSION = 2;
|
|
2
2
|
export const DEVELOPMENT_CLI_VERSION = '0.0.0';
|
|
3
3
|
export const DEVELOPMENT_MCP_CAPABILITY_VERSION = '0.0.0';
|
|
4
4
|
export const DEFAULT_DEVELOPER_MCP_URL = 'https://cloud.noodleseed.dev/developer/mcp';
|
|
5
5
|
const MANIFEST_FIELDS = new Set([
|
|
6
6
|
'schemaVersion',
|
|
7
7
|
'pluginVersion',
|
|
8
|
+
'agentKitVersion',
|
|
9
|
+
'pluginContentHash',
|
|
8
10
|
'cliVersion',
|
|
9
11
|
'developerMcpUrl',
|
|
10
12
|
'developerMcpCapabilityVersion',
|
|
11
13
|
]);
|
|
12
14
|
const EXACT_SEMVER = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
13
15
|
const CAPABILITY_VERSION = /^[0-9A-Za-z](?:[0-9A-Za-z._-]{0,63})$/;
|
|
16
|
+
const CONTENT_HASH = /^sha256:[a-f0-9]{64}$/;
|
|
17
|
+
export const DEVELOPMENT_CONTENT_HASH = `sha256:${'0'.repeat(64)}`;
|
|
14
18
|
export function createPluginCompatibility(options) {
|
|
15
19
|
const release = options.mode === 'release';
|
|
16
20
|
return parsePluginCompatibility({
|
|
17
21
|
schemaVersion: PLUGIN_COMPATIBILITY_SCHEMA_VERSION,
|
|
18
22
|
pluginVersion: options.pluginVersion,
|
|
23
|
+
agentKitVersion: requiredOrDefault('agentKitVersion', options.agentKitVersion, release, options.pluginVersion),
|
|
24
|
+
pluginContentHash: requiredOrDefault('pluginContentHash', options.pluginContentHash, release, DEVELOPMENT_CONTENT_HASH),
|
|
19
25
|
cliVersion: requiredOrDefault('cliVersion', options.cliVersion, release, DEVELOPMENT_CLI_VERSION),
|
|
20
26
|
developerMcpUrl: requiredOrDefault('developerMcpUrl', options.developerMcpUrl, release, DEFAULT_DEVELOPER_MCP_URL),
|
|
21
27
|
developerMcpCapabilityVersion: requiredOrDefault('developerMcpCapabilityVersion', options.developerMcpCapabilityVersion, release, DEVELOPMENT_MCP_CAPABILITY_VERSION),
|
|
@@ -29,30 +35,57 @@ export function parsePluginCompatibility(value) {
|
|
|
29
35
|
throw new Error(`plugin compatibility manifest has unknown field "${field}"`);
|
|
30
36
|
}
|
|
31
37
|
}
|
|
32
|
-
if (value.schemaVersion !==
|
|
33
|
-
throw new Error('plugin compatibility schemaVersion must be 1');
|
|
38
|
+
if (value.schemaVersion !== 1 && value.schemaVersion !== 2) {
|
|
39
|
+
throw new Error('plugin compatibility schemaVersion must be 1 or 2');
|
|
34
40
|
}
|
|
35
41
|
const pluginVersion = exactSemver('pluginVersion', value.pluginVersion);
|
|
36
42
|
const cliVersion = exactSemver('cliVersion', value.cliVersion);
|
|
37
43
|
const developerMcpUrl = canonicalDeveloperMcpUrl(value.developerMcpUrl);
|
|
38
44
|
const developerMcpCapabilityVersion = capabilityVersion(value.developerMcpCapabilityVersion);
|
|
39
|
-
|
|
40
|
-
schemaVersion: PLUGIN_COMPATIBILITY_SCHEMA_VERSION,
|
|
45
|
+
const shared = {
|
|
41
46
|
pluginVersion,
|
|
42
47
|
cliVersion,
|
|
43
48
|
developerMcpUrl,
|
|
44
49
|
developerMcpCapabilityVersion,
|
|
45
50
|
};
|
|
51
|
+
if (value.schemaVersion === 1) {
|
|
52
|
+
if (value.agentKitVersion !== undefined || value.pluginContentHash !== undefined) {
|
|
53
|
+
throw new Error('plugin compatibility schemaVersion 1 does not support provenance fields');
|
|
54
|
+
}
|
|
55
|
+
return { schemaVersion: 1, ...shared };
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
schemaVersion: 2,
|
|
59
|
+
...shared,
|
|
60
|
+
agentKitVersion: exactSemver('agentKitVersion', value.agentKitVersion),
|
|
61
|
+
pluginContentHash: contentHash(value.pluginContentHash),
|
|
62
|
+
};
|
|
46
63
|
}
|
|
47
64
|
export function renderPluginCompatibilityJson(manifest) {
|
|
48
65
|
const validated = parsePluginCompatibility(manifest);
|
|
49
|
-
return `${JSON.stringify(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
66
|
+
return `${JSON.stringify(validated.schemaVersion === 1
|
|
67
|
+
? {
|
|
68
|
+
cliVersion: validated.cliVersion,
|
|
69
|
+
developerMcpCapabilityVersion: validated.developerMcpCapabilityVersion,
|
|
70
|
+
developerMcpUrl: validated.developerMcpUrl,
|
|
71
|
+
pluginVersion: validated.pluginVersion,
|
|
72
|
+
schemaVersion: validated.schemaVersion,
|
|
73
|
+
}
|
|
74
|
+
: {
|
|
75
|
+
agentKitVersion: validated.agentKitVersion,
|
|
76
|
+
cliVersion: validated.cliVersion,
|
|
77
|
+
developerMcpCapabilityVersion: validated.developerMcpCapabilityVersion,
|
|
78
|
+
developerMcpUrl: validated.developerMcpUrl,
|
|
79
|
+
pluginVersion: validated.pluginVersion,
|
|
80
|
+
pluginContentHash: validated.pluginContentHash,
|
|
81
|
+
schemaVersion: validated.schemaVersion,
|
|
82
|
+
}, null, 2)}\n`;
|
|
83
|
+
}
|
|
84
|
+
function contentHash(value) {
|
|
85
|
+
if (typeof value !== 'string' || !CONTENT_HASH.test(value)) {
|
|
86
|
+
throw new Error('pluginContentHash must be a sha256 content hash');
|
|
87
|
+
}
|
|
88
|
+
return value;
|
|
56
89
|
}
|
|
57
90
|
function requiredOrDefault(field, value, release, fallback) {
|
|
58
91
|
if (value !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-compatibility.js","sourceRoot":"","sources":["../src/plugin-compatibility.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAU,CAAC;AAC9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC;AAC/C,MAAM,CAAC,MAAM,kCAAkC,GAAG,OAAO,CAAC;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-compatibility.js","sourceRoot":"","sources":["../src/plugin-compatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-launcher.d.ts","sourceRoot":"","sources":["../src/plugin-launcher.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAQD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"plugin-launcher.d.ts","sourceRoot":"","sources":["../src/plugin-launcher.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAQD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CA4EjF"}
|
|
@@ -33,20 +33,50 @@ export function renderPluginLauncher(options) {
|
|
|
33
33
|
"const npmCli = join(dirname(process.execPath), 'node_modules', 'npm', 'bin', 'npm-cli.js');",
|
|
34
34
|
"const command = process.platform === 'win32' ? process.execPath : 'npm';",
|
|
35
35
|
"const commandArgs = process.platform === 'win32' ? [npmCli, ...npmArgs] : npmArgs;",
|
|
36
|
+
'const STDERR_TAIL_LIMIT = 16 * 1024;',
|
|
37
|
+
'const BOOTSTRAP_FAILURE =',
|
|
38
|
+
' /(?:npm (?:error|ERR!) (?:code )?(?:EAI_AGAIN|ENETUNREACH|ENOTFOUND|ECONNREFUSED|ETIMEDOUT)|No matching version found for @noodleseed\\/one@|404 Not Found[^\\n]*(?:@noodleseed(?:%2f|\\/)one)|could not determine executable to run)/i;',
|
|
39
|
+
"let stderrTail = '';",
|
|
40
|
+
'let bootstrapFailureDetected = false;',
|
|
41
|
+
'let launchFailed = false;',
|
|
36
42
|
'const child = spawn(',
|
|
37
43
|
' command,',
|
|
38
44
|
' commandArgs,',
|
|
39
|
-
" { stdio: 'inherit', shell: false, env },",
|
|
45
|
+
" { stdio: ['inherit', 'inherit', 'pipe'], shell: false, env },",
|
|
40
46
|
');',
|
|
47
|
+
"child.stderr.on('data', (chunk) => {",
|
|
48
|
+
' const text = String(chunk);',
|
|
49
|
+
' process.stderr.write(text);',
|
|
50
|
+
' const combined = `${stderrTail}${text}`;',
|
|
51
|
+
' bootstrapFailureDetected ||= BOOTSTRAP_FAILURE.test(combined);',
|
|
52
|
+
' stderrTail = combined.slice(-STDERR_TAIL_LIMIT);',
|
|
53
|
+
'});',
|
|
41
54
|
"child.once('error', (error) => {",
|
|
55
|
+
' launchFailed = true;',
|
|
42
56
|
" process.stderr.write(`${JSON.stringify({ ok: false, error: { code: 'plugin_cli_launch_failed', message: error.message } })}\\n`);",
|
|
43
57
|
' process.exitCode = 1;',
|
|
44
58
|
'});',
|
|
45
59
|
"child.once('close', (code, signal) => {",
|
|
60
|
+
' if (launchFailed) return;',
|
|
46
61
|
' if (signal !== null) {',
|
|
47
62
|
' process.kill(process.pid, signal);',
|
|
48
63
|
' return;',
|
|
49
64
|
' }',
|
|
65
|
+
' if ((code ?? 1) !== 0 && bootstrapFailureDetected) {',
|
|
66
|
+
' const recovery = {',
|
|
67
|
+
' ok: false,',
|
|
68
|
+
' error: {',
|
|
69
|
+
" code: 'plugin_cli_bootstrap_failed',",
|
|
70
|
+
' message: `The plugin could not start its pinned CLI package ${CLI_PACKAGE}.`,',
|
|
71
|
+
' next: [',
|
|
72
|
+
" 'Check access to https://registry.npmjs.org and retry.',",
|
|
73
|
+
" 'Update or reinstall the Noodle Seed plugin from its marketplace.',",
|
|
74
|
+
' `If it continues, verify npm can resolve ${CLI_PACKAGE}.`,',
|
|
75
|
+
' ],',
|
|
76
|
+
' },',
|
|
77
|
+
' };',
|
|
78
|
+
' process.stderr.write(`${JSON.stringify(recovery)}\\n`);',
|
|
79
|
+
' }',
|
|
50
80
|
' process.exitCode = code ?? 1;',
|
|
51
81
|
'});',
|
|
52
82
|
'',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-launcher.js","sourceRoot":"","sources":["../src/plugin-launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAStE,MAAM,2BAA2B,GAAuC;IACtE,aAAa,EAAE,qCAAqC;IACpD,KAAK,EAAE,2CAA2C;IAClD,MAAM,EAAE,2CAA2C;CACpD,CAAC;AAEF,8FAA8F;AAC9F,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,MAAM,UAAU,GAAG,yBAAyB,CAAC;QAC3C,aAAa,EAAE,OAAO;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC,UAAU,CAAC;IACd,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,yBAAyB,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO;QACL,qBAAqB;QACrB,6CAA6C;QAC7C,2CAA2C;QAC3C,qDAAqD;QACrD,oCAAoC;QACpC,EAAE;QACF,wCAAwC,UAAU,IAAI;QACtD,iBAAiB,IAAI,IAAI;QACzB,+EAA+E,yBAAyB,KAAK;QAC7G,yEAAyE;QACzE,eAAe;QACf,mBAAmB;QACnB,0BAA0B,IAAI,IAAI;QAClC,mCAAmC;QACnC,wDAAwD;QACxD,IAAI;QACJ,0GAA0G;QAC1G,6FAA6F;QAC7F,0EAA0E;QAC1E,oFAAoF;QACpF,sBAAsB;QACtB,YAAY;QACZ,gBAAgB;QAChB,
|
|
1
|
+
{"version":3,"file":"plugin-launcher.js","sourceRoot":"","sources":["../src/plugin-launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAStE,MAAM,2BAA2B,GAAuC;IACtE,aAAa,EAAE,qCAAqC;IACpD,KAAK,EAAE,2CAA2C;IAClD,MAAM,EAAE,2CAA2C;CACpD,CAAC;AAEF,8FAA8F;AAC9F,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,MAAM,UAAU,GAAG,yBAAyB,CAAC;QAC3C,aAAa,EAAE,OAAO;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC,UAAU,CAAC;IACd,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,yBAAyB,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO;QACL,qBAAqB;QACrB,6CAA6C;QAC7C,2CAA2C;QAC3C,qDAAqD;QACrD,oCAAoC;QACpC,EAAE;QACF,wCAAwC,UAAU,IAAI;QACtD,iBAAiB,IAAI,IAAI;QACzB,+EAA+E,yBAAyB,KAAK;QAC7G,yEAAyE;QACzE,eAAe;QACf,mBAAmB;QACnB,0BAA0B,IAAI,IAAI;QAClC,mCAAmC;QACnC,wDAAwD;QACxD,IAAI;QACJ,0GAA0G;QAC1G,6FAA6F;QAC7F,0EAA0E;QAC1E,oFAAoF;QACpF,sCAAsC;QACtC,2BAA2B;QAC3B,4OAA4O;QAC5O,sBAAsB;QACtB,uCAAuC;QACvC,2BAA2B;QAC3B,sBAAsB;QACtB,YAAY;QACZ,gBAAgB;QAChB,iEAAiE;QACjE,IAAI;QACJ,sCAAsC;QACtC,+BAA+B;QAC/B,+BAA+B;QAC/B,4CAA4C;QAC5C,kEAAkE;QAClE,oDAAoD;QACpD,KAAK;QACL,kCAAkC;QAClC,wBAAwB;QACxB,qIAAqI;QACrI,yBAAyB;QACzB,KAAK;QACL,yCAAyC;QACzC,6BAA6B;QAC7B,0BAA0B;QAC1B,wCAAwC;QACxC,aAAa;QACb,KAAK;QACL,wDAAwD;QACxD,wBAAwB;QACxB,kBAAkB;QAClB,gBAAgB;QAChB,8CAA8C;QAC9C,uFAAuF;QACvF,iBAAiB;QACjB,oEAAoE;QACpE,+EAA+E;QAC/E,sEAAsE;QACtE,YAAY;QACZ,UAAU;QACV,QAAQ;QACR,6DAA6D;QAC7D,KAAK;QACL,iCAAiC;QACjC,KAAK;QACL,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type PluginCompatibilityManifest } from './plugin-compatibility.js';
|
|
2
2
|
export interface PluginHostManifestInput {
|
|
3
3
|
readonly name: string;
|
|
4
4
|
readonly version: string;
|
|
@@ -20,7 +20,7 @@ export interface RenderedPluginHostManifest {
|
|
|
20
20
|
export declare function renderPluginHostManifests(input: PluginHostManifestInput): readonly RenderedPluginHostManifest[];
|
|
21
21
|
/** Claude's root `.mcp.json`; OAuth is negotiated by the host, never embedded in the bundle. */
|
|
22
22
|
export declare function renderClaudeDeveloperMcpConfig(compatibility: PluginCompatibilityManifest): Readonly<Record<string, unknown>>;
|
|
23
|
-
/** Codex
|
|
23
|
+
/** Codex receives its own wrapped MCP file so the readiness launcher selects the Codex profile. */
|
|
24
24
|
export declare function renderCodexDeveloperMcpConfig(compatibility: PluginCompatibilityManifest): Readonly<Record<string, unknown>>;
|
|
25
25
|
/** Cursor plugin MCP files use the wrapped server map consumed by the installed plugin. */
|
|
26
26
|
export declare function renderCursorDeveloperMcpConfig(compatibility: PluginCompatibilityManifest): Readonly<Record<string, unknown>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manifests.d.ts","sourceRoot":"","sources":["../src/plugin-manifests.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"plugin-manifests.d.ts","sourceRoot":"","sources":["../src/plugin-manifests.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EACT,4BAA4B,GAC5B,2BAA2B,GAC3B,4BAA4B,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAID,0FAA0F;AAC1F,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,GAC7B,SAAS,0BAA0B,EAAE,CAkDvC;AAED,gGAAgG;AAChG,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,2BAA2B,GACzC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUnC;AAED,mGAAmG;AACnG,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,2BAA2B,GACzC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUnC;AAED,2FAA2F;AAC3F,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,2BAA2B,GACzC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASnC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// Pure renderers for the shared Noodle Developer plugin host metadata. Keeping these projections in
|
|
2
2
|
// one module makes the Claude Code and Codex manifests one logical release surface while allowing
|
|
3
3
|
// each host to receive its own install UI fields.
|
|
4
|
+
import { DEVELOPMENT_CONTENT_HASH, } from './plugin-compatibility.js';
|
|
4
5
|
const LICENSE = 'Apache-2.0';
|
|
5
6
|
/** Project one plugin identity into the current Claude Code and Codex manifest shapes. */
|
|
6
7
|
export function renderPluginHostManifests(input) {
|
|
7
8
|
const shared = {
|
|
8
9
|
name: input.name,
|
|
9
|
-
displayName: 'Noodle Seed',
|
|
10
10
|
version: input.version,
|
|
11
11
|
description: input.description,
|
|
12
12
|
author: input.author,
|
|
@@ -21,7 +21,7 @@ export function renderPluginHostManifests(input) {
|
|
|
21
21
|
path: '.codex-plugin/plugin.json',
|
|
22
22
|
value: {
|
|
23
23
|
...shared,
|
|
24
|
-
mcpServers: './.
|
|
24
|
+
mcpServers: './.mcp.codex.json',
|
|
25
25
|
interface: {
|
|
26
26
|
displayName: 'Noodle Seed',
|
|
27
27
|
shortDescription: 'Build and deploy MCP servers and apps from one TypeScript file.',
|
|
@@ -29,7 +29,8 @@ export function renderPluginHostManifests(input) {
|
|
|
29
29
|
developerName: 'Noodle Seed',
|
|
30
30
|
category: 'Developer Tools',
|
|
31
31
|
websiteURL: input.homepage,
|
|
32
|
-
|
|
32
|
+
capabilities: ['MCP servers', 'MCP apps', 'Hosted deployment'],
|
|
33
|
+
defaultPrompt: input.defaultPrompts.slice(0, 3),
|
|
33
34
|
},
|
|
34
35
|
},
|
|
35
36
|
},
|
|
@@ -66,13 +67,16 @@ export function renderClaudeDeveloperMcpConfig(compatibility) {
|
|
|
66
67
|
},
|
|
67
68
|
};
|
|
68
69
|
}
|
|
69
|
-
/** Codex
|
|
70
|
+
/** Codex receives its own wrapped MCP file so the readiness launcher selects the Codex profile. */
|
|
70
71
|
export function renderCodexDeveloperMcpConfig(compatibility) {
|
|
71
72
|
return {
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
mcpServers: {
|
|
74
|
+
'noodle-developer': {
|
|
75
|
+
type: 'http',
|
|
76
|
+
url: compatibility.developerMcpUrl,
|
|
77
|
+
},
|
|
78
|
+
'noodle-readiness': localReadinessMcp('codex', compatibility, false),
|
|
74
79
|
},
|
|
75
|
-
'noodle-readiness': localReadinessMcp('codex', compatibility, false),
|
|
76
80
|
};
|
|
77
81
|
}
|
|
78
82
|
/** Cursor plugin MCP files use the wrapped server map consumed by the installed plugin. */
|
|
@@ -98,6 +102,14 @@ function localReadinessMcp(host, compatibility, includeType) {
|
|
|
98
102
|
host,
|
|
99
103
|
'--plugin-version',
|
|
100
104
|
compatibility.pluginVersion,
|
|
105
|
+
'--agent-kit-version',
|
|
106
|
+
compatibility.schemaVersion === 2
|
|
107
|
+
? compatibility.agentKitVersion
|
|
108
|
+
: compatibility.pluginVersion,
|
|
109
|
+
'--plugin-content-hash',
|
|
110
|
+
compatibility.schemaVersion === 2
|
|
111
|
+
? compatibility.pluginContentHash
|
|
112
|
+
: DEVELOPMENT_CONTENT_HASH,
|
|
101
113
|
'--developer-mcp-url',
|
|
102
114
|
compatibility.developerMcpUrl,
|
|
103
115
|
'--developer-mcp-capability-version',
|