@noodleseed/agent-kit 0.23.1 → 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 +11 -11
- 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/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/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
|
{
|
|
@@ -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
|
{
|
|
@@ -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
|
{
|
|
@@ -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
|
{
|
|
@@ -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',
|
|
@@ -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',
|
|
@@ -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:
|