@noodleseed/agent-kit 0.23.0 → 0.24.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/manifest.json +15 -15
- package/package.json +1 -1
- package/skills/claude-code/SKILL.md +1 -1
- package/skills/claude-code/examples/customer-auth/README.md +9 -3
- package/skills/claude-code/examples/customer-auth/src/server.ts +9 -0
- package/skills/claude-code/examples/customer-auth/test/server.test.ts +8 -1
- package/skills/claude-code/references/cli-commands.md +1 -0
- package/skills/claude-code/references/deploy-and-ops.md +5 -0
- package/skills/claude-code/references/embedded-assistant.md +28 -0
- package/skills/codex/SKILL.md +1 -1
- package/skills/codex/examples/customer-auth/README.md +9 -3
- package/skills/codex/examples/customer-auth/src/server.ts +9 -0
- package/skills/codex/examples/customer-auth/test/server.test.ts +8 -1
- package/skills/codex/references/cli-commands.md +1 -0
- package/skills/codex/references/deploy-and-ops.md +5 -0
- package/skills/codex/references/embedded-assistant.md +28 -0
package/manifest.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packageVersion": "0.
|
|
2
|
+
"packageVersion": "0.24.0",
|
|
3
3
|
"files": [
|
|
4
4
|
{
|
|
5
5
|
"path": "skills/codex/SKILL.md",
|
|
6
|
-
"sha256": "
|
|
6
|
+
"sha256": "0554c0c35261c583a8024b6762a2540ad6e6627f73d6d22867eae497db7b88d2",
|
|
7
7
|
"agentTarget": "codex"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "skills/codex/references/cli-commands.md",
|
|
16
|
-
"sha256": "
|
|
16
|
+
"sha256": "abcd6d76e1c9e22e3104b04ca2eb436a0ee19ee114648689a7ba43e164007b34",
|
|
17
17
|
"agentTarget": "codex"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"path": "skills/codex/references/embedded-assistant.md",
|
|
36
|
-
"sha256": "
|
|
36
|
+
"sha256": "9eebab3471ae21b3b3ed5755f8151b297ed39e1bc08d6bcd7cdc1d75afce2f11",
|
|
37
37
|
"agentTarget": "codex"
|
|
38
38
|
},
|
|
39
39
|
{
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
"path": "skills/codex/references/deploy-and-ops.md",
|
|
66
|
-
"sha256": "
|
|
66
|
+
"sha256": "d029cb301ae2d06337f573a356c98106f283a1ef8f5f905fb63fe4d4bdf5c599",
|
|
67
67
|
"agentTarget": "codex"
|
|
68
68
|
},
|
|
69
69
|
{
|
|
@@ -253,7 +253,7 @@
|
|
|
253
253
|
},
|
|
254
254
|
{
|
|
255
255
|
"path": "skills/codex/examples/customer-auth/README.md",
|
|
256
|
-
"sha256": "
|
|
256
|
+
"sha256": "f0955609ac8a880d76e5f18fc4319d6de88e4e0d8623519a12afb111095fc057",
|
|
257
257
|
"agentTarget": "codex"
|
|
258
258
|
},
|
|
259
259
|
{
|
|
@@ -268,12 +268,12 @@
|
|
|
268
268
|
},
|
|
269
269
|
{
|
|
270
270
|
"path": "skills/codex/examples/customer-auth/src/server.ts",
|
|
271
|
-
"sha256": "
|
|
271
|
+
"sha256": "cdd95b74a3e219db2eb9bad9b0c128720d8b8e030d5acd8163e46dd65e79bdf6",
|
|
272
272
|
"agentTarget": "codex"
|
|
273
273
|
},
|
|
274
274
|
{
|
|
275
275
|
"path": "skills/codex/examples/customer-auth/test/server.test.ts",
|
|
276
|
-
"sha256": "
|
|
276
|
+
"sha256": "bd46358f4abfd797903fc748797e0082faf0d2be906ede0ae5df0cb5f278a2db",
|
|
277
277
|
"agentTarget": "codex"
|
|
278
278
|
},
|
|
279
279
|
{
|
|
@@ -378,7 +378,7 @@
|
|
|
378
378
|
},
|
|
379
379
|
{
|
|
380
380
|
"path": "skills/claude-code/SKILL.md",
|
|
381
|
-
"sha256": "
|
|
381
|
+
"sha256": "bc68fdca977ae01b9b0b02b075fbbe8fabf863d875fd539efd5f241390fc57d9",
|
|
382
382
|
"agentTarget": "claude-code"
|
|
383
383
|
},
|
|
384
384
|
{
|
|
@@ -388,7 +388,7 @@
|
|
|
388
388
|
},
|
|
389
389
|
{
|
|
390
390
|
"path": "skills/claude-code/references/cli-commands.md",
|
|
391
|
-
"sha256": "
|
|
391
|
+
"sha256": "abcd6d76e1c9e22e3104b04ca2eb436a0ee19ee114648689a7ba43e164007b34",
|
|
392
392
|
"agentTarget": "claude-code"
|
|
393
393
|
},
|
|
394
394
|
{
|
|
@@ -408,7 +408,7 @@
|
|
|
408
408
|
},
|
|
409
409
|
{
|
|
410
410
|
"path": "skills/claude-code/references/embedded-assistant.md",
|
|
411
|
-
"sha256": "
|
|
411
|
+
"sha256": "9eebab3471ae21b3b3ed5755f8151b297ed39e1bc08d6bcd7cdc1d75afce2f11",
|
|
412
412
|
"agentTarget": "claude-code"
|
|
413
413
|
},
|
|
414
414
|
{
|
|
@@ -438,7 +438,7 @@
|
|
|
438
438
|
},
|
|
439
439
|
{
|
|
440
440
|
"path": "skills/claude-code/references/deploy-and-ops.md",
|
|
441
|
-
"sha256": "
|
|
441
|
+
"sha256": "d029cb301ae2d06337f573a356c98106f283a1ef8f5f905fb63fe4d4bdf5c599",
|
|
442
442
|
"agentTarget": "claude-code"
|
|
443
443
|
},
|
|
444
444
|
{
|
|
@@ -628,7 +628,7 @@
|
|
|
628
628
|
},
|
|
629
629
|
{
|
|
630
630
|
"path": "skills/claude-code/examples/customer-auth/README.md",
|
|
631
|
-
"sha256": "
|
|
631
|
+
"sha256": "f0955609ac8a880d76e5f18fc4319d6de88e4e0d8623519a12afb111095fc057",
|
|
632
632
|
"agentTarget": "claude-code"
|
|
633
633
|
},
|
|
634
634
|
{
|
|
@@ -643,12 +643,12 @@
|
|
|
643
643
|
},
|
|
644
644
|
{
|
|
645
645
|
"path": "skills/claude-code/examples/customer-auth/src/server.ts",
|
|
646
|
-
"sha256": "
|
|
646
|
+
"sha256": "cdd95b74a3e219db2eb9bad9b0c128720d8b8e030d5acd8163e46dd65e79bdf6",
|
|
647
647
|
"agentTarget": "claude-code"
|
|
648
648
|
},
|
|
649
649
|
{
|
|
650
650
|
"path": "skills/claude-code/examples/customer-auth/test/server.test.ts",
|
|
651
|
-
"sha256": "
|
|
651
|
+
"sha256": "bd46358f4abfd797903fc748797e0082faf0d2be906ede0ae5df0cb5f278a2db",
|
|
652
652
|
"agentTarget": "claude-code"
|
|
653
653
|
},
|
|
654
654
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noodleseed/agent-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Self-checking, self-updating agent skills for the Noodle Seed CLI. Authored in this repo by @noodle-borg/agent-kit; this is the published, independently-versioned canonical skills artifact the CLI fetches and verifies.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -137,9 +137,15 @@ noodle variables set FIREBASE_AUTH_DOMAIN your-firebase-project.firebaseapp.com
|
|
|
137
137
|
noodle check --target embedded-assistant src/server.ts
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
Assistant origins are exact
|
|
141
|
-
|
|
142
|
-
application.
|
|
140
|
+
Assistant origins are exact. Production embedding origins must use HTTPS; plain HTTP is accepted only for
|
|
141
|
+
loopback development origins such as `http://localhost:3000`, `http://127.0.0.1:3000`, or
|
|
142
|
+
`http://[::1]:3000`. `noodle dev` serves the MCP project, not that separate embedding application.
|
|
143
|
+
|
|
144
|
+
The assistant's panel, launcher, status header, composer, and message treatment are configured through the
|
|
145
|
+
bounded `presentation` object in `src/server.ts`. The Atlas-style product treatment is the supported
|
|
146
|
+
customization ceiling. These primitives derive their colors from the shared server `branding` block and
|
|
147
|
+
require no edits to `@noodleseed/assistant`; raw HTML, CSS, inline SVG, renderer class names, and callbacks
|
|
148
|
+
are intentionally not accepted in deployment configuration.
|
|
143
149
|
|
|
144
150
|
Create the backend credential after deployment. The CLI writes it to a mode-0600 file and never prints the
|
|
145
151
|
secret:
|
|
@@ -101,6 +101,15 @@ export default server(
|
|
|
101
101
|
welcomeHeading: 'How can I help with Noodle Seed?',
|
|
102
102
|
composerPlaceholder: 'Ask about your apps…',
|
|
103
103
|
},
|
|
104
|
+
presentation: {
|
|
105
|
+
panel: { surface: 'glass', elevation: 'soft', border: 'subtle' },
|
|
106
|
+
launcher: { icon: 'brand-mark', status: 'session', effect: 'pulse' },
|
|
107
|
+
header: {
|
|
108
|
+
mark: 'status',
|
|
109
|
+
badge: { text: 'Workspace online', tone: 'success', indicator: true },
|
|
110
|
+
},
|
|
111
|
+
composer: { leadingIcon: 'brand-mark', shape: 'pill' },
|
|
112
|
+
},
|
|
104
113
|
suggestedPrompts: ['Show my organizations', 'List the apps in my organization'],
|
|
105
114
|
}),
|
|
106
115
|
},
|
|
@@ -8,9 +8,16 @@ describe('customer-auth example', () => {
|
|
|
8
8
|
expect(manifest.server.assistant).toMatchObject({
|
|
9
9
|
model: { kind: 'openai-compatible', apiKey: 'ASSISTANT_MODEL_API_KEY' },
|
|
10
10
|
layout: { mode: 'floating' },
|
|
11
|
+
presentation: {
|
|
12
|
+
panel: { surface: 'glass', elevation: 'soft', border: 'subtle' },
|
|
13
|
+
launcher: { icon: 'brand-mark', status: 'session', effect: 'pulse' },
|
|
14
|
+
header: { mark: 'status', badge: { text: 'Workspace online', tone: 'success' } },
|
|
15
|
+
},
|
|
11
16
|
});
|
|
12
17
|
expect(
|
|
13
|
-
manifest.server.assistant?.allowedOrigins.every(
|
|
18
|
+
manifest.server.assistant?.allowedOrigins.every(
|
|
19
|
+
(origin) => origin.startsWith('https://') || origin.startsWith('http://localhost:'),
|
|
20
|
+
),
|
|
14
21
|
).toBe(true);
|
|
15
22
|
expect(manifest.server.branding).toMatchObject({
|
|
16
23
|
name: 'Noodle Seed Assistant',
|
|
@@ -86,6 +86,7 @@ Every `noodle` command, grouped by area. Local authoring commands (`validate`, `
|
|
|
86
86
|
| Command | What it does |
|
|
87
87
|
| :-- | :-- |
|
|
88
88
|
| `noodle audit` | Operator governance audit status and event queries. |
|
|
89
|
+
| `noodle billing` | Super-admin preview of the explicit legacy billing-account migration without writing data (`billing migration preview`). |
|
|
89
90
|
| `noodle logs` | View service/deployment logs. |
|
|
90
91
|
| `noodle metrics` | MCP analytics for a deployed server (volume, sessions, latency percentiles, two-tier errors, tools, clients). Agents: `noodle metrics --agent-output` for a health verdict + next actions. |
|
|
91
92
|
| `noodle events` | The per-request MCP event stream with status/tool/client filters; `--session <id>` replays one session in order. Agents: add `--json` and filter (`--status tool_error\|mcp_error`) when debugging. |
|
|
@@ -59,6 +59,10 @@ Once deployed, register the server as a tool in a host with `noodle connect <hos
|
|
|
59
59
|
|
|
60
60
|
Manage runtime config with `noodle secrets` / `noodle variables` (scoped org/app/env). Operators use `noodle logs`, `noodle audit`, and `noodle policy` for logs, governance audit, and policy.
|
|
61
61
|
|
|
62
|
+
## Billing migration preview
|
|
63
|
+
|
|
64
|
+
`noodle billing migration preview [--file <mapping.json>]` is a super-admin, read-only inventory and validation command for legacy organizations. It never creates billing accounts, links organizations, or changes entitlements, and there is no apply command. Keep real mapping files outside the repository. The versioned file must classify production apps for every organization: `linkState: "unlinked"` selects a current owner subject under the fixed hosted issuer `https://accounts.google.com`, while `linkState: "linked"` asserts the exact current billing-account ID and link version. Inventory apps with `noodle apps list --archived --json` so archive state is visible. A blocked preview exits 1 even though the JSON response is a successful preview envelope; inspect `data.preview.blockers` and resolve every blocker before a future cutover workflow exists.
|
|
65
|
+
|
|
62
66
|
## Agent-safe CLI recipes
|
|
63
67
|
|
|
64
68
|
Use explicit flags in headless runs so commands never wait for a prompt:
|
|
@@ -74,6 +78,7 @@ noodle validate --json
|
|
|
74
78
|
noodle test --json
|
|
75
79
|
noodle deploy --json
|
|
76
80
|
noodle smoke --json
|
|
81
|
+
noodle billing migration preview --json
|
|
77
82
|
noodle agents doctor --json
|
|
78
83
|
```
|
|
79
84
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- Architecture
|
|
6
6
|
- Author and validate
|
|
7
|
+
- Customize the presentation
|
|
7
8
|
- Configure and deploy
|
|
8
9
|
- Access modes and customer auth
|
|
9
10
|
- Create the backend client
|
|
@@ -56,6 +57,33 @@ noodle check --target embedded-assistant --json
|
|
|
56
57
|
|
|
57
58
|
Use `noodle commands --json` before proposing command flags; do not invent flags from memory.
|
|
58
59
|
|
|
60
|
+
## Customize the presentation
|
|
61
|
+
|
|
62
|
+
Keep identity and semantic light/dark colors in the one server-level `branding` block. Put assistant-only structure in the bounded `presentation` object; it accepts curated primitives rather than raw HTML, CSS, SVG, class names, or callbacks:
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
assistant: embeddedAssistant({
|
|
66
|
+
model, allowedOrigins,
|
|
67
|
+
layout: { panelWidth: 520, panelMinHeight: 540, panelMaxHeight: 740, edgeOffset: 24 },
|
|
68
|
+
behavior: { showTimestamps: true },
|
|
69
|
+
labels: { composerPlaceholder: "Message Acme Support…", sessionReady: "Acme support is online" },
|
|
70
|
+
presentation: {
|
|
71
|
+
panel: { surface: "solid", elevation: "dramatic", border: "strong", radius: 20 },
|
|
72
|
+
launcher: { icon: "chat", size: "lg", status: "session", effect: "pulse" },
|
|
73
|
+
header: {
|
|
74
|
+
mark: "status",
|
|
75
|
+
badge: { text: "Online", tone: "success", indicator: true },
|
|
76
|
+
},
|
|
77
|
+
composer: { leadingIcon: "brand-mark", sendIcon: "paper-plane", shape: "rounded" },
|
|
78
|
+
messages: { userStyle: "accent", assistantStyle: "bubble" },
|
|
79
|
+
},
|
|
80
|
+
}),
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
The Atlas-style product treatment above is the maximum deployment-configurable presentation. The bounded surface covers panel treatment, launcher icon/size/session pulse, header mark/status badge, composer controls, and message treatment; it does not accept custom header actions, structured empty-state layouts, footers, spectacle variants/effects, or tenant code.
|
|
84
|
+
|
|
85
|
+
Omitted fields retain the polished Halo-derived baseline. Precedence is host slots/public `--ns-assistant-*` variables for application-specific integration, then the deployed semantic presentation, then the built-in defaults. Prefer `server.ts` configuration first so every embedding app receives the same assistant after redeploy; use slots only for behavior or content that is genuinely owned by that particular host page.
|
|
86
|
+
|
|
59
87
|
## Configure and deploy
|
|
60
88
|
|
|
61
89
|
Local MCP authoring and tests need no account, but an external browser embed needs an active assistant-enabled deployment before a backend client can be created. Set the model values on the target org/app/env, then deploy:
|
package/skills/codex/SKILL.md
CHANGED
|
@@ -137,9 +137,15 @@ noodle variables set FIREBASE_AUTH_DOMAIN your-firebase-project.firebaseapp.com
|
|
|
137
137
|
noodle check --target embedded-assistant src/server.ts
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
Assistant origins are exact
|
|
141
|
-
|
|
142
|
-
application.
|
|
140
|
+
Assistant origins are exact. Production embedding origins must use HTTPS; plain HTTP is accepted only for
|
|
141
|
+
loopback development origins such as `http://localhost:3000`, `http://127.0.0.1:3000`, or
|
|
142
|
+
`http://[::1]:3000`. `noodle dev` serves the MCP project, not that separate embedding application.
|
|
143
|
+
|
|
144
|
+
The assistant's panel, launcher, status header, composer, and message treatment are configured through the
|
|
145
|
+
bounded `presentation` object in `src/server.ts`. The Atlas-style product treatment is the supported
|
|
146
|
+
customization ceiling. These primitives derive their colors from the shared server `branding` block and
|
|
147
|
+
require no edits to `@noodleseed/assistant`; raw HTML, CSS, inline SVG, renderer class names, and callbacks
|
|
148
|
+
are intentionally not accepted in deployment configuration.
|
|
143
149
|
|
|
144
150
|
Create the backend credential after deployment. The CLI writes it to a mode-0600 file and never prints the
|
|
145
151
|
secret:
|
|
@@ -101,6 +101,15 @@ export default server(
|
|
|
101
101
|
welcomeHeading: 'How can I help with Noodle Seed?',
|
|
102
102
|
composerPlaceholder: 'Ask about your apps…',
|
|
103
103
|
},
|
|
104
|
+
presentation: {
|
|
105
|
+
panel: { surface: 'glass', elevation: 'soft', border: 'subtle' },
|
|
106
|
+
launcher: { icon: 'brand-mark', status: 'session', effect: 'pulse' },
|
|
107
|
+
header: {
|
|
108
|
+
mark: 'status',
|
|
109
|
+
badge: { text: 'Workspace online', tone: 'success', indicator: true },
|
|
110
|
+
},
|
|
111
|
+
composer: { leadingIcon: 'brand-mark', shape: 'pill' },
|
|
112
|
+
},
|
|
104
113
|
suggestedPrompts: ['Show my organizations', 'List the apps in my organization'],
|
|
105
114
|
}),
|
|
106
115
|
},
|
|
@@ -8,9 +8,16 @@ describe('customer-auth example', () => {
|
|
|
8
8
|
expect(manifest.server.assistant).toMatchObject({
|
|
9
9
|
model: { kind: 'openai-compatible', apiKey: 'ASSISTANT_MODEL_API_KEY' },
|
|
10
10
|
layout: { mode: 'floating' },
|
|
11
|
+
presentation: {
|
|
12
|
+
panel: { surface: 'glass', elevation: 'soft', border: 'subtle' },
|
|
13
|
+
launcher: { icon: 'brand-mark', status: 'session', effect: 'pulse' },
|
|
14
|
+
header: { mark: 'status', badge: { text: 'Workspace online', tone: 'success' } },
|
|
15
|
+
},
|
|
11
16
|
});
|
|
12
17
|
expect(
|
|
13
|
-
manifest.server.assistant?.allowedOrigins.every(
|
|
18
|
+
manifest.server.assistant?.allowedOrigins.every(
|
|
19
|
+
(origin) => origin.startsWith('https://') || origin.startsWith('http://localhost:'),
|
|
20
|
+
),
|
|
14
21
|
).toBe(true);
|
|
15
22
|
expect(manifest.server.branding).toMatchObject({
|
|
16
23
|
name: 'Noodle Seed Assistant',
|
|
@@ -86,6 +86,7 @@ Every `noodle` command, grouped by area. Local authoring commands (`validate`, `
|
|
|
86
86
|
| Command | What it does |
|
|
87
87
|
| :-- | :-- |
|
|
88
88
|
| `noodle audit` | Operator governance audit status and event queries. |
|
|
89
|
+
| `noodle billing` | Super-admin preview of the explicit legacy billing-account migration without writing data (`billing migration preview`). |
|
|
89
90
|
| `noodle logs` | View service/deployment logs. |
|
|
90
91
|
| `noodle metrics` | MCP analytics for a deployed server (volume, sessions, latency percentiles, two-tier errors, tools, clients). Agents: `noodle metrics --agent-output` for a health verdict + next actions. |
|
|
91
92
|
| `noodle events` | The per-request MCP event stream with status/tool/client filters; `--session <id>` replays one session in order. Agents: add `--json` and filter (`--status tool_error\|mcp_error`) when debugging. |
|
|
@@ -59,6 +59,10 @@ Once deployed, register the server as a tool in a host with `noodle connect <hos
|
|
|
59
59
|
|
|
60
60
|
Manage runtime config with `noodle secrets` / `noodle variables` (scoped org/app/env). Operators use `noodle logs`, `noodle audit`, and `noodle policy` for logs, governance audit, and policy.
|
|
61
61
|
|
|
62
|
+
## Billing migration preview
|
|
63
|
+
|
|
64
|
+
`noodle billing migration preview [--file <mapping.json>]` is a super-admin, read-only inventory and validation command for legacy organizations. It never creates billing accounts, links organizations, or changes entitlements, and there is no apply command. Keep real mapping files outside the repository. The versioned file must classify production apps for every organization: `linkState: "unlinked"` selects a current owner subject under the fixed hosted issuer `https://accounts.google.com`, while `linkState: "linked"` asserts the exact current billing-account ID and link version. Inventory apps with `noodle apps list --archived --json` so archive state is visible. A blocked preview exits 1 even though the JSON response is a successful preview envelope; inspect `data.preview.blockers` and resolve every blocker before a future cutover workflow exists.
|
|
65
|
+
|
|
62
66
|
## Agent-safe CLI recipes
|
|
63
67
|
|
|
64
68
|
Use explicit flags in headless runs so commands never wait for a prompt:
|
|
@@ -74,6 +78,7 @@ noodle validate --json
|
|
|
74
78
|
noodle test --json
|
|
75
79
|
noodle deploy --json
|
|
76
80
|
noodle smoke --json
|
|
81
|
+
noodle billing migration preview --json
|
|
77
82
|
noodle agents doctor --json
|
|
78
83
|
```
|
|
79
84
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- Architecture
|
|
6
6
|
- Author and validate
|
|
7
|
+
- Customize the presentation
|
|
7
8
|
- Configure and deploy
|
|
8
9
|
- Access modes and customer auth
|
|
9
10
|
- Create the backend client
|
|
@@ -56,6 +57,33 @@ noodle check --target embedded-assistant --json
|
|
|
56
57
|
|
|
57
58
|
Use `noodle commands --json` before proposing command flags; do not invent flags from memory.
|
|
58
59
|
|
|
60
|
+
## Customize the presentation
|
|
61
|
+
|
|
62
|
+
Keep identity and semantic light/dark colors in the one server-level `branding` block. Put assistant-only structure in the bounded `presentation` object; it accepts curated primitives rather than raw HTML, CSS, SVG, class names, or callbacks:
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
assistant: embeddedAssistant({
|
|
66
|
+
model, allowedOrigins,
|
|
67
|
+
layout: { panelWidth: 520, panelMinHeight: 540, panelMaxHeight: 740, edgeOffset: 24 },
|
|
68
|
+
behavior: { showTimestamps: true },
|
|
69
|
+
labels: { composerPlaceholder: "Message Acme Support…", sessionReady: "Acme support is online" },
|
|
70
|
+
presentation: {
|
|
71
|
+
panel: { surface: "solid", elevation: "dramatic", border: "strong", radius: 20 },
|
|
72
|
+
launcher: { icon: "chat", size: "lg", status: "session", effect: "pulse" },
|
|
73
|
+
header: {
|
|
74
|
+
mark: "status",
|
|
75
|
+
badge: { text: "Online", tone: "success", indicator: true },
|
|
76
|
+
},
|
|
77
|
+
composer: { leadingIcon: "brand-mark", sendIcon: "paper-plane", shape: "rounded" },
|
|
78
|
+
messages: { userStyle: "accent", assistantStyle: "bubble" },
|
|
79
|
+
},
|
|
80
|
+
}),
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
The Atlas-style product treatment above is the maximum deployment-configurable presentation. The bounded surface covers panel treatment, launcher icon/size/session pulse, header mark/status badge, composer controls, and message treatment; it does not accept custom header actions, structured empty-state layouts, footers, spectacle variants/effects, or tenant code.
|
|
84
|
+
|
|
85
|
+
Omitted fields retain the polished Halo-derived baseline. Precedence is host slots/public `--ns-assistant-*` variables for application-specific integration, then the deployed semantic presentation, then the built-in defaults. Prefer `server.ts` configuration first so every embedding app receives the same assistant after redeploy; use slots only for behavior or content that is genuinely owned by that particular host page.
|
|
86
|
+
|
|
59
87
|
## Configure and deploy
|
|
60
88
|
|
|
61
89
|
Local MCP authoring and tests need no account, but an external browser embed needs an active assistant-enabled deployment before a backend client can be created. Set the model values on the target org/app/env, then deploy:
|