@pmelab/gtd 10.9.0 → 10.11.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 +66 -10
- package/dist/gtd.bundle.mjs +1964 -882
- package/package.json +3 -2
- package/schema.json +45 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pmelab/gtd",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.11.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Git-aware CLI that emits the next prompt for an autonomous coding agent based on the current repository state",
|
|
6
6
|
"bin": {
|
|
@@ -51,7 +51,8 @@
|
|
|
51
51
|
"storybook": "storybook dev --host 0.0.0.0",
|
|
52
52
|
"coverage": "vitest run --project unit --coverage",
|
|
53
53
|
"eval": ": \"${GTD_EVALS_URL:?GTD_EVALS_URL is required — the OpenAI-compatible gateway every graded turn and the judge run through}\" && : \"${GTD_EVALS_KEY:?GTD_EVALS_KEY is required — the gateway bearer key}\" && npx turbo run build && node evals/eval.mjs",
|
|
54
|
-
"eval:baseline": "node evals/compare-baseline.mjs --record"
|
|
54
|
+
"eval:baseline": "node evals/compare-baseline.mjs --record",
|
|
55
|
+
"eval:judgments": ": \"${GTD_EVALS_URL:?GTD_EVALS_URL is required — the judge model gateway}\" && : \"${GTD_EVALS_KEY:?GTD_EVALS_KEY is required — the gateway bearer key}\" && node evals/judgments/eval.mjs"
|
|
55
56
|
},
|
|
56
57
|
"lint-staged": {
|
|
57
58
|
"*": "oxfmt --no-error-on-unmatched-pattern --write"
|
package/schema.json
CHANGED
|
@@ -173,6 +173,47 @@
|
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
},
|
|
176
|
+
"judge": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"description": "Eta template rendered ALONGSIDE this state's message: (content kind stays message — no sixth content kind). Must render to the JSON document { state, questions: [{ id, primitive, instructions, criteria }] }: `state` is evidence the template gathers only through it.read(...)/git helpers a prompt template already uses — never an uncommitted, freshly-gathered artifact. `questions` is part of the RENDERED document, not a separate structured YAML field — write it as ordinary JSON text inside this same template (a literal array, or computed however you like); gtd never parses it as YAML. `primitive` is one of noul (yes/no), choice, score. An unaware driver ignores this field and shows message: to a human; an aware driver pipes it to a judge model and answers with `gtd judge answer`. Requires a sibling `message:`."
|
|
179
|
+
},
|
|
180
|
+
"routes": {
|
|
181
|
+
"type": "array",
|
|
182
|
+
"description": "Ordered list of judgment routing rows — a probability is not an \"on\" change pattern, so this is its own engine routing language. Each row is { question, is, minP, maxP, to }: question names one of this state's own judge: question ids, is the expected answer, minP the probability floor (>=) and maxP the probability ceiling (<) that answer's own p must clear (both Eta templates, typically a workflow var:; either alone is legal). First declared match wins, exactly like \"on\". The list MUST end with a catch-all row carrying only \"to\" — a list without one is a load error. A conjunction (\"all of N questions answered yes at p >= threshold\") is expressed by inversion: per question, one escape row for the wrong answer plus one for the right answer under maxP=threshold, routing to the conservative target, followed by the catch-all routing to the optimistic one. Requires a sibling `judge:`.",
|
|
183
|
+
"items": {
|
|
184
|
+
"type": "object",
|
|
185
|
+
"additionalProperties": false,
|
|
186
|
+
"required": [
|
|
187
|
+
"to"
|
|
188
|
+
],
|
|
189
|
+
"properties": {
|
|
190
|
+
"question": {
|
|
191
|
+
"type": "string",
|
|
192
|
+
"description": "One of this state's own judge: question ids."
|
|
193
|
+
},
|
|
194
|
+
"is": {
|
|
195
|
+
"type": "string",
|
|
196
|
+
"description": "The expected answer for this row to match."
|
|
197
|
+
},
|
|
198
|
+
"minP": {
|
|
199
|
+
"type": "string",
|
|
200
|
+
"description": "Probability floor (>=) the answer's own p must clear (an Eta template, typically a workflow var: reference)."
|
|
201
|
+
},
|
|
202
|
+
"maxP": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"description": "Probability ceiling (<) the answer's own p must stay under (an Eta template, typically a workflow var: reference)."
|
|
205
|
+
},
|
|
206
|
+
"to": {
|
|
207
|
+
"type": "string",
|
|
208
|
+
"description": "The target state name."
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"shadow": {
|
|
214
|
+
"type": "boolean",
|
|
215
|
+
"description": "When true, this state's judge: verdict is recorded (Gtd-Judge: trailer) but never consulted for routing — the state routes exactly as if judge: were absent. A debugging switch a repo turns on to diagnose a live threshold, not a release stage every gate passes through. Requires a sibling `judge:`."
|
|
216
|
+
},
|
|
176
217
|
"label": {
|
|
177
218
|
"type": "string",
|
|
178
219
|
"description": "Opaque display name passed through `gtd next --json`/`gtd status --json` so a driver/viewer can show something nicer than the raw state name (e.g. \"Running checks\"). Never interpreted by gtd."
|
|
@@ -291,6 +332,10 @@
|
|
|
291
332
|
"key": {
|
|
292
333
|
"type": "string",
|
|
293
334
|
"description": "Path to a TLS private key file, enabling HTTPS. Requires `cert` too."
|
|
335
|
+
},
|
|
336
|
+
"format": {
|
|
337
|
+
"type": "string",
|
|
338
|
+
"description": "Shell command run after every UI write, before it resolves (Eta template; it.file is the written file's absolute path). A non-zero exit or missing binary never reverts the write or refuses it — it's reported to the client as a notice naming the command and its exit code. Absent means no command runs at all."
|
|
294
339
|
}
|
|
295
340
|
}
|
|
296
341
|
},
|