@pmelab/gtd 21.1.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 +24 -11
- package/claude/hooks/persona.ts +1 -1
- package/dist/gtd.bundle.mjs +709 -7775
- package/dist/workflows.mjs +19417 -49
- package/package.json +5 -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/factory.test.ts +94 -0
- package/src/flows/factory.ts +116 -0
- package/src/flows/index.ts +2 -0
- package/src/workflows/access.ts +1 -1
- package/src/workflows/bundled.ts +9 -4
- package/src/workflows/health.ts +1 -1
- package/src/workflows/options.test.ts +52 -0
- package/src/workflows/options.ts +38 -0
- 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
|
|
@@ -512,12 +514,23 @@ can add its own. `gtd --workflow <name>` starts any workflow by name.
|
|
|
512
514
|
The workflow itself is a plain async TypeScript function, and the
|
|
513
515
|
`gtd.config.ts` at the repository root names it: the one `gtd install` writes
|
|
514
516
|
re-exports the shipped workflows from `@pmelab/gtd/workflows`, and the pieces
|
|
515
|
-
they are built from are exported for yours to reuse.
|
|
517
|
+
they are built from are exported for yours to reuse. Each shipped workflow is a
|
|
518
|
+
factory — `feature({ testCommand: "npm run ci" })` — whose options gtd validates
|
|
519
|
+
when it loads the config: a misspelled or mistyped one fails every command,
|
|
520
|
+
naming the workflow, the key and what was expected. See
|
|
516
521
|
[Configuration](https://github.com/pmelab/gtd/blob/main/docs/configuration.md) —
|
|
517
522
|
and remember gtd evaluates that file on every command. A shared workflow package
|
|
518
523
|
bundling its own `@pmelab/gtd` is checked against the running gtd and refused,
|
|
519
524
|
naming which side to upgrade, on a flows protocol mismatch.
|
|
520
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
|
+
|
|
521
534
|
## License
|
|
522
535
|
|
|
523
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(
|