@deksden-com/dd-flow-cli 0.9.0-beta.112 → 0.9.0-beta.114
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/CHANGELOG.md +12 -0
- package/dist/build-info.json +3 -3
- package/dist/services/hooks.js +7 -1
- package/dist/services/work-registry.js +0 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @deksden-com/dd-flow-cli
|
|
2
2
|
|
|
3
|
+
## 0.9.0-beta.114
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Route controlled `merge apply` and `merge repair` hooks to the MERGE request's integration workspace, preserving native cwd validation across AGY, OpenCode, and Droid.
|
|
8
|
+
|
|
9
|
+
## 0.9.0-beta.113
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Allow sibling read-only reviewers to start concurrently when one updates the shared RUN projection; retain Work, generation, dependency, and immutable review-input checks.
|
|
14
|
+
|
|
3
15
|
## 0.9.0-beta.112
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/build-info.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"cli_package": "@deksden-com/dd-flow-cli",
|
|
3
|
-
"cli_version": "0.9.0-beta.
|
|
4
|
-
"cli_commit": "
|
|
5
|
-
"built_at": "2026-09-
|
|
3
|
+
"cli_version": "0.9.0-beta.114",
|
|
4
|
+
"cli_commit": "b2fd68b574186d2202266ad9856455cc59ce7ed9",
|
|
5
|
+
"built_at": "2026-09-27T17:40:23.830Z",
|
|
6
6
|
"built_with_canon": {
|
|
7
7
|
"version": "4.1.1",
|
|
8
8
|
"commit": "678daa038287c948ada5b2d785a6dcc925c7b891",
|
package/dist/services/hooks.js
CHANGED
|
@@ -676,6 +676,12 @@ function controlledLifecycleCwd(context, projectRoot, facts, providerSessionId,
|
|
|
676
676
|
const project = context.db.get("SELECT id FROM projects WHERE root = ?", [projectRoot]);
|
|
677
677
|
if (!project)
|
|
678
678
|
return projectRoot;
|
|
679
|
+
if (facts?.invocation.operation === "merge_apply" || facts?.invocation.operation === "merge_repair") {
|
|
680
|
+
const requestId = commandPosition(facts.invocation, 0);
|
|
681
|
+
const request = requestId && context.db.get("SELECT target_workspace FROM merge_requests WHERE project_id = ? AND merge_request_id = ?", [project.id, requestId]);
|
|
682
|
+
if (request)
|
|
683
|
+
return resolveProjectRoot(request.target_workspace);
|
|
684
|
+
}
|
|
679
685
|
let work;
|
|
680
686
|
if (facts?.workId) {
|
|
681
687
|
try {
|
|
@@ -718,7 +724,7 @@ function controlledLifecycleCwd(context, projectRoot, facts, providerSessionId,
|
|
|
718
724
|
}
|
|
719
725
|
if (facts?.stageName === "specify" || facts?.stageName === "protocolize")
|
|
720
726
|
return projectRoot;
|
|
721
|
-
if (facts?.stageName === "merge") {
|
|
727
|
+
if (facts?.stageName === "merge" || facts?.invocation.operation === "merge_apply" || facts?.invocation.operation === "merge_repair") {
|
|
722
728
|
const pending = context.db.all("SELECT target_workspace FROM merge_requests WHERE project_id = ? AND run_id = ? AND status IN ('dispatching','active','action_required') ORDER BY updated_at DESC", [project.id, run.id]);
|
|
723
729
|
const targets = [...new Set(pending.map(item => resolveProjectRoot(item.target_workspace)))];
|
|
724
730
|
if (targets.length > 1)
|
|
@@ -579,7 +579,6 @@ export function startBoundWork(context, work, run, claimIdentity, hookEventId, s
|
|
|
579
579
|
const workerRun = readOnly && context.env.DD_FLOW_READ_ONLY_WORKSPACE
|
|
580
580
|
? { ...run, workspace_root: path.resolve(context.env.DD_FLOW_READ_ONLY_WORKSPACE) }
|
|
581
581
|
: run;
|
|
582
|
-
const indexBeforePrepare = context.db.get("SELECT index_json FROM runs WHERE project_id = ? AND id = ?", [work.project_id, work.run_id])?.index_json;
|
|
583
582
|
const preparedReviewInput = readOnly ? assertSharedReviewInput(context, work, run, generation) : null;
|
|
584
583
|
const reviewPaths = preparedReviewInput?.run_inputs.filter(item => item.root === "workspace").map(item => item.path) ?? [];
|
|
585
584
|
const preparedCopy = readOnly && context.env.DD_FLOW_READ_ONLY_WORKSPACE ? prepareBoundReviewCopy(context, work, run, context.env.DD_FLOW_READ_ONLY_WORKSPACE, reviewPaths) : null;
|
|
@@ -601,8 +600,6 @@ export function startBoundWork(context, work, run, claimIdentity, hookEventId, s
|
|
|
601
600
|
throw new AppError("conflict", "Work was claimed concurrently", 1, { work_id: current.work_id, status: current.status });
|
|
602
601
|
if (Object.keys(current).some(key => current[key] !== work[key]))
|
|
603
602
|
throw new AppError("work_not_ready", "Work inputs changed while preparing its start packet", 2, { work_id: current.work_id });
|
|
604
|
-
if (context.db.get("SELECT index_json FROM runs WHERE project_id = ? AND id = ?", [work.project_id, work.run_id])?.index_json !== indexBeforePrepare)
|
|
605
|
-
throw new AppError("work_not_ready", "RUN revision changed while preparing the Work start packet", 2, { work_id: current.work_id });
|
|
606
603
|
if (!isReady(context, current))
|
|
607
604
|
throw new AppError("work_not_ready", "Work dependencies are not ready", 2, { work_id: current.work_id, blockers: readinessBlockers(context, current) });
|
|
608
605
|
if (retryPending)
|