@pmelab/gtd 22.0.0 → 23.0.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/.claude-plugin/plugin.json +1 -1
- package/README.md +20 -10
- package/claude/hooks/persona.ts +1 -1
- package/dist/gtd.bundle.mjs +586 -7854
- package/dist/workflows.mjs +2 -2
- package/package.json +4 -5
- package/skills/authoring/SKILL.md +2 -2
- package/src/flows/config.test.ts +66 -0
- package/src/flows/config.ts +141 -0
- package/src/flows/index.ts +1 -0
- package/src/workflows/access.ts +1 -1
- package/src/workflows/health.ts +1 -1
- package/src/workflows/skills.ts +1 -1
- package/src/workflows/text.fixture.ts +3 -3
- package/src/workflows/text.ts +1 -1
- package/src/workflows/vars.ts +1 -1
- package/schema.json +0 -136
package/README.md
CHANGED
|
@@ -34,8 +34,8 @@ none is optional. See
|
|
|
34
34
|
[Setup](https://github.com/pmelab/gtd/blob/main/docs/setup.md) for the list, the
|
|
35
35
|
install flags, and the never-install-the-plugin caveat. Skills are declared per
|
|
36
36
|
scope, and restricted per turn where the driver can; each bundled scope has its
|
|
37
|
-
own addressable
|
|
38
|
-
[Configuration](https://github.com/pmelab/gtd/blob/main/docs/configuration.md#
|
|
37
|
+
own addressable `config.skills` entry in `gtd.config.ts` — see
|
|
38
|
+
[Configuration](https://github.com/pmelab/gtd/blob/main/docs/configuration.md#skills)
|
|
39
39
|
to repoint one to a set your own harness has instead.
|
|
40
40
|
|
|
41
41
|
Each scope also declares which files its agent turns may read and write;
|
|
@@ -45,8 +45,10 @@ enforces it at the OS level. See
|
|
|
45
45
|
[Configuration](https://github.com/pmelab/gtd/blob/main/docs/configuration.md#file-access).
|
|
46
46
|
|
|
47
47
|
> **`fastTestCommand` is required, with no fallback to `testCommand`.** Set it
|
|
48
|
-
> (everything but e2e)
|
|
49
|
-
>
|
|
48
|
+
> (everything but e2e) as a workflow option in `gtd.config.ts`
|
|
49
|
+
> (`feature({ fastTestCommand: "npm run test:fast" })`) or as
|
|
50
|
+
> `GTD_FASTTESTCOMMAND`; gtd stops at the start gate, writing `.gtd/SETUP.md`,
|
|
51
|
+
> until it is.
|
|
50
52
|
|
|
51
53
|
> **A repository's `gtd.config.ts` is code, and gtd runs it.** A custom workflow
|
|
52
54
|
> is a TypeScript module, and every gtd command that looks at workflow state —
|
|
@@ -96,7 +98,8 @@ that.
|
|
|
96
98
|
The fastest way to understand it is to drive a few beats by hand. Any git
|
|
97
99
|
repository with at least one commit will do once `gtd install` has written its
|
|
98
100
|
`gtd.config.ts` and you have committed it — the first two beats need nothing
|
|
99
|
-
else. Later beats run your test command, set
|
|
101
|
+
else. Later beats run your test command, set as the `testCommand` workflow
|
|
102
|
+
option in `gtd.config.ts`.
|
|
100
103
|
|
|
101
104
|
### Beat 1 — `gtd next` says whose turn it is
|
|
102
105
|
|
|
@@ -415,11 +418,10 @@ noted in steps 3 and 4 below.
|
|
|
415
418
|
With no `--provider`, `gtd judge run` picks jev when `TYPESAFE_API_KEY` is
|
|
416
419
|
set and non-empty and no `--model` is given, else llm — never falling back
|
|
417
420
|
across them; the `GTD_JUDGE_PROVIDER` / `GTD_JUDGE_MODEL` environment
|
|
418
|
-
variables
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
every question):
|
|
421
|
+
variables and a user-level `~/.config/gtd/judge.json` `{ provider, model }`
|
|
422
|
+
choose the judge without editing the driver (flags win over both, in that
|
|
423
|
+
order); `--model` with `--provider fixed`/`jev` is refused. jev and llm exit
|
|
424
|
+
1 with nothing on stdout when they cannot answer every question):
|
|
423
425
|
- Every red round after the first: was the failure identical, new, or
|
|
424
426
|
progress?
|
|
425
427
|
- After you review: is each of your notes an edit, a question, a nit or
|
|
@@ -521,6 +523,14 @@ and remember gtd evaluates that file on every command. A shared workflow package
|
|
|
521
523
|
bundling its own `@pmelab/gtd` is checked against the running gtd and refused,
|
|
522
524
|
naming which side to upgrade, on a flows protocol mismatch.
|
|
523
525
|
|
|
526
|
+
Everything else a repository configures — steering-file modes, `gtd ui`
|
|
527
|
+
settings, per-scope skills and file access — goes in the same file's `config`
|
|
528
|
+
export, built with `defineConfig` from `@pmelab/gtd/flows`, which rejects an
|
|
529
|
+
unknown key. `gtd.config.ts` is the only repository config: gtd 23 removed the
|
|
530
|
+
`.gtdrc` files, and a leftover one — in the repository, above it, or in your
|
|
531
|
+
home directory — fails every command until you delete it. See
|
|
532
|
+
[Migrating from `.gtdrc`](https://github.com/pmelab/gtd/blob/main/docs/configuration.md#migrating-from-gtdrc).
|
|
533
|
+
|
|
524
534
|
## License
|
|
525
535
|
|
|
526
536
|
MIT
|
package/claude/hooks/persona.ts
CHANGED
|
@@ -4,7 +4,7 @@ const NEUTRAL = "You are a coding agent working on the task you are given."
|
|
|
4
4
|
|
|
5
5
|
// `general-purpose` cannot carry a restriction, so every prompt turn gets a
|
|
6
6
|
// registered persona. The name hashes everything the spec depends on: a
|
|
7
|
-
//
|
|
7
|
+
// `gtd.config.ts` change or gtd upgrade mid-session must register a fresh one.
|
|
8
8
|
export async function personaSpec(t: Pick<Turn, "scope" | "system" | "skills">) {
|
|
9
9
|
const key = JSON.stringify([t.scope, t.system ?? "", t.skills])
|
|
10
10
|
const digest = new Uint8Array(
|