@introspection-ai/recipes 0.13.0 → 0.14.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/README.md +45 -58
- package/dist/{agent-tool.d.ts → agents.d.ts} +4 -1
- package/dist/agents.d.ts.map +1 -0
- package/dist/{agent-tool.js → agents.js} +1 -1
- package/dist/agents.js.map +1 -0
- package/dist/api/extensions.d.ts +3 -0
- package/dist/api/extensions.d.ts.map +1 -0
- package/dist/api/extensions.js +2 -0
- package/dist/api/extensions.js.map +1 -0
- package/dist/api/mcp.d.ts +4 -0
- package/dist/api/mcp.d.ts.map +1 -0
- package/dist/api/mcp.js +2 -0
- package/dist/api/mcp.js.map +1 -0
- package/dist/api/session.d.ts +3 -0
- package/dist/api/session.d.ts.map +1 -0
- package/dist/api/session.js +2 -0
- package/dist/api/session.js.map +1 -0
- package/dist/child-agent.d.ts +5 -4
- package/dist/child-agent.d.ts.map +1 -1
- package/dist/child-agent.js +26 -117
- package/dist/child-agent.js.map +1 -1
- package/dist/child-session.d.ts +23 -0
- package/dist/child-session.d.ts.map +1 -0
- package/dist/child-session.js +48 -0
- package/dist/child-session.js.map +1 -0
- package/dist/extensions.d.ts +29 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +119 -0
- package/dist/extensions.js.map +1 -0
- package/dist/index.d.ts +4 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -13
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts +38 -5
- package/dist/inspect.d.ts.map +1 -1
- package/dist/inspect.js +92 -41
- package/dist/inspect.js.map +1 -1
- package/dist/interactions.d.ts +18 -2
- package/dist/interactions.d.ts.map +1 -1
- package/dist/interactions.js +41 -10
- package/dist/interactions.js.map +1 -1
- package/dist/mcp-catalog.d.ts +1 -0
- package/dist/mcp-catalog.d.ts.map +1 -1
- package/dist/mcp-catalog.js +14 -6
- package/dist/mcp-catalog.js.map +1 -1
- package/dist/mcp-chunks/auth-command-ZLGYIEUY.js +273 -0
- package/dist/mcp-chunks/call-arguments-LU3W6D3K.js +13 -0
- package/dist/mcp-chunks/call-command-LKTKSYTH.js +612 -0
- package/dist/mcp-chunks/chunk-2U4BSDC4.js +3951 -0
- package/dist/mcp-chunks/chunk-2XL7MG7R.js +272 -0
- package/dist/mcp-chunks/chunk-3BJA27PY.js +2321 -0
- package/dist/mcp-chunks/chunk-4SQKWYFF.js +15 -0
- package/dist/mcp-chunks/chunk-5QOSCSQB.js +290 -0
- package/dist/mcp-chunks/chunk-6W5QFASN.js +77 -0
- package/dist/mcp-chunks/chunk-6XCZGU3G.js +1004 -0
- package/dist/mcp-chunks/chunk-7FHEBT5G.js +149 -0
- package/dist/mcp-chunks/chunk-7KA2VJVZ.js +114 -0
- package/dist/mcp-chunks/chunk-7UDVSOOF.js +138 -0
- package/dist/mcp-chunks/chunk-BNV3TPE4.js +66 -0
- package/dist/mcp-chunks/chunk-BTLAWHTA.js +129 -0
- package/dist/mcp-chunks/chunk-BV56DXPW.js +13 -0
- package/dist/mcp-chunks/chunk-BWHIA4PC.js +90 -0
- package/dist/mcp-chunks/chunk-BZIQOWE6.js +267 -0
- package/dist/mcp-chunks/chunk-D3MRAZ6H.js +16140 -0
- package/dist/mcp-chunks/chunk-DHBE7UBH.js +750 -0
- package/dist/mcp-chunks/chunk-E22DYOW5.js +251 -0
- package/dist/mcp-chunks/chunk-ECIVB7P4.js +139 -0
- package/dist/mcp-chunks/chunk-HKRJ6O36.js +1076 -0
- package/dist/mcp-chunks/chunk-IABRYROW.js +44 -0
- package/dist/mcp-chunks/chunk-J6LYIZXN.js +45 -0
- package/dist/mcp-chunks/chunk-L7NTQVYN.js +161 -0
- package/dist/mcp-chunks/chunk-LEZSACDE.js +141 -0
- package/dist/mcp-chunks/chunk-LKIBAYKU.js +208 -0
- package/dist/mcp-chunks/chunk-LNH5LAJD.js +152 -0
- package/dist/mcp-chunks/chunk-LQQEYD76.js +124 -0
- package/dist/mcp-chunks/chunk-LRKZP7DJ.js +47 -0
- package/dist/mcp-chunks/chunk-LS7PMWSR.js +109 -0
- package/dist/mcp-chunks/chunk-M3TPODXI.js +95 -0
- package/dist/mcp-chunks/chunk-MZ2NARG7.js +400 -0
- package/dist/mcp-chunks/chunk-N46NEFAF.js +45 -0
- package/dist/mcp-chunks/chunk-NNOEGEUZ.js +17273 -0
- package/dist/mcp-chunks/chunk-NRAJX5E4.js +69 -0
- package/dist/mcp-chunks/chunk-P3PSC54P.js +869 -0
- package/dist/mcp-chunks/chunk-PIIYJR44.js +6341 -0
- package/dist/mcp-chunks/chunk-PWYFKGKG.js +385 -0
- package/dist/mcp-chunks/chunk-SJCCBNZ4.js +45 -0
- package/dist/mcp-chunks/chunk-TATVT5IT.js +194 -0
- package/dist/mcp-chunks/chunk-TEUKFFQL.js +29 -0
- package/dist/mcp-chunks/chunk-UKYNQGNE.js +150 -0
- package/dist/mcp-chunks/chunk-UNKB4SBV.js +37 -0
- package/dist/mcp-chunks/chunk-WD6BOD24.js +138 -0
- package/dist/mcp-chunks/chunk-WQJZMCJN.js +73 -0
- package/dist/mcp-chunks/chunk-XANPGTLI.js +364 -0
- package/dist/mcp-chunks/chunk-XQK2JSW4.js +35 -0
- package/dist/mcp-chunks/chunk-YHQUTU6L.js +571 -0
- package/dist/mcp-chunks/chunk-YVZKMV5H.js +57 -0
- package/dist/mcp-chunks/cli-UV4QJZZM.js +929 -0
- package/dist/mcp-chunks/client-S7RQUG5U.js +13 -0
- package/dist/mcp-chunks/config-command-NLAGKID5.js +1101 -0
- package/dist/mcp-chunks/daemon-command-U242Z6VY.js +26 -0
- package/dist/mcp-chunks/dist-LK3SHAMX.js +6478 -0
- package/dist/mcp-chunks/emit-ts-command-VBXVXO6V.js +386 -0
- package/dist/mcp-chunks/generate-cli-runner-6CAZZA3P.js +1426 -0
- package/dist/mcp-chunks/inspect-cli-command-3ZORTOR7.js +111 -0
- package/dist/mcp-chunks/launch-YKRXHXJI.js +10 -0
- package/dist/mcp-chunks/lifecycle-XVKRHPH3.js +16 -0
- package/dist/mcp-chunks/list-command-2MEGGNFQ.js +4190 -0
- package/dist/mcp-chunks/output-utils-NKESLAJ6.js +12 -0
- package/dist/mcp-chunks/prompt-B1Yc1NPt-VGOTWJMN.js +918 -0
- package/dist/mcp-chunks/record-command-YXHTTTT5.js +17 -0
- package/dist/mcp-chunks/replay-command-25HJ6AQU.js +85 -0
- package/dist/mcp-chunks/resource-command-OO4NYF5C.js +97 -0
- package/dist/mcp-chunks/result-utils-MOHHLNM7.js +15 -0
- package/dist/mcp-chunks/runtime-5WJ3G25Y.js +33 -0
- package/dist/mcp-chunks/runtime-wrapper-RPWDIDBF.js +10 -0
- package/dist/mcp-chunks/serve-command-DHXJZMMN.js +3302 -0
- package/dist/mcp-chunks/timeouts-W2XWCCXR.js +18 -0
- package/dist/mcp-chunks/vault-command-PIYIUEZL.js +154 -0
- package/dist/mcp-daemon-client.d.ts +6 -1
- package/dist/mcp-daemon-client.d.ts.map +1 -1
- package/dist/mcp-daemon-client.js +119 -2
- package/dist/mcp-daemon-client.js.map +1 -1
- package/dist/mcp-daemon-protocol.d.ts +18 -1
- package/dist/mcp-daemon-protocol.d.ts.map +1 -1
- package/dist/mcp-daemon-protocol.js +31 -0
- package/dist/mcp-daemon-protocol.js.map +1 -1
- package/dist/mcp-daemon.js +169 -76602
- package/dist/mcp-daemon.js.map +1 -1
- package/dist/mcp-policy.d.ts +11 -0
- package/dist/mcp-policy.d.ts.map +1 -0
- package/dist/mcp-policy.js +27 -0
- package/dist/mcp-policy.js.map +1 -0
- package/dist/mcp-run-worker.js +38 -76540
- package/dist/mcp-tools.d.ts +39 -0
- package/dist/mcp-tools.d.ts.map +1 -0
- package/dist/mcp-tools.js +493 -0
- package/dist/mcp-tools.js.map +1 -0
- package/dist/mcp.d.ts +21 -9
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +101 -31
- package/dist/mcp.js.map +1 -1
- package/dist/model-binding.d.ts +39 -0
- package/dist/model-binding.d.ts.map +1 -0
- package/dist/model-binding.js +103 -0
- package/dist/model-binding.js.map +1 -0
- package/dist/pi-extension.d.ts +2 -22
- package/dist/pi-extension.d.ts.map +1 -1
- package/dist/pi-extension.js +296 -71
- package/dist/pi-extension.js.map +1 -1
- package/dist/recipe/resolve.d.ts +43 -20
- package/dist/recipe/resolve.d.ts.map +1 -1
- package/dist/recipe/resolve.js +215 -70
- package/dist/recipe/resolve.js.map +1 -1
- package/dist/recipe-agent.d.ts +24 -27
- package/dist/recipe-agent.d.ts.map +1 -1
- package/dist/recipe-agent.js +278 -230
- package/dist/recipe-agent.js.map +1 -1
- package/dist/recipe-check.d.ts +17 -0
- package/dist/recipe-check.d.ts.map +1 -0
- package/dist/recipe-check.js +258 -0
- package/dist/recipe-check.js.map +1 -0
- package/dist/recipe-extensions.d.ts.map +1 -1
- package/dist/recipe-extensions.js +0 -3
- package/dist/recipe-extensions.js.map +1 -1
- package/dist/recipe-model.d.ts +3 -1
- package/dist/recipe-model.d.ts.map +1 -1
- package/dist/recipe-model.js +15 -12
- package/dist/recipe-model.js.map +1 -1
- package/dist/recipe-package.d.ts +6 -28
- package/dist/recipe-package.d.ts.map +1 -1
- package/dist/recipe-package.js +248 -191
- package/dist/recipe-package.js.map +1 -1
- package/dist/recipe-skills.d.ts.map +1 -1
- package/dist/recipe-skills.js +42 -29
- package/dist/recipe-skills.js.map +1 -1
- package/dist/run-controller.d.ts +10 -9
- package/dist/run-controller.d.ts.map +1 -1
- package/dist/run-controller.js +28 -21
- package/dist/run-controller.js.map +1 -1
- package/dist/session.d.ts +40 -53
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +312 -173
- package/dist/session.js.map +1 -1
- package/dist/test-utils.d.ts +7 -7
- package/dist/test-utils.d.ts.map +1 -1
- package/dist/test-utils.js +32 -15
- package/dist/test-utils.js.map +1 -1
- package/docs/agent-composition.md +41 -35
- package/docs/host-api.md +201 -0
- package/docs/index.md +8 -14
- package/docs/interactions.md +12 -11
- package/docs/mcp-auth.md +6 -6
- package/docs/mcp-configuration.md +72 -24
- package/docs/pi-extension.md +39 -11
- package/docs/recipe-flow.md +9 -9
- package/docs/recipe-format.md +90 -41
- package/package.json +23 -17
- package/vendor/mcp-client/darwin-arm64/mcp-client +0 -0
- package/vendor/mcp-client/darwin-x64/mcp-client +0 -0
- package/vendor/mcp-client/linux-arm64/mcp-client +0 -0
- package/vendor/recipe-check/darwin-arm64/recipe-check +0 -0
- package/vendor/recipe-check/darwin-x64/recipe-check +0 -0
- package/vendor/recipe-check/linux-arm64/recipe-check +0 -0
- package/vendor/recipe-check/linux-x64/recipe-check +0 -0
- package/vendor/recipe-check/linux-x64-musl/recipe-check +0 -0
- package/vendor/recipe-check/win32-x64/recipe-check.exe +0 -0
- package/dist/agent-tool.d.ts.map +0 -1
- package/dist/agent-tool.js.map +0 -1
- package/dist/run.d.ts +0 -28
- package/dist/run.d.ts.map +0 -1
- package/dist/run.js +0 -84
- package/dist/run.js.map +0 -1
- package/dist/testing.d.ts +0 -25
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js +0 -96
- package/dist/testing.js.map +0 -1
- package/docs/deployment-configuration.md +0 -65
- package/docs/migration.md +0 -70
- package/docs/python-bindings-release.md +0 -47
- package/docs/recipe-evals.md +0 -70
- package/docs/recipe-judges.md +0 -152
- package/docs/runtime-library.md +0 -171
package/docs/recipe-judges.md
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
# Recipe judge definitions
|
|
2
|
-
|
|
3
|
-
Recipe judges are optional, recipe-owned LLM grading definitions. Author them
|
|
4
|
-
as direct children of `judges/` using a lowercase `.yaml` or `.yml` extension:
|
|
5
|
-
|
|
6
|
-
```text
|
|
7
|
-
my-recipe/
|
|
8
|
-
judges/
|
|
9
|
-
helpful.yaml
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Nested files such as `judges/calibration/helpful.yaml` are not judge sources.
|
|
13
|
-
The standalone `recipe-check` binary, `introspection check`, and in-memory
|
|
14
|
-
bindings discover the same direct-child set and return the same validation
|
|
15
|
-
result. Recipes without judge sources have no judge diagnostics or
|
|
16
|
-
`resources.judges` count.
|
|
17
|
-
|
|
18
|
-
## Ownership boundary
|
|
19
|
-
|
|
20
|
-
`pi-recipe-check` owns the portable authored YAML specification and its static,
|
|
21
|
-
file-oriented diagnostics. The I/O-free `check_recipe_files` core is the common
|
|
22
|
-
validation path used by the filesystem checker, npm CLI, serialized snapshot
|
|
23
|
-
API, and Python binding.
|
|
24
|
-
|
|
25
|
-
The Introspection judge engine owns runtime evaluation: applicability
|
|
26
|
-
execution, conversation assembly and transcript protection, model request
|
|
27
|
-
construction, retries, verdict normalization, and evaluation identity. Runtime
|
|
28
|
-
implementations should consume or remain explicitly compatible with the
|
|
29
|
-
authored specification defined here; new authored fields must land in this
|
|
30
|
-
checker and its contract tests rather than being introduced only in a runtime
|
|
31
|
-
parser.
|
|
32
|
-
|
|
33
|
-
The Rust checker and Python binding return a `Report` containing diagnostics
|
|
34
|
-
and, when judges exist, a `resources.judges` source count. The report does not
|
|
35
|
-
contain a normalized judge definition, `judge_id`, `definition_hash`, or
|
|
36
|
-
registry projection. Migrating project-scoped registry projection away from
|
|
37
|
-
the runtime parser is a separate platform change and must not add project or
|
|
38
|
-
tenant context to this portable API.
|
|
39
|
-
|
|
40
|
-
## Definition shape
|
|
41
|
-
|
|
42
|
-
The minimal definition is:
|
|
43
|
-
|
|
44
|
-
```yaml
|
|
45
|
-
judge: helpful
|
|
46
|
-
|
|
47
|
-
instructions: |
|
|
48
|
-
Determine whether the assistant answered the user correctly.
|
|
49
|
-
|
|
50
|
-
llm:
|
|
51
|
-
model: gpt-5
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
`judge`, `instructions`, and `llm.model` are required and non-empty. Judge names
|
|
55
|
-
must be unique across all judge files in one recipe. `llm.provider` defaults to
|
|
56
|
-
`openai` at runtime.
|
|
57
|
-
|
|
58
|
-
The canonical expanded definition is:
|
|
59
|
-
|
|
60
|
-
```yaml
|
|
61
|
-
judge: helpful
|
|
62
|
-
description: Did the assistant answer correctly?
|
|
63
|
-
|
|
64
|
-
on:
|
|
65
|
-
- event: message
|
|
66
|
-
match:
|
|
67
|
-
role: assistant
|
|
68
|
-
|
|
69
|
-
instructions: |
|
|
70
|
-
Determine whether the assistant answered the user correctly.
|
|
71
|
-
|
|
72
|
-
llm:
|
|
73
|
-
provider: openai
|
|
74
|
-
model: gpt-5
|
|
75
|
-
request:
|
|
76
|
-
temperature: 0
|
|
77
|
-
max_tokens: 1024
|
|
78
|
-
reasoning_effort: medium
|
|
79
|
-
transport:
|
|
80
|
-
timeout_ms: 60000
|
|
81
|
-
max_retries: 2
|
|
82
|
-
max_retry_delay_ms: 5000
|
|
83
|
-
local:
|
|
84
|
-
base_url: https://api.openai.com/v1
|
|
85
|
-
api_key_env: OPENAI_API_KEY
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
Unknown fields are errors at every level. The obsolete top-level `model:`
|
|
89
|
-
block is rejected.
|
|
90
|
-
|
|
91
|
-
### LLM settings
|
|
92
|
-
|
|
93
|
-
- `provider` is a 1-64 byte lowercase slug containing ASCII letters, digits,
|
|
94
|
-
and hyphens. The portable checker does not restrict it to managed platform
|
|
95
|
-
providers because custom slugs can be used with an explicit local endpoint.
|
|
96
|
-
- `model` is a trimmed, non-empty string of at most 255 bytes.
|
|
97
|
-
- `request.temperature` is a finite number from 0 through 2 and defaults to 0.
|
|
98
|
-
- `request.max_tokens` is an integer from 1 through 131072 when present;
|
|
99
|
-
explicit `null` is treated as omitted.
|
|
100
|
-
- `request.reasoning_effort` is a 1-64 byte lowercase slug containing ASCII
|
|
101
|
-
letters and hyphens; explicit `null` is treated as omitted.
|
|
102
|
-
- `transport.timeout_ms` is an integer from 1 through 600000 and defaults to
|
|
103
|
-
60000.
|
|
104
|
-
- `transport.max_retries` is an integer from 0 through 10 and defaults to 0.
|
|
105
|
-
- `transport.max_retry_delay_ms` is an integer from 0 through 60000 and
|
|
106
|
-
defaults to 5000.
|
|
107
|
-
- `local` requires both `base_url` and `api_key_env`. The URL must be HTTP(S),
|
|
108
|
-
have a host, contain no embedded credentials, query, or fragment, and use
|
|
109
|
-
HTTPS unless it targets `localhost`, `127.0.0.1`, or `::1`. `api_key_env` is
|
|
110
|
-
an environment-variable name, not a credential value.
|
|
111
|
-
|
|
112
|
-
Transport and local settings affect execution but not authored grading
|
|
113
|
-
identity. The platform judge engine remains responsible for applying defaults,
|
|
114
|
-
building requests, and enforcing runtime routing.
|
|
115
|
-
|
|
116
|
-
## Applicability
|
|
117
|
-
|
|
118
|
-
`on` is optional. Omission, an empty mapping, or an empty list makes the judge
|
|
119
|
-
applicable to every conversation selected for judging. Otherwise it is an
|
|
120
|
-
OR-list of matchers. Supported events are `message`, `tool`, and `feedback`;
|
|
121
|
-
fields within one `match` mapping are ANDed by the runtime engine.
|
|
122
|
-
|
|
123
|
-
```yaml
|
|
124
|
-
on:
|
|
125
|
-
- event: message
|
|
126
|
-
match:
|
|
127
|
-
role: user
|
|
128
|
-
text: /refund|invoice/i
|
|
129
|
-
- event: tool
|
|
130
|
-
match:
|
|
131
|
-
name: shell
|
|
132
|
-
args.command: /pytest/i
|
|
133
|
-
- event: feedback
|
|
134
|
-
match:
|
|
135
|
-
sentiment: negative
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
Match keys are non-empty field paths. Regex literals use Rust regex syntax and
|
|
139
|
-
support unique `i`, `m`, `s`, and `u` flags. `environment`, `runtime_group`, and
|
|
140
|
-
paths ending in `pattern_id` are platform-owned and cannot appear as authored
|
|
141
|
-
match fields. The runtime engine owns dotted-path traversal and actual gate
|
|
142
|
-
evaluation.
|
|
143
|
-
|
|
144
|
-
## Diagnostics
|
|
145
|
-
|
|
146
|
-
Invalid recipe content is reported through the normal `Report`/`Diagnostic`
|
|
147
|
-
model. Judge diagnostics use stable `judge.*` codes, recipe-relative source
|
|
148
|
-
paths, useful help text, and deterministic ordering. YAML syntax failures use
|
|
149
|
-
`judge.yaml_malformed` and include a 1-based source span when the parser
|
|
150
|
-
provides one. Invalid definitions do not raise a separate content exception in
|
|
151
|
-
the Python binding; they return `Report(valid=False, ...)` like other recipe
|
|
152
|
-
errors.
|
package/docs/runtime-library.md
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
# Runtime library
|
|
2
|
-
|
|
3
|
-
The Recipes runtime library turns Recipe source into a live Pi agent. It is a
|
|
4
|
-
library boundary, not a hosting framework.
|
|
5
|
-
|
|
6
|
-
## The embedding ladder
|
|
7
|
-
|
|
8
|
-
```text
|
|
9
|
-
resolveRecipe() read and resolve the portable package
|
|
10
|
-
│
|
|
11
|
-
▼
|
|
12
|
-
createRecipeSession() construct the complete live Pi session
|
|
13
|
-
│
|
|
14
|
-
└── runRecipe() execute one turn and dispose
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Hosts should use the lowest layer that preserves their control.
|
|
18
|
-
|
|
19
|
-
## `resolveRecipe`
|
|
20
|
-
|
|
21
|
-
```ts
|
|
22
|
-
import { resolveRecipe } from "@introspection-ai/recipes/recipe";
|
|
23
|
-
|
|
24
|
-
const recipe = resolveRecipe({
|
|
25
|
-
recipeDir,
|
|
26
|
-
agentName,
|
|
27
|
-
});
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
The result contains the selected agent, visible subagents, model settings,
|
|
31
|
-
tools, MCP policy, skills, prompts, extensions, and system-prompt composition.
|
|
32
|
-
It does not create a model client or start a session.
|
|
33
|
-
|
|
34
|
-
## `createRecipeSession`
|
|
35
|
-
|
|
36
|
-
```ts
|
|
37
|
-
import { createRecipeSession } from "@introspection-ai/recipes/session";
|
|
38
|
-
|
|
39
|
-
const handle = await createRecipeSession({
|
|
40
|
-
recipeDir,
|
|
41
|
-
agentName,
|
|
42
|
-
cwd: workspaceDir,
|
|
43
|
-
credentials,
|
|
44
|
-
modelOverride,
|
|
45
|
-
mcpBindings,
|
|
46
|
-
eventBus,
|
|
47
|
-
customTools,
|
|
48
|
-
extensionFactories,
|
|
49
|
-
runController,
|
|
50
|
-
agentToolOptions,
|
|
51
|
-
settingsManager,
|
|
52
|
-
sessionManager,
|
|
53
|
-
additionalSkillPaths,
|
|
54
|
-
skillPaths,
|
|
55
|
-
systemPrompt,
|
|
56
|
-
onDiagnostics,
|
|
57
|
-
onEvent,
|
|
58
|
-
otel: {
|
|
59
|
-
tracer,
|
|
60
|
-
meter,
|
|
61
|
-
meta: { conversationId },
|
|
62
|
-
runSpans: false,
|
|
63
|
-
getParentContext: () => currentTurnContext,
|
|
64
|
-
},
|
|
65
|
-
});
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
This is the primary host integration point. It:
|
|
69
|
-
|
|
70
|
-
- resolves the Recipe and selected agent;
|
|
71
|
-
- resolves model credentials fail-closed;
|
|
72
|
-
- materializes required MCP bindings fail-closed;
|
|
73
|
-
- loads Recipe skills, prompts, and extensions;
|
|
74
|
-
- registers the shared subagent tool;
|
|
75
|
-
- creates and binds the Pi `AgentSession`;
|
|
76
|
-
- returns one idempotent `dispose()` boundary.
|
|
77
|
-
|
|
78
|
-
The returned `RecipeSessionHandle` exposes:
|
|
79
|
-
|
|
80
|
-
- `session` — Pi prompt, steer, follow-up, abort, messages, and events;
|
|
81
|
-
- `recipe` — the resolved portable definition;
|
|
82
|
-
- `runs` — the subagent run controller;
|
|
83
|
-
- `dispose()` — child, session, instrumentation, and MCP cleanup.
|
|
84
|
-
|
|
85
|
-
Host injection is intentional. A managed host can supply durable session state,
|
|
86
|
-
cross-process subagent execution, inline endpoint bindings, platform
|
|
87
|
-
extensions, its own settings, an event bus, host tools, and a
|
|
88
|
-
gateway-decorated model without reimplementing Recipe semantics. The Recipe
|
|
89
|
-
continues to own model configuration and tool selection; host seams replace
|
|
90
|
-
transport and materialized resources, not the portable definition.
|
|
91
|
-
|
|
92
|
-
Default MCP materialization leases the supplied `env` object until the handle
|
|
93
|
-
is disposed and restores its prior MCP/PATH state afterward. Concurrent
|
|
94
|
-
materialized sessions must receive separate environment objects. A host that
|
|
95
|
-
materializes one process-wide MCP runtime instead passes `mcpMode: "inherit"`
|
|
96
|
-
to its sessions, as runtime-agent does.
|
|
97
|
-
|
|
98
|
-
## `runRecipe`
|
|
99
|
-
|
|
100
|
-
```ts
|
|
101
|
-
import { runRecipe } from "@introspection-ai/recipes/run";
|
|
102
|
-
|
|
103
|
-
const result = await runRecipe({
|
|
104
|
-
recipeDir,
|
|
105
|
-
cwd: workspaceDir,
|
|
106
|
-
prompt,
|
|
107
|
-
timeoutMs: 120_000,
|
|
108
|
-
});
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
`runRecipe` creates one session, executes one prompt, returns the transcript and
|
|
112
|
-
final text, and always disposes. It is suitable for tests, cron jobs, and queue
|
|
113
|
-
workers that do not need a durable conversational host.
|
|
114
|
-
|
|
115
|
-
## Inspection
|
|
116
|
-
|
|
117
|
-
```ts
|
|
118
|
-
import { inspectRecipe } from "@introspection-ai/recipes/inspect";
|
|
119
|
-
|
|
120
|
-
const requirements = inspectRecipe(recipeDir);
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Inspection derives agents, providers, expected credential variables, required
|
|
124
|
-
and optional MCP servers, and resource counts without creating a session.
|
|
125
|
-
|
|
126
|
-
## OpenTelemetry
|
|
127
|
-
|
|
128
|
-
Pass a tracer through `otel` to attach the JS SDK's OpenTelemetry GenAI
|
|
129
|
-
semantic-convention instrumentation to the session. Recipes derives default
|
|
130
|
-
agent identity from the resolved package and generates a conversation id when
|
|
131
|
-
the host does not provide one. The default in-process subagent controller
|
|
132
|
-
inherits that conversation id while each child derives its own Recipe agent
|
|
133
|
-
identity. Injected run controllers own their child-session instrumentation.
|
|
134
|
-
|
|
135
|
-
Recipes does not create or register an OTel provider, processor, exporter, or
|
|
136
|
-
global context manager. The host owns that pipeline and its content policy. A
|
|
137
|
-
standalone host can therefore use the same standard OTLP exporter for
|
|
138
|
-
Braintrust, Langfuse, an OTel Collector, or another compatible backend. A host
|
|
139
|
-
that needs structure-only infrastructure traces can wrap that exporter with
|
|
140
|
-
`GenAiContentScrubbingExporter` from
|
|
141
|
-
`@introspection-sdk/introspection-pi`.
|
|
142
|
-
|
|
143
|
-
Short-lived hosts must flush their own provider after `runRecipe` completes;
|
|
144
|
-
long-lived hosts should flush and shut it down with the host lifecycle.
|
|
145
|
-
|
|
146
|
-
## Host conformance
|
|
147
|
-
|
|
148
|
-
```ts
|
|
149
|
-
import { hostConformanceCases } from "@introspection-ai/recipes/test-utils";
|
|
150
|
-
|
|
151
|
-
for (const testCase of hostConformanceCases(myHostAdapter)) {
|
|
152
|
-
it(testCase.name, testCase.run);
|
|
153
|
-
}
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
Passing the suite means the host is using the same session construction
|
|
157
|
-
contract as Pi and Introspection. Protocol behavior, persistence, tenancy, and
|
|
158
|
-
deployment remain host-specific and require their own tests.
|
|
159
|
-
|
|
160
|
-
## Deliberate non-features
|
|
161
|
-
|
|
162
|
-
The package does not provide:
|
|
163
|
-
|
|
164
|
-
- an HTTP server or wire protocol;
|
|
165
|
-
- a task database or task state machine;
|
|
166
|
-
- a scheduler or queue;
|
|
167
|
-
- sandbox or tenant isolation;
|
|
168
|
-
- a deployment CLI;
|
|
169
|
-
- provider-specific hosting adapters.
|
|
170
|
-
|
|
171
|
-
Those layers compose above `createRecipeSession`.
|