@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manifests.js","sourceRoot":"","sources":["../src/plugin-manifests.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,kGAAkG;AAClG,kDAAkD;
|
|
1
|
+
{"version":3,"file":"plugin-manifests.js","sourceRoot":"","sources":["../src/plugin-manifests.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-marketplace-docs.d.ts","sourceRoot":"","sources":["../src/plugin-marketplace-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"plugin-marketplace-docs.d.ts","sourceRoot":"","sources":["../src/plugin-marketplace-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAsID,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,sBAAsB,GAC9B,SAAS,gBAAgB,EAAE,CAO7B"}
|
|
@@ -55,7 +55,7 @@ The plugin is a distribution bundle, not a vibe-coding product. Your coding agen
|
|
|
55
55
|
|
|
56
56
|
## Capability layers
|
|
57
57
|
|
|
58
|
-
1. **
|
|
58
|
+
1. **Bootstrap skill** — recognizes MCP/plugin work, starts the managed CLI, and hands off to the project-local skill generated by \`noodle init\`.
|
|
59
59
|
2. **managed CLI** — a plugin-pinned launcher performs local scaffolding, validation, tests, preview, and headless deployment without requiring a global CLI install.
|
|
60
60
|
3. **Build Readiness MCP** — reports structured local lifecycle state to build-time widgets and agents.
|
|
61
61
|
4. **Developer MCP** — provides authenticated Noodle Cloud inspection and diagnosis for the selected target.
|
|
@@ -65,7 +65,7 @@ The plugin is a distribution bundle, not a vibe-coding product. Your coding agen
|
|
|
65
65
|
|
|
66
66
|
\`prompt → author TypeScript → validate → test → preview/check → deployment decision → deploy → inspect/diagnose\`
|
|
67
67
|
|
|
68
|
-
The plugin defers to the richer project-local skill after \`noodle init
|
|
68
|
+
The plugin intentionally contains no long-form references or examples. It defers to the richer project-local skill after \`noodle init\`, so every project carries the commands, examples, and defaults generated for its compatible Agent Kit.
|
|
69
69
|
`;
|
|
70
70
|
}
|
|
71
71
|
function securityAndPermissions() {
|
|
@@ -75,6 +75,20 @@ Noodle Seed uses the same OAuth identity as the Console and CLI. Hosted actions
|
|
|
75
75
|
|
|
76
76
|
The plugin-managed launcher uses an isolated host profile. The Developer MCP receives authenticated, tenant-scoped requests; it does not ask the coding agent to forward bearer tokens to application backends.
|
|
77
77
|
|
|
78
|
+
## Declared execution and network access
|
|
79
|
+
|
|
80
|
+
- The host executes the bundled Node launchers only when a Noodle command or local Build Readiness operation is requested.
|
|
81
|
+
- On first use, npm may download the exact release-pinned CLI package from \`https://registry.npmjs.org\`. The plugin never resolves \`latest\` and does not require a global CLI install.
|
|
82
|
+
- The remote Developer MCP endpoint is \`https://cloud.noodleseed.dev/developer/mcp\`. Host OAuth supplies its own audience-bound credential; the plugin bundle contains no token or client secret.
|
|
83
|
+
- Local Build Readiness uses a stdio child process. It accepts a fixed lifecycle operation set rather than an arbitrary shell command or path.
|
|
84
|
+
|
|
85
|
+
## Local files and data movement
|
|
86
|
+
|
|
87
|
+
- Each host keeps plugin CLI auth and target state under \`~/.noodle/plugin-profiles/<host>\`, separate from ordinary CLI state. The project skill and managed context are written only by an explicit \`init\` or \`agents setup --write\` flow.
|
|
88
|
+
- Source code is not uploaded to the Developer MCP. The coding agent edits source locally; the CLI compiles and deploys the artifact only after the normal deployment decision.
|
|
89
|
+
- Secrets and OAuth credentials are excluded from manifests, plugin files, widget payloads, diagnostics, and feedback drafts. Application secrets are resolved by the hosted credential boundary.
|
|
90
|
+
- Noodle Seed does not send a feedback draft unless the user gives explicit approval for the exact disclosed command and payload. Declining or ignoring the request performs no network call and causes no retry.
|
|
91
|
+
|
|
78
92
|
## Safe operating rules
|
|
79
93
|
|
|
80
94
|
- Sign in through the official OAuth flow; never paste access tokens, refresh tokens, secrets, or \`.env\` contents into chat.
|
|
@@ -93,7 +107,9 @@ Start a new agent session in the project and mention “Noodle Seed” or “bui
|
|
|
93
107
|
|
|
94
108
|
## The managed CLI cannot start
|
|
95
109
|
|
|
96
|
-
|
|
110
|
+
The launcher preserves the original npm diagnostic. When npm cannot download or resolve the pinned package, it then emits a JSON error with code \`plugin_cli_bootstrap_failed\` and recovery steps. Check access to \`https://registry.npmjs.org\`, retry, then use the host's plugin update or reinstall flow if the failure continues. Do not install an unrelated global CLI as a workaround.
|
|
111
|
+
|
|
112
|
+
A normal \`noodle\` validation, compile, test, or deployment error is not rewritten as a bootstrap failure: its original output and exit code pass through unchanged.
|
|
97
113
|
|
|
98
114
|
## Build Readiness is disconnected
|
|
99
115
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-marketplace-docs.js","sourceRoot":"","sources":["../src/plugin-marketplace-docs.ts"],"names":[],"mappings":"AAQA,SAAS,YAAY,CAAC,EAAE,UAAU,EAAE,eAAe,EAA0B;IAC3E,OAAO;;;;;;;;;;kBAUS,UAAU,IAAI,eAAe;;;;;;;;;mBAS5B,UAAU,IAAI,eAAe;;;;;;;;;;;;;;;;;;;kDAmBE,eAAe;kDACf,eAAe;;;;;yCAKxB,UAAU,IAAI,eAAe;qCACjC,UAAU;;CAE9C,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;;;;;;;;;;;;;;;;;CAiBR,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO
|
|
1
|
+
{"version":3,"file":"plugin-marketplace-docs.js","sourceRoot":"","sources":["../src/plugin-marketplace-docs.ts"],"names":[],"mappings":"AAQA,SAAS,YAAY,CAAC,EAAE,UAAU,EAAE,eAAe,EAA0B;IAC3E,OAAO;;;;;;;;;;kBAUS,UAAU,IAAI,eAAe;;;;;;;;;mBAS5B,UAAU,IAAI,eAAe;;;;;;;;;;;;;;;;;;;kDAmBE,eAAe;kDACf,eAAe;;;;;yCAKxB,UAAU,IAAI,eAAe;qCACjC,UAAU;;CAE9C,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;;;;;;;;;;;;;;;;;CAiBR,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BR,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CAyBR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAA+B;IAE/B,OAAO;QACL,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE;QAChE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;QACvD,EAAE,IAAI,EAAE,kCAAkC,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE;QAC/E,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE;KAChE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-app-playbook-ref.d.ts","sourceRoot":"","sources":["../src/skill-app-playbook-ref.ts"],"names":[],"mappings":"AAGA,wBAAgB,4BAA4B,IAAI,MAAM,CAuDrD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Outcome-first MCP App playbook. It decides whether UI is warranted and defines the evidence
|
|
2
|
+
// ladder; component APIs and host-specific details stay in the existing references.
|
|
3
|
+
export function renderBuildAnMcpAppReference() {
|
|
4
|
+
return [
|
|
5
|
+
'# Outcome',
|
|
6
|
+
'',
|
|
7
|
+
'Deliver an MCP App whose visual interaction gives the user a concrete benefit beyond a good text response, while preserving useful model-visible output when the widget is unavailable.',
|
|
8
|
+
'',
|
|
9
|
+
'## Use when',
|
|
10
|
+
'',
|
|
11
|
+
'- The user asks for an MCP App, widget, interactive card, visual workflow, or host-visible UI.',
|
|
12
|
+
'- Comparison, selection, progress, editing, confirmation, or another visual interaction materially improves the conversational job.',
|
|
13
|
+
'',
|
|
14
|
+
'## Do not use when',
|
|
15
|
+
'',
|
|
16
|
+
'- A concise text or structured tool result fully serves the user. UI must earn its place.',
|
|
17
|
+
'- The requested task is a headless server, API connector, diagnosis, deployment, or publication with no UI change; select that route.',
|
|
18
|
+
'- The agent lacks the product inputs needed to explain who benefits, what action the UI enables, and what happens without it.',
|
|
19
|
+
'',
|
|
20
|
+
'## Required inputs',
|
|
21
|
+
'',
|
|
22
|
+
'Before implementation, capture a short design spec: target user, conversational job, explicit user benefit, information hierarchy, primary interaction, states (loading/empty/error/success), model-visible result, widget-only data, and useful text fallback. Use `references/experience-design.md` for the deeper product-design questions only when needed.',
|
|
23
|
+
'',
|
|
24
|
+
'## Workflow',
|
|
25
|
+
'',
|
|
26
|
+
'1. **Pass the UI fit check.** State why a visual interaction is better than text for this request. If there is no defensible user benefit, keep the capability headless and stop the App route.',
|
|
27
|
+
'2. **Agree on the design spec.** Describe the smallest complete experience and its states before writing the component. Avoid recreating a full dashboard or website inside the conversation.',
|
|
28
|
+
'3. **Define the output boundary.** Keep concise facts and action results model-visible. Put presentation-heavy or interactive widget data in the widget-only channel. The model must not depend on opaque UI state to continue the conversation.',
|
|
29
|
+
'4. **Preserve fallback.** Every tool that launches a widget must still return useful text without the widget, so unsupported hosts and failed rendering remain usable.',
|
|
30
|
+
'5. **Author and wire the App contract.** Follow `references/widgets-and-apps.md` for the canonical component guidance, view registration, hooks, state, CSP, tool visibility, and output shaping. Keep tool effects and confirmation semantics correct independently of the UI.',
|
|
31
|
+
'6. **Validate the local artifact.** Run `noodle validate --json`, `noodle test --json`, and `noodle check --json`. Repair failures at the layer that produced them.',
|
|
32
|
+
'7. **Inspect the experience.** Run `noodle devtools` and verify loading, empty, error, success, responsive layout, focus/keyboard behavior, and the text fallback.',
|
|
33
|
+
'8. **Escalate evidence only on request.** Run a host test only when the user requested host verification. Run host-specific compliance only when preparing that host submission; select the exact host-testing or compliance entry from the router lookup catalog only after that evidence level is explicitly requested.',
|
|
34
|
+
'',
|
|
35
|
+
'## Verification evidence',
|
|
36
|
+
'',
|
|
37
|
+
'- **Product:** the design spec states the user benefit and the UI fit decision.',
|
|
38
|
+
'- **Server:** `noodle validate --json` and `noodle test --json` succeeded.',
|
|
39
|
+
'- **App contract:** `noodle check --json` succeeded.',
|
|
40
|
+
'- **Local UX:** `noodle devtools` exercised the relevant states and the useful text fallback without the widget.',
|
|
41
|
+
'- **Host/compliance:** report each requested host or compliance check with its evidence; report every unperformed higher level as not run.',
|
|
42
|
+
'',
|
|
43
|
+
'## Recovery paths',
|
|
44
|
+
'',
|
|
45
|
+
'- Weak UI fit: remove the widget and ship the stronger headless result, or narrow the visual interaction to the one decision it improves.',
|
|
46
|
+
'- App check failure: repair the cited view, metadata, output, CSP, or accessibility issue and rerun `noodle check --json` before reopening devtools.',
|
|
47
|
+
'- Blank or stale widget: verify the tool returns the intended widget data, the view is registered, and state derives from supported hooks rather than hidden global state.',
|
|
48
|
+
'- Model cannot continue without UI: move the essential facts into model-visible output and keep only presentation data widget-only.',
|
|
49
|
+
'- Host-only mismatch: record local checks as passed, isolate the host symptom, and select the host-testing lookup only for that observed host; do not rewrite a working local contract without host evidence.',
|
|
50
|
+
'',
|
|
51
|
+
'## Stop conditions',
|
|
52
|
+
'',
|
|
53
|
+
'- Stop complete at the locally requested boundary when product fit, server tests, App checks, devtools states, and text fallback are evidenced.',
|
|
54
|
+
'- Stop before host connection, deployment, or submission unless the user requested that next evidence level.',
|
|
55
|
+
'- Stop blocked when the required design decision, external data, credentials, or host access is unavailable; name the missing input and the exact next action.',
|
|
56
|
+
'- Never claim host compatibility, directory compliance, or production behavior from local devtools evidence alone.',
|
|
57
|
+
].join('\n');
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=skill-app-playbook-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-app-playbook-ref.js","sourceRoot":"","sources":["../src/skill-app-playbook-ref.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oFAAoF;AAEpF,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,WAAW;QACX,EAAE;QACF,yLAAyL;QACzL,EAAE;QACF,aAAa;QACb,EAAE;QACF,gGAAgG;QAChG,qIAAqI;QACrI,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,2FAA2F;QAC3F,uIAAuI;QACvI,+HAA+H;QAC/H,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,iWAAiW;QACjW,EAAE;QACF,aAAa;QACb,EAAE;QACF,iMAAiM;QACjM,+LAA+L;QAC/L,kPAAkP;QAClP,wKAAwK;QACxK,iRAAiR;QACjR,qKAAqK;QACrK,oKAAoK;QACpK,2TAA2T;QAC3T,EAAE;QACF,0BAA0B;QAC1B,EAAE;QACF,iFAAiF;QACjF,4EAA4E;QAC5E,sDAAsD;QACtD,kHAAkH;QAClH,4IAA4I;QAC5I,EAAE;QACF,mBAAmB;QACnB,EAAE;QACF,2IAA2I;QAC3I,sJAAsJ;QACtJ,4KAA4K;QAC5K,qIAAqI;QACrI,+MAA+M;QAC/M,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,iJAAiJ;QACjJ,8GAA8G;QAC9G,gKAAgK;QAChK,oHAAoH;KACrH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -249,7 +249,7 @@ export function renderAuthoringWorkflowReference() {
|
|
|
249
249
|
'',
|
|
250
250
|
'## Invocation context',
|
|
251
251
|
'',
|
|
252
|
-
'Every executable invocation receives one immutable server-authoritative temporal snapshot.
|
|
252
|
+
'Every executable invocation receives one immutable server-authoritative temporal snapshot. TypeScript authoring does not create a hidden context tool. Use `server(..., { context })` for locale/time-zone defaults and trusted ambient facts, and designate one normal zero-input tool with `contextProvider: true` when the model needs portable application context. The embedded host preloads it per turn; Claude, ChatGPT, and other MCP hosts call it normally.',
|
|
253
253
|
'',
|
|
254
254
|
'```ts',
|
|
255
255
|
'context: {',
|
|
@@ -267,7 +267,7 @@ export function renderAuthoringWorkflowReference() {
|
|
|
267
267
|
'},',
|
|
268
268
|
'```',
|
|
269
269
|
'',
|
|
270
|
-
'Ambient providers are recorded as fulfilment data at author time, may call read-only connector operations only, and have a declared output schema. Later fulfilments read `${context.temporal.localDate}`, `${context.temporal.timeZone}`, `${context.ambient.defaultTeamId}`, and `${context.ambientStatus}`. If ambient resolution fails, the status is `unavailable`; never invent the missing business facts.
|
|
270
|
+
'Ambient providers are recorded as fulfilment data at author time, may call read-only connector operations only, and have a declared output schema. Later fulfilments read `${context.temporal.localDate}`, `${context.temporal.timeZone}`, `${context.ambient.defaultTeamId}`, and `${context.ambientStatus}`. If ambient resolution fails, the status is `unavailable`; never invent the missing business facts. Ambient/model-visible context is capped at 16 KiB serialized JSON, depth 8, and 128 entries per container; credential-shaped keys are rejected.',
|
|
271
271
|
'',
|
|
272
272
|
'## Ask for structured missing input',
|
|
273
273
|
'',
|
|
@@ -369,7 +369,7 @@ export function renderWidgetsAndAppsReference() {
|
|
|
369
369
|
'',
|
|
370
370
|
'Generated widgets, official examples, and agent-authored MCP Apps must start with `@noodleseed/one/react` primitives and semantic tokens. Custom React/CSS or third-party components remain valid when the kit lacks the required behavior or the developer explicitly requests them.',
|
|
371
371
|
'',
|
|
372
|
-
'`noodle init my-app` defaults to the
|
|
372
|
+
'`noodle init my-app` defaults to the SaaS profile: federated OIDC placeholders, one explicit context-provider tool, MCP App UI, resource, prompt, state contract, branding, handoff, and embedded assistant. Begin by replacing the IdP/audience/domain placeholders. Use `--template widget`, `hello`, or `http-api` only when that narrower profile is intentional.',
|
|
373
373
|
'',
|
|
374
374
|
'The default composition rule is: build the smallest useful conversational surface. Inline has one purpose, one primary action, and at most two visible actions. Use progressive disclosure or a later conversational turn for secondary detail; request fullscreen only when the user asks or the task genuinely needs it. Never use nested scrolling. At 280px and wider, the widget must remain one-column, readable, touch-safe, and free of horizontal overflow. Remove secondary chrome before shrinking essential content.',
|
|
375
375
|
'',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-authoring-refs.js","sourceRoot":"","sources":["../src/skill-authoring-refs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"skill-authoring-refs.js","sourceRoot":"","sources":["../src/skill-authoring-refs.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,8FAA8F;AAC9F,4FAA4F;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,+EAA+E;AAC/E,6CAA6C;AAC7C,EAAE;AACF,iGAAiG;AACjG,qGAAqG;AACrG,gGAAgG;AAChG,+EAA+E;AAE/E,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,sBAAsB;QACtB,EAAE;QACF,aAAa;QACb,EAAE;QACF,eAAe;QACf,aAAa;QACb,eAAe;QACf,cAAc;QACd,wCAAwC;QACxC,mEAAmE;QACnE,8BAA8B;QAC9B,sBAAsB;QACtB,6BAA6B;QAC7B,SAAS;QACT,yBAAyB;QACzB,sBAAsB;QACtB,cAAc;QACd,EAAE;QACF,gBAAgB;QAChB,EAAE;QACF,oUAAoU;QACpU,oJAAoJ;QACpJ,+TAA+T;QAC/T,EAAE;QACF,cAAc;QACd,EAAE;QACF,gVAAgV;QAChV,EAAE;QACF,gBAAgB;QAChB,EAAE;QACF,gLAAgL;QAChL,EAAE;QACF,eAAe;QACf,EAAE;QACF,kDAAkD;QAClD,EAAE;QACF,uMAAuM;QACvM,+NAA+N;QAC/N,EAAE;QACF,mKAAmK;QACnK,EAAE;QACF,kbAAkb;QAClb,EAAE;QACF,yCAAyC;QACzC,EAAE;QACF,yaAAya;QACza,EAAE;QACF,OAAO;QACP,iFAAiF;QACjF,EAAE;QACF,sDAAsD;QACtD,sCAAsC;QACtC,gDAAgD;QAChD,0DAA0D;QAC1D,iBAAiB;QACjB,sBAAsB;QACtB,qBAAqB;QACrB,sBAAsB;QACtB,2BAA2B;QAC3B,yBAAyB;QACzB,+CAA+C;QAC/C,0EAA0E;QAC1E,qFAAqF;QACrF,QAAQ;QACR,sBAAsB;QACtB,uBAAuB;QACvB,uBAAuB;QACvB,yBAAyB;QACzB,uEAAuE;QACvE,oDAAoD;QACpD,8EAA8E;QAC9E,kDAAkD;QAClD,QAAQ;QACR,MAAM;QACN,KAAK;QACL,EAAE;QACF,0FAA0F;QAC1F,2BAA2B;QAC3B,uDAAuD;QACvD,6CAA6C;QAC7C,wEAAwE;QACxE,0CAA0C;QAC1C,8EAA8E;QAC9E,wDAAwD;QACxD,QAAQ;QACR,OAAO;QACP,yBAAyB;QACzB,2DAA2D;QAC3D,qEAAqE;QACrE,kDAAkD;QAClD,0CAA0C;QAC1C,0GAA0G;QAC1G,+CAA+C;QAC/C,QAAQ;QACR,OAAO;QACP,KAAK;QACL,KAAK;QACL,EAAE;QACF,koBAAkoB;QACloB,EAAE;QACF,+vBAA+vB;QAC/vB,EAAE;QACF,oEAAoE;QACpE,EAAE;QACF,+NAA+N;QAC/N,EAAE;QACF,mVAAmV;QACnV,wQAAwQ;QACxQ,sGAAsG;QACtG,EAAE;QACF,sCAAsC;QACtC,EAAE;QACF,OAAO;QACP,SAAS;QACT,mCAAmC;QACnC,sGAAsG;QACtG,kDAAkD;QAClD,wDAAwD;QACxD,+CAA+C;QAC/C,mGAAmG;QACnG,+EAA+E;QAC/E,GAAG;QACH,KAAK;QACL,EAAE;QACF,2PAA2P;QAC3P,EAAE;QACF,iDAAiD;QACjD,EAAE;QACF,qMAAqM;QACrM,EAAE;QACF,KAAK;QACL,4DAA4D;QAC5D,kDAAkD;QAClD,yDAAyD;QACzD,2DAA2D;QAC3D,6CAA6C;QAC7C,KAAK;QACL,EAAE;QACF,2gBAA2gB;QAC3gB,EAAE;QACF,kDAAkD;QAClD,EAAE;QACF,OAAO;QACP,8DAA8D;QAC9D,uDAAuD;QACvD,EAAE;QACF,mGAAmG;QACnG,uFAAuF;QACvF,EAAE;QACF,wEAAwE;QACxE,0EAA0E;QAC1E,yDAAyD;QACzD,mFAAmF;QACnF,2FAA2F;QAC3F,sFAAsF;QACtF,uDAAuD;QACvD,gFAAgF;QAChF,8BAA8B;QAC9B,4GAA4G;QAC5G,OAAO;QACP,0FAA0F;QAC1F,0FAA0F;QAC1F,KAAK;QACL,gGAAgG;QAChG,uGAAuG;QACvG,+FAA+F;QAC/F,GAAG;QACH,KAAK;QACL,EAAE;QACF,2gBAA2gB;QAC3gB,EAAE;QACF,+BAA+B;QAC/B,EAAE;QACF,4RAA4R;QAC5R,EAAE;QACF,4NAA4N;QAC5N,yUAAyU;QACzU,uIAAuI;QACvI,EAAE;QACF,mMAAmM;QACnM,EAAE;QACF,OAAO;QACP,uEAAuE;QACvE,EAAE;QACF,0DAA0D;QAC1D,yCAAyC;QACzC,kDAAkD;QAClD,4DAA4D;QAC5D,iBAAiB;QACjB,qBAAqB;QACrB,qBAAqB;QACrB,sBAAsB;QACtB,uBAAuB;QACvB,yBAAyB;QACzB,+CAA+C;QAC/C,4DAA4D;QAC5D,qDAAqD;QACrD,QAAQ;QACR,mBAAmB;QACnB,uBAAuB;QACvB,uBAAuB;QACvB,kCAAkC;QAClC,4CAA4C;QAC5C,8CAA8C;QAC9C,2CAA2C;QAC3C,QAAQ;QACR,MAAM;QACN,KAAK;QACL,EAAE;QACF,uFAAuF;QACvF,wBAAwB;QACxB,uKAAuK;QACvK,6CAA6C;QAC7C,8FAA8F;QAC9F,0CAA0C;QAC1C,4EAA4E;QAC5E,0CAA0C;QAC1C,QAAQ;QACR,OAAO;QACP,2BAA2B;QAC3B,kFAAkF;QAClF,0CAA0C;QAC1C,4CAA4C;QAC5C,0CAA0C;QAC1C,qEAAqE;QACrE,iCAAiC;QACjC,QAAQ;QACR,OAAO;QACP,KAAK;QACL,KAAK;QACL,EAAE;QACF,mPAAmP;QACnP,EAAE;QACF,uBAAuB;QACvB,EAAE;QACF,wcAAwc;QACxc,EAAE;QACF,OAAO;QACP,YAAY;QACZ,6DAA6D;QAC7D,cAAc;QACd,qFAAqF;QACrF,kDAAkD;QAClD,wDAAwD;QACxD,gCAAgC;QAChC,yCAAyC;QACzC,WAAW;QACX,wFAAwF;QACxF,QAAQ;QACR,MAAM;QACN,IAAI;QACJ,KAAK;QACL,EAAE;QACF,miBAAmiB;QACniB,EAAE;QACF,qCAAqC;QACrC,EAAE;QACF,2MAA2M;QAC3M,EAAE;QACF,OAAO;QACP,4BAA4B;QAC5B,0EAA0E;QAC1E,4DAA4D;QAC5D,iFAAiF;QACjF,oCAAoC;QACpC,6BAA6B;QAC7B,0BAA0B;QAC1B,2DAA2D;QAC3D,iEAAiE;QACjE,SAAS;QACT,2EAA2E;QAC3E,MAAM;QACN,KAAK;QACL,KAAK;QACL,EAAE;QACF,q8DAAq8D;QACr8D,EAAE;QACF,8BAA8B;QAC9B,EAAE;QACF,OAAO;QACP,8EAA8E;QAC9E,4EAA4E;QAC5E,4CAA4C;QAC5C,kDAAkD;QAClD,iDAAiD;QACjD,mCAAmC;QACnC,iGAAiG;QACjG,4EAA4E;QAC5E,MAAM;QACN,KAAK;QACL,KAAK;QACL,EAAE;QACF,uUAAuU;QACvU,EAAE;QACF,UAAU;QACV,EAAE;QACF,uPAAuP;QACvP,EAAE;QACF,OAAO;QACP,gDAAgD;QAChD,qCAAqC;QACrC,EAAE;QACF,4BAA4B;QAC5B,oDAAoD;QACpD,iDAAiD;QACjD,OAAO;QACP,KAAK;QACL,KAAK;QACL,EAAE;QACF,yIAAyI;QACzI,EAAE;QACF,0BAA0B;QAC1B,EAAE;QACF,8NAA8N;QAC9N,EAAE;QACF,uBAAuB;QACvB,EAAE;QACF,wWAAwW;QACxW,EAAE;QACF,eAAe;QACf,EAAE;QACF,+SAA+S;KAChT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,kGAAkG;AAClG,EAAE;AACF,+FAA+F;AAC/F,oGAAoG;AACpG,oGAAoG;AACpG,2EAA2E;AAC3E,+EAA+E;AAE/E,MAAM,UAAU,6BAA6B;IAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACrF,OAAO;QACL,wBAAwB;QACxB,EAAE;QACF,aAAa;QACb,EAAE;QACF,mBAAmB;QACnB,sBAAsB;QACtB,wBAAwB;QACxB,wCAAwC;QACxC,0CAA0C;QAC1C,+BAA+B;QAC/B,4BAA4B;QAC5B,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,uVAAuV;QACvV,EAAE;QACF,0BAA0B;QAC1B,EAAE;QACF,uRAAuR;QACvR,EAAE;QACF,uWAAuW;QACvW,EAAE;QACF,kgBAAkgB;QAClgB,EAAE;QACF,kZAAkZ;QAClZ,EAAE;QACF,wcAAwc;QACxc,EAAE;QACF,uBAAuB;QACvB,EAAE;QACF,sIAAsI;QACtI,EAAE;QACF,OAAO,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC;QACtC,EAAE;QACF,m1DAAm1D;QACn1D,EAAE;QACF,yBAAyB;QACzB,EAAE;QACF,mOAAmO;QACnO,EAAE;QACF,2BAA2B;QAC3B,EAAE;QACF,gZAAgZ;QAChZ,EAAE;QACF,QAAQ;QACR,oCAAoC;QACpC,0DAA0D;QAC1D,0IAA0I;QAC1I,EAAE;QACF,qFAAqF;QACrF,mJAAmJ;QACnJ,wCAAwC;QACxC,EAAE;QACF,sBAAsB;QACtB,+BAA+B;QAC/B,2BAA2B;QAC3B,4BAA4B;QAC5B,kCAAkC;QAClC,IAAI;QACJ,EAAE;QACF,yCAAyC;QACzC,yFAAyF;QACzF,uFAAuF;QACvF,qCAAqC;QACrC,2CAA2C;QAC3C,yDAAyD;QACzD,uDAAuD;QACvD,gEAAgE;QAChE,sGAAsG;QACtG,qGAAqG;QACrG,oCAAoC;QACpC,iDAAiD;QACjD,EAAE;QACF,qBAAqB;QACrB,0CAA0C;QAC1C,+BAA+B;QAC/B,mFAAmF;QACnF,6GAA6G;QAC7G,SAAS;QACT,kEAAkE;QAClE,EAAE;QACF,kCAAkC;QAClC,gFAAgF;QAChF,mCAAmC;QACnC,oGAAoG;QACpG,OAAO;QACP,sCAAsC;QACtC,iHAAiH;QACjH,OAAO;QACP,KAAK;QACL,EAAE;QACF,YAAY;QACZ,kGAAkG;QAClG,4IAA4I;QAC5I,8BAA8B;QAC9B,oGAAoG;QACpG,wEAAwE;QACxE,4BAA4B;QAC5B,kGAAkG;QAClG,6DAA6D;QAC7D,2DAA2D;QAC3D,+DAA+D;QAC/D,eAAe;QACf,gBAAgB;QAChB,iBAAiB;QACjB,6FAA6F;QAC7F,mBAAmB;QACnB,wFAAwF;QACxF,+BAA+B;QAC/B,SAAS;QACT,qBAAqB;QACrB,iBAAiB;QACjB,0DAA0D;QAC1D,2BAA2B;QAC3B,iBAAiB;QACjB,oBAAoB;QACpB,wBAAwB;QACxB,eAAe;QACf,cAAc;QACd,MAAM;QACN,GAAG;QACH,KAAK;QACL,EAAE;QACF,6BAA6B;QAC7B,EAAE;QACF,2bAA2b;QAC3b,EAAE;QACF,OAAO;QACP,iEAAiE;QACjE,EAAE;QACF,gGAAgG;QAChG,2CAA2C;QAC3C,6DAA6D;QAC7D,EAAE;QACF,wBAAwB;QACxB,aAAa;QACb,KAAK;QACL,sBAAsB;QACtB,uBAAuB;QACvB,yGAAyG;QACzG,kEAAkE;QAClE,MAAM;QACN,KAAK;QACL,0BAA0B;QAC1B,6EAA6E;QAC7E,8FAA8F;QAC9F,4CAA4C;QAC5C,mEAAmE;QACnE,0BAA0B;QAC1B,+BAA+B;QAC/B,2BAA2B;QAC3B,4BAA4B;QAC5B,kCAAkC;QAClC,WAAW;QACX,iCAAiC;QACjC,mCAAmC;QACnC,+BAA+B;QAC/B,oBAAoB;QACpB,mDAAmD;QACnD,WAAW;QACX,kCAAkC;QAClC,kEAAkE;QAClE,6EAA6E;QAC7E,6CAA6C;QAC7C,+EAA+E;QAC/E,cAAc;QACd,yDAAyD;QACzD,mDAAmD;QACnD,gGAAgG;QAChG,yFAAyF;QACzF,UAAU;QACV,SAAS;QACT,kGAAkG;QAClG,2BAA2B;QAC3B,4BAA4B;QAC5B,6DAA6D;QAC7D,gGAAgG;QAChG,4DAA4D;QAC5D,yEAAyE;QACzE,4FAA4F;QAC5F,iCAAiC;QACjC,wDAAwD;QACxD,2BAA2B;QAC3B,mDAAmD;QACnD,WAAW;QACX,SAAS;QACT,MAAM;QACN,IAAI;QACJ,KAAK;QACL,EAAE;QACF,yCAAyC;QACzC,EAAE;QACF,2KAA2K;QAC3K,EAAE;QACF,yHAAyH;QACzH,4TAA4T;QAC5T,0FAA0F;QAC1F,EAAE;QACF,qXAAqX;QACrX,EAAE;QACF,sbAAsb;QACtb,EAAE;QACF,odAAod;QACpd,EAAE;QACF,oDAAoD;QACpD,EAAE;QACF,2PAA2P;QAC3P,EAAE;QACF,OAAO;QACP,iEAAiE;QACjE,EAAE;QACF,8EAA8E;QAC9E,oBAAoB;QACpB,wEAAwE;QACxE,0CAA0C;QAC1C,6CAA6C;QAC7C,wBAAwB;QACxB,2FAA2F;QAC3F,SAAS;QACT,gIAAgI;QAChI,OAAO;QACP,mBAAmB;QACnB,4DAA4D;QAC5D,0CAA0C;QAC1C,0CAA0C;QAC1C,iGAAiG;QACjG,6HAA6H;QAC7H,OAAO;QACP,KAAK;QACL,KAAK;QACL,EAAE;QACF,oKAAoK;QACpK,EAAE;QACF,gCAAgC;QAChC,EAAE;QACF,mSAAmS;QACnS,EAAE;QACF,6BAA6B;QAC7B,EAAE;QACF,kNAAkN;KACnN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,mEAAmE;AACnE,+EAA+E;AAE/E,MAAM,iBAAiB,GAA6C;IAClE,CAAC,OAAO,EAAE,uEAAuE,CAAC;IAClF;QACE,SAAS;QACT,+IAA+I;KAChJ;IACD;QACE,eAAe;QACf,iGAAiG;KAClG;IACD;QACE,gBAAgB;QAChB,8HAA8H;KAC/H;IACD;QACE,YAAY;QACZ,kJAAkJ;KACnJ;IACD;QACE,aAAa;QACb,+IAA+I;KAChJ;IACD;QACE,eAAe;QACf,+EAA+E;KAChF;IACD,CAAC,gBAAgB,EAAE,wEAAwE,CAAC;IAC5F,CAAC,YAAY,EAAE,0DAA0D,CAAC;IAC1E,CAAC,SAAS,EAAE,wEAAwE,CAAC;IACrF,CAAC,YAAY,EAAE,sEAAsE,CAAC;IACtF;QACE,mBAAmB;QACnB,+EAA+E;KAChF;IACD,CAAC,gBAAgB,EAAE,2EAA2E,CAAC;CAChG,CAAC;AAEF,MAAM,UAAU,uBAAuB;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC/C,gGAAgG;IAChG,oGAAoG;IACpG,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAC/C,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CACvE,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,+EAA+E,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzG,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAW,EAAE,CAC1C,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC;IAE5F,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAC7E,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QACnB,KAAK,IAAI,IAAI;QACb,OAAO;QACP,cAAc,IAAI,mBAAmB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;KAC7E,CACF,CAAC;IACF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAC3E,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC,CAC9C,CAAC;IAEF,OAAO;QACL,YAAY;QACZ,EAAE;QACF,0YAA0Y;QAC1Y,EAAE;QACF,yCAAyC;QACzC,EAAE;QACF,+OAA+O;QAC/O,EAAE;QACF,OAAO,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QACrD,EAAE;QACF,0DAA0D;QAC1D,EAAE;QACF,OAAO,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC;QAC1C,EAAE;QACF,wBAAwB;QACxB,EAAE;QACF,yEAAyE;QACzE,EAAE;QACF,OAAO;QACP,oDAAoD;QACpD,EAAE;QACF,wEAAwE;QACxE,mBAAmB;QACnB,4CAA4C;QAC5C,4CAA4C;QAC5C,iDAAiD;QACjD,qEAAqE;QACrE,OAAO;QACP,KAAK;QACL,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-connect-refs.d.ts","sourceRoot":"","sources":["../src/skill-connect-refs.ts"],"names":[],"mappings":"AAIA,wBAAgB,2BAA2B,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"skill-connect-refs.d.ts","sourceRoot":"","sources":["../src/skill-connect-refs.ts"],"names":[],"mappings":"AAIA,wBAAgB,2BAA2B,IAAI,MAAM,CAoMpD"}
|
|
@@ -3,13 +3,16 @@
|
|
|
3
3
|
// actually returned, then prove the mapping returns real data before building the app.
|
|
4
4
|
export function renderConnectAnApiReference() {
|
|
5
5
|
return [
|
|
6
|
-
'#
|
|
6
|
+
'# Outcome',
|
|
7
7
|
'',
|
|
8
|
-
|
|
9
|
-
'drift. Probe the live API, learn the real shape, then encode it as a `connector`. The loop:',
|
|
8
|
+
'Connect a real API to a focused MCP product using managed credentials, mappings derived from observed responses, and representative live-read evidence. A connector that merely compiles is not complete.',
|
|
10
9
|
'',
|
|
11
10
|
'## Contents',
|
|
12
11
|
'',
|
|
12
|
+
'- Use when',
|
|
13
|
+
'- Do not use when',
|
|
14
|
+
'- Required inputs',
|
|
15
|
+
'- Workflow',
|
|
13
16
|
'- Secure the key first',
|
|
14
17
|
'- Probe the live API',
|
|
15
18
|
'- Model the connector from the observed shape',
|
|
@@ -18,9 +21,30 @@ export function renderConnectAnApiReference() {
|
|
|
18
21
|
'- Design intent tools',
|
|
19
22
|
'- Set the secret for local runs',
|
|
20
23
|
'- Prove real output',
|
|
21
|
-
'-
|
|
24
|
+
'- Verification evidence',
|
|
25
|
+
'- Recovery paths',
|
|
26
|
+
'- Stop conditions',
|
|
22
27
|
'',
|
|
23
|
-
'##
|
|
28
|
+
'## Use when',
|
|
29
|
+
'',
|
|
30
|
+
'- The user provides credentials, a reachable API, or an OpenAPI document and wants real MCP behavior backed by it.',
|
|
31
|
+
'- Existing connector behavior compiles but still needs proof against the actual service and data shape.',
|
|
32
|
+
'',
|
|
33
|
+
'## Do not use when',
|
|
34
|
+
'',
|
|
35
|
+
'- The task is a local/static MCP capability with no external data source.',
|
|
36
|
+
'- The user only wants a widget, deployment, publication, or diagnosis unrelated to API behavior; select that route.',
|
|
37
|
+
'- Required credentials or authority are unavailable. Do not bypass authentication or substitute fabricated payloads for live evidence.',
|
|
38
|
+
'',
|
|
39
|
+
'## Required inputs',
|
|
40
|
+
'',
|
|
41
|
+
'Identify the API base URL, authentication scheme, one representative safe read, the user intent it serves, and either an OpenAPI document or one sanitized example response. For writes, also establish the effect, a safe test target, and explicit user approval before any live write.',
|
|
42
|
+
'',
|
|
43
|
+
'Do not guess or invent a field, schema, endpoint, pagination contract, or authentication behavior. Documentation is a hypothesis until a representative live read confirms the response actually returned.',
|
|
44
|
+
'',
|
|
45
|
+
'## Workflow',
|
|
46
|
+
'',
|
|
47
|
+
'### Secure the key first',
|
|
24
48
|
'',
|
|
25
49
|
'Never inline or log the key. Have the user put it in an environment variable, then store it as a',
|
|
26
50
|
'managed secret and reference it only as `secret(...)`:',
|
|
@@ -33,7 +57,7 @@ export function renderConnectAnApiReference() {
|
|
|
33
57
|
'In `server.ts` the key is only ever `secret("SOME_API_KEY")` — keep the raw value out of code, tests,',
|
|
34
58
|
'prompts, logs, and generated files.',
|
|
35
59
|
'',
|
|
36
|
-
'
|
|
60
|
+
'### Probe the live API',
|
|
37
61
|
'',
|
|
38
62
|
'Learn the actual response shape empirically. Two ways — capture one real example response per endpoint',
|
|
39
63
|
'you will use, and read its field names, nesting, array shapes, pagination, and id-vs-label fields:',
|
|
@@ -45,7 +69,7 @@ export function renderConnectAnApiReference() {
|
|
|
45
69
|
" '${response}' }`), `noodle secrets set` the key, then `noodle tools call` it to see the real payload",
|
|
46
70
|
' in-process.',
|
|
47
71
|
'',
|
|
48
|
-
'
|
|
72
|
+
'### Model the connector from the observed shape',
|
|
49
73
|
'',
|
|
50
74
|
'Encode the API as an HTTP connector, mapping only the fields you actually saw into a small typed',
|
|
51
75
|
'`output`:',
|
|
@@ -61,7 +85,7 @@ export function renderConnectAnApiReference() {
|
|
|
61
85
|
'The full connector shape, every `auth.kind`, and compute connectors are in',
|
|
62
86
|
'`references/authoring-workflow.md`.',
|
|
63
87
|
'',
|
|
64
|
-
'
|
|
88
|
+
'### Return a list',
|
|
65
89
|
'',
|
|
66
90
|
'Most real tools return a variable-length list (search results, a user’s tasks). Bind the **whole array** — a single `${response.path}` returns the referenced value verbatim, arrays included:',
|
|
67
91
|
'',
|
|
@@ -92,7 +116,7 @@ export function renderConnectAnApiReference() {
|
|
|
92
116
|
"response: { tasks: '${response.items}' },",
|
|
93
117
|
'```',
|
|
94
118
|
'',
|
|
95
|
-
'
|
|
119
|
+
'### Create, update, delete',
|
|
96
120
|
'',
|
|
97
121
|
'Pair the read/list with the mutations your intent tools need:',
|
|
98
122
|
"- **Create / update** — `method: 'POST'` / `'PATCH'`; author the body as `request: { field: '${input.x}' }` (do not nest it under `body`). It is JSON by default; use `requestEncoding: 'form-urlencoded'` only when the API requires a URLSearchParams body. URL query params remain the operation-level `query: [...]` array.",
|
|
@@ -122,14 +146,14 @@ export function renderConnectAnApiReference() {
|
|
|
122
146
|
'},',
|
|
123
147
|
'```',
|
|
124
148
|
'',
|
|
125
|
-
'
|
|
149
|
+
'### Design intent tools',
|
|
126
150
|
'',
|
|
127
|
-
'
|
|
151
|
+
'Create intent-shaped tools around what the user says, not 1:1 around endpoints. Pair an id-taking action with a',
|
|
128
152
|
'find/search operation that returns `{ id, label }` summaries so the model resolves text → id itself,',
|
|
129
153
|
'and map each response to a few labelled fields the model can speak from. See the "Design tools for the',
|
|
130
154
|
'model" section of `references/authoring-workflow.md`.',
|
|
131
155
|
'',
|
|
132
|
-
'
|
|
156
|
+
'### Set the secret for local runs',
|
|
133
157
|
'',
|
|
134
158
|
'Local `dev`, smoke commands, secrets, and variables resolve one effective target: explicit flags, then the project link, then the saved CLI target, then local defaults. Set the secret through that same target:',
|
|
135
159
|
'',
|
|
@@ -142,20 +166,36 @@ export function renderConnectAnApiReference() {
|
|
|
142
166
|
'',
|
|
143
167
|
'Local secrets live in `./.env.noodle` (never commit it). A required `secret(...)` or `variable(...)` that cannot resolve fails boot closed. `noodle tools call` / `noodle test` / `noodle dev` / `noodle devtools` stop before exposing an empty endpoint and print the exact effective target plus recovery command.',
|
|
144
168
|
'',
|
|
145
|
-
'
|
|
169
|
+
'### Prove real output',
|
|
146
170
|
'',
|
|
147
171
|
'`noodle validate` / `noodle test` prove a connector tool *compiles and registers* — not that its',
|
|
148
172
|
'mapping returns data. With the secret set, run a live read: `noodle tools call <read_tool> --args',
|
|
149
173
|
"'{…}'` executes the connector against the real API in-process. Confirm the mapped fields are populated,",
|
|
150
|
-
'not `undefined`; if they are empty, fix
|
|
151
|
-
'Only run a live write
|
|
174
|
+
'not `undefined`; if they are empty, distinguish a legitimate empty result from a missing or incorrect mapping, fix `${response…}` paths against the real payload when needed, and re-run.',
|
|
175
|
+
'Only run a live write after explicit user approval and when a safe test target and expected effect are known.',
|
|
176
|
+
'',
|
|
177
|
+
'## Verification evidence',
|
|
178
|
+
'',
|
|
179
|
+
'- **Credential path:** the raw credential remained in an environment variable and the managed `secret(...)` path for the same effective local target.',
|
|
180
|
+
'- **Observed shape:** a representative safe live read established the real fields, nesting, arrays, pagination, and empty-result behavior used by the mapping.',
|
|
181
|
+
'- **Local proof:** `noodle validate --json` and `noodle test --json` succeeded, then `noodle tools call` returned populated mapped fields or an intentionally verified empty result.',
|
|
182
|
+
'- **Writes:** name the approval and safe target used, or report writes as not run.',
|
|
183
|
+
'- **Hosted boundary:** local proof does not prove hosted credentials, deployment health, or host behavior. Report hosted checks as not run unless a separate requested route exercised them.',
|
|
184
|
+
'',
|
|
185
|
+
'## Recovery paths',
|
|
186
|
+
'',
|
|
187
|
+
'- Authentication failure: verify the connector auth kind, managed secret name, and effective local target without printing the credential.',
|
|
188
|
+
'- Successful HTTP call with `undefined` fields: compare the mapping with one sanitized observed response, correct the path, and rerun the same read.',
|
|
189
|
+
'- Legitimate empty result: test a second known query or record the empty case as intentional; do not rewrite a correct mapping merely to manufacture data.',
|
|
190
|
+
'- Response too broad for the model: narrow it with response mapping, projection, or a separate compute connector; do not rely on a Zod output to strip runtime fields.',
|
|
191
|
+
'- Repeated external failure: stop after bounded attempts and report the sanitized status, endpoint class, evidence already proven, and exact external action needed.',
|
|
152
192
|
'',
|
|
153
|
-
'##
|
|
193
|
+
'## Stop conditions',
|
|
154
194
|
'',
|
|
155
|
-
'
|
|
156
|
-
'
|
|
157
|
-
'
|
|
158
|
-
'
|
|
195
|
+
'- Stop complete when the representative safe read returns populated mapped fields or an intentionally verified empty result through the same effective local target.',
|
|
196
|
+
'- Stop before a live write without explicit approval, a known effect, and a safe target.',
|
|
197
|
+
'- Stop blocked when credentials, a reachable service, a representative input, or a required private schema is unavailable.',
|
|
198
|
+
'- Do not continue into App design, deployment, or publication unless the user requested that next outcome; route to the corresponding primary playbook instead.',
|
|
159
199
|
].join('\n');
|
|
160
200
|
}
|
|
161
201
|
//# sourceMappingURL=skill-connect-refs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-connect-refs.js","sourceRoot":"","sources":["../src/skill-connect-refs.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,oGAAoG;AACpG,uFAAuF;AAEvF,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,
|
|
1
|
+
{"version":3,"file":"skill-connect-refs.js","sourceRoot":"","sources":["../src/skill-connect-refs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import type { AgentTarget } from './index.js';
|
|
2
|
-
export declare const SKILL_DESCRIPTION: string;
|
|
3
1
|
/** A reference file emitted under the skill directory, one level deep. */
|
|
4
2
|
export interface SkillReference {
|
|
5
3
|
readonly relPath: string;
|
|
6
4
|
readonly render: () => string;
|
|
7
5
|
}
|
|
8
|
-
|
|
9
|
-
* The one-line routing index for every reference file, shared verbatim by the project-local router
|
|
10
|
-
* and the global authoring-plugin bootstrap router so the two cannot drift.
|
|
11
|
-
*/
|
|
12
|
-
export declare const REFERENCE_INDEX_LINES: readonly string[];
|
|
13
|
-
export declare function skillRouterBody(target: AgentTarget): string;
|
|
6
|
+
export { REFERENCE_INDEX_LINES, SKILL_DESCRIPTION, SKILL_ROUTES, skillRouterBody, } from './skill-router.js';
|
|
14
7
|
export declare function renderSdkSurfaceReference(): string;
|
|
15
8
|
export declare function renderCliCommandsReference(): string;
|
|
16
9
|
export declare function renderAgentContractReference(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-content.d.ts","sourceRoot":"","sources":["../src/skill-content.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill-content.d.ts","sourceRoot":"","sources":["../src/skill-content.ts"],"names":[],"mappings":"AAkCA,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAoO3B,wBAAgB,yBAAyB,IAAI,MAAM,CA2ClD;AAMD,wBAAgB,0BAA0B,IAAI,MAAM,CAgCnD;AAMD,wBAAgB,4BAA4B,IAAI,MAAM,CAiDrD;AAMD,wBAAgB,4BAA4B,IAAI,MAAM,CAoBrD;AAMD,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAqBrD,CAAC"}
|
|
@@ -1,101 +1,26 @@
|
|
|
1
1
|
// Renderers for the hierarchical `noodle-seed` skill: one SKILL.md router plus one-level-deep
|
|
2
2
|
// reference files. Factual sections (SDK surface, CLI commands, compile errors, React hooks) are
|
|
3
3
|
// derived from the generated surface (./generated/surface.ts) + curated maps (./curated/*), so
|
|
4
|
-
// they never drift from the real SDK/CLI/compiler. This module owns the
|
|
5
|
-
//
|
|
6
|
-
// references live in
|
|
4
|
+
// they never drift from the real SDK/CLI/compiler. This module owns the reference registry, generated
|
|
5
|
+
// references, and curated agent-contract reference; skill-router.ts owns route selection, while the
|
|
6
|
+
// rest of the curated prose references live in the focused ./skill-*-ref(s).ts modules. The drift gate
|
|
7
7
|
// enforces both currency (every generated name rendered) and structure (router < 500 lines,
|
|
8
8
|
// references one level deep, long references open with a Contents TOC).
|
|
9
9
|
import { COMMAND_GROUP_ORDER, COMMAND_GROUPS } from './curated/command-groups.js';
|
|
10
10
|
import { ERROR_FIXES } from './curated/error-fixes.js';
|
|
11
11
|
import { CLI_COMMANDS, COMPILE_ERROR_CODES, SDK_EXPORTS } from './generated/surface.js';
|
|
12
12
|
import { mdTable } from './md.js';
|
|
13
|
+
import { renderBuildAnMcpAppReference } from './skill-app-playbook-ref.js';
|
|
13
14
|
import { renderAuthoringWorkflowReference, renderExamplesReference, renderWidgetsAndAppsReference, } from './skill-authoring-refs.js';
|
|
14
15
|
import { renderConnectAnApiReference } from './skill-connect-refs.js';
|
|
15
16
|
import { renderExperienceDesignReference } from './skill-design-refs.js';
|
|
16
17
|
import { renderEmbeddedAssistantReference } from './skill-embedded-assistant-ref.js';
|
|
17
18
|
import { renderFeedbackReference } from './skill-feedback-ref.js';
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// ----------------------------------------------------------------------------
|
|
24
|
-
/**
|
|
25
|
-
* The one-line routing index for every reference file, shared verbatim by the project-local router
|
|
26
|
-
* and the global authoring-plugin bootstrap router so the two cannot drift.
|
|
27
|
-
*/
|
|
28
|
-
export const REFERENCE_INDEX_LINES = [
|
|
29
|
-
'- `references/agent-contract.md` — the `--json` envelope, exit codes, and the three output modes.',
|
|
30
|
-
'- `references/sdk-surface.md` — what to import from `@noodleseed/one` and which builder to use.',
|
|
31
|
-
'- `references/cli-commands.md` — every `noodle` command, grouped by area.',
|
|
32
|
-
'- `references/compile-errors.md` — fix `noodle validate` errors by code.',
|
|
33
|
-
'- `references/authoring-workflow.md` — input paths (scrape / OpenAPI import / user interview), the fit check, the validate→test→dev repair loop, connectors, and secrets/variables.',
|
|
34
|
-
'- `references/embedded-assistant.md` — HTTPS origins, managed model config, deploy-before-client sequencing, backend session exchange, browser mounting, and credential boundaries.',
|
|
35
|
-
'- `references/connect-an-api.md` — given an API key: secure it, probe the live API to learn the real shape, model the connector, and prove real output before building.',
|
|
36
|
-
'- `references/experience-design.md` — design the app experience before authoring: funnel/handoff boundary, grounding, two-users, display modes, and the wireframe/UX spec.',
|
|
37
|
-
'- `references/widgets-and-apps.md` — MCP Apps, React `view` widgets, the widget hook surface, output shaping, and CSP.',
|
|
38
|
-
'- `references/test-in-hosts.md` — connect and test in ChatGPT (developer mode), Claude, agent hosts, and MCP Inspector.',
|
|
39
|
-
'- `references/troubleshooting.md` — runtime symptom → cause → fix, in-host and hosted.',
|
|
40
|
-
'- `references/deploy-and-ops.md` — login/link/deploy/status/access and hosted operations.',
|
|
41
|
-
'- `references/publishing.md` — submit to the ChatGPT apps directory and Claude connectors directory.',
|
|
42
|
-
'- `references/chatgpt-compliance.md` — the OpenAI Apps SDK pre-submission checklist (beyond the metadata gate): conversational value, helpful-UI-only, in-chat completion, UI guidelines, domain guardrails, privacy.',
|
|
43
|
-
'- `references/examples.md` — flagship example index and a canonical `server.ts`.',
|
|
44
|
-
'- `references/feedback.md` — send sanitized product feedback to the Noodle Seed team with `noodle feedback`, proactively, whenever you discover a bug, gap, or improvement.',
|
|
45
|
-
];
|
|
46
|
-
export function skillRouterBody(target) {
|
|
47
|
-
const preamble = target === 'codex'
|
|
48
|
-
? 'Use this skill for local Noodle Seed project work in Codex.'
|
|
49
|
-
: 'Use this skill for project-local Noodle Seed authoring in Claude Code; preserve generated/user instruction boundaries.';
|
|
50
|
-
return [
|
|
51
|
-
'# Noodle Seed',
|
|
52
|
-
'',
|
|
53
|
-
'Build, validate, test, deploy, and operate Noodle Seed MCP servers and apps authored in TypeScript with the `noodle` CLI. Author from the configured entrypoint (usually `server.ts`); keep the authoring surface TypeScript-only.',
|
|
54
|
-
'',
|
|
55
|
-
preamble,
|
|
56
|
-
'',
|
|
57
|
-
"**Installed-plugin execution.** When this skill is supplied by the Noodle Developer plugin, preserve the managed invocation path established by the plugin bootstrap and invoke every `noodle` command through that host bundle's managed launcher. Do not install or update a global CLI. Noodle guides and operates the lifecycle; you write and test the application source in the user's project.",
|
|
58
|
-
'',
|
|
59
|
-
'## Golden path',
|
|
60
|
-
'',
|
|
61
|
-
'This CLI is agent-native: the cold-agent-path commands speak the `--json` envelope (hosted admin/ops commands are still being normalized). Drive the loop by parsing machine state, not human prose. The full envelope, exit codes, and output modes are in `references/agent-contract.md`.',
|
|
62
|
-
'',
|
|
63
|
-
'**Discover the skill first.** Before authoring anything, read this whole `SKILL.md` and scan the `## References` index below (including `references/examples.md`) so you build from the shipped patterns — connectors that return live lists, secret scoping, widgets, testing — instead of rediscovering them. Open the references your task touches in full.',
|
|
64
|
-
'',
|
|
65
|
-
'Before authoring, design the experience — the funnel/handoff boundary, tools, widgets, display modes, and grounding — see `references/experience-design.md`. Then run the loop:',
|
|
66
|
-
'',
|
|
67
|
-
"1. **Discover** — `noodle commands --json`: every command, subcommand, flag, and exit code (don't read source).",
|
|
68
|
-
'2. **Author** — edit `src/server.ts` (the configured entrypoint); follow the capability recipe in `references/sdk-surface.md` and `references/examples.md`.',
|
|
69
|
-
'3. **Validate** — `noodle validate --json`; on failure `{ok:false,error:{code,message,fix,next,errors:[{code,path,message}]}}` — the per-field detail is in `error.errors[]`.',
|
|
70
|
-
'4. **Repair** — fix each `error.errors[]` entry at its `path`, then re-run `noodle validate --json`; `noodle validate --fix-prompt` emits ready-to-apply repair prose. Never freeform re-edit (see `references/compile-errors.md`).',
|
|
71
|
-
'5. **Smoke** — `noodle test --json`: local compile plus a loopback MCP smoke.',
|
|
72
|
-
"6. **Prove real output** — `validate`/`test` prove a connector tool *compiles and registers*, not that its response mapping returns data. Set the secret on the same effective local target with `noodle secrets set <NAME> --runtime local --from-env <ENV>` (see `references/connect-an-api.md`), then run a live read — `noodle tools call <read_tool> --args '{...}'` executes the connector against the real API in-process — and confirm the mapped fields are populated, not `undefined`, before trusting it. Only run a live write if it is safe/approved.",
|
|
73
|
-
'7. **Apps/widgets/embed** — `noodle check --json` (add `--target chatgpt|claude|embedded-assistant`), then `noodle devtools`; use `references/widgets-and-apps.md` for MCP Apps and `references/embedded-assistant.md` for a SaaS embed.',
|
|
74
|
-
'8. **Deploy** — `noodle deploy`; auth fails clean with `error.next` = `noodle login` (see `references/deploy-and-ops.md`).',
|
|
75
|
-
'9. **Wire into a host** — `noodle connect <codex|claude-code|chatgpt>` (prove it in a real host per `references/test-in-hosts.md`; debug symptoms with `references/troubleshooting.md`).',
|
|
76
|
-
'10. **Health** — `noodle metrics --agent-output`: a health verdict plus the exact next command per attention item.',
|
|
77
|
-
'',
|
|
78
|
-
'## References',
|
|
79
|
-
'',
|
|
80
|
-
'Scan all of these during discovery; open in full the ones your task touches:',
|
|
81
|
-
'',
|
|
82
|
-
...REFERENCE_INDEX_LINES,
|
|
83
|
-
'',
|
|
84
|
-
'## Product feedback',
|
|
85
|
-
'',
|
|
86
|
-
'When you discover a bug, missing capability, misleading doc, or improvement idea in the CLI, SDK, or any part of Noodle Seed, send it in the moment with `noodle feedback` — sanitized per `references/feedback.md` (never customer code, secrets, or personal data), one submission per finding.',
|
|
87
|
-
'',
|
|
88
|
-
'## Safety',
|
|
89
|
-
'',
|
|
90
|
-
'- 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.',
|
|
91
|
-
'- Do not hand-author manifest JSON/YAML, runtime artifacts, connector IR, or hosted asset metadata.',
|
|
92
|
-
'- Do not add static data-plane credential paths; hosted access is identity-based.',
|
|
93
|
-
'',
|
|
94
|
-
'## Customization',
|
|
95
|
-
'',
|
|
96
|
-
'This skill is regenerated by `noodle agents setup --write`. For project-specific standards, create a separate skill; do not edit this file or its references.',
|
|
97
|
-
].join('\n');
|
|
98
|
-
}
|
|
19
|
+
import { renderAppDirectoryComplianceReference, renderDeployAndOpsReference, renderInspectHostedReference, renderPublishingReference, renderTestInHostsReference, renderTroubleshootingReference, } from './skill-operations-refs.js';
|
|
20
|
+
import { APP_DIRECTORY_COMPLIANCE_REFERENCE } from './skill-router.js';
|
|
21
|
+
import { renderBuildAnMcpServerReference } from './skill-server-playbook-ref.js';
|
|
22
|
+
import { renderVerifyAndRecoverReference } from './skill-verification-ref.js';
|
|
23
|
+
export { REFERENCE_INDEX_LINES, SKILL_DESCRIPTION, SKILL_ROUTES, skillRouterBody, } from './skill-router.js';
|
|
99
24
|
// ----------------------------------------------------------------------------
|
|
100
25
|
// references/sdk-surface.md (GENERATED from SDK_EXPORTS + curated recipes)
|
|
101
26
|
// ----------------------------------------------------------------------------
|
|
@@ -358,6 +283,8 @@ export function renderCliCommandsReference() {
|
|
|
358
283
|
const groupOrder = [...COMMAND_GROUP_ORDER, 'Other'];
|
|
359
284
|
const byGroup = new Map();
|
|
360
285
|
for (const name of CLI_COMMANDS) {
|
|
286
|
+
if ((COMMAND_GROUPS[name]?.audience ?? 'developer') !== 'developer')
|
|
287
|
+
continue;
|
|
361
288
|
const group = COMMAND_GROUPS[name]?.group ?? 'Other';
|
|
362
289
|
const list = byGroup.get(group) ?? [];
|
|
363
290
|
list.push(name);
|
|
@@ -375,7 +302,7 @@ export function renderCliCommandsReference() {
|
|
|
375
302
|
return [
|
|
376
303
|
'# noodle CLI commands',
|
|
377
304
|
'',
|
|
378
|
-
'
|
|
305
|
+
'Developer-facing `noodle` commands, grouped by area. Local authoring commands (`validate`, `test`, `dev`, `tools`, `resources`, `prompts`) need no login or link. Discover the exact command surface for the installed release with `noodle commands --json`.',
|
|
379
306
|
'',
|
|
380
307
|
'## Contents',
|
|
381
308
|
'',
|
|
@@ -468,16 +395,20 @@ export const SKILL_REFERENCES = [
|
|
|
468
395
|
{ relPath: 'references/cli-commands.md', render: renderCliCommandsReference },
|
|
469
396
|
{ relPath: 'references/agent-contract.md', render: renderAgentContractReference },
|
|
470
397
|
{ relPath: 'references/compile-errors.md', render: renderCompileErrorsReference },
|
|
398
|
+
{ relPath: 'references/build-an-mcp-server.md', render: renderBuildAnMcpServerReference },
|
|
471
399
|
{ relPath: 'references/authoring-workflow.md', render: renderAuthoringWorkflowReference },
|
|
472
400
|
{ relPath: 'references/embedded-assistant.md', render: renderEmbeddedAssistantReference },
|
|
473
401
|
{ relPath: 'references/connect-an-api.md', render: renderConnectAnApiReference },
|
|
402
|
+
{ relPath: 'references/build-an-mcp-app.md', render: renderBuildAnMcpAppReference },
|
|
474
403
|
{ relPath: 'references/experience-design.md', render: renderExperienceDesignReference },
|
|
475
404
|
{ relPath: 'references/widgets-and-apps.md', render: renderWidgetsAndAppsReference },
|
|
476
405
|
{ relPath: 'references/test-in-hosts.md', render: renderTestInHostsReference },
|
|
406
|
+
{ relPath: 'references/verify-and-recover.md', render: renderVerifyAndRecoverReference },
|
|
477
407
|
{ relPath: 'references/troubleshooting.md', render: renderTroubleshootingReference },
|
|
408
|
+
{ relPath: 'references/inspect-hosted.md', render: renderInspectHostedReference },
|
|
478
409
|
{ relPath: 'references/deploy-and-ops.md', render: renderDeployAndOpsReference },
|
|
479
410
|
{ relPath: 'references/publishing.md', render: renderPublishingReference },
|
|
480
|
-
{ relPath:
|
|
411
|
+
{ relPath: APP_DIRECTORY_COMPLIANCE_REFERENCE, render: renderAppDirectoryComplianceReference },
|
|
481
412
|
{ relPath: 'references/examples.md', render: renderExamplesReference },
|
|
482
413
|
{ relPath: 'references/feedback.md', render: renderFeedbackReference },
|
|
483
414
|
];
|