@snappedly-tools/shipyard 0.5.0 → 0.6.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/README.md +56 -8
- package/dist/index.js +27 -9
- package/dist/index.js.map +1 -1
- package/dist/main.js +51 -15
- package/dist/main.js.map +1 -1
- package/dist/templates/parallel-planner/block-scope.sh +160 -0
- package/dist/templates/parallel-planner/conflict-prompt.md +22 -0
- package/dist/templates/parallel-planner/handoff.sh +175 -0
- package/dist/templates/parallel-planner/implement-prompt.md +10 -56
- package/dist/templates/parallel-planner/main.mts +434 -188
- package/dist/templates/parallel-planner/merge-prompt.md +9 -21
- package/dist/templates/parallel-planner/plan-prompt.md +5 -31
- package/dist/templates/parallel-planner/select-issues.mjs +788 -0
- package/dist/templates/parallel-planner/setup.sh +51 -0
- package/dist/templates/parallel-planner/spec-wave-prompt.md +16 -0
- package/dist/templates/parallel-planner/template.json +1 -1
- package/dist/templates/parallel-planner/triage-prompt.md +5 -0
- package/dist/templates/parallel-planner/verify-triage.sh +19 -0
- package/dist/templates/parallel-planner-with-review/block-scope.sh +160 -0
- package/dist/templates/parallel-planner-with-review/conflict-prompt.md +22 -0
- package/dist/templates/parallel-planner-with-review/handoff.sh +175 -0
- package/dist/templates/parallel-planner-with-review/implement-prompt.md +10 -56
- package/dist/templates/parallel-planner-with-review/main.mts +473 -205
- package/dist/templates/parallel-planner-with-review/merge-prompt.md +9 -21
- package/dist/templates/parallel-planner-with-review/plan-prompt.md +5 -31
- package/dist/templates/parallel-planner-with-review/review-prompt.md +11 -49
- package/dist/templates/parallel-planner-with-review/select-issues.mjs +788 -0
- package/dist/templates/parallel-planner-with-review/setup.sh +51 -0
- package/dist/templates/parallel-planner-with-review/spec-wave-prompt.md +16 -0
- package/dist/templates/parallel-planner-with-review/template.json +1 -1
- package/dist/templates/parallel-planner-with-review/triage-prompt.md +5 -0
- package/dist/templates/parallel-planner-with-review/verify-triage.sh +19 -0
- package/dist/templates/sequential-reviewer/block-scope.sh +160 -0
- package/dist/templates/sequential-reviewer/handoff.sh +175 -0
- package/dist/templates/sequential-reviewer/implement-prompt.md +12 -46
- package/dist/templates/sequential-reviewer/main.mts +199 -103
- package/dist/templates/sequential-reviewer/review-prompt.md +11 -49
- package/dist/templates/sequential-reviewer/select-issues.mjs +788 -0
- package/dist/templates/sequential-reviewer/setup.sh +51 -0
- package/dist/templates/sequential-reviewer/template.json +1 -1
- package/dist/templates/sequential-reviewer/triage-prompt.md +5 -0
- package/dist/templates/sequential-reviewer/verify-triage.sh +19 -0
- package/dist/templates/shared/block-scope.sh +160 -0
- package/dist/templates/shared/handoff.sh +175 -0
- package/dist/templates/shared/select-issues.mjs +788 -0
- package/dist/templates/shared/setup.sh +51 -0
- package/dist/templates/shared/triage-prompt.md +5 -0
- package/dist/templates/shared/verify-triage.sh +19 -0
- package/dist/templates/simple-loop/block-scope.sh +160 -0
- package/dist/templates/simple-loop/handoff.sh +175 -0
- package/dist/templates/simple-loop/main.mts +190 -45
- package/dist/templates/simple-loop/prompt.md +12 -46
- package/dist/templates/simple-loop/select-issues.mjs +788 -0
- package/dist/templates/simple-loop/setup.sh +51 -0
- package/dist/templates/simple-loop/template.json +1 -1
- package/dist/templates/simple-loop/triage-prompt.md +5 -0
- package/dist/templates/simple-loop/verify-triage.sh +19 -0
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -78,7 +78,7 @@ var TEMPLATES = [
|
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
80
|
name: "simple-loop",
|
|
81
|
-
description: "
|
|
81
|
+
description: "Implements standalone issues one by one and opens review PRs"
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
name: "sequential-reviewer",
|
|
@@ -86,12 +86,12 @@ var TEMPLATES = [
|
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
88
|
name: "parallel-planner",
|
|
89
|
-
description: "Plans parallelizable issues,
|
|
89
|
+
description: "Plans parallelizable issues, implements them, and opens review PRs",
|
|
90
90
|
dependencies: ["zod"]
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
name: "parallel-planner-with-review",
|
|
94
|
-
description: "Plans
|
|
94
|
+
description: "Plans and implements parallel issues with per-branch review and PRs",
|
|
95
95
|
dependencies: ["zod"]
|
|
96
96
|
}
|
|
97
97
|
];
|
|
@@ -272,7 +272,7 @@ var ISSUE_TRACKER_REGISTRY = [
|
|
|
272
272
|
envExample: `# GitHub personal access token \u2014 the agent uses it to read and manage GitHub Issues
|
|
273
273
|
# Runner installation/start uses the host \`gh\` login for repository administration.
|
|
274
274
|
# Create a fine-grained token: https://github.com/settings/personal-access-tokens/new
|
|
275
|
-
# Required repository permissions: Issues (Read and write)
|
|
275
|
+
# Required repository permissions: Contents, Issues, and Pull requests (Read and write); Metadata (Read)
|
|
276
276
|
# Or leave blank and run: GH_TOKEN="$(gh auth token)" npx shipyard run
|
|
277
277
|
GH_TOKEN=
|
|
278
278
|
# GitHub repository (owner/repository)
|
|
@@ -331,7 +331,7 @@ var copyTemplateFiles = (templateDir, destDir, mainFilename) => Effect.gen(funct
|
|
|
331
331
|
const files = yield* fs.readDirectory(templateDir).pipe(Effect.mapError((e) => new Error(e.message)));
|
|
332
332
|
yield* Effect.all(
|
|
333
333
|
files.filter(
|
|
334
|
-
(f) => f !== "template.json" && f !== ".env.example" && !COMPILED_FILE_EXTENSIONS.some((ext) => f.endsWith(ext))
|
|
334
|
+
(f) => f !== "template.json" && f !== ".env.example" && (f === "select-issues.mjs" || !COMPILED_FILE_EXTENSIONS.some((ext) => f.endsWith(ext)))
|
|
335
335
|
).map((f) => {
|
|
336
336
|
const destName = f === "main.mts" ? mainFilename : f;
|
|
337
337
|
return fs.copyFile(join(templateDir, f), join(destDir, destName)).pipe(Effect.mapError((e) => new Error(e.message)));
|
|
@@ -1527,8 +1527,8 @@ var requireRunnerContext = async (repoDir, adapters) => {
|
|
|
1527
1527
|
repoDir,
|
|
1528
1528
|
repository,
|
|
1529
1529
|
// The published workflow is an administrative runner preflight. Keep
|
|
1530
|
-
// it on the host's gh login instead of the
|
|
1531
|
-
// .shipyard/.env, which
|
|
1530
|
+
// it on the host's gh login instead of the runtime token from
|
|
1531
|
+
// .shipyard/.env, which has no runner administration permission.
|
|
1532
1532
|
environment: hostEnvironment
|
|
1533
1533
|
},
|
|
1534
1534
|
adapters
|
|
@@ -2259,7 +2259,7 @@ var runnerCommand = Command.make(
|
|
|
2259
2259
|
purgeRunnerCommand
|
|
2260
2260
|
])
|
|
2261
2261
|
);
|
|
2262
|
-
var VERSION = "0.
|
|
2262
|
+
var VERSION = "0.6.0" ;
|
|
2263
2263
|
|
|
2264
2264
|
// src/cli.ts
|
|
2265
2265
|
var imageNameOption = Options.text("image-name").pipe(
|
|
@@ -2728,13 +2728,49 @@ var initCommand = Command.make(
|
|
|
2728
2728
|
selectedTemplate = selected;
|
|
2729
2729
|
}
|
|
2730
2730
|
if (selectedIssueTracker.name === "github-issues") {
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2731
|
+
const failedLabels = [];
|
|
2732
|
+
for (const [name, description, color] of [
|
|
2733
|
+
[ACTIVATION_LABEL, `Issues for ${PRODUCT_NAME} to work on`, "F9A825"],
|
|
2734
|
+
["bug", "Something is broken", "D73A4A"],
|
|
2735
|
+
["enhancement", "New feature or improvement", "A2EEEF"],
|
|
2736
|
+
["needs-triage", "Maintainer evaluation needed", "FBCA04"],
|
|
2737
|
+
["needs-info", "Waiting for reporter information", "D4C5F9"],
|
|
2738
|
+
["ready-for-agent", "Ready for agent implementation", "0E8A16"],
|
|
2739
|
+
["ready-for-human", "Requires human implementation", "1D76DB"],
|
|
2740
|
+
["wontfix", "Will not be actioned", "FFFFFF"],
|
|
2741
|
+
["shipyard:blocked", "Shipyard work needs intervention", "B60205"],
|
|
2742
|
+
["shipyard:pending", "Shipyard is working on this ticket", "1D76DB"],
|
|
2743
|
+
[
|
|
2744
|
+
"shipyard:complete",
|
|
2745
|
+
"Shipyard work ready for human review",
|
|
2746
|
+
"0E8A16"
|
|
2747
|
+
],
|
|
2748
|
+
[
|
|
2749
|
+
"shipyard:outstanding-tasks",
|
|
2750
|
+
"Spec has uncompleted tickets",
|
|
2751
|
+
"FBCA04"
|
|
2752
|
+
]
|
|
2753
|
+
]) {
|
|
2754
|
+
try {
|
|
2755
|
+
execSync(
|
|
2756
|
+
`gh label create "${name}" --description "${description}" --color "${color}" --force`,
|
|
2757
|
+
{ cwd, stdio: "ignore" }
|
|
2758
|
+
);
|
|
2759
|
+
} catch {
|
|
2760
|
+
failedLabels.push(name);
|
|
2761
|
+
}
|
|
2762
|
+
}
|
|
2763
|
+
if (failedLabels.length) {
|
|
2764
|
+
let connected = Boolean(process.env.GH_REPO);
|
|
2765
|
+
try {
|
|
2766
|
+
execSync("git remote get-url origin", { cwd, stdio: "ignore" });
|
|
2767
|
+
connected = true;
|
|
2768
|
+
} catch {
|
|
2769
|
+
}
|
|
2770
|
+
const message = `Could not create GitHub labels: ${failedLabels.join(", ")}. Check GitHub access and rerun init.`;
|
|
2771
|
+
if (connected) yield* Effect.fail(new InitError({ message }));
|
|
2772
|
+
console.warn(message);
|
|
2773
|
+
}
|
|
2738
2774
|
}
|
|
2739
2775
|
yield* d.spinner(
|
|
2740
2776
|
`Scaffolding ${CONFIG_DIR}/ config directory...`,
|