ghostrail 0.7.3 → 0.8.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/dist/agent/claude-code.d.ts.map +1 -1
- package/dist/agent/claude-code.js +18 -3
- package/dist/agent/claude-code.js.map +1 -1
- package/dist/agent/failure.d.ts +26 -0
- package/dist/agent/failure.d.ts.map +1 -1
- package/dist/agent/failure.js +26 -1
- package/dist/agent/failure.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/prompt.d.ts +10 -2
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +17 -3
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/result.d.ts +3 -2
- package/dist/agent/result.d.ts.map +1 -1
- package/dist/agent/result.js +19 -4
- package/dist/agent/result.js.map +1 -1
- package/dist/backend/container.d.ts.map +1 -1
- package/dist/backend/container.js +46 -1
- package/dist/backend/container.js.map +1 -1
- package/dist/backend/docker.d.ts +15 -0
- package/dist/backend/docker.d.ts.map +1 -1
- package/dist/backend/docker.js +15 -0
- package/dist/backend/docker.js.map +1 -1
- package/dist/claude-profile/classify.d.ts +6 -1
- package/dist/claude-profile/classify.d.ts.map +1 -1
- package/dist/claude-profile/classify.js +95 -22
- package/dist/claude-profile/classify.js.map +1 -1
- package/dist/cli/commands.d.ts +4 -2
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +128 -4
- package/dist/cli/commands.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +3 -1
- package/dist/commands/help.js.map +1 -1
- package/dist/init/drift.d.ts +68 -0
- package/dist/init/drift.d.ts.map +1 -0
- package/dist/init/drift.js +103 -0
- package/dist/init/drift.js.map +1 -0
- package/dist/loop/engine.d.ts +1 -1
- package/dist/loop/engine.d.ts.map +1 -1
- package/dist/loop/engine.js +40 -8
- package/dist/loop/engine.js.map +1 -1
- package/dist/loop/ports.d.ts +33 -1
- package/dist/loop/ports.d.ts.map +1 -1
- package/dist/publish/gh.d.ts +33 -0
- package/dist/publish/gh.d.ts.map +1 -1
- package/dist/publish/gh.js +61 -0
- package/dist/publish/gh.js.map +1 -1
- package/dist/publish/githost.d.ts +35 -7
- package/dist/publish/githost.d.ts.map +1 -1
- package/dist/publish/githost.js +51 -9
- package/dist/publish/githost.js.map +1 -1
- package/dist/publish/github-publisher.d.ts +25 -2
- package/dist/publish/github-publisher.d.ts.map +1 -1
- package/dist/publish/github-publisher.js +46 -6
- package/dist/publish/github-publisher.js.map +1 -1
- package/dist/respond/respond.d.ts.map +1 -1
- package/dist/respond/respond.js +17 -3
- package/dist/respond/respond.js.map +1 -1
- package/dist/source/linear.d.ts +6 -1
- package/dist/source/linear.d.ts.map +1 -1
- package/dist/source/linear.js +25 -6
- package/dist/source/linear.js.map +1 -1
- package/docker/factory.Dockerfile +8 -0
- package/package.json +1 -1
- package/skill/ghostrail/SKILL.md +62 -16
- package/templates/code-local/prompts/resolve-issue.md +20 -2
- package/templates/code-local/prompts/respond.md +1 -1
- package/templates/code-local/prompts/triage.md +4 -0
- package/templates/content-loop/prompts/draft.md +6 -2
- package/templates/content-loop/prompts/respond.md +1 -1
package/skill/ghostrail/SKILL.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ghostrail
|
|
3
|
-
description: Drive ghostrail (the software factory) from inside this repo. Use when the user types /ghostrail, or asks to set up, customize, check, or run a ghostrail factory — scaffolding ghostrail.toml and prompts, tailoring the scaffolded prompts and gate commands to this codebase, diagnosing a broken setup, or kicking off a run/respond/triage tick.
|
|
3
|
+
description: Drive ghostrail (the software factory) from inside this repo. Use when the user types /ghostrail, or asks to set up, customize, check, or run a ghostrail factory — scaffolding ghostrail.toml and prompts, tailoring the scaffolded prompts and gate commands to this codebase, carrying a later template improvement into prompts you have customized, diagnosing a broken setup, or kicking off a run/respond/triage tick.
|
|
4
4
|
user-invocable: true
|
|
5
|
-
argument-hint: "[customize | init | doctor | status | run | respond | triage]"
|
|
5
|
+
argument-hint: "[customize | init | update | doctor | status | run | respond | triage]"
|
|
6
6
|
license: Apache-2.0
|
|
7
7
|
metadata:
|
|
8
|
-
version: 0.
|
|
8
|
+
version: 0.3.0
|
|
9
9
|
allowed-tools:
|
|
10
10
|
- Read
|
|
11
11
|
- Write
|
|
@@ -87,25 +87,71 @@ Scaffold the factory into this repo, then hand off to **customize**.
|
|
|
87
87
|
|
|
88
88
|
### Already initialized? Check for template drift
|
|
89
89
|
|
|
90
|
-
If the repo already has `ghostrail.toml` and
|
|
91
|
-
`init` and report "0 files written" as if nothing were wrong.
|
|
90
|
+
If the repo already has `ghostrail.toml` and prompts, do not re-run a bare
|
|
91
|
+
`init` and report "0 files written" as if nothing were wrong. See **update**
|
|
92
|
+
below.
|
|
93
|
+
|
|
94
|
+
Never suggest `--force` as the way to take a template update: it overwrites
|
|
95
|
+
every file, destroying the gate commands, tracker filters, and prompt edits that
|
|
96
|
+
**customize** wrote.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## update
|
|
101
|
+
|
|
102
|
+
Carry a template improvement into a repo that has customized its prompts. Run:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
<GR> init <template> --update
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
It writes only files this repo never edited (proved by the baseline in
|
|
109
|
+
`ghostrail.template.json`), and it never touches a customized file. For those it
|
|
110
|
+
prints **signals**: what the template gained that the repo's copy lacks.
|
|
92
111
|
|
|
93
112
|
```
|
|
94
|
-
|
|
113
|
+
ghostrail/prompts/resolve-issue.md
|
|
114
|
+
customized, and the template gained:
|
|
115
|
+
placeholder {{description}}
|
|
116
|
+
result field "testPlan"
|
|
95
117
|
```
|
|
96
118
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
119
|
+
Placing those is your job, and it is not a text merge. A customized prompt can
|
|
120
|
+
be a near-total rewrite that still needs the same one-line addition, so port the
|
|
121
|
+
**intent**, not the template's wording:
|
|
122
|
+
|
|
123
|
+
1. Read the template's copy of the file to see how it uses the signal. The path
|
|
124
|
+
is printed by `<GR> init <template> --diff`.
|
|
125
|
+
2. Read the repo's copy and find where the same idea belongs *in its structure*.
|
|
126
|
+
3. Add it in the repo's own voice. A placeholder goes where that content is
|
|
127
|
+
wanted (`{{description}}` under the issue's ID/title/link block). A result
|
|
128
|
+
field goes on the matching line of the result-document list, with a
|
|
129
|
+
description written to match the surrounding entries.
|
|
130
|
+
4. Never reformat, reorder, or "tidy" the rest of the file. The customization is
|
|
131
|
+
deliberate. Your diff should be as small as the signal count implies.
|
|
132
|
+
5. Re-run `<GR> init <template> --update` and confirm it now reports
|
|
133
|
+
`customized, nothing to take`.
|
|
134
|
+
|
|
135
|
+
Verify a placeholder actually renders before anyone spends a run on it:
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
node -e 'import("URL_TO_PROMPT_JS").then(({renderPrompt})=>{
|
|
139
|
+
const t=require("fs").readFileSync("PATH/TO/PROMPT.md","utf8");
|
|
140
|
+
const o=renderPrompt(t,{id:"TJ-1",title:"t",url:"u",description:"BODY"});
|
|
141
|
+
console.log(o.match(/\{\{[a-z]+\}\}/g) ?? "no unrendered placeholders");
|
|
142
|
+
})'
|
|
143
|
+
```
|
|
101
144
|
|
|
102
|
-
|
|
103
|
-
file, destroying the gate commands, tracker filters, and prompt edits that
|
|
104
|
-
**customize** wrote. Merging by hand is the correct path.
|
|
145
|
+
Two things to tell the user plainly:
|
|
105
146
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
147
|
+
- **The installed template is the last published release.** A repo can be
|
|
148
|
+
current with it and still behind `main`. The `--update` header names the
|
|
149
|
+
version it compared against; repeat that in your summary.
|
|
150
|
+
- **A repo with no baseline gets signals but no writes.** Without a recorded
|
|
151
|
+
baseline nothing can be *shown* to be untouched, so `--update` will not
|
|
152
|
+
overwrite anything. Re-running a bare `<GR> init` once adopts a baseline for
|
|
153
|
+
every file that still matches the template exactly, which is safe and makes
|
|
154
|
+
later updates able to write.
|
|
109
155
|
|
|
110
156
|
---
|
|
111
157
|
|
|
@@ -13,6 +13,10 @@ Match the surrounding code: its style, patterns, and test conventions.
|
|
|
13
13
|
- Title: {{title}}
|
|
14
14
|
- Link: {{url}}
|
|
15
15
|
|
|
16
|
+
### Description
|
|
17
|
+
|
|
18
|
+
{{description}}
|
|
19
|
+
|
|
16
20
|
## What to do
|
|
17
21
|
1. Locate the relevant code and understand how it is structured.
|
|
18
22
|
2. Make the smallest correct change that resolves the issue.
|
|
@@ -22,10 +26,24 @@ Match the surrounding code: its style, patterns, and test conventions.
|
|
|
22
26
|
## Reporting your result (required, do this last)
|
|
23
27
|
Write a JSON file at `.ghostrail/result.json` with exactly one of:
|
|
24
28
|
|
|
25
|
-
- `{"status":"done","summary":"<what
|
|
29
|
+
- `{"status":"done","summary":"<what changed and why>","testPlan":"<how to check it by hand>","type":"<feat|fix|docs|refactor|chore|...>"}`
|
|
26
30
|
- `{"status":"blocked","questions":"<a real product/design decision you need>"}`
|
|
27
31
|
- `{"status":"failed","error":"<why>"}`
|
|
28
|
-
- `{"status":"noop"}`
|
|
32
|
+
- `{"status":"noop","reason":"<why nothing needed changing>"}`
|
|
29
33
|
|
|
30
34
|
`type` is the conventional-commit type for the change; it sets the commit and PR
|
|
31
35
|
title. If you omit it, the factory's configured default is used.
|
|
36
|
+
|
|
37
|
+
`summary` and `testPlan` are the pull request a human reads, so write them for
|
|
38
|
+
that reader rather than as a log of what you did:
|
|
39
|
+
|
|
40
|
+
- **`summary`**: one or two sentences on what changed and why, then markdown
|
|
41
|
+
bullets for the specifics. Do not write a single long paragraph, and do not
|
|
42
|
+
add headings; the factory supplies its own.
|
|
43
|
+
- **`testPlan`**: the steps someone runs to check this by hand. Concrete
|
|
44
|
+
commands, what to look at, and what they should see. The gate has already run
|
|
45
|
+
lint, typecheck, and the unit suite, so do not just repeat those: give the
|
|
46
|
+
commands that exercise what you actually changed. If the change is not
|
|
47
|
+
observable by hand (a refactor, a type fix), say what to run instead and what
|
|
48
|
+
a green result proves.
|
|
49
|
+
|
|
@@ -22,6 +22,6 @@ Write a JSON file at `.ghostrail/result.json` with exactly one of:
|
|
|
22
22
|
- `{"status":"done","summary":"<what you changed in response>"}`
|
|
23
23
|
- `{"status":"blocked","questions":"<what you need answered>"}`
|
|
24
24
|
- `{"status":"failed","error":"<why>"}`
|
|
25
|
-
- `{"status":"noop"}`
|
|
25
|
+
- `{"status":"noop","reason":"<why nothing needed changing>"}`
|
|
26
26
|
|
|
27
27
|
On `done` the factory commits and pushes to the PR branch and posts a summary.
|
|
@@ -10,6 +10,10 @@ git and do not change any source files except the two output files below.
|
|
|
10
10
|
- Title: {{title}}
|
|
11
11
|
- Link: {{url}}
|
|
12
12
|
|
|
13
|
+
### Description
|
|
14
|
+
|
|
15
|
+
{{description}}
|
|
16
|
+
|
|
13
17
|
## What to do
|
|
14
18
|
1. Read the issue and enough of the codebase to judge its scope.
|
|
15
19
|
2. Decide:
|
|
@@ -9,6 +9,10 @@ git: the factory owns commits, branches, and PRs.
|
|
|
9
9
|
- Title: {{title}}
|
|
10
10
|
- Link: {{url}}
|
|
11
11
|
|
|
12
|
+
### Description
|
|
13
|
+
|
|
14
|
+
{{description}}
|
|
15
|
+
|
|
12
16
|
## Shared references
|
|
13
17
|
Read any files under `.ghostrail/artifacts/` (voice and style, formats,
|
|
14
18
|
strategy). Follow them closely: they define how this work should read.
|
|
@@ -21,9 +25,9 @@ strategy). Follow them closely: they define how this work should read.
|
|
|
21
25
|
## Reporting your result (required, do this last)
|
|
22
26
|
Write `.ghostrail/result.json` with exactly one of:
|
|
23
27
|
|
|
24
|
-
- `{"status":"done","summary":"<
|
|
28
|
+
- `{"status":"done","summary":"<what you drafted and why>","testPlan":"<how to review it>"}`
|
|
25
29
|
- `{"status":"blocked","questions":"<what you need decided>"}`
|
|
26
30
|
- `{"status":"failed","error":"<why>"}`
|
|
27
|
-
- `{"status":"noop"}`
|
|
31
|
+
- `{"status":"noop","reason":"<why nothing needed changing>"}`
|
|
28
32
|
|
|
29
33
|
The factory opens a draft pull request for a human to review.
|
|
@@ -22,4 +22,4 @@ Write a JSON file at `.ghostrail/result.json` with exactly one of:
|
|
|
22
22
|
- `{"status":"done","summary":"<what you revised>"}`
|
|
23
23
|
- `{"status":"blocked","questions":"<what you need answered>"}`
|
|
24
24
|
- `{"status":"failed","error":"<why>"}`
|
|
25
|
-
- `{"status":"noop"}`
|
|
25
|
+
- `{"status":"noop","reason":"<why nothing needed changing>"}`
|