@noodleseed/agent-kit 0.25.0 → 0.26.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 +7 -7
- package/package.json +1 -1
- package/skills/claude-code/SKILL.md +1 -1
- package/skills/claude-code/examples/weather/README.md +27 -0
- package/skills/claude-code/references/connect-an-api.md +17 -1
- package/skills/codex/SKILL.md +1 -1
- package/skills/codex/examples/weather/README.md +27 -0
- package/skills/codex/references/connect-an-api.md +17 -1
package/manifest.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packageVersion": "0.
|
|
2
|
+
"packageVersion": "0.26.0",
|
|
3
3
|
"files": [
|
|
4
4
|
{
|
|
5
5
|
"path": "skills/codex/SKILL.md",
|
|
6
|
-
"sha256": "
|
|
6
|
+
"sha256": "49a9f988ee0abf92640cc2bcb27204e6eff3a042378a4bf1a38c93671b72d943",
|
|
7
7
|
"agentTarget": "codex"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
"path": "skills/codex/references/connect-an-api.md",
|
|
41
|
-
"sha256": "
|
|
41
|
+
"sha256": "982b5652635706793bf20b0d2b6abb7887302e3ab39886002b23f09d1515ac26",
|
|
42
42
|
"agentTarget": "codex"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
@@ -353,7 +353,7 @@
|
|
|
353
353
|
},
|
|
354
354
|
{
|
|
355
355
|
"path": "skills/codex/examples/weather/README.md",
|
|
356
|
-
"sha256": "
|
|
356
|
+
"sha256": "43ee8447a0a3f9fdcce30544c5ef3801a93eb6b9fe5e2e8791e65a6587a65545",
|
|
357
357
|
"agentTarget": "codex"
|
|
358
358
|
},
|
|
359
359
|
{
|
|
@@ -378,7 +378,7 @@
|
|
|
378
378
|
},
|
|
379
379
|
{
|
|
380
380
|
"path": "skills/claude-code/SKILL.md",
|
|
381
|
-
"sha256": "
|
|
381
|
+
"sha256": "b8ab63da424b86234affee76b69c470d2f68d7fc820d50399014bd5130e36619",
|
|
382
382
|
"agentTarget": "claude-code"
|
|
383
383
|
},
|
|
384
384
|
{
|
|
@@ -413,7 +413,7 @@
|
|
|
413
413
|
},
|
|
414
414
|
{
|
|
415
415
|
"path": "skills/claude-code/references/connect-an-api.md",
|
|
416
|
-
"sha256": "
|
|
416
|
+
"sha256": "982b5652635706793bf20b0d2b6abb7887302e3ab39886002b23f09d1515ac26",
|
|
417
417
|
"agentTarget": "claude-code"
|
|
418
418
|
},
|
|
419
419
|
{
|
|
@@ -728,7 +728,7 @@
|
|
|
728
728
|
},
|
|
729
729
|
{
|
|
730
730
|
"path": "skills/claude-code/examples/weather/README.md",
|
|
731
|
-
"sha256": "
|
|
731
|
+
"sha256": "43ee8447a0a3f9fdcce30544c5ef3801a93eb6b9fe5e2e8791e65a6587a65545",
|
|
732
732
|
"agentTarget": "claude-code"
|
|
733
733
|
},
|
|
734
734
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noodleseed/agent-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.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",
|
|
@@ -33,6 +33,33 @@ It exercises, in one TypeScript-authored app:
|
|
|
33
33
|
- **Sandboxed compute** (no network/fs/env/clock) turning raw numbers into conditions + advice.
|
|
34
34
|
- **Typed input/output schemas** emitted as JSON Schema 2020-12.
|
|
35
35
|
|
|
36
|
+
## APIs that require form-urlencoded search bodies
|
|
37
|
+
|
|
38
|
+
The live Open-Meteo calls above are GET requests. For APIs whose search endpoint is a POST expecting
|
|
39
|
+
`application/x-www-form-urlencoded`, keep authoring a request object and select the encoding explicitly:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
search_quotes: {
|
|
43
|
+
type: 'read',
|
|
44
|
+
method: 'POST',
|
|
45
|
+
path: '/quotes/search',
|
|
46
|
+
requestEncoding: 'form-urlencoded',
|
|
47
|
+
input: z.object({
|
|
48
|
+
fromAirportId: z.string(),
|
|
49
|
+
categories: z.array(z.string()),
|
|
50
|
+
}),
|
|
51
|
+
request: {
|
|
52
|
+
'from airport id': '${args.fromAirportId}',
|
|
53
|
+
'aircraft[categories]': '${args.categories}',
|
|
54
|
+
},
|
|
55
|
+
// output and response mapping omitted
|
|
56
|
+
},
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Noodle builds a `URLSearchParams` body: spaces and punctuation in field names are encoded normally, while
|
|
60
|
+
each array or nested object is JSON-stringified into its individual form field. Do not pre-encode the body
|
|
61
|
+
or set `Content-Type` manually; the connector owns both.
|
|
62
|
+
|
|
36
63
|
## Run it locally
|
|
37
64
|
|
|
38
65
|
From the repo root, with the workspace built (`pnpm build`):
|
|
@@ -90,9 +90,25 @@ response: { tasks: '${response.items}' },
|
|
|
90
90
|
## Create, update, delete
|
|
91
91
|
|
|
92
92
|
Pair the read/list with the mutations your intent tools need:
|
|
93
|
-
- **Create / update** — `method: 'POST'` / `'PATCH'`; the
|
|
93
|
+
- **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.
|
|
94
94
|
- **Delete / close** — many endpoints return `204 No Content`. Set `responseType: 'empty'`, which enforces the status and binds `{}` (there is no body to map).
|
|
95
95
|
|
|
96
|
+
```ts
|
|
97
|
+
search_quotes: {
|
|
98
|
+
type: 'read', method: 'POST', path: '/quotes/search',
|
|
99
|
+
requestEncoding: 'form-urlencoded',
|
|
100
|
+
request: {
|
|
101
|
+
'from airport id': '${args.fromAirportId}',
|
|
102
|
+
'aircraft[categories]': '${args.categories}', // arrays become one JSON field
|
|
103
|
+
},
|
|
104
|
+
// input / output / response omitted
|
|
105
|
+
},
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`form-urlencoded` accepts a request object, not a pre-encoded string. Noodle preserves field order,
|
|
109
|
+
omits `undefined`, stringifies primitive values, JSON-stringifies arrays/nested objects into one
|
|
110
|
+
field each, and owns the exact `application/x-www-form-urlencoded;charset=UTF-8` content type.
|
|
111
|
+
|
|
96
112
|
```ts
|
|
97
113
|
close_task: {
|
|
98
114
|
type: 'action', method: 'POST', path: '/tasks/{id}/close',
|
package/skills/codex/SKILL.md
CHANGED
|
@@ -33,6 +33,33 @@ It exercises, in one TypeScript-authored app:
|
|
|
33
33
|
- **Sandboxed compute** (no network/fs/env/clock) turning raw numbers into conditions + advice.
|
|
34
34
|
- **Typed input/output schemas** emitted as JSON Schema 2020-12.
|
|
35
35
|
|
|
36
|
+
## APIs that require form-urlencoded search bodies
|
|
37
|
+
|
|
38
|
+
The live Open-Meteo calls above are GET requests. For APIs whose search endpoint is a POST expecting
|
|
39
|
+
`application/x-www-form-urlencoded`, keep authoring a request object and select the encoding explicitly:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
search_quotes: {
|
|
43
|
+
type: 'read',
|
|
44
|
+
method: 'POST',
|
|
45
|
+
path: '/quotes/search',
|
|
46
|
+
requestEncoding: 'form-urlencoded',
|
|
47
|
+
input: z.object({
|
|
48
|
+
fromAirportId: z.string(),
|
|
49
|
+
categories: z.array(z.string()),
|
|
50
|
+
}),
|
|
51
|
+
request: {
|
|
52
|
+
'from airport id': '${args.fromAirportId}',
|
|
53
|
+
'aircraft[categories]': '${args.categories}',
|
|
54
|
+
},
|
|
55
|
+
// output and response mapping omitted
|
|
56
|
+
},
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Noodle builds a `URLSearchParams` body: spaces and punctuation in field names are encoded normally, while
|
|
60
|
+
each array or nested object is JSON-stringified into its individual form field. Do not pre-encode the body
|
|
61
|
+
or set `Content-Type` manually; the connector owns both.
|
|
62
|
+
|
|
36
63
|
## Run it locally
|
|
37
64
|
|
|
38
65
|
From the repo root, with the workspace built (`pnpm build`):
|
|
@@ -90,9 +90,25 @@ response: { tasks: '${response.items}' },
|
|
|
90
90
|
## Create, update, delete
|
|
91
91
|
|
|
92
92
|
Pair the read/list with the mutations your intent tools need:
|
|
93
|
-
- **Create / update** — `method: 'POST'` / `'PATCH'`; the
|
|
93
|
+
- **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.
|
|
94
94
|
- **Delete / close** — many endpoints return `204 No Content`. Set `responseType: 'empty'`, which enforces the status and binds `{}` (there is no body to map).
|
|
95
95
|
|
|
96
|
+
```ts
|
|
97
|
+
search_quotes: {
|
|
98
|
+
type: 'read', method: 'POST', path: '/quotes/search',
|
|
99
|
+
requestEncoding: 'form-urlencoded',
|
|
100
|
+
request: {
|
|
101
|
+
'from airport id': '${args.fromAirportId}',
|
|
102
|
+
'aircraft[categories]': '${args.categories}', // arrays become one JSON field
|
|
103
|
+
},
|
|
104
|
+
// input / output / response omitted
|
|
105
|
+
},
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`form-urlencoded` accepts a request object, not a pre-encoded string. Noodle preserves field order,
|
|
109
|
+
omits `undefined`, stringifies primitive values, JSON-stringifies arrays/nested objects into one
|
|
110
|
+
field each, and owns the exact `application/x-www-form-urlencoded;charset=UTF-8` content type.
|
|
111
|
+
|
|
96
112
|
```ts
|
|
97
113
|
close_task: {
|
|
98
114
|
type: 'action', method: 'POST', path: '/tasks/{id}/close',
|