@drisp/cli 0.6.11 → 0.7.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/{WorkflowInstallWizard-NZFBSBLY.js → WorkflowInstallWizard-OJAB2Z2X.js} +2 -2
- package/dist/{chunk-D7QQIZDI.js → chunk-36375KNH.js} +7 -7
- package/dist/{chunk-PGMV5I7Y.js → chunk-DRPOYSOH.js} +2 -2
- package/dist/{chunk-YUVMVYUF.js → chunk-HVMTDYND.js} +3 -3
- package/dist/cli.js +21 -21
- package/dist/dashboard-daemon.js +3 -3
- package/dist/runner.js +3 -3
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
installWorkflowPlugins,
|
|
9
9
|
resolveWorkflow,
|
|
10
10
|
writeGlobalConfig
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HVMTDYND.js";
|
|
12
12
|
import "./chunk-G3PMV62Z.js";
|
|
13
13
|
|
|
14
14
|
// src/setup/steps/WorkflowInstallWizard.tsx
|
|
@@ -93,4 +93,4 @@ function WorkflowInstallWizard({ source, onDone }) {
|
|
|
93
93
|
export {
|
|
94
94
|
WorkflowInstallWizard as default
|
|
95
95
|
};
|
|
96
|
-
//# sourceMappingURL=WorkflowInstallWizard-
|
|
96
|
+
//# sourceMappingURL=WorkflowInstallWizard-OJAB2Z2X.js.map
|
|
@@ -55,7 +55,7 @@ import {
|
|
|
55
55
|
verifyRendered,
|
|
56
56
|
wakesFreshAfterHandover,
|
|
57
57
|
workflowRegistryDir
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-HVMTDYND.js";
|
|
59
59
|
import {
|
|
60
60
|
__commonJS,
|
|
61
61
|
__toESM
|
|
@@ -14868,7 +14868,7 @@ async function restoreCheckpoint(store, input) {
|
|
|
14868
14868
|
|
|
14869
14869
|
// ../../modules/runtime/src/software-version.ts
|
|
14870
14870
|
import "fs";
|
|
14871
|
-
var runnerSoftwareVersion = true ? "0.
|
|
14871
|
+
var runnerSoftwareVersion = true ? "0.7.0" : JSON.parse(readFileSync2(new URL("../../../apps/cli/package.json", import.meta.url), "utf8")).version;
|
|
14872
14872
|
|
|
14873
14873
|
// ../../modules/runtime/src/connection.ts
|
|
14874
14874
|
var RunnerDisconnectedError = class extends Error {
|
|
@@ -20236,9 +20236,9 @@ var issueEntrySchema = external_exports.strictObject({
|
|
|
20236
20236
|
workflowName: external_exports.string().max(128)
|
|
20237
20237
|
});
|
|
20238
20238
|
var buildPlanSchema = external_exports.strictObject({
|
|
20239
|
-
version: external_exports.literal(
|
|
20239
|
+
version: external_exports.literal(2),
|
|
20240
20240
|
orchestratorRunId: external_exports.string().min(1),
|
|
20241
|
-
|
|
20241
|
+
planKey: external_exports.string().regex(/^plan:.+$/),
|
|
20242
20242
|
projectId: external_exports.string().min(1),
|
|
20243
20243
|
folder: external_exports.string().min(1),
|
|
20244
20244
|
runnerId: external_exports.string().min(1),
|
|
@@ -20594,9 +20594,9 @@ function planBuild(context) {
|
|
|
20594
20594
|
status: "planned",
|
|
20595
20595
|
workflows,
|
|
20596
20596
|
plan: {
|
|
20597
|
-
version:
|
|
20597
|
+
version: 2,
|
|
20598
20598
|
orchestratorRunId: context.orchestratorRunId,
|
|
20599
|
-
|
|
20599
|
+
planKey: `plan:${input.project.id}`,
|
|
20600
20600
|
projectId: input.project.id,
|
|
20601
20601
|
folder: context.folder,
|
|
20602
20602
|
runnerId: context.runnerId,
|
|
@@ -21886,4 +21886,4 @@ export {
|
|
|
21886
21886
|
runMachineRunners,
|
|
21887
21887
|
writeIdentityOnce
|
|
21888
21888
|
};
|
|
21889
|
-
//# sourceMappingURL=chunk-
|
|
21889
|
+
//# sourceMappingURL=chunk-36375KNH.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runMachineRunners
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-36375KNH.js";
|
|
4
4
|
|
|
5
5
|
// src/app/entry/runnerDaemon.ts
|
|
6
6
|
if (process.argv.includes("--help")) {
|
|
@@ -13,4 +13,4 @@ if (process.argv.includes("--help")) {
|
|
|
13
13
|
process.exitCode = 1;
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
16
|
+
//# sourceMappingURL=chunk-DRPOYSOH.js.map
|
|
@@ -21281,7 +21281,7 @@ var GATES = [
|
|
|
21281
21281
|
];
|
|
21282
21282
|
|
|
21283
21283
|
// src/core/workflows/builtins/orchestrator/workflow.md
|
|
21284
|
-
var workflow_default = '# Orchestrator: plan and run a Build\n\nYou plan and run a Drisp Build of one
|
|
21284
|
+
var workflow_default = '# Orchestrator: plan and run a Build\n\nYou plan and run a Drisp Build of one Plan: the open issues of one Linear project. The Run\'s prompt names the\nLinear project, the Plan key and the project folder, which is your working directory. You never write code here:\neach issue is built by its own child Run, which `drisp build tick` starts.\n\nThe Runner sets these for you:\n\n- `DRISP_RUN_ARTIFACTS`: this Run\'s artifact directory. Files you write there are shown to the member.\n- `DRISP_RUN_ID`, `DRISP_RUNNER_ID`, `DRISP_RUN_TOKEN`, `DRISP_HUB_URL`: this Run, its Runner and its right to start\n child Runs; `drisp build` reads them itself.\n\n## 1. Read Linear (first Turn)\n\nWith the `linear` MCP server, read the project and every issue in it, then write\n`$DRISP_RUN_ARTIFACTS/input/plan-input.json` (create the `input` directory) in exactly this shape. Every issue carries\nevery field, empty when it has none. `readAt` is the output of\n`node -e "console.log(new Date().toISOString())"` run just before you read Linear; never write a time yourself:\n\n```json\n{\n "version": 1,\n "readAt": "<the command\'s output, e.g. 2026-10-11T09:30:00.000Z>",\n "project": {\n "id": "<the project\'s `uuid`, not its `id`>",\n "name": "<the project\'s `name`>",\n "slugId": "<the last `-`-separated part of the project\'s `url`>"\n },\n "issues": [\n {\n "id": "<the issue\'s `uuid`, not its `id`>",\n "identifier": "<the issue\'s `id`, e.g. DRI-12>",\n "title": "<the issue\'s `title`>",\n "url": "<the issue\'s `url`>",\n "branchName": "<the issue\'s `gitBranchName`, or null>",\n "state": {\n "type": "<the issue\'s `statusType`: backlog|unstarted|started|completed|canceled|triage>",\n "name": "<the issue\'s `status`>"\n },\n "labels": ["<each of the issue\'s `labels`>"],\n "parentId": "<the parent issue\'s `uuid`, or null>",\n "blockedBy": ["<the `uuid` of each issue in `relations.blockedBy`>"],\n "prioritySortOrder": 0\n }\n ]\n}\n```\n\nLinear\'s MCP names fields differently from this file, and the difference matters: the app finds each issue\'s row by\nits UUID, so a plan that carries identifiers shows no Build state on any row.\n\n- The MCP\'s `id` is the readable identifier (`DRI-12`, or `P-DRI-7` for a project); the UUID is in `uuid`. Every\n `id`, `parentId` and `blockedBy` value in `plan-input.json` is a UUID (`7f7b03f7-accf-46b2-98fb-abadfed76594`).\n- An issue\'s `parentId` and `relations.blockedBy` from the MCP name issues by identifier. Look each one up: use the\n `uuid` of the project\'s issue with that identifier, or `get_issue` it when it is outside the project.\n- Read relations with `get_issue` and `includeRelations: true`; read the project\'s issues with `list_issues` and\n `fields` including `uuid`.\n- The project\'s `url` ends in its `slugId` (`\u2026/project/build-sandbox-b7640301cd64` \u2192 `b7640301cd64`).\n\n`drisp build plan` rejects a plan with an identifier where a UUID belongs and names the field to fix.\n\nInclude every issue of the project, done and canceled ones too: the plan decides what to skip. Then run:\n\n```sh\ndrisp build plan --input "$DRISP_RUN_ARTIFACTS/input/plan-input.json"\n```\n\nIt prints one JSON object. Act on its `status`.\n\n## 2. `needs_fills`\n\n`fills` lists issues that need a `fill.json` (`identifier`, `title`, `url`, `path`) and `templateVersion` is the value\neach fill must carry. For each listed issue: read it through `linear` (description, acceptance criteria, comments) and\nthe repo\'s ADRs and CONTEXT files it touches, then write its `fill.json` at `path`:\n\n```json\n{\n "version": 1,\n "templateVersion": "<templateVersion, copied exactly>",\n "areas": ["macos|web|cli|hub|protocol|docs", "\u2026"],\n "qa": "none|web|macos",\n "sizeClass": "S|M|L",\n "instructions": "<what the child needs beyond the issue>",\n "ownWork": true\n}\n```\n\n- `areas`: the parts of the repo the change touches, each once.\n- `qa`: `web` when the change shows in a web page, `macos` when it shows in the macOS app, else `none`.\n- `sizeClass`: `S` for a change of a file or two, `M` for a feature across a few modules, `L` for a large or risky\n change.\n- `instructions` (at most 6000 characters): start with one short paragraph saying what to build, then restate the\n acceptance criteria, name the ADRs it touches and the parts of the codebase involved. Plain prose and `-` lists\n only: no headings, code fences or HTML comments (`drisp build plan` rejects them).\n- `ownWork`: `false` only for an issue with sub-issues whose own description asks for nothing beyond them, such as\n a PRD above its slices; the plan then skips it and waits for its sub-issues instead. Otherwise `true`.\n\nThen run `drisp build plan` again with the same `--input` path.\n\n## 3. `planned` or `failed`\n\nOn `planned` the Build plan is written and shown to the member, who decides whether to start it: end the Turn with\n`<!-- AWAITING_APPROVAL -->` as the Journal\'s last line. On `failed` the reason is shown instead: end with\n`<!-- WORKFLOW_COMPLETE -->`.\n\n## 4. Every later wake: tick\n\nYou are woken when the member answers the approval question and whenever one of your child Runs closes or parks.\nEach time: read Linear again into `$DRISP_RUN_ARTIFACTS/input/plan-input.json` as in step 1 (with a new `readAt`),\nthen run:\n\n```sh\ndrisp build tick --input "$DRISP_RUN_ARTIFACTS/input/plan-input.json"\n```\n\nIt prints one JSON object. Act on its `action`, and repeat until an action ends the Turn:\n\n- `refresh_input`: read Linear into the input again (a newer `readAt`) and tick again.\n- `repair`: for each of `issues`, read it in Linear first and skip an issue Linear now shows Done or Canceled (its\n child got there first); otherwise move it to Done and post its `comment` verbatim through `linear`. Then read\n Linear into the input again and tick again.\n- `rebase`: for each of `items`, in its `worktree`: `git rebase origin/main`, resolve the conflicts, then\n `git push --force-with-lease origin <branch>` (the item\'s `branch`) if the branch is on the remote. Never push any\n other branch. If a rebase cannot be resolved, `git rebase --abort`.\n Then read Linear into the input again and tick again, adding `--rebase-failed <identifier>` for each that failed.\n- `wait`: end the Turn with `<!-- WAITING_ON_CHILDREN -->` as the Journal\'s last line.\n- `park`: end the Turn with `<!-- NEEDS_HUMAN: <message> -->` as the Journal\'s last line, copying `message`\n verbatim.\n- `complete`: end the Turn with `<!-- WORKFLOW_COMPLETE -->` as the Journal\'s last line.\n\n## Rules\n\n- Never start, cancel or edit Runs, Workflows, worktrees or branches except as an action says; `drisp build` does\n what is needed.\n- Never write to Linear except a `repair`; never open a pull request.\n- Write only `plan-input.json` and the `fill.json` files `drisp build plan` asks for. Never write `answer.json`.\n';
|
|
21285
21285
|
|
|
21286
21286
|
// src/core/workflows/builtins/orchestrator/index.ts
|
|
21287
21287
|
var ORCHESTRATOR_WORKFLOW_NAME = "orchestrator";
|
|
@@ -21300,7 +21300,7 @@ var ORCHESTRATOR_INSTRUCTIONS = workflow_default;
|
|
|
21300
21300
|
function orchestratorWorkflow(workflowFile) {
|
|
21301
21301
|
return {
|
|
21302
21302
|
name: ORCHESTRATOR_WORKFLOW_NAME,
|
|
21303
|
-
description: "Plans a
|
|
21303
|
+
description: "Plans a Plan's open Linear issues into a Build plan, one Generated Workflow per issue, then builds them as child Runs in dependency order once the member starts it",
|
|
21304
21304
|
promptTemplate: "{input}",
|
|
21305
21305
|
plugins: [],
|
|
21306
21306
|
model: "sonnet",
|
|
@@ -24242,4 +24242,4 @@ export {
|
|
|
24242
24242
|
compileWorkflowPlan,
|
|
24243
24243
|
collectMcpServersWithOptions
|
|
24244
24244
|
};
|
|
24245
|
-
//# sourceMappingURL=chunk-
|
|
24245
|
+
//# sourceMappingURL=chunk-HVMTDYND.js.map
|
package/dist/cli.js
CHANGED
|
@@ -137,7 +137,7 @@ import {
|
|
|
137
137
|
visualPositionToOffset,
|
|
138
138
|
wrapText,
|
|
139
139
|
writeIdentityOnce
|
|
140
|
-
} from "./chunk-
|
|
140
|
+
} from "./chunk-36375KNH.js";
|
|
141
141
|
import {
|
|
142
142
|
generateId as generateId2
|
|
143
143
|
} from "./chunk-PQIB66SG.js";
|
|
@@ -194,7 +194,7 @@ import {
|
|
|
194
194
|
workflowRegistryDir,
|
|
195
195
|
writeGlobalConfig,
|
|
196
196
|
writeProjectConfig
|
|
197
|
-
} from "./chunk-
|
|
197
|
+
} from "./chunk-HVMTDYND.js";
|
|
198
198
|
import {
|
|
199
199
|
__toESM
|
|
200
200
|
} from "./chunk-G3PMV62Z.js";
|
|
@@ -13732,15 +13732,15 @@ function runBuildPlan(deps) {
|
|
|
13732
13732
|
slugId: input.project.slugId,
|
|
13733
13733
|
worktreesRoot: deps.worktreesRoot
|
|
13734
13734
|
});
|
|
13735
|
-
const
|
|
13735
|
+
const planDir = path6.join(
|
|
13736
13736
|
worktree.path,
|
|
13737
13737
|
".athena",
|
|
13738
13738
|
"workflows",
|
|
13739
13739
|
input.project.slugId
|
|
13740
13740
|
);
|
|
13741
|
-
writeFile(path6.join(
|
|
13741
|
+
writeFile(path6.join(planDir, "plan-input.json"), json(input));
|
|
13742
13742
|
const fixtureDir = fixtureInput ? path6.dirname(path6.resolve(fixtureInput)) : void 0;
|
|
13743
|
-
const fillPath = (identifier) => path6.join(
|
|
13743
|
+
const fillPath = (identifier) => path6.join(planDir, identifier, "fill.json");
|
|
13744
13744
|
const fills = Object.fromEntries(
|
|
13745
13745
|
input.issues.map((issue) => {
|
|
13746
13746
|
const fixture = fixtureDir ? path6.join(fixtureDir, "fills", `${issue.identifier}.json`) : void 0;
|
|
@@ -13780,27 +13780,27 @@ function runBuildPlan(deps) {
|
|
|
13780
13780
|
};
|
|
13781
13781
|
const host = deps.hostCapabilities();
|
|
13782
13782
|
for (const workflow of result.workflows) {
|
|
13783
|
-
const directory = path6.join(
|
|
13783
|
+
const directory = path6.join(planDir, workflow.identifier);
|
|
13784
13784
|
writeFile(path6.join(directory, "fill.json"), json(workflow.fill));
|
|
13785
13785
|
writeFile(path6.join(directory, "workflow.json"), workflow.workflowJson);
|
|
13786
13786
|
writeFile(path6.join(directory, "workflow.md"), workflow.workflowMd);
|
|
13787
13787
|
checkGenerated(directory, workflow, host, layout);
|
|
13788
13788
|
}
|
|
13789
|
-
const
|
|
13789
|
+
const relativePlanDir = path6.relative(worktree.path, planDir);
|
|
13790
13790
|
commitBuildFiles(
|
|
13791
13791
|
worktree.path,
|
|
13792
|
-
[
|
|
13792
|
+
[relativePlanDir],
|
|
13793
13793
|
`drisp build: Generated Workflows for ${input.project.slugId}`
|
|
13794
13794
|
);
|
|
13795
|
-
const commit = lastCommitTouching(worktree.path,
|
|
13796
|
-
path6.join(
|
|
13795
|
+
const commit = lastCommitTouching(worktree.path, relativePlanDir, [
|
|
13796
|
+
path6.join(relativePlanDir, "plan.json")
|
|
13797
13797
|
]);
|
|
13798
13798
|
const plan = finalizePlan(result.plan, commit);
|
|
13799
|
-
writeFile(path6.join(
|
|
13799
|
+
writeFile(path6.join(planDir, "plan.json"), json(plan));
|
|
13800
13800
|
commitBuildFiles(
|
|
13801
13801
|
worktree.path,
|
|
13802
|
-
[path6.join(
|
|
13803
|
-
`drisp build:
|
|
13802
|
+
[path6.join(relativePlanDir, "plan.json")],
|
|
13803
|
+
`drisp build: Build plan for ${input.project.slugId}`
|
|
13804
13804
|
);
|
|
13805
13805
|
writeFile(path6.join(artifacts, "build_plan.json"), json(plan));
|
|
13806
13806
|
return {
|
|
@@ -14458,15 +14458,15 @@ async function runBuildTick(deps) {
|
|
|
14458
14458
|
slugId: input.project.slugId,
|
|
14459
14459
|
worktreesRoot: deps.worktreesRoot
|
|
14460
14460
|
});
|
|
14461
|
-
const
|
|
14461
|
+
const planDir = path7.join(
|
|
14462
14462
|
worktree.path,
|
|
14463
14463
|
".athena",
|
|
14464
14464
|
"workflows",
|
|
14465
14465
|
input.project.slugId
|
|
14466
14466
|
);
|
|
14467
|
-
const
|
|
14468
|
-
const statePath = path7.join(
|
|
14469
|
-
const planPath = path7.join(
|
|
14467
|
+
const relativePlanDir = path7.relative(worktree.path, planDir);
|
|
14468
|
+
const statePath = path7.join(planDir, "build-state.json");
|
|
14469
|
+
const planPath = path7.join(planDir, "plan.json");
|
|
14470
14470
|
const parsedPlan = buildPlanSchema.safeParse(readJson(planPath));
|
|
14471
14471
|
if (!parsedPlan.success || parsedPlan.data.orchestratorRunId !== orchestratorRunId)
|
|
14472
14472
|
return notStarted();
|
|
@@ -14522,12 +14522,12 @@ async function runBuildTick(deps) {
|
|
|
14522
14522
|
let parkReason = assessment.parkReason;
|
|
14523
14523
|
const record = () => {
|
|
14524
14524
|
writeFile(statePath, json(state));
|
|
14525
|
-
const files = [path7.join(
|
|
14525
|
+
const files = [path7.join(relativePlanDir, "build-state.json")];
|
|
14526
14526
|
const emitted = json(currentPlan(plan, state));
|
|
14527
14527
|
if (emitted !== fs7.readFileSync(planPath, "utf-8")) {
|
|
14528
14528
|
writeFile(planPath, emitted);
|
|
14529
14529
|
writeFile(path7.join(artifacts, "build_plan.json"), emitted);
|
|
14530
|
-
files.push(path7.join(
|
|
14530
|
+
files.push(path7.join(relativePlanDir, "plan.json"));
|
|
14531
14531
|
}
|
|
14532
14532
|
if (commitBuildFiles(
|
|
14533
14533
|
worktree.path,
|
|
@@ -14566,7 +14566,7 @@ async function runBuildTick(deps) {
|
|
|
14566
14566
|
});
|
|
14567
14567
|
continue;
|
|
14568
14568
|
}
|
|
14569
|
-
const entryDir = path7.join(
|
|
14569
|
+
const entryDir = path7.join(relativePlanDir, entry.identifier);
|
|
14570
14570
|
git(worktree.path, ["checkout", plan.commit, "--", entryDir]);
|
|
14571
14571
|
installWorkflowFromSource(
|
|
14572
14572
|
{
|
|
@@ -15889,7 +15889,7 @@ Available commands: ${[...KNOWN_COMMANDS].join(", ")}`
|
|
|
15889
15889
|
await exitWith(1);
|
|
15890
15890
|
return;
|
|
15891
15891
|
}
|
|
15892
|
-
const { default: WorkflowInstallWizard } = await import("./WorkflowInstallWizard-
|
|
15892
|
+
const { default: WorkflowInstallWizard } = await import("./WorkflowInstallWizard-OJAB2Z2X.js");
|
|
15893
15893
|
const { waitUntilExit } = render(
|
|
15894
15894
|
/* @__PURE__ */ jsx24(
|
|
15895
15895
|
WorkflowInstallWizard,
|
package/dist/dashboard-daemon.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "./chunk-
|
|
2
|
-
import "./chunk-
|
|
1
|
+
import "./chunk-DRPOYSOH.js";
|
|
2
|
+
import "./chunk-36375KNH.js";
|
|
3
3
|
import "./chunk-PQIB66SG.js";
|
|
4
|
-
import "./chunk-
|
|
4
|
+
import "./chunk-HVMTDYND.js";
|
|
5
5
|
import "./chunk-G3PMV62Z.js";
|
|
6
6
|
//# sourceMappingURL=dashboard-daemon.js.map
|
package/dist/runner.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "./chunk-
|
|
2
|
-
import "./chunk-
|
|
1
|
+
import "./chunk-DRPOYSOH.js";
|
|
2
|
+
import "./chunk-36375KNH.js";
|
|
3
3
|
import "./chunk-PQIB66SG.js";
|
|
4
|
-
import "./chunk-
|
|
4
|
+
import "./chunk-HVMTDYND.js";
|
|
5
5
|
import "./chunk-G3PMV62Z.js";
|
|
6
6
|
//# sourceMappingURL=runner.js.map
|