@pmelab/gtd 22.0.0 → 23.1.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 +25 -13
- package/claude/hooks/persona.ts +1 -1
- package/dist/gtd.bundle.mjs +669 -7862
- package/dist/workflows.mjs +2 -2
- package/package.json +4 -5
- package/skills/authoring/SKILL.md +9 -5
- 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 —
|
|
@@ -58,9 +60,11 @@ enforces it at the OS level. See
|
|
|
58
60
|
|
|
59
61
|
Run `gtd install` at your repository's root. It writes a `gtd.config.ts` that
|
|
60
62
|
runs gtd's shipped workflows — commit it; gtd refuses to run without one — and
|
|
61
|
-
prints a briefing.
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
prints a briefing. The repository need not be a JavaScript project: gtd resolves
|
|
64
|
+
the config's `@pmelab/gtd/*` imports itself, so a Python, Rust or notes
|
|
65
|
+
repository needs no `package.json` and no install. Pipe that briefing into your
|
|
66
|
+
coding agent and answer its questions. It should build you a script that will
|
|
67
|
+
autonomously run the process for you. Ask your agent if you have any questions.
|
|
64
68
|
|
|
65
69
|
## Why
|
|
66
70
|
|
|
@@ -96,7 +100,8 @@ that.
|
|
|
96
100
|
The fastest way to understand it is to drive a few beats by hand. Any git
|
|
97
101
|
repository with at least one commit will do once `gtd install` has written its
|
|
98
102
|
`gtd.config.ts` and you have committed it — the first two beats need nothing
|
|
99
|
-
else. Later beats run your test command, set
|
|
103
|
+
else. Later beats run your test command, set as the `testCommand` workflow
|
|
104
|
+
option in `gtd.config.ts`.
|
|
100
105
|
|
|
101
106
|
### Beat 1 — `gtd next` says whose turn it is
|
|
102
107
|
|
|
@@ -415,11 +420,10 @@ noted in steps 3 and 4 below.
|
|
|
415
420
|
With no `--provider`, `gtd judge run` picks jev when `TYPESAFE_API_KEY` is
|
|
416
421
|
set and non-empty and no `--model` is given, else llm — never falling back
|
|
417
422
|
across them; the `GTD_JUDGE_PROVIDER` / `GTD_JUDGE_MODEL` environment
|
|
418
|
-
variables
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
every question):
|
|
423
|
+
variables and a user-level `~/.config/gtd/judge.json` `{ provider, model }`
|
|
424
|
+
choose the judge without editing the driver (flags win over both, in that
|
|
425
|
+
order); `--model` with `--provider fixed`/`jev` is refused. jev and llm exit
|
|
426
|
+
1 with nothing on stdout when they cannot answer every question):
|
|
423
427
|
- Every red round after the first: was the failure identical, new, or
|
|
424
428
|
progress?
|
|
425
429
|
- After you review: is each of your notes an edit, a question, a nit or
|
|
@@ -521,6 +525,14 @@ and remember gtd evaluates that file on every command. A shared workflow package
|
|
|
521
525
|
bundling its own `@pmelab/gtd` is checked against the running gtd and refused,
|
|
522
526
|
naming which side to upgrade, on a flows protocol mismatch.
|
|
523
527
|
|
|
528
|
+
Everything else a repository configures — steering-file modes, `gtd ui`
|
|
529
|
+
settings, per-scope skills and file access — goes in the same file's `config`
|
|
530
|
+
export, built with `defineConfig` from `@pmelab/gtd/flows`, which rejects an
|
|
531
|
+
unknown key. `gtd.config.ts` is the only repository config: gtd 23 removed the
|
|
532
|
+
`.gtdrc` files, and a leftover one — in the repository, above it, or in your
|
|
533
|
+
home directory — fails every command until you delete it. See
|
|
534
|
+
[Migrating from `.gtdrc`](https://github.com/pmelab/gtd/blob/main/docs/configuration.md#migrating-from-gtdrc).
|
|
535
|
+
|
|
524
536
|
## License
|
|
525
537
|
|
|
526
538
|
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(
|