@pmelab/gtd 23.2.0 → 24.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 +44 -11
- package/claude/hooks/access.ts +1 -1
- package/dist/chunks/Schema-Dh-mkwkq.mjs +25353 -0
- package/dist/chunks/reserved-ejn-LVYO.mjs +1388 -0
- package/dist/chunks/rolldown-runtime-8H4AJuhK.mjs +14 -0
- package/dist/chunks/steering-D-PvRC5W.mjs +16296 -0
- package/dist/chunks/wire-DA7q2ikx.mjs +473 -0
- package/dist/flows.mjs +525 -0
- package/dist/gtd.bundle.mjs +43830 -56044
- package/dist/steering.mjs +2 -0
- package/dist/testkit.mjs +13006 -0
- package/dist/wire.mjs +2 -0
- package/dist/workflow-kit.mjs +352 -0
- package/dist/workflows/feature.mjs +315 -0
- package/dist/workflows/fix.mjs +40 -0
- package/dist/workflows/review.mjs +25 -0
- package/dist/workflows.mjs +1953 -1724
- package/package.json +70 -8
- package/skills/authoring/SKILL.md +5 -4
- package/src/cli/Cli.test.ts +1329 -0
- package/src/cli/Cli.ts +1348 -0
- package/src/cli/Program.test.ts +2262 -0
- package/src/cli/Program.ts +1331 -0
- package/src/cli/ToolCommands.ts +43 -0
- package/src/cli/index.ts +14 -0
- package/src/edge/Edge.test.ts +1016 -0
- package/src/edge/Edge.ts +1225 -0
- package/src/edge/index.ts +16 -0
- package/src/emit/Emit.test.ts +425 -0
- package/src/emit/Emit.ts +139 -0
- package/src/emit/GitScript.test.ts +260 -0
- package/src/emit/GitScript.ts +131 -0
- package/src/emit/ModeContradiction.test.ts +120 -0
- package/src/emit/ModeContradiction.ts +66 -0
- package/src/emit/OutcomeScript.test.ts +238 -0
- package/src/emit/OutcomeScript.ts +73 -0
- package/src/emit/SteeringMode.test.ts +274 -0
- package/src/emit/SteeringMode.ts +256 -0
- package/src/emit/index.ts +40 -0
- package/src/flows/factory.ts +5 -1
- package/src/flows/runtime.ts +3 -0
- package/src/install/ConfigScaffold.ts +19 -0
- package/src/install/Install.test.ts +426 -0
- package/src/install/Install.ts +634 -0
- package/src/install/Version.ts +27 -0
- package/src/install/index.ts +3 -0
- package/src/platform/CommandRunner.ts +74 -0
- package/src/platform/Commentary.test.ts +126 -0
- package/src/platform/Commentary.ts +92 -0
- package/src/platform/Git.test.ts +50 -0
- package/src/platform/Git.ts +552 -0
- package/src/platform/Host.ts +42 -0
- package/src/platform/RetainedHistory.test.ts +65 -0
- package/src/platform/RetainedHistory.ts +34 -0
- package/src/platform/Workspace.test.ts +669 -0
- package/src/platform/Workspace.ts +631 -0
- package/src/platform/WorktreeState.test.ts +162 -0
- package/src/platform/WorktreeState.ts +50 -0
- package/src/platform/index.ts +22 -0
- package/src/replay/Access.test.ts +53 -0
- package/src/replay/Access.ts +46 -0
- package/src/replay/Format.test.ts +20 -0
- package/src/replay/Format.ts +14 -0
- package/src/replay/Replay.test.ts +887 -0
- package/src/replay/Replay.ts +669 -0
- package/src/replay/Trailers.test.ts +117 -0
- package/src/replay/Trailers.ts +213 -0
- package/src/replay/Tree.test.ts +25 -0
- package/src/replay/Tree.ts +45 -0
- package/src/replay/index.ts +11 -0
- package/src/steering/Blocks.fixture.ts +6 -0
- package/src/steering/Blocks.test.ts +167 -0
- package/src/steering/Blocks.ts +321 -0
- package/src/steering/CodeThreads.test.ts +127 -0
- package/src/steering/CodeThreads.ts +197 -0
- package/src/steering/Edits.test.ts +19 -0
- package/src/steering/Edits.ts +20 -0
- package/src/steering/Eol.test.ts +16 -0
- package/src/steering/Eol.ts +2 -0
- package/src/steering/FORMATS.md +58 -0
- package/src/steering/Footnotes.test.ts +977 -0
- package/src/steering/Footnotes.ts +661 -0
- package/src/steering/Inline.fixture.ts +7 -0
- package/src/steering/Inline.test.ts +227 -0
- package/src/steering/Inline.ts +195 -0
- package/src/steering/MarkdownTree.test.ts +247 -0
- package/src/steering/MarkdownTree.ts +260 -0
- package/src/steering/Outline.ts +19 -0
- package/src/steering/SteeringFormat.test.ts +91 -0
- package/src/steering/SteeringFormat.ts +267 -0
- package/src/steering/SteeringFormats.test.ts +163 -0
- package/src/steering/Threads.ts +163 -0
- package/src/steering/contract.test.ts +264 -0
- package/src/steering/fixtures/code-threads/cache.stripped.ts.txt +6 -0
- package/src/steering/fixtures/code-threads/cache.ts.md +15 -0
- package/src/steering/fixtures/free-form/notes.md +12 -0
- package/src/steering/fixtures/free-form/notes.read.json +42 -0
- package/src/steering/fixtures/qa/answered.md +23 -0
- package/src/steering/fixtures/qa/answered.read.json +119 -0
- package/src/steering/fixtures/qa/requirements.md +160 -0
- package/src/steering/fixtures/qa/requirements.read.json +475 -0
- package/src/steering/fixtures/review/review.md +76 -0
- package/src/steering/fixtures/review/review.read.json +237 -0
- package/src/steering/fixtures/review/ticked.md +23 -0
- package/src/steering/fixtures/review/ticked.read.json +99 -0
- package/src/steering/fixtures/review-notes/baseline.md +14 -0
- package/src/steering/fixtures/review-notes/noted.md +19 -0
- package/src/steering/freeform.test.ts +311 -0
- package/src/steering/freeform.ts +148 -0
- package/src/steering/index.test.ts +62 -0
- package/src/steering/index.ts +140 -0
- package/src/steering/qa.test.ts +2160 -0
- package/src/steering/qa.ts +1104 -0
- package/src/steering/review.test.ts +1829 -0
- package/src/steering/review.ts +1180 -0
- package/src/step/LandStep.ts +31 -0
- package/src/step/RepoSnapshot.ts +29 -0
- package/src/step/accessRefusal.test.ts +58 -0
- package/src/step/accessRefusal.ts +26 -0
- package/src/step/index.ts +5 -0
- package/src/step/planStart.test.ts +202 -0
- package/src/step/planStart.ts +167 -0
- package/src/step/planStep.test.ts +104 -0
- package/src/step/planStep.ts +89 -0
- package/src/step/snapshot.fixture.ts +28 -0
- package/src/testkit/EmittedScriptRecognizer.test.ts +639 -0
- package/src/testkit/EmittedScriptRecognizer.ts +642 -0
- package/src/testkit/FakeGitOperations.ts +95 -0
- package/src/testkit/GitTiers.test.ts +11 -0
- package/src/testkit/GitTiers.ts +1052 -0
- package/src/testkit/InMemRepo.ts +467 -0
- package/src/testkit/Layers.test.ts +58 -0
- package/src/testkit/Layers.ts +241 -0
- package/src/testkit/StrictGitOperations.ts +31 -0
- package/src/testkit/TestRepo.test.ts +119 -0
- package/src/testkit/TestRepo.ts +274 -0
- package/src/testkit/cliIo.ts +36 -0
- package/src/testkit/index.ts +9 -0
- package/src/testkit/steps.ts +177 -0
- package/src/testkit/testkit.feature +65 -0
- package/src/wire/BeatDocument.test.ts +419 -0
- package/src/wire/BeatDocument.ts +114 -0
- package/src/wire/BeatPlain.test.ts +113 -0
- package/src/wire/BeatPlain.ts +127 -0
- package/src/wire/BeatStatus.test.ts +59 -0
- package/src/wire/BeatStatus.ts +81 -0
- package/src/wire/Demand.test.ts +142 -0
- package/src/wire/Demand.ts +108 -0
- package/src/wire/ExitCodes.test.ts +21 -0
- package/src/wire/ExitCodes.ts +16 -0
- package/src/wire/Glob.ts +29 -0
- package/src/wire/Judge.ts +22 -0
- package/src/wire/Land.test.ts +120 -0
- package/src/wire/Land.ts +75 -0
- package/src/wire/Select.test.ts +148 -0
- package/src/wire/Select.ts +78 -0
- package/src/wire/Sessions.test.ts +59 -0
- package/src/wire/Sessions.ts +39 -0
- package/src/wire/WireSchema.test.ts +162 -0
- package/src/wire/constants.ts +22 -0
- package/src/wire/golden/1/beat-capture.json +34 -0
- package/src/wire/golden/1/beat-message.json +34 -0
- package/src/wire/golden/1/beat-prompt.json +44 -0
- package/src/wire/golden/1/beat-script.json +34 -0
- package/src/wire/golden/1/beat-stalled.json +34 -0
- package/src/wire/golden/1/judge.json +14 -0
- package/src/wire/golden/1/land-noop.json +10 -0
- package/src/wire/golden/1/land.json +10 -0
- package/src/wire/index.ts +12 -0
- package/src/wire/types.ts +46 -0
- package/src/workflow/Diagnostic.test.ts +93 -0
- package/src/workflow/Diagnostic.ts +54 -0
- package/src/workflow/SteeringFormats.test.ts +27 -0
- package/src/workflow/SteeringFormats.ts +6 -0
- package/src/workflow/Workflow.ts +77 -0
- package/src/workflow/compile.test.ts +53 -0
- package/src/workflow/compile.ts +56 -0
- package/src/workflow/discovery.ts +122 -0
- package/src/workflow/fingerprint.test.ts +52 -0
- package/src/workflow/fingerprint.ts +53 -0
- package/src/workflow/index.ts +33 -0
- package/src/workflow/load.test.ts +1017 -0
- package/src/workflow/load.ts +836 -0
- package/src/workflow/skills.test.ts +109 -0
- package/src/workflow/skills.ts +90 -0
- package/src/workflow/vars.ts +33 -0
- package/src/workflow-kit/health.test.ts +30 -0
- package/src/workflow-kit/health.ts +86 -0
- package/src/workflow-kit/index.ts +7 -0
- package/src/workflow-kit/quality.test.ts +17 -0
- package/src/workflow-kit/quality.ts +45 -0
- package/src/workflow-kit/review.ts +324 -0
- package/src/{workflows → workflow-kit}/scenarios.ts +21 -28
- package/src/workflows/feature/feature.test.ts +32 -0
- package/src/workflows/{bundled.ts → feature/feature.ts} +11 -63
- package/src/workflows/feature/index.ts +10 -0
- package/src/workflows/{packages.test.ts → feature/packages.test.ts} +2 -2
- package/src/workflows/{packages.ts → feature/packages.ts} +3 -3
- package/src/workflows/{planning.ts → feature/planning.ts} +2 -3
- package/src/workflows/{review.test.ts → feature/review.test.ts} +9 -44
- package/src/workflows/feature/review.ts +106 -0
- package/src/workflows/feature/steps.test.ts +82 -0
- package/src/workflows/feature/steps.ts +92 -0
- package/src/workflows/fix/fix.feature +80 -0
- package/src/workflows/fix/fix.test.ts +74 -0
- package/src/workflows/fix/fix.ts +52 -0
- package/src/workflows/fix/index.ts +6 -0
- package/src/workflows/index.ts +36 -2
- package/src/workflows/review/index.ts +6 -0
- package/src/workflows/review/review.test.ts +99 -0
- package/src/workflows/review/review.ts +33 -0
- package/src/workflows/{access.test.ts → shared/access.test.ts} +1 -1
- package/src/workflows/{access.ts → shared/access.ts} +3 -5
- package/src/workflows/shared/config.fixture.ts +12 -0
- package/src/workflows/{health.test.ts → shared/health.test.ts} +1 -1
- package/src/workflows/{health.ts → shared/health.ts} +38 -55
- package/src/workflows/{options.test.ts → shared/options.test.ts} +2 -2
- package/src/workflows/{options.ts → shared/options.ts} +14 -2
- package/src/workflows/shared/reserved.ts +11 -0
- package/src/workflows/{scenarios.test.ts → shared/scenarios.test.ts} +1 -1
- package/src/workflows/shared/scenarios.ts +35 -0
- package/src/workflows/{skills.test.ts → shared/skills.test.ts} +3 -1
- package/src/workflows/{skills.ts → shared/skills.ts} +7 -6
- package/src/workflows/{steps.test.ts → shared/steps.test.ts} +1 -66
- package/src/workflows/{steps.ts → shared/steps.ts} +8 -98
- package/src/workflows/shared/tail.test.ts +205 -0
- package/src/workflows/shared/tail.ts +135 -0
- package/src/workflows/{text.fixture.ts → shared/text.fixture.ts} +2 -2
- package/src/workflows/{text.ts → shared/text.ts} +48 -7
- package/src/workflows/{threads.test.ts → shared/threads.test.ts} +1 -1
- package/src/workflows/shared/workflows.steps.ts +7 -0
- package/src/workflows/review.ts +0 -362
- /package/src/workflows/{prose.ts → shared/prose.ts} +0 -0
- /package/src/workflows/{text.test.ts → shared/text.test.ts} +0 -0
- /package/src/workflows/{vars.ts → shared/vars.ts} +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { formatCommitMessage, type JudgeVerdict } from "../replay/index.js"
|
|
2
|
+
import type { StateName } from "../workflow/index.js"
|
|
3
|
+
import type { LandStep } from "./LandStep.js"
|
|
4
|
+
import type { RepoSnapshot } from "./RepoSnapshot.js"
|
|
5
|
+
|
|
6
|
+
export type { JudgeVerdict }
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Decide a step — WITHOUT performing it, and WITHOUT touching git: every
|
|
10
|
+
* fact this needs already sits on the frozen `snapshot`. gtd never writes
|
|
11
|
+
* git; the decision becomes `steps` (data), and only `ScriptSurface.render`
|
|
12
|
+
* turns them into a runnable script.
|
|
13
|
+
*/
|
|
14
|
+
export type StepOutcome =
|
|
15
|
+
| { readonly kind: "refusal"; readonly message: string }
|
|
16
|
+
| { readonly kind: "noop"; readonly state: StateName; readonly settled: boolean }
|
|
17
|
+
| {
|
|
18
|
+
readonly kind: "commit"
|
|
19
|
+
readonly state: StateName
|
|
20
|
+
/** The step the landing leaves the process resting at. */
|
|
21
|
+
readonly to: StateName
|
|
22
|
+
readonly subject: string
|
|
23
|
+
readonly steps: readonly LandStep[]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* At the human review gate an unconditional `gtd uncheck '<file>'` runs
|
|
28
|
+
* ahead of the commit, resetting every checkbox before `git add -A` picks it
|
|
29
|
+
* up — a tick is read-progress, never sign-off.
|
|
30
|
+
*/
|
|
31
|
+
const uncheckStep = (snapshot: RepoSnapshot): readonly LandStep[] =>
|
|
32
|
+
snapshot.stepDef.actor === "human" &&
|
|
33
|
+
snapshot.stepDef.mode === "review" &&
|
|
34
|
+
snapshot.file !== undefined
|
|
35
|
+
? [{ kind: "uncheck", file: snapshot.file }]
|
|
36
|
+
: []
|
|
37
|
+
|
|
38
|
+
export const planStep = (
|
|
39
|
+
snapshot: RepoSnapshot,
|
|
40
|
+
opts: {
|
|
41
|
+
readonly cost?: number
|
|
42
|
+
readonly model?: string
|
|
43
|
+
readonly judge?: readonly JudgeVerdict[]
|
|
44
|
+
} = {},
|
|
45
|
+
): StepOutcome => {
|
|
46
|
+
const landing = snapshot.landing
|
|
47
|
+
if (landing.kind === "refusal") return { kind: "refusal", message: landing.message }
|
|
48
|
+
if (landing.kind === "noop") {
|
|
49
|
+
return { kind: "noop", state: snapshot.state, settled: landing.settled }
|
|
50
|
+
}
|
|
51
|
+
const cost =
|
|
52
|
+
opts.cost === undefined
|
|
53
|
+
? {}
|
|
54
|
+
: { cost: { cost: opts.cost, ...(opts.model !== undefined ? { model: opts.model } : {}) } }
|
|
55
|
+
if (landing.kind === "attempt") {
|
|
56
|
+
const message = formatCommitMessage({ actor: snapshot.actor, to: snapshot.state, ...cost })
|
|
57
|
+
return {
|
|
58
|
+
kind: "commit",
|
|
59
|
+
state: snapshot.state,
|
|
60
|
+
to: snapshot.state,
|
|
61
|
+
subject: landing.subject,
|
|
62
|
+
steps: [
|
|
63
|
+
{ kind: "gitWrite", write: { kind: "commitAll", message } },
|
|
64
|
+
{ kind: "outcome", outcome: { kind: "commit", subject: landing.subject } },
|
|
65
|
+
],
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const message = formatCommitMessage({
|
|
69
|
+
...landing.spec,
|
|
70
|
+
...cost,
|
|
71
|
+
...(opts.judge !== undefined && opts.judge.length > 0 ? { judge: opts.judge } : {}),
|
|
72
|
+
})
|
|
73
|
+
const subject = message.split("\n")[0]!
|
|
74
|
+
const outcome: LandStep =
|
|
75
|
+
landing.to === snapshot.state
|
|
76
|
+
? { kind: "outcome", outcome: { kind: "commit", subject } }
|
|
77
|
+
: { kind: "outcome", outcome: { kind: "transition", from: snapshot.state, to: landing.to } }
|
|
78
|
+
return {
|
|
79
|
+
kind: "commit",
|
|
80
|
+
state: snapshot.state,
|
|
81
|
+
to: landing.to,
|
|
82
|
+
subject,
|
|
83
|
+
steps: [
|
|
84
|
+
...uncheckStep(snapshot),
|
|
85
|
+
{ kind: "gitWrite", write: { kind: "commitAll", message } },
|
|
86
|
+
outcome,
|
|
87
|
+
],
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { StepDef } from "../workflow/index.js"
|
|
2
|
+
import type { RepoSnapshot } from "./RepoSnapshot.js"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* One `RepoSnapshot` literal for a table test: every field is already-resolved
|
|
6
|
+
* data, exactly what `planStep` receives. The landing defaults to a
|
|
7
|
+
* commit that stays at `state`.
|
|
8
|
+
*/
|
|
9
|
+
export const snapshot = (
|
|
10
|
+
overrides: Partial<Omit<RepoSnapshot, "stepDef">> & {
|
|
11
|
+
readonly state: string
|
|
12
|
+
readonly stepDef: Partial<StepDef>
|
|
13
|
+
},
|
|
14
|
+
): RepoSnapshot => {
|
|
15
|
+
const stepDef: StepDef = { actor: "human", kind: "message", content: "", ...overrides.stepDef }
|
|
16
|
+
return {
|
|
17
|
+
actor: stepDef.actor,
|
|
18
|
+
changes: [],
|
|
19
|
+
file: stepDef.file,
|
|
20
|
+
landing: {
|
|
21
|
+
kind: "commit",
|
|
22
|
+
to: overrides.state,
|
|
23
|
+
spec: { actor: stepDef.actor, from: overrides.state, to: overrides.state },
|
|
24
|
+
},
|
|
25
|
+
...overrides,
|
|
26
|
+
stepDef,
|
|
27
|
+
}
|
|
28
|
+
}
|