@noodleseed/agent-kit 0.58.1 → 0.59.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.
Files changed (32) hide show
  1. package/manifest.json +243 -243
  2. package/package.json +1 -1
  3. package/skills/claude-code/SKILL.md +1 -1
  4. package/skills/claude-code/authoring-mcp-servers/SKILL.md +1 -1
  5. package/skills/claude-code/building-mcp-apps/SKILL.md +1 -1
  6. package/skills/claude-code/connecting-apis-to-mcp/SKILL.md +1 -1
  7. package/skills/claude-code/debugging-mcp-delivery/SKILL.md +1 -1
  8. package/skills/claude-code/deploying-mcp-services/SKILL.md +1 -1
  9. package/skills/claude-code/designing-mcp-products/SKILL.md +1 -1
  10. package/skills/claude-code/embedding-mcp-assistants/SKILL.md +1 -1
  11. package/skills/claude-code/examples/customer-auth/README.md +20 -9
  12. package/skills/claude-code/executing-noodle-plans/SKILL.md +1 -1
  13. package/skills/claude-code/publishing-mcp-integrations/SKILL.md +1 -1
  14. package/skills/claude-code/references/authoring-workflow.md +7 -3
  15. package/skills/claude-code/references/embedded-assistant.md +31 -2
  16. package/skills/claude-code/reporting-noodle-feedback/SKILL.md +1 -1
  17. package/skills/claude-code/verifying-mcp-delivery/SKILL.md +1 -1
  18. package/skills/codex/SKILL.md +1 -1
  19. package/skills/codex/authoring-mcp-servers/SKILL.md +1 -1
  20. package/skills/codex/building-mcp-apps/SKILL.md +1 -1
  21. package/skills/codex/connecting-apis-to-mcp/SKILL.md +1 -1
  22. package/skills/codex/debugging-mcp-delivery/SKILL.md +1 -1
  23. package/skills/codex/deploying-mcp-services/SKILL.md +1 -1
  24. package/skills/codex/designing-mcp-products/SKILL.md +1 -1
  25. package/skills/codex/embedding-mcp-assistants/SKILL.md +1 -1
  26. package/skills/codex/examples/customer-auth/README.md +20 -9
  27. package/skills/codex/executing-noodle-plans/SKILL.md +1 -1
  28. package/skills/codex/publishing-mcp-integrations/SKILL.md +1 -1
  29. package/skills/codex/references/authoring-workflow.md +7 -3
  30. package/skills/codex/references/embedded-assistant.md +31 -2
  31. package/skills/codex/reporting-noodle-feedback/SKILL.md +1 -1
  32. package/skills/codex/verifying-mcp-delivery/SKILL.md +1 -1
@@ -128,13 +128,13 @@ noodle assistant clients create --name web --org <org> --app <app> --env <env>
128
128
 
129
129
  The CLI writes `{ clientId, clientSecret }` to a mode-`0600` file and prints only its path. Move the values into the SaaS backend secret manager without printing or committing them. Rotation invalidates the previous secret.
130
130
 
131
- Validate the active deployment, backend credential, exact origin, and delegated credential exchanges without invoking a business tool:
131
+ Validate the active deployment, backend credential, exact origin, and delegated credential exchanges that do not require an application-specific customer route:
132
132
 
133
133
  ```sh
134
134
  noodle assistant doctor --origin "$PUBLIC_APP_ORIGIN" --org <org> --app <app> --env <env>
135
135
  ```
136
136
 
137
- The doctor reads `NOODLE_ASSISTANT_CLIENT_ID` / `NOODLE_ASSISTANT_CLIENT_SECRET` or the saved mode-0600 client file and never prints the secret. Pass `--user-id <real-test-user>` only when the downstream exchange requires an existing application user.
137
+ The doctor reads `NOODLE_ASSISTANT_CLIENT_ID` / `NOODLE_ASSISTANT_CLIENT_SECRET` or the saved mode-0600 client file and never prints the secret. Pass `--user-id <real-test-user>` only when the downstream exchange requires an existing application user. The assistant doctor does not supply application-specific routes; after the backend mints a routed session, invoke one representative safe read to verify its route-bound exchange and connector together.
138
138
 
139
139
  ## Integrate the customer backend
140
140
 
@@ -171,6 +171,32 @@ Authenticate before exchange. Pass backend-verified `user.roles` and OAuth-style
171
171
 
172
172
  `serviceUrl` is the Noodle Seed control-plane base URL: the value `noodle assistant clients create` prints, also stored as `serviceUrl` in `deployment.json`. It is NOT the deployment MCP endpoint (`url`, which ends in `/v1/mcp` and rejects session exchange). Never probe or guess endpoints with real credentials.
173
173
 
174
+ ### Route customer endpoints from the backend
175
+
176
+ When a connector uses `customerEndpoint("customer_api", ...)`, resolve the signed-in user's API base URL from authenticated, server-owned tenancy data and bind it during session exchange:
177
+
178
+ ```ts
179
+ const user = await requireCurrentUser(request);
180
+ const account = await requireAccountMembership(user.id);
181
+
182
+ const session = await createAssistantSession({
183
+ serviceUrl,
184
+ clientId,
185
+ clientSecret,
186
+ origin,
187
+ user: { id: user.id, email: user.email },
188
+ routing: {
189
+ endpoints: {
190
+ customer_api: account.clusterApiBaseUrl,
191
+ },
192
+ },
193
+ });
194
+ ```
195
+
196
+ The browser does not send `routing`. Authenticate the user and validate account/cluster membership before selecting the URL. Never read it from page context, request headers, session claims, tool arguments, or model output. The endpoint key must match the authored `customerEndpoint` name. Noodle validates the canonical HTTPS URL against the active artifact policy, stores it only in the private short-lived session, and omits it from the session response and caller identity.
197
+
198
+ Routing is optional: static tools continue to work, while a tool whose endpoint was omitted fails closed with `connector_route_unavailable` before credential or connector egress. A confirmed routed action binds a URL-blind fingerprint at proposal time and rejects a missing or changed route on acceptance.
199
+
174
200
  ## Ground time and ambient facts
175
201
 
176
202
  Every assistant turn receives a server-authoritative instant and user-local date/time. Locale and IANA time zone resolve in this order: backend-verified `preferences` from session exchange, fresh per-turn browser `clientContext` hints, `server.context.defaults`, then platform defaults (`en-US`/`UTC`). Browser hints affect presentation and relative-date interpretation only; they are untrusted and never authorize a tool.
@@ -515,6 +541,7 @@ Devtools privacy gate: default model and connector exercises to synthetic or moc
515
541
  - An expired turn re-exchanges once; interaction decisions never auto-retry. An explicit same-decision repeat returns the stored outcome without executing again.
516
542
  - Accept, decline, and cancel are single-use. Only accept executes; the server ignores replacement tool arguments.
517
543
  - Wrong-origin and malformed-origin requests fail closed.
544
+ - Browser-controlled fields cannot select or override `routing.endpoints`; a customer-routed connector uses only the backend-verified session route.
518
545
  - Run the production-equivalent host build after regenerating environment bindings.
519
546
  - In a real browser, submit with the keyboard, inspect console and network failures, complete session exchange and one tool turn, and render one linked App before claiming the host works.
520
547
 
@@ -530,6 +557,8 @@ Devtools privacy gate: default model and connector exercises to synthetic or moc
530
557
  | Validate rejects an origin | Non-loopback HTTP origin in `allowedOrigins` | Use the exact HTTPS production origin; HTTP is only for `localhost`/`127.0.0.1` |
531
558
  | Session exchange returns 404 | `serviceUrl` points at the deployment MCP endpoint | Use the control-plane service URL printed by `noodle assistant clients create` |
532
559
  | Session exchange returns 403 `origin is not allowed` | Request origin differs from `allowedOrigins` character-for-character | Align the exact scheme/host/port on both sides and redeploy |
560
+ | Session exchange returns `400` with `invalid assistant routing` | The authenticated backend supplied an unknown endpoint name or a malformed/policy-disallowed URL | Resolve the route from server-owned membership, use the exact authored endpoint name, and ensure the canonical HTTPS URL satisfies its active `customerEndpoint` policy; the error never reflects the URL |
561
+ | A routed assistant tool returns `connector_route_unavailable` | The authenticated backend omitted that endpoint during session exchange | Pass the server-verified route as `routing.endpoints.<name>` when minting a new session; keep it out of browser input |
533
562
  | Host session 503 | A required backend environment name is absent or mapped into the wrong deployment environment | Run `noodle assistant embed --check --json`, repair the host CI mapping, then probe the session route again |
534
563
  | `HEAD` on a widget or session path looks broken | The route contract is `GET` for the hosted sandbox/widget document or `POST` for session exchange; `HEAD` is not the product flow | Exercise the documented method and inspect its response instead of inferring readiness from `HEAD` |
535
564
  | Local server reports `listen EPERM` | The coding sandbox blocked loopback binding before application behavior ran | Rerun the same local/browser test with approved loopback permissions; do not change product code |
@@ -3,7 +3,7 @@ name: reporting-noodle-feedback
3
3
  description: "Use when a Noodle Seed bug, misleading instruction, missing capability, or concrete product improvement should be proposed to the user."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.58.1 hash:0f404109f4845683 -->
6
+ <!-- noodle-skill version:0.59.0 hash:0f404109f4845683 -->
7
7
 
8
8
  # reporting-noodle-feedback
9
9
 
@@ -3,7 +3,7 @@ name: verifying-mcp-delivery
3
3
  description: "Use when proving a Noodle Seed MCP project works at a named compile, local, connector, App, host, deployment, or production evidence level."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.58.1 hash:6ef6ef551e26b78e -->
6
+ <!-- noodle-skill version:0.59.0 hash:6ef6ef551e26b78e -->
7
7
 
8
8
  # verifying-mcp-delivery
9
9