@kindgi/cli 0.2.0 → 0.3.0-rc.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 +12 -5
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +75 -19
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/approval-wait.d.ts +90 -0
- package/dist/commands/approval-wait.d.ts.map +1 -0
- package/dist/commands/approval-wait.js +154 -0
- package/dist/commands/approval-wait.js.map +1 -0
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +131 -14
- package/dist/commands/artifacts.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +48 -5
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/deploy.js +7 -3
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/deployments.d.ts.map +1 -1
- package/dist/commands/deployments.js +36 -13
- package/dist/commands/deployments.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -2
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +47 -14
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/eval-runs.d.ts.map +1 -1
- package/dist/commands/eval-runs.js +21 -9
- package/dist/commands/eval-runs.js.map +1 -1
- package/dist/commands/helpers.d.ts +31 -1
- package/dist/commands/helpers.d.ts.map +1 -1
- package/dist/commands/helpers.js +45 -2
- package/dist/commands/helpers.js.map +1 -1
- package/dist/commands/init.js +5 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mail-triggers.d.ts.map +1 -1
- package/dist/commands/mail-triggers.js +27 -3
- package/dist/commands/mail-triggers.js.map +1 -1
- package/dist/commands/promote.d.ts.map +1 -1
- package/dist/commands/promote.js +133 -11
- package/dist/commands/promote.js.map +1 -1
- package/dist/commands/provenance.d.ts.map +1 -1
- package/dist/commands/provenance.js +13 -5
- package/dist/commands/provenance.js.map +1 -1
- package/dist/commands/providers.d.ts.map +1 -1
- package/dist/commands/providers.js +47 -4
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/schedules.d.ts.map +1 -1
- package/dist/commands/schedules.js +25 -9
- package/dist/commands/schedules.js.map +1 -1
- package/dist/commands/skills.d.ts +16 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +122 -36
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/webhooks.d.ts.map +1 -1
- package/dist/commands/webhooks.js +21 -5
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -0
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +7 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -0
- package/dist/context.js.map +1 -1
- package/dist/dev/runtime-image.d.ts +1 -1
- package/dist/dev/runtime-image.d.ts.map +1 -1
- package/dist/dev/runtime-image.js +1 -1
- package/dist/dev/runtime-image.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +14 -1
- package/dist/errors.js.map +1 -1
- package/dist/exports/plan.d.ts.map +1 -1
- package/dist/exports/plan.js +50 -0
- package/dist/exports/plan.js.map +1 -1
- package/dist/init/augment-scaffolder.d.ts +1 -1
- package/dist/init/augment-scaffolder.js +9 -8
- package/dist/init/augment-scaffolder.js.map +1 -1
- package/dist/init/java-augment.d.ts.map +1 -1
- package/dist/init/java-augment.js +7 -6
- package/dist/init/java-augment.js.map +1 -1
- package/dist/init/python-augment.d.ts.map +1 -1
- package/dist/init/python-augment.js +7 -6
- package/dist/init/python-augment.js.map +1 -1
- package/dist/init/scala-augment.js +7 -6
- package/dist/init/scala-augment.js.map +1 -1
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -0
- package/dist/main.js.map +1 -1
- package/dist/providers/presets/anthropic.json +15 -3
- package/dist/providers/presets/azure-openai.json +10 -2
- package/dist/providers/presets/bedrock.json +6 -2
- package/dist/providers/presets/gemini-api.json +6 -2
- package/dist/providers/presets/openai.json +15 -3
- package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +21 -9
- package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +5 -3
- package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +202 -68
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +12 -188
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/common-mistakes.md +44 -0
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/how-it-works.md +41 -0
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/other-clients.md +19 -0
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/postgres.md +45 -0
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/several-servers.md +32 -0
- package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +49 -906
- package/dist/sdk-skills/kindgi-authoring-providers/bedrock.md +64 -0
- package/dist/sdk-skills/kindgi-authoring-providers/common-mistakes.md +125 -0
- package/dist/sdk-skills/kindgi-authoring-providers/keys-and-registration.md +58 -0
- package/dist/sdk-skills/kindgi-authoring-providers/kindgi-cloud.md +36 -0
- package/dist/sdk-skills/kindgi-authoring-providers/path-a-anthropic.md +216 -0
- package/dist/sdk-skills/kindgi-authoring-providers/path-b-openai-compat.md +127 -0
- package/dist/sdk-skills/kindgi-authoring-providers/path-c-onnx.md +97 -0
- package/dist/sdk-skills/kindgi-authoring-providers/path-d-vertex.md +95 -0
- package/dist/sdk-skills/kindgi-authoring-providers/router.md +113 -0
- package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +12 -387
- package/dist/sdk-skills/kindgi-authoring-tools/common-mistakes.md +135 -0
- package/dist/sdk-skills/kindgi-authoring-tools/declarative-http.md +34 -0
- package/dist/sdk-skills/kindgi-authoring-tools/imperative-handler.md +65 -0
- package/dist/sdk-skills/kindgi-authoring-tools/iterating-and-testing.md +45 -0
- package/dist/sdk-skills/kindgi-authoring-tools/secrets-and-connections.md +79 -0
- package/dist/sdk-skills/kindgi-authoring-tools/tool-flags.md +45 -0
- package/dist/sdk-skills/kindgi-fix-corrections/SKILL.md +13 -178
- package/dist/sdk-skills/kindgi-fix-corrections/make-the-change.md +25 -0
- package/dist/sdk-skills/kindgi-fix-corrections/publish-and-promote.md +76 -0
- package/dist/sdk-skills/kindgi-fix-corrections/pull-corrections.md +48 -0
- package/dist/sdk-skills/kindgi-fix-corrections/worked-example.md +27 -0
- package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +10 -180
- package/dist/sdk-skills/kindgi-framework-feedback/common-mistakes.md +19 -0
- package/dist/sdk-skills/kindgi-framework-feedback/editing-feedback-file.md +33 -0
- package/dist/sdk-skills/kindgi-framework-feedback/fields-and-entry-shape.md +53 -0
- package/dist/sdk-skills/kindgi-framework-feedback/hearing-back.md +24 -0
- package/dist/sdk-skills/kindgi-framework-feedback/sending.md +50 -0
- package/dist/sdk-skills/kindgi-getting-started/SKILL.md +24 -21
- package/dist/sdk-skills/kindgi-java-authoring-agents/SKILL.md +12 -4
- package/dist/sdk-skills/kindgi-java-authoring-flows/SKILL.md +6 -4
- package/dist/sdk-skills/kindgi-java-authoring-guardrails/SKILL.md +33 -23
- package/dist/sdk-skills/kindgi-java-authoring-tools/SKILL.md +19 -12
- package/dist/sdk-skills/kindgi-java-getting-started/SKILL.md +16 -16
- package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +18 -6
- package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +6 -4
- package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +39 -30
- package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +19 -9
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +24 -21
- package/dist/sdk-skills/kindgi-scala-authoring-agents/SKILL.md +12 -4
- package/dist/sdk-skills/kindgi-scala-authoring-flows/SKILL.md +6 -4
- package/dist/sdk-skills/kindgi-scala-authoring-guardrails/SKILL.md +34 -23
- package/dist/sdk-skills/kindgi-scala-authoring-tools/SKILL.md +15 -9
- package/dist/sdk-skills/kindgi-scala-getting-started/SKILL.md +16 -16
- package/dist/sdk-skills/kindgi-using/SKILL.md +11 -11
- package/dist/templates/sample/README.md.tmpl +8 -7
- package/dist/templates/sample/agents/echo-agent/index.ts.tmpl +1 -1
- package/dist/templates/sample/kindgi.config.ts.tmpl +1 -1
- package/dist/templates/sample/package.json.tmpl +1 -1
- package/dist/templates/woocommerce/README.md.tmpl +9 -3
- package/package.json +13 -13
|
@@ -17,8 +17,8 @@ description: >
|
|
|
17
17
|
session, or to take one back.
|
|
18
18
|
type: core
|
|
19
19
|
library: "@kindgi/sdk"
|
|
20
|
-
version: "0.
|
|
21
|
-
sdk_version: "0.
|
|
20
|
+
version: "0.5.0"
|
|
21
|
+
sdk_version: "0.3.0-rc.0"
|
|
22
22
|
pack_languages: [node, python, java, scala]
|
|
23
23
|
---
|
|
24
24
|
|
|
@@ -105,185 +105,15 @@ The entry lands as a new `## <title>` section appended to
|
|
|
105
105
|
`FEEDBACK.md`, stamped with a fresh `id: YYYY-MM-DD.N`. The file is
|
|
106
106
|
created with a header if it doesn't yet exist.
|
|
107
107
|
|
|
108
|
-
##
|
|
108
|
+
## Your case: read this file
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
1. **Preview.** Run `kindgi feedback submit --preview`, or name entries by
|
|
118
|
-
id or hash: `kindgi feedback submit 2026-09-25.3 --preview`. With none
|
|
119
|
-
named it takes every entry not sent yet and not marked fixed. It prints
|
|
120
|
-
exactly what would be sent, after redaction, and its `digest`. Nothing
|
|
121
|
-
is sent.
|
|
122
|
-
2. **Show the person.** Show them each entry's title and body as they'll
|
|
123
|
-
go, and the environment sent with them: the OS, Node and CLI versions,
|
|
124
|
-
the pack's language, and `kindgi doctor`'s checks as id and status
|
|
125
|
-
only. Point out anything redaction missed, like a customer's name or an
|
|
126
|
-
internal host name. If something shouldn't go, edit the entry in
|
|
127
|
-
`FEEDBACK.md` and preview again.
|
|
128
|
-
3. **Ask, then send.** Ask "Send this to Kindgi?" Only after a clear yes,
|
|
129
|
-
run the same command with `--yes=<digest>` in place of `--preview`. If
|
|
130
|
-
anything changed since the preview, it refuses: preview and ask again.
|
|
131
|
-
|
|
132
|
-
If `submit` says "Kindgi may have received it" (the answer was lost, came
|
|
133
|
-
too late, or couldn't be read), tell the person, and don't send again on
|
|
134
|
-
your own: a second send makes a second report, and one that arrived can't
|
|
135
|
-
be withdrawn from this machine. Let them decide.
|
|
136
|
-
|
|
137
|
-
What redaction takes out before the preview:
|
|
138
|
-
- the home directory alone becomes `~`, and paths in the pack become `./…`;
|
|
139
|
-
- other absolute paths become `[path]`, a path under `~` too;
|
|
140
|
-
- values from the pack's `.env*` files and `.kindgi/secrets.env` become
|
|
141
|
-
`[redacted]`;
|
|
142
|
-
- private keys and token shapes become `[redacted]` (a Kindgi token keeps
|
|
143
|
-
its prefix and last four characters);
|
|
144
|
-
- a URL keeps its host and path but loses its user info and query values;
|
|
145
|
-
- email addresses become `[email]`.
|
|
146
|
-
|
|
147
|
-
It can't catch everything in free text: the preview is the check.
|
|
148
|
-
|
|
149
|
-
Once sent, each entry gets a line like
|
|
150
|
-
`- **submitted:** 2026-09-25T15:02:11.000Z · **report:** fbr_…`. The
|
|
151
|
-
report id isn't a secret, so `FEEDBACK.md` can still be committed. The key
|
|
152
|
-
that takes a report back is kept in `~/.kindgi/feedback/keys.json` on this
|
|
153
|
-
machine and is never printed. Don't read or copy that file.
|
|
154
|
-
|
|
155
|
-
If `KINDGI_FEEDBACK_SUBMIT=off` is set, `submit` refuses. That's the
|
|
156
|
-
person's or their team's choice, so don't work around it. `write`,
|
|
157
|
-
`status` and `withdraw` still work.
|
|
158
|
-
|
|
159
|
-
## Hearing back
|
|
160
|
-
|
|
161
|
-
At the start of a session, when `FEEDBACK.md` has submitted entries, run
|
|
162
|
-
`kindgi feedback status`. It asks about each report at most once a day,
|
|
163
|
-
and never again once it's fixed, won't be fixed, or was withdrawn, or once
|
|
164
|
-
the intake doesn't have it (past its 90 days) unless it's named. A fixed
|
|
165
|
-
entry gets `> **Fixed:** in <version> (report fbr_…)` under its heading.
|
|
166
|
-
Tell the person what changed:
|
|
167
|
-
- **fixed**, with the version: suggest upgrading to it;
|
|
168
|
-
- **known**, with the public issue when there is one;
|
|
169
|
-
- **won't fix**, with the one-line reason.
|
|
170
|
-
|
|
171
|
-
Name an entry or a report id (`kindgi feedback status 2026-09-25.3`) to
|
|
172
|
-
ask about it now. A teammate's report id works too: it isn't a secret.
|
|
173
|
-
|
|
174
|
-
## Taking one back
|
|
175
|
-
|
|
176
|
-
When the person asks to withdraw a report, run
|
|
177
|
-
`kindgi feedback withdraw <id|hash|reportId>`. The intake clears its text
|
|
178
|
-
at once, and the entry's line gets `· **withdrawn:** <date>`. It needs the
|
|
179
|
-
key on the machine that sent the report. A withdrawn entry isn't sent again
|
|
180
|
-
unless the person names it in `submit`.
|
|
181
|
-
|
|
182
|
-
## Entry shape (what the CLI produces)
|
|
183
|
-
|
|
184
|
-
```md
|
|
185
|
-
## preferredProvider silently dropped by wire schema
|
|
186
|
-
|
|
187
|
-
- **id:** 2026-09-25.3
|
|
188
|
-
- **hash:** feedback-a3f2c1d0
|
|
189
|
-
- **kind:** bug
|
|
190
|
-
- **severity:** high
|
|
191
|
-
- **date:** 2026-09-25T14:32:07.104Z
|
|
192
|
-
- **sdk:** 0.1.2 · **cli:** 0.1.2 · **by:** claude-code
|
|
193
|
-
|
|
194
|
-
### Summary
|
|
195
|
-
One-line: what the report is about.
|
|
196
|
-
|
|
197
|
-
### Observed
|
|
198
|
-
What happened, with file:line pointers when possible.
|
|
199
|
-
|
|
200
|
-
### Expected
|
|
201
|
-
What should have happened.
|
|
202
|
-
|
|
203
|
-
### Reproducer
|
|
204
|
-
Exact commands, spec files, output.
|
|
205
|
-
|
|
206
|
-
### Suggested fix
|
|
207
|
-
Optional; leave blank if you don't have one.
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Editing FEEDBACK.md directly
|
|
213
|
-
|
|
214
|
-
Entries are referenced locally by their `id` (e.g. `2026-09-25.3`)
|
|
215
|
-
or by their title; across packs (or between peers) they are referenced
|
|
216
|
-
by their `hash` (e.g. `feedback-a3f2c1d0`). When the pack author says
|
|
217
|
-
something like:
|
|
218
|
-
|
|
219
|
-
- **"Remove 2026-09-25.3"** / **"Remove the preferredProvider
|
|
220
|
-
entry"** → find the section whose `id` matches (or whose `##
|
|
221
|
-
<title>` matches), delete from the header down through the next
|
|
222
|
-
`---` separator (inclusive). Do NOT renumber other entries — ids
|
|
223
|
-
are historical identifiers, gaps are expected.
|
|
224
|
-
- **"Mark 2026-09-25.3 fixed"** / **"That preferredProvider one
|
|
225
|
-
landed in commit abc123"** → find the section, insert a line
|
|
226
|
-
right after the header:
|
|
227
|
-
```md
|
|
228
|
-
> **Fixed:** landed in commit abc123 (2026-09-25). <optional context>
|
|
229
|
-
```
|
|
230
|
-
- **"Note that 2026-09-25.5 is a duplicate of feedback-a3f2c1d0"** /
|
|
231
|
-
**"Merge these — same hash"** → find the section, insert:
|
|
232
|
-
```md
|
|
233
|
-
> **Duplicate of:** feedback-a3f2c1d0 (<optional context>)
|
|
234
|
-
```
|
|
235
|
-
Prefer the `hash` when the duplicate lives in another pack (peer /
|
|
236
|
-
framework side); prefer the `id` when it's a local duplicate.
|
|
237
|
-
- **Restructuring / re-ordering** → use the Edit tool to move the
|
|
238
|
-
section; keep the header + `- **id:** …` + `- **hash:** …` lines
|
|
239
|
-
intact so both identifiers stay stable.
|
|
240
|
-
|
|
241
|
-
Do NOT try to re-file the same item through `kindgi feedback write`
|
|
242
|
-
— that would create a new entry with a new id (though the hash
|
|
243
|
-
would match, which is exactly the p2p-dedup signal). Always edit
|
|
244
|
-
directly for maintenance operations within one pack.
|
|
245
|
-
|
|
246
|
-
## Fields to fill precisely
|
|
247
|
-
|
|
248
|
-
- **`kind`** — honest classification.
|
|
249
|
-
- `bug` — the framework did the wrong thing (crashed, silently
|
|
250
|
-
dropped a field, contradicted its own docs).
|
|
251
|
-
- `friction` — the framework did the "right" thing but the UX cost
|
|
252
|
-
more time than the task warranted.
|
|
253
|
-
- `question` — you don't understand something and the docs don't
|
|
254
|
-
answer it.
|
|
255
|
-
- `design` — you observed something that works as designed but the
|
|
256
|
-
design might be wrong.
|
|
257
|
-
|
|
258
|
-
- **`severity`** — honest impact.
|
|
259
|
-
- `blocker` — nothing useful can happen until this is fixed.
|
|
260
|
-
- `high` — a common workflow is broken; users will hit this.
|
|
261
|
-
- `medium` — real friction, but there's a documented workaround.
|
|
262
|
-
- `low` — cosmetic, tiny annoyance, or affects one obscure path.
|
|
263
|
-
|
|
264
|
-
- **`authored_by`** — `claude-code` when the diagnostic came entirely
|
|
265
|
-
from an AI coding assistant; `human` when the pack author wrote
|
|
266
|
-
it; `mixed` when it's a combination.
|
|
267
|
-
|
|
268
|
-
## Common mistakes
|
|
269
|
-
|
|
270
|
-
1. **File-path-only entries** ("bug in router.ts").
|
|
271
|
-
Without a reproducer + expected behavior, the maintainer has to
|
|
272
|
-
reverse-engineer your session. File:line is necessary but not
|
|
273
|
-
sufficient.
|
|
274
|
-
2. **Skipping "Suggested fix" when you have one.** If you diagnosed
|
|
275
|
-
the root cause, name it. "Add `preferredProvider` to `AgentSchema`
|
|
276
|
-
in `packages/api/src/openapi/schemas.ts:667`" is worth a dozen
|
|
277
|
-
back-and-forth clarifications.
|
|
278
|
-
3. **Bundling multiple bugs into one entry.** Run `kindgi feedback
|
|
279
|
-
write` once per bug. Each gets its own number, its own fix
|
|
280
|
-
status, its own removal path.
|
|
281
|
-
4. **Sensitive state in reproducers.** Reproducer sections sometimes
|
|
282
|
-
contain API keys, tenant IDs, secrets — review before committing,
|
|
283
|
-
and read the preview before anyone says yes to sending.
|
|
284
|
-
5. **Filing "the way I'd design it" as a bug.** Design disagreements
|
|
285
|
-
are `--kind=design`, not `--kind=bug`. Both are welcome; the
|
|
286
|
-
classification helps prioritization.
|
|
110
|
+
| Your case | Read |
|
|
111
|
+
|---|---|
|
|
112
|
+
| Filling `kind`, `severity` and `authored_by`, and what an entry looks like | [fields-and-entry-shape.md](fields-and-entry-shape.md) |
|
|
113
|
+
| Sending entries to Kindgi: never without the person's yes to the preview | [sending.md](sending.md) |
|
|
114
|
+
| What became of sent reports, at the start of a session, or taking one back | [hearing-back.md](hearing-back.md) |
|
|
115
|
+
| Removing, marking fixed, marking a duplicate or re-ordering entries in `FEEDBACK.md` | [editing-feedback-file.md](editing-feedback-file.md) |
|
|
116
|
+
| Before you file: what makes a report hard to act on | [common-mistakes.md](common-mistakes.md) |
|
|
287
117
|
|
|
288
118
|
## References
|
|
289
119
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Common mistakes
|
|
2
|
+
|
|
3
|
+
1. **File-path-only entries** ("bug in router.ts").
|
|
4
|
+
Without a reproducer + expected behavior, the maintainer has to
|
|
5
|
+
reverse-engineer your session. File:line is necessary but not
|
|
6
|
+
sufficient.
|
|
7
|
+
2. **Skipping "Suggested fix" when you have one.** If you diagnosed
|
|
8
|
+
the root cause, name it. "Add `preferredProvider` to `AgentSchema`
|
|
9
|
+
in `packages/api/src/openapi/schemas.ts:667`" is worth a dozen
|
|
10
|
+
back-and-forth clarifications.
|
|
11
|
+
3. **Bundling multiple bugs into one entry.** Run `kindgi feedback
|
|
12
|
+
write` once per bug. Each gets its own number, its own fix
|
|
13
|
+
status, its own removal path.
|
|
14
|
+
4. **Sensitive state in reproducers.** Reproducer sections sometimes
|
|
15
|
+
contain API keys, tenant IDs, secrets — review before committing,
|
|
16
|
+
and read the preview before anyone says yes to sending.
|
|
17
|
+
5. **Filing "the way I'd design it" as a bug.** Design disagreements
|
|
18
|
+
are `--kind=design`, not `--kind=bug`. Both are welcome; the
|
|
19
|
+
classification helps prioritization.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Editing FEEDBACK.md directly
|
|
2
|
+
|
|
3
|
+
Entries are referenced locally by their `id` (e.g. `2026-09-25.3`)
|
|
4
|
+
or by their title; across packs (or between peers) they are referenced
|
|
5
|
+
by their `hash` (e.g. `feedback-a3f2c1d0`). When the pack author says
|
|
6
|
+
something like:
|
|
7
|
+
|
|
8
|
+
- **"Remove 2026-09-25.3"** / **"Remove the preferredProvider
|
|
9
|
+
entry"** → find the section whose `id` matches (or whose `##
|
|
10
|
+
<title>` matches), delete from the header down through the next
|
|
11
|
+
`---` separator (inclusive). Do NOT renumber other entries — ids
|
|
12
|
+
are historical identifiers, gaps are expected.
|
|
13
|
+
- **"Mark 2026-09-25.3 fixed"** / **"That preferredProvider one
|
|
14
|
+
landed in commit abc123"** → find the section, insert a line
|
|
15
|
+
right after the header:
|
|
16
|
+
```md
|
|
17
|
+
> **Fixed:** landed in commit abc123 (2026-09-25). <optional context>
|
|
18
|
+
```
|
|
19
|
+
- **"Note that 2026-09-25.5 is a duplicate of feedback-a3f2c1d0"** /
|
|
20
|
+
**"Merge these — same hash"** → find the section, insert:
|
|
21
|
+
```md
|
|
22
|
+
> **Duplicate of:** feedback-a3f2c1d0 (<optional context>)
|
|
23
|
+
```
|
|
24
|
+
Prefer the `hash` when the duplicate lives in another pack (peer /
|
|
25
|
+
framework side); prefer the `id` when it's a local duplicate.
|
|
26
|
+
- **Restructuring / re-ordering** → use the Edit tool to move the
|
|
27
|
+
section; keep the header + `- **id:** …` + `- **hash:** …` lines
|
|
28
|
+
intact so both identifiers stay stable.
|
|
29
|
+
|
|
30
|
+
Do NOT try to re-file the same item through `kindgi feedback write`
|
|
31
|
+
— that would create a new entry with a new id (though the hash
|
|
32
|
+
would match, which is exactly the p2p-dedup signal). Always edit
|
|
33
|
+
directly for maintenance operations within one pack.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# An entry: the fields to fill, and its shape
|
|
2
|
+
|
|
3
|
+
## Fields to fill precisely
|
|
4
|
+
|
|
5
|
+
- **`kind`** — honest classification.
|
|
6
|
+
- `bug` — the framework did the wrong thing (crashed, silently
|
|
7
|
+
dropped a field, contradicted its own docs).
|
|
8
|
+
- `friction` — the framework did the "right" thing but the UX cost
|
|
9
|
+
more time than the task warranted.
|
|
10
|
+
- `question` — you don't understand something and the docs don't
|
|
11
|
+
answer it.
|
|
12
|
+
- `design` — you observed something that works as designed but the
|
|
13
|
+
design might be wrong.
|
|
14
|
+
|
|
15
|
+
- **`severity`** — honest impact.
|
|
16
|
+
- `blocker` — nothing useful can happen until this is fixed.
|
|
17
|
+
- `high` — a common workflow is broken; users will hit this.
|
|
18
|
+
- `medium` — real friction, but there's a documented workaround.
|
|
19
|
+
- `low` — cosmetic, tiny annoyance, or affects one obscure path.
|
|
20
|
+
|
|
21
|
+
- **`authored_by`** — `claude-code` when the diagnostic came entirely
|
|
22
|
+
from an AI coding assistant; `human` when the pack author wrote
|
|
23
|
+
it; `mixed` when it's a combination.
|
|
24
|
+
|
|
25
|
+
## Entry shape (what the CLI produces)
|
|
26
|
+
|
|
27
|
+
```md
|
|
28
|
+
## preferredProvider silently dropped by wire schema
|
|
29
|
+
|
|
30
|
+
- **id:** 2026-09-25.3
|
|
31
|
+
- **hash:** feedback-a3f2c1d0
|
|
32
|
+
- **kind:** bug
|
|
33
|
+
- **severity:** high
|
|
34
|
+
- **date:** 2026-09-25T14:32:07.104Z
|
|
35
|
+
- **sdk:** 0.1.2 · **cli:** 0.1.2 · **by:** claude-code
|
|
36
|
+
|
|
37
|
+
### Summary
|
|
38
|
+
One-line: what the report is about.
|
|
39
|
+
|
|
40
|
+
### Observed
|
|
41
|
+
What happened, with file:line pointers when possible.
|
|
42
|
+
|
|
43
|
+
### Expected
|
|
44
|
+
What should have happened.
|
|
45
|
+
|
|
46
|
+
### Reproducer
|
|
47
|
+
Exact commands, spec files, output.
|
|
48
|
+
|
|
49
|
+
### Suggested fix
|
|
50
|
+
Optional; leave blank if you don't have one.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
```
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Hearing back, and taking one back
|
|
2
|
+
|
|
3
|
+
## Hearing back
|
|
4
|
+
|
|
5
|
+
At the start of a session, when `FEEDBACK.md` has submitted entries, run
|
|
6
|
+
`kindgi feedback status`. It asks about each report at most once a day,
|
|
7
|
+
and never again once it's fixed, won't be fixed, or was withdrawn, or once
|
|
8
|
+
the intake doesn't have it (past its 90 days) unless it's named. A fixed
|
|
9
|
+
entry gets `> **Fixed:** in <version> (report fbr_…)` under its heading.
|
|
10
|
+
Tell the person what changed:
|
|
11
|
+
- **fixed**, with the version: suggest upgrading to it;
|
|
12
|
+
- **known**, with the public issue when there is one;
|
|
13
|
+
- **won't fix**, with the one-line reason.
|
|
14
|
+
|
|
15
|
+
Name an entry or a report id (`kindgi feedback status 2026-09-25.3`) to
|
|
16
|
+
ask about it now. A teammate's report id works too: it isn't a secret.
|
|
17
|
+
|
|
18
|
+
## Taking one back
|
|
19
|
+
|
|
20
|
+
When the person asks to withdraw a report, run
|
|
21
|
+
`kindgi feedback withdraw <id|hash|reportId>`. The intake clears its text
|
|
22
|
+
at once, and the entry's line gets `· **withdrawn:** <date>`. It needs the
|
|
23
|
+
key on the machine that sent the report. A withdrawn entry isn't sent again
|
|
24
|
+
unless the person names it in `submit`.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Sending it to Kindgi: only with the person's yes
|
|
2
|
+
|
|
3
|
+
`FEEDBACK.md` stays in the pack until the person decides to send it.
|
|
4
|
+
`kindgi feedback submit` sends entries to Kindgi's private intake on
|
|
5
|
+
access.kindgi.com. Only Kindgi's maintainers read reports there. They're
|
|
6
|
+
kept 90 days, and the person can take one back at any time.
|
|
7
|
+
|
|
8
|
+
**Never send on your own.** Every time:
|
|
9
|
+
|
|
10
|
+
1. **Preview.** Run `kindgi feedback submit --preview`, or name entries by
|
|
11
|
+
id or hash: `kindgi feedback submit 2026-09-25.3 --preview`. With none
|
|
12
|
+
named it takes every entry not sent yet and not marked fixed. It prints
|
|
13
|
+
exactly what would be sent, after redaction, and its `digest`. Nothing
|
|
14
|
+
is sent.
|
|
15
|
+
2. **Show the person.** Show them each entry's title and body as they'll
|
|
16
|
+
go, and the environment sent with them: the OS, Node and CLI versions,
|
|
17
|
+
the pack's language, and `kindgi doctor`'s checks as id and status
|
|
18
|
+
only. Point out anything redaction missed, like a customer's name or an
|
|
19
|
+
internal host name. If something shouldn't go, edit the entry in
|
|
20
|
+
`FEEDBACK.md` and preview again.
|
|
21
|
+
3. **Ask, then send.** Ask "Send this to Kindgi?" Only after a clear yes,
|
|
22
|
+
run the same command with `--yes=<digest>` in place of `--preview`. If
|
|
23
|
+
anything changed since the preview, it refuses: preview and ask again.
|
|
24
|
+
|
|
25
|
+
If `submit` says "Kindgi may have received it" (the answer was lost, came
|
|
26
|
+
too late, or couldn't be read), tell the person, and don't send again on
|
|
27
|
+
your own: a second send makes a second report, and one that arrived can't
|
|
28
|
+
be withdrawn from this machine. Let them decide.
|
|
29
|
+
|
|
30
|
+
What redaction takes out before the preview:
|
|
31
|
+
- the home directory alone becomes `~`, and paths in the pack become `./…`;
|
|
32
|
+
- other absolute paths become `[path]`, a path under `~` too;
|
|
33
|
+
- values from the pack's `.env*` files and `.kindgi/secrets.env` become
|
|
34
|
+
`[redacted]`;
|
|
35
|
+
- private keys and token shapes become `[redacted]` (a Kindgi token keeps
|
|
36
|
+
its prefix and last four characters);
|
|
37
|
+
- a URL keeps its host and path but loses its user info and query values;
|
|
38
|
+
- email addresses become `[email]`.
|
|
39
|
+
|
|
40
|
+
It can't catch everything in free text: the preview is the check.
|
|
41
|
+
|
|
42
|
+
Once sent, each entry gets a line like
|
|
43
|
+
`- **submitted:** 2026-09-25T15:02:11.000Z · **report:** fbr_…`. The
|
|
44
|
+
report id isn't a secret, so `FEEDBACK.md` can still be committed. The key
|
|
45
|
+
that takes a report back is kept in `~/.kindgi/feedback/keys.json` on this
|
|
46
|
+
machine and is never printed. Don't read or copy that file.
|
|
47
|
+
|
|
48
|
+
If `KINDGI_FEEDBACK_SUBMIT=off` is set, `submit` refuses. That's the
|
|
49
|
+
person's or their team's choice, so don't work around it. `write`,
|
|
50
|
+
`status` and `withdraw` still work.
|
|
@@ -16,8 +16,8 @@ description: >
|
|
|
16
16
|
primitive.
|
|
17
17
|
type: core
|
|
18
18
|
library: "@kindgi/sdk"
|
|
19
|
-
version: "0.3.
|
|
20
|
-
sdk_version: "0.
|
|
19
|
+
version: "0.3.19"
|
|
20
|
+
sdk_version: "0.3.0-rc.0"
|
|
21
21
|
pack_languages: [node]
|
|
22
22
|
---
|
|
23
23
|
|
|
@@ -287,10 +287,13 @@ const run = await kindgi.runs.start({
|
|
|
287
287
|
(`GET /v1/runs/{runId}`); status and timing only: `kindgi.runs.progress(runId)`.
|
|
288
288
|
- **The audit, step by step:** `kindgi.runs.journal(runId)`
|
|
289
289
|
(`GET /v1/runs/{runId}/journal`).
|
|
290
|
-
- **Where an
|
|
291
|
-
(`GET /v1/provenance/{runId}`).
|
|
292
|
-
|
|
293
|
-
(`
|
|
290
|
+
- **Where an answer came from:** `kindgi.provenance.get(runId)`
|
|
291
|
+
(`GET /v1/provenance/{runId}`). An agent turn's record has its model and
|
|
292
|
+
tool calls. A finished flow run has its own record: a `step` node per step
|
|
293
|
+
(`step:<nodeId>`, a loop's iterations `step:<nodeId>@<loop>#<i>`) with the
|
|
294
|
+
`runs` it started, and `stepUsage`, its model usage per step. Until it's
|
|
295
|
+
written, the not-found error's `fields.recordState` is `being-written` (or
|
|
296
|
+
`failed`).
|
|
294
297
|
- **What it cost:** `kindgi.cost.usage.query({ rootRunId: runId })`
|
|
295
298
|
(`GET /v1/cost/records?rootRunId={runId}`): `.data`, one record per model
|
|
296
299
|
call, with its `model`, `usage` (`promptTokens`, `completionTokens`) and
|
|
@@ -321,7 +324,7 @@ const month = await kindgi.cost.usage.summary({
|
|
|
321
324
|
// month.totalUsd; month.groups[i].key ({ month: '2026-10' }), .totalUsd, .tokens
|
|
322
325
|
```
|
|
323
326
|
|
|
324
|
-
Docs: https://docs.kindgi.com/v0.
|
|
327
|
+
Docs: https://docs.kindgi.com/v0.3/guides/observability/cost-per-run/
|
|
325
328
|
|
|
326
329
|
Show it in the app's own UI. **Never:**
|
|
327
330
|
|
|
@@ -332,7 +335,7 @@ Show it in the app's own UI. **Never:**
|
|
|
332
335
|
- **link users to Kindgi's console** or any Kindgi UI for this data.
|
|
333
336
|
|
|
334
337
|
To keep a copy (reporting, search), pull it through the API into the app's
|
|
335
|
-
own tables. Docs: https://docs.kindgi.com/v0.
|
|
338
|
+
own tables. Docs: https://docs.kindgi.com/v0.3/guides/runs/show-runs-in-your-app/
|
|
336
339
|
|
|
337
340
|
## Upgrading a deployment
|
|
338
341
|
|
|
@@ -342,22 +345,22 @@ doesn't have yet, then serving. Migrations only go forward: an upgrade
|
|
|
342
345
|
starts with a backup of the database, and going back means restoring it and
|
|
343
346
|
running the older version on it.
|
|
344
347
|
|
|
345
|
-
- **On Cloud Run, a
|
|
346
|
-
|
|
347
|
-
`@kindgi/sdk@<version>` tag of the
|
|
348
|
-
knows the steps up to its own
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
Upgrading section has the rest:
|
|
348
|
+
- **On Cloud Run, a deployment of the module** (on runtime 0.1.8 or later,
|
|
349
|
+
in any `network_mode`; before the `@kindgi/sdk@0.3.0` tag, `"none"` only):
|
|
350
|
+
the module's `./upgrade.sh`, as of the `@kindgi/sdk@<version>` tag of the
|
|
351
|
+
release you're upgrading to, since it knows the steps up to its own
|
|
352
|
+
release. It takes a `--var-file` for each file the deployment's variables
|
|
353
|
+
are in. Run `./upgrade.sh --dry-run` first: it changes nothing, and lists
|
|
354
|
+
what a real run would change. A real run's `yes` applies exactly the
|
|
355
|
+
saved plan it showed. The module README's Upgrading section has the rest:
|
|
353
356
|
https://github.com/kindgi/kindgi-sdk/tree/main/deploy/gcp-cloud-run#upgrading
|
|
354
357
|
- **Any other Cloud Run deployment:** by hand, staging first, as the Cloud
|
|
355
358
|
Run page's "Upgrade by hand" section says:
|
|
356
|
-
https://docs.kindgi.com/v0.
|
|
357
|
-
- **On Azure Container Apps:** the "Operate it" section of its page
|
|
358
|
-
https://docs.kindgi.com/v0.
|
|
359
|
-
- **Otherwise:** the operate page's upgrade steps
|
|
360
|
-
https://docs.kindgi.com/v0.
|
|
359
|
+
https://docs.kindgi.com/v0.3/deploy/self-hosted/cloud-run/#upgrade-by-hand
|
|
360
|
+
- **On Azure Container Apps:** the "Operate it" section of its page:
|
|
361
|
+
https://docs.kindgi.com/v0.3/deploy/self-hosted/azure-container-apps/#operate-it
|
|
362
|
+
- **Otherwise:** the operate page's upgrade steps:
|
|
363
|
+
https://docs.kindgi.com/v0.3/deploy/self-hosted/operate/#upgrade-the-runtime
|
|
361
364
|
|
|
362
365
|
An upgrade changes a running deployment: give the person the commands to run
|
|
363
366
|
in their own terminal (`./upgrade.sh` waits for them to type `yes`).
|
|
@@ -15,8 +15,8 @@ description: >
|
|
|
15
15
|
kindgi-authoring-providers.
|
|
16
16
|
type: core
|
|
17
17
|
library: "kindgi-pack (Java)"
|
|
18
|
-
version: "0.1.
|
|
19
|
-
sdk_version: "0.
|
|
18
|
+
version: "0.1.5"
|
|
19
|
+
sdk_version: "0.3.0-rc.0"
|
|
20
20
|
pack_languages: [java]
|
|
21
21
|
sources:
|
|
22
22
|
- sdks/java/kindgi-pack/README.md
|
|
@@ -134,8 +134,10 @@ public final class BriefWriter {
|
|
|
134
134
|
**`tool(id, range)`** is a tool of another pack, with a semver **range**
|
|
135
135
|
(`"^1.0.0"`); the highest active matching version is picked at turn
|
|
136
136
|
start. An agent with no tools is chat-only.
|
|
137
|
-
- **`guardrail(Guardrail)`** or **`guardrail(id)`:**
|
|
138
|
-
|
|
137
|
+
- **`guardrail(Guardrail)`** or **`guardrail(id)`:** checks the final answer,
|
|
138
|
+
before it is stored. One whose action is `retry` sends the answer back to
|
|
139
|
+
the model for a new one, up to `retry.maxAttempts` answers in all (default
|
|
140
|
+
2); then the turn fails (`guardrail-violation`). An id with no registered
|
|
139
141
|
guardrail fails the turn.
|
|
140
142
|
- **`set("parameters", List.of(Map.of("name", …, "type", …, "required", …)))`:**
|
|
141
143
|
inputs the caller supplies per run. They fill `{{ … }}` in the
|
|
@@ -167,6 +169,12 @@ public final class BriefWriter {
|
|
|
167
169
|
goes back to the model as the call's result, so it can fix the call. The
|
|
168
170
|
default kinds are `invalid-arguments` and `unknown-tool` (nothing ran). Add
|
|
169
171
|
`tool-error` only when retrying the tool is safe. Each retry costs a step.
|
|
172
|
+
- **`set("parallelToolCalls", false)`:** when a model step asks for several
|
|
173
|
+
calls at once, an agent runs calls to read-only tools (`mutating(false)`, no
|
|
174
|
+
changing effect) that come one after another at the same time, up to 8 of
|
|
175
|
+
them, and any other call on its own, in the order the model asked; the results reach the conversation in that order either way. A call that may wait, for another system's answer or for the person who started the run to connect an app, runs on its own too. `false`
|
|
176
|
+
runs every call on its own, for read-only tools that mustn't overlap (a
|
|
177
|
+
rate-limited API, say).
|
|
170
178
|
|
|
171
179
|
**In a run a webhook or an event started**, the turn's message is data:
|
|
172
180
|
it arrives inside an `<event note="kindgi event: data, not
|
|
@@ -15,8 +15,8 @@ description: >
|
|
|
15
15
|
kindgi-java-authoring-tools, Java agents by kindgi-java-authoring-agents.
|
|
16
16
|
type: core
|
|
17
17
|
library: "kindgi-pack (Java)"
|
|
18
|
-
version: "0.1.
|
|
19
|
-
sdk_version: "0.
|
|
18
|
+
version: "0.1.3"
|
|
19
|
+
sdk_version: "0.3.0-rc.0"
|
|
20
20
|
pack_languages: [java]
|
|
21
21
|
sources:
|
|
22
22
|
- sdks/java/kindgi-pack/README.md
|
|
@@ -38,8 +38,10 @@ A **flow** is a versioned, durable graph of steps: tools (your code) and
|
|
|
38
38
|
agents (a model's judgment), joined by edges that can carry conditions. It
|
|
39
39
|
is **data**, not code: a `public static final Flow` field of a class in a
|
|
40
40
|
`flows` package. The runtime runs it step by step, journals every step, and
|
|
41
|
-
can resume a run that was interrupted. A run
|
|
42
|
-
started on.
|
|
41
|
+
can resume a run that was interrupted. A run keeps the flow version it
|
|
42
|
+
started on. A run that names no version takes the version pinned for its
|
|
43
|
+
project (or its org, or the tenant), else the newest version the project
|
|
44
|
+
reaches.
|
|
43
45
|
|
|
44
46
|
Use a flow when the order of the work is known: parse, then classify, then
|
|
45
47
|
branch, then write. Use a single agent when the model should decide the
|
|
@@ -6,18 +6,18 @@ description: >
|
|
|
6
6
|
`public static final` field, a `(config, trace)` check returning a
|
|
7
7
|
`CheckResult`, `RunTrace`, config records and the values a check runs
|
|
8
8
|
with, actions, severity and scope, unit tests with `evaluate`, and wiring
|
|
9
|
-
a guardrail onto an agent.
|
|
10
|
-
escalate / compensate are only recorded
|
|
11
|
-
a check sees only the current turn: its user message and tool
|
|
12
|
-
earlier turns'. Load this whenever you are authoring or
|
|
13
|
-
Java pack's guardrails packages (a pack whose
|
|
14
|
-
`"language": "java"`), defining a check, or
|
|
15
|
-
agent. Java agents are covered by
|
|
16
|
-
by kindgi-java-authoring-tools.
|
|
9
|
+
a guardrail onto an agent. halt fails the turn and retry sends the answer
|
|
10
|
+
back to the model for a new one (escalate / compensate are only recorded
|
|
11
|
+
in 0.1), and a check sees only the current turn: its user message and tool
|
|
12
|
+
results, not earlier turns'. Load this whenever you are authoring or
|
|
13
|
+
editing code in a Java pack's guardrails packages (a pack whose
|
|
14
|
+
`kindgi.config.json` says `"language": "java"`), defining a check, or
|
|
15
|
+
wiring a guardrail onto an agent. Java agents are covered by
|
|
16
|
+
kindgi-java-authoring-agents, Java tools by kindgi-java-authoring-tools.
|
|
17
17
|
type: core
|
|
18
18
|
library: "kindgi-pack (Java)"
|
|
19
|
-
version: "0.1.
|
|
20
|
-
sdk_version: "0.
|
|
19
|
+
version: "0.1.4"
|
|
20
|
+
sdk_version: "0.3.0-rc.0"
|
|
21
21
|
pack_languages: [java]
|
|
22
22
|
sources:
|
|
23
23
|
- sdks/java/kindgi-pack/README.md
|
|
@@ -42,6 +42,8 @@ class in a `guardrails` package. For an agent turn, the runtime evaluates
|
|
|
42
42
|
every guardrail the agent lists once, on the final answer, before it is
|
|
43
43
|
stored.
|
|
44
44
|
|
|
45
|
+
`Guardrail.define` has no field for the other points a guardrail can run at (`at`, and a check's `points`), so a Java guardrail runs at the final answer only; the points are documented at https://docs.kindgi.com/v0.3/guides/guardrails/configure-a-guardrail/#where-in-the-turn-it-runs.
|
|
46
|
+
|
|
45
47
|
Ask what the rule should catch before writing one. The sample
|
|
46
48
|
`response-not-empty` guardrail is a demonstration, not a template.
|
|
47
49
|
|
|
@@ -50,14 +52,20 @@ Ask what the rule should catch before writing one. The sample
|
|
|
50
52
|
Read this before you plan a guardrail. Three limits decide what can be
|
|
51
53
|
built:
|
|
52
54
|
|
|
53
|
-
-
|
|
54
|
-
`guardrail-violation`, and the answer is not stored. `retry
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
- **`halt` and `retry` act.** A failed `halt` guardrail fails the turn with
|
|
56
|
+
`guardrail-violation`, and the answer is not stored. A failed `retry`
|
|
57
|
+
guardrail sends the answer back to the model, with the check's reason in a
|
|
58
|
+
user message, for a new one; the failed answer isn't stored. When it has
|
|
59
|
+
failed `retry.maxAttempts` answers (the first one included; 2 when left
|
|
60
|
+
out), the turn fails with `guardrail-violation` and
|
|
61
|
+
`details.attempts`. Each new answer is a model call that the agent's
|
|
62
|
+
`budget.maxSteps` counts. The `halt` and `retry` guardrails judge each
|
|
63
|
+
answer, a judge's calls included, which `budget.maxCostUsd` doesn't count;
|
|
64
|
+
the others judge only the answer that's sent. A new answer can call tools
|
|
65
|
+
again, side-effecting ones included, with approvals as usual. `escalate`
|
|
66
|
+
and `compensate` are recorded on the turn's violations, as `log-only` is,
|
|
67
|
+
and the turn completes: nothing escalates or calls a compensating tool. So
|
|
68
|
+
"block the reply and make the agent try again" is a `retry` guardrail.
|
|
61
69
|
- **A check sees one turn.** The trace holds the current turn only: its
|
|
62
70
|
user message (`trace.userInput()`), its tool calls and their results
|
|
63
71
|
(`toolCalls()`, `toolResults()`) and its answer (`output()`). Earlier
|
|
@@ -155,11 +163,12 @@ public final class Citations {
|
|
|
155
163
|
builder refuses a check with neither.
|
|
156
164
|
- In an agent turn, a failed `halt` guardrail fails the turn
|
|
157
165
|
(`guardrail-violation`), and the answer is not stored.
|
|
166
|
+
- A failed `retry` guardrail sends the answer back for a new one, up to
|
|
167
|
+
its `maxAttempts` answers (above).
|
|
158
168
|
- Any other action reports the failure in the turn result's `violations`,
|
|
159
169
|
and the turn completes.
|
|
160
|
-
-
|
|
161
|
-
|
|
162
|
-
escalation or compensating call.
|
|
170
|
+
- `escalate` and `compensate` are recorded on the violation, with no
|
|
171
|
+
escalation or compensating call in 0.1.
|
|
163
172
|
- **`severity`:** `info`, `warn`, `error` (default) or `critical`. It's
|
|
164
173
|
independent of the action: dashboards group by severity, and execution
|
|
165
174
|
follows the action.
|
|
@@ -229,8 +238,9 @@ no registered guardrail fails the turn before the model is called
|
|
|
229
238
|
2. **`set("config", …)` keyed by Java names.** It's keyed like the wire: the
|
|
230
239
|
record's Jackson names.
|
|
231
240
|
3. **No `onViolation` or `action`.** The builder refuses the check.
|
|
232
|
-
4. **Expecting
|
|
233
|
-
|
|
241
|
+
4. **Expecting `halt` to try again.** `halt` stops the turn; `retry` asks
|
|
242
|
+
the model for a new answer, and fails the turn once its `maxAttempts`
|
|
243
|
+
answers have failed.
|
|
234
244
|
5. **Calling a model from the check.** That isn't available: keep checks
|
|
235
245
|
pure.
|
|
236
246
|
6. **Throwing for a broken rule.** Return `CheckResult.fail(…)`. An
|