@lumenflow/cli 4.24.0 → 5.0.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 +54 -52
- package/dist/agent-issues-query.js +10 -2
- package/dist/agent-issues-query.js.map +1 -1
- package/dist/agent-runtime-enrollment-events.js +44 -0
- package/dist/agent-runtime-enrollment-events.js.map +1 -0
- package/dist/agent-session-end.js +47 -0
- package/dist/agent-session-end.js.map +1 -1
- package/dist/agent-session-heartbeat.js +250 -0
- package/dist/agent-session-heartbeat.js.map +1 -0
- package/dist/agent-session.js +299 -5
- package/dist/agent-session.js.map +1 -1
- package/dist/capacity-snapshot-emitter.js +73 -0
- package/dist/capacity-snapshot-emitter.js.map +1 -0
- package/dist/claim-queue.js +276 -0
- package/dist/claim-queue.js.map +1 -0
- package/dist/config-set.js +22 -3
- package/dist/config-set.js.map +1 -1
- package/dist/control-plane-sidecar-runner.js +145 -0
- package/dist/control-plane-sidecar-runner.js.map +1 -0
- package/dist/delegation-list.js +160 -1
- package/dist/delegation-list.js.map +1 -1
- package/dist/delegation-role-resolver.js +69 -0
- package/dist/delegation-role-resolver.js.map +1 -0
- package/dist/docs-generate-pack-reference.js +500 -0
- package/dist/docs-generate-pack-reference.js.map +1 -0
- package/dist/docs-sync.js +116 -1
- package/dist/docs-sync.js.map +1 -1
- package/dist/file-edit.js +28 -8
- package/dist/file-edit.js.map +1 -1
- package/dist/file-write.js +29 -5
- package/dist/file-write.js.map +1 -1
- package/dist/gate-co-change.js +25 -7
- package/dist/gate-co-change.js.map +1 -1
- package/dist/gate-conditional.js +19 -7
- package/dist/gate-conditional.js.map +1 -1
- package/dist/gates-runners.js +42 -33
- package/dist/gates-runners.js.map +1 -1
- package/dist/gates-utils.js +34 -20
- package/dist/gates-utils.js.map +1 -1
- package/dist/gates.js +79 -7
- package/dist/gates.js.map +1 -1
- package/dist/hooks/config-resolver.js +10 -1
- package/dist/hooks/config-resolver.js.map +1 -1
- package/dist/init-package-config.js +1 -1
- package/dist/init-package-config.js.map +1 -1
- package/dist/init-scaffolding.js +5 -1
- package/dist/init-scaffolding.js.map +1 -1
- package/dist/init-templates.js +10 -0
- package/dist/init-templates.js.map +1 -1
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/initiative-create.js +17 -0
- package/dist/initiative-create.js.map +1 -1
- package/dist/initiative-remove-wu.js +17 -3
- package/dist/initiative-remove-wu.js.map +1 -1
- package/dist/kernel-event-sync/emitters.js +104 -0
- package/dist/kernel-event-sync/emitters.js.map +1 -0
- package/dist/kernel-event-sync/index.js +13 -0
- package/dist/kernel-event-sync/index.js.map +1 -0
- package/dist/kernel-event-sync/lifecycle-emitters.js +160 -0
- package/dist/kernel-event-sync/lifecycle-emitters.js.map +1 -0
- package/dist/kernel-event-sync/narrow-emissions.js +89 -0
- package/dist/kernel-event-sync/narrow-emissions.js.map +1 -0
- package/dist/kernel-event-sync/software-delivery-emitters.js +297 -0
- package/dist/kernel-event-sync/software-delivery-emitters.js.map +1 -0
- package/dist/lane-lock.js +14 -1
- package/dist/lane-lock.js.map +1 -1
- package/dist/lane-suggest.js +21 -0
- package/dist/lane-suggest.js.map +1 -1
- package/dist/lumenflow-upgrade.js +7 -5
- package/dist/lumenflow-upgrade.js.map +1 -1
- package/dist/mem-context.js +145 -0
- package/dist/mem-context.js.map +1 -1
- package/dist/mem-create.js +39 -6
- package/dist/mem-create.js.map +1 -1
- package/dist/mem-inbox.js +16 -0
- package/dist/mem-inbox.js.map +1 -1
- package/dist/mem-roster.js +95 -0
- package/dist/mem-roster.js.map +1 -0
- package/dist/mem-signal.js +97 -2
- package/dist/mem-signal.js.map +1 -1
- package/dist/metrics-snapshot.js +3 -2
- package/dist/metrics-snapshot.js.map +1 -1
- package/dist/orchestrate-init-status.js +117 -2
- package/dist/orchestrate-init-status.js.map +1 -1
- package/dist/orchestrate-initiative.js +83 -10
- package/dist/orchestrate-initiative.js.map +1 -1
- package/dist/orchestrate-monitor-quality.js +289 -0
- package/dist/orchestrate-monitor-quality.js.map +1 -0
- package/dist/orchestrate-monitor.js +85 -0
- package/dist/orchestrate-monitor.js.map +1 -1
- package/dist/pack-validate.js +127 -2
- package/dist/pack-validate.js.map +1 -1
- package/dist/plan-create.js +18 -0
- package/dist/plan-create.js.map +1 -1
- package/dist/plan-link.js +13 -0
- package/dist/plan-link.js.map +1 -1
- package/dist/plan-promote.js +14 -0
- package/dist/plan-promote.js.map +1 -1
- package/dist/pre-commit-check.js +4 -3
- package/dist/pre-commit-check.js.map +1 -1
- package/dist/public-manifest.js +17 -3
- package/dist/public-manifest.js.map +1 -1
- package/dist/release.js +10 -10
- package/dist/release.js.map +1 -1
- package/dist/session-cross-link.js +139 -0
- package/dist/session-cross-link.js.map +1 -0
- package/dist/sidecar-manager.js +208 -0
- package/dist/sidecar-manager.js.map +1 -0
- package/dist/state-path-resolvers.js +18 -0
- package/dist/state-path-resolvers.js.map +1 -1
- package/dist/stream-heartbeat.js +151 -0
- package/dist/stream-heartbeat.js.map +1 -0
- package/dist/sync-templates.js +56 -2
- package/dist/sync-templates.js.map +1 -1
- package/dist/wu-block.js +47 -5
- package/dist/wu-block.js.map +1 -1
- package/dist/wu-claim-branch.js +8 -4
- package/dist/wu-claim-branch.js.map +1 -1
- package/dist/wu-claim-state.js +5 -3
- package/dist/wu-claim-state.js.map +1 -1
- package/dist/wu-claim-worktree.js +5 -3
- package/dist/wu-claim-worktree.js.map +1 -1
- package/dist/wu-claim.js +261 -9
- package/dist/wu-claim.js.map +1 -1
- package/dist/wu-done-auto-cleanup.js +3 -2
- package/dist/wu-done-auto-cleanup.js.map +1 -1
- package/dist/wu-done-git-ops.js +12 -8
- package/dist/wu-done-git-ops.js.map +1 -1
- package/dist/wu-done-preflight.js +3 -3
- package/dist/wu-done-preflight.js.map +1 -1
- package/dist/wu-done.js +46 -10
- package/dist/wu-done.js.map +1 -1
- package/dist/wu-lifecycle-sync/gate-scope-resolver.js +16 -0
- package/dist/wu-lifecycle-sync/gate-scope-resolver.js.map +1 -0
- package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js +10 -0
- package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js.map +1 -0
- package/dist/wu-prep.js +363 -22
- package/dist/wu-prep.js.map +1 -1
- package/dist/wu-prune.js +68 -27
- package/dist/wu-prune.js.map +1 -1
- package/dist/wu-release.js +34 -3
- package/dist/wu-release.js.map +1 -1
- package/dist/wu-review.js +167 -0
- package/dist/wu-review.js.map +1 -0
- package/dist/wu-spawn-prompt-builders.js +296 -40
- package/dist/wu-spawn-prompt-builders.js.map +1 -1
- package/dist/wu-spawn-strategy-resolver.js +126 -14
- package/dist/wu-spawn-strategy-resolver.js.map +1 -1
- package/dist/wu-unblock.js +52 -22
- package/dist/wu-unblock.js.map +1 -1
- package/package.json +13 -8
- package/packs/agent-runtime/.turbo/turbo-build.log +1 -1
- package/packs/agent-runtime/.turbo/turbo-test.log +25 -0
- package/packs/agent-runtime/.turbo/turbo-typecheck.log +4 -0
- package/packs/agent-runtime/agent-heartbeat.ts +163 -0
- package/packs/agent-runtime/auto-session-integration.ts +874 -0
- package/packs/agent-runtime/delegation-registry-schema.ts +220 -0
- package/packs/agent-runtime/delegation-registry-store.ts +269 -0
- package/packs/agent-runtime/delegation-tree.ts +328 -0
- package/packs/agent-runtime/index.ts +9 -0
- package/packs/agent-runtime/manifest.ts +103 -19
- package/packs/agent-runtime/manifest.yaml +132 -0
- package/packs/agent-runtime/memory-coordination-contract.ts +86 -0
- package/packs/agent-runtime/memory.d.ts +19 -0
- package/packs/agent-runtime/orchestration.ts +238 -23
- package/packs/agent-runtime/package.json +11 -2
- package/packs/agent-runtime/remote-controls/index.ts +7 -0
- package/packs/agent-runtime/remote-controls/operations.ts +399 -0
- package/packs/agent-runtime/remote-controls/port.ts +48 -0
- package/packs/agent-runtime/remote-controls/state-store.ts +258 -0
- package/packs/agent-runtime/remote-controls/types.ts +105 -0
- package/packs/agent-runtime/session-schema.ts +423 -0
- package/packs/agent-runtime/tool-impl/index.ts +1 -0
- package/packs/agent-runtime/tool-impl/remote-controls.mock.ts +252 -0
- package/packs/agent-runtime/tool-impl/remote-controls.ts +273 -0
- package/packs/agent-runtime/tsconfig.json +1 -1
- package/packs/agent-runtime/turn-lifecycle-events.ts +501 -0
- package/packs/sidekick/.lumenflow/state/conductor/outbox/sidekick-events.jsonl +213 -0
- package/packs/sidekick/.turbo/turbo-build.log +1 -1
- package/packs/sidekick/.turbo/turbo-test.log +25 -0
- package/packs/sidekick/.turbo/turbo-typecheck.log +4 -0
- package/packs/sidekick/channel-ingress.ts +137 -0
- package/packs/sidekick/manifest.ts +74 -0
- package/packs/sidekick/manifest.yaml +88 -0
- package/packs/sidekick/package.json +3 -1
- package/packs/sidekick/sidekick-events.ts +517 -0
- package/packs/sidekick/src/adapters/cloud-queue.ts +101 -0
- package/packs/sidekick/src/adapters/control-plane-bridge.adapter.ts +378 -0
- package/packs/sidekick/src/adapters/filesystem-bridge.adapter.ts +224 -0
- package/packs/sidekick/src/domain/channel.types.ts +84 -0
- package/packs/sidekick/src/ports/channel-bridge.port.ts +75 -0
- package/packs/sidekick/src/routines/commit.ts +74 -0
- package/packs/sidekick/tool-impl/channel-tools.ts +47 -0
- package/packs/sidekick/tool-impl/memory-tools.ts +17 -0
- package/packs/sidekick/tool-impl/routine-commit.ts +102 -0
- package/packs/sidekick/tool-impl/routine-tools.ts +67 -7
- package/packs/sidekick/tool-impl/runtime-context.ts +4 -0
- package/packs/sidekick/tool-impl/storage.ts +3 -0
- package/packs/sidekick/tool-impl/system-tools.ts +7 -0
- package/packs/sidekick/tool-impl/task-tools.ts +46 -0
- package/packs/sidekick/tsconfig.json +1 -1
- package/packs/software-delivery/.turbo/turbo-build.log +1 -1
- package/packs/software-delivery/.turbo/turbo-test.log +63 -0
- package/packs/software-delivery/.turbo/turbo-typecheck.log +4 -0
- package/packs/software-delivery/manifest-schema.ts +30 -0
- package/packs/software-delivery/manifest.ts +99 -1
- package/packs/software-delivery/manifest.yaml +46 -0
- package/packs/software-delivery/package.json +88 -3
- package/packs/software-delivery/src/commands/index.ts +5 -0
- package/packs/software-delivery/src/config/delivery-review-contract.ts +20 -0
- package/packs/software-delivery/src/config/env-accessors.ts +19 -0
- package/packs/software-delivery/src/config/index.ts +8 -0
- package/packs/software-delivery/src/config/normalize-config-keys.ts +19 -0
- package/packs/software-delivery/src/config/schemas/lumenflow-config-schema-types.ts +436 -0
- package/packs/software-delivery/src/config/workspace-reader.ts +310 -0
- package/packs/software-delivery/src/constants/backlog-patterns.ts +31 -0
- package/packs/software-delivery/src/constants/client-ids.ts +19 -0
- package/packs/software-delivery/src/constants/config-contract.ts +7 -0
- package/packs/software-delivery/src/constants/docs-layout-presets.ts +50 -0
- package/packs/software-delivery/src/constants/duration-constants.ts +20 -0
- package/packs/software-delivery/src/constants/gate-constants.ts +32 -0
- package/packs/software-delivery/src/constants/index.ts +29 -0
- package/packs/software-delivery/src/constants/lock-constants.ts +35 -0
- package/packs/software-delivery/src/constants/object-guards.ts +12 -0
- package/packs/software-delivery/src/constants/section-headings.ts +107 -0
- package/packs/software-delivery/src/constants/wu-cli-constants.ts +485 -0
- package/packs/software-delivery/src/constants/wu-domain-constants.ts +466 -0
- package/packs/software-delivery/src/constants/wu-git-constants.ts +7 -0
- package/packs/software-delivery/src/constants/wu-id-format.ts +327 -0
- package/packs/software-delivery/src/constants/wu-paths-constants.ts +358 -0
- package/packs/software-delivery/src/constants/wu-statuses.ts +287 -0
- package/packs/software-delivery/src/constants/wu-type-helpers.ts +67 -0
- package/packs/software-delivery/src/constants/wu-ui-constants.ts +267 -0
- package/packs/software-delivery/src/constants/wu-validation-constants.ts +73 -0
- package/packs/software-delivery/src/domain/index.ts +5 -0
- package/packs/software-delivery/src/domain/orchestration.constants.ts +168 -0
- package/packs/software-delivery/src/domain/orchestration.schemas.ts +239 -0
- package/packs/software-delivery/src/domain/orchestration.types.ts +178 -0
- package/packs/software-delivery/src/methodology/incremental-test.ts +90 -0
- package/packs/software-delivery/src/methodology/index.ts +6 -0
- package/packs/software-delivery/src/methodology/manual-test-validator.ts +292 -0
- package/packs/software-delivery/src/policy/coverage-gate.ts +270 -0
- package/packs/software-delivery/src/policy/gates-agent-mode.ts +223 -0
- package/packs/software-delivery/src/policy/gates-config-internal.ts +121 -0
- package/packs/software-delivery/src/policy/gates-config.ts +293 -0
- package/packs/software-delivery/src/policy/gates-coverage.ts +247 -0
- package/packs/software-delivery/src/policy/gates-presets.ts +134 -0
- package/packs/software-delivery/src/policy/gates-schemas.ts +173 -0
- package/packs/software-delivery/src/policy/index.ts +22 -0
- package/packs/software-delivery/src/policy/package-manager-resolver.ts +319 -0
- package/packs/software-delivery/src/policy/resolve-policy.ts +518 -0
- package/packs/software-delivery/src/ports/config.ports.ts +90 -0
- package/packs/software-delivery/src/ports/dashboard-renderer.port.ts +125 -0
- package/packs/software-delivery/src/ports/index.ts +10 -0
- package/packs/software-delivery/src/ports/sync-validator.ports.ts +59 -0
- package/packs/software-delivery/src/ports/wu-helpers.ports.ts +168 -0
- package/packs/software-delivery/src/ports/wu-state.ports.ts +241 -0
- package/packs/software-delivery/src/primitives/index.ts +5 -0
- package/packs/software-delivery/src/runtime/index.ts +6 -0
- package/packs/software-delivery/src/runtime/work-classifier.ts +561 -0
- package/packs/software-delivery/src/sandbox/index.ts +10 -0
- package/packs/software-delivery/src/sandbox/sandbox-allowlist.ts +118 -0
- package/packs/software-delivery/src/sandbox/sandbox-backend-linux.ts +88 -0
- package/packs/software-delivery/src/sandbox/sandbox-backend-macos.ts +154 -0
- package/packs/software-delivery/src/sandbox/sandbox-backend-windows.ts +47 -0
- package/packs/software-delivery/src/sandbox/sandbox-profile.ts +153 -0
- package/packs/software-delivery/src/schemas/index.ts +5 -0
- package/packs/software-delivery/src/state/date-utils.ts +158 -0
- package/packs/software-delivery/src/state/index.ts +15 -0
- package/packs/software-delivery/src/state/state-machine.ts +119 -0
- package/packs/software-delivery/src/state/wu-doc-types.ts +51 -0
- package/packs/software-delivery/src/state/wu-paths.ts +381 -0
- package/packs/software-delivery/src/state/wu-schema.ts +1139 -0
- package/packs/software-delivery/src/state/wu-state-schema.ts +255 -0
- package/packs/software-delivery/src/state/wu-yaml.ts +338 -0
- package/packs/software-delivery/src/types.d.ts +16 -0
- package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +18 -0
- package/packs/software-delivery/tsconfig.json +28 -2
- package/templates/core/AGENTS.md.template +76 -17
- package/templates/core/LUMENFLOW.md.template +265 -66
- package/templates/core/_frameworks/lumenflow/wu-sizing-guide.md.template +180 -116
- package/templates/core/ai/onboarding/agent-invocation-guide.md.template +26 -8
- package/templates/core/ai/onboarding/existing-project-bootstrap.md.template +171 -0
- package/templates/core/ai/onboarding/first-15-mins.md.template +3 -1
- package/templates/core/ai/onboarding/first-wu-mistakes.md.template +1 -1
- package/templates/core/ai/onboarding/initiative-orchestration.md.template +46 -30
- package/templates/core/ai/onboarding/quick-ref-commands.md.template +36 -33
- package/templates/core/ai/onboarding/release-process.md.template +8 -7
- package/templates/core/ai/onboarding/starting-prompt.md.template +2 -0
- package/templates/core/ai/onboarding/troubleshooting-wu-done.md.template +62 -0
- package/templates/vendors/claude/.claude/CLAUDE.md.template +29 -54
- package/templates/vendors/cursor/.cursor/rules/lumenflow.md.template +24 -52
- package/templates/vendors/windsurf/.windsurf/rules/lumenflow.md.template +24 -52
|
@@ -17,14 +17,21 @@
|
|
|
17
17
|
import { Command } from 'commander';
|
|
18
18
|
import chalk from 'chalk';
|
|
19
19
|
import { loadInitiativeWUs, loadMultipleInitiatives, buildExecutionPlanWithLockPolicy, resolveLaneConfigsFromConfig, formatExecutionPlan, formatExecutionPlanWithEmbeddedSpawns, calculateProgress, formatProgress, buildCheckpointWave, formatCheckpointOutput, writeExecutionPlanArtifacts, validateCheckpointFlags, resolveCheckpointModeAsync, LOG_PREFIX, } from '@lumenflow/initiatives';
|
|
20
|
+
import { configureSharedHandoffRenderer } from '@lumenflow/core/wu-spawn';
|
|
20
21
|
import { EXIT_CODES } from '@lumenflow/core/wu-constants';
|
|
21
22
|
import { getConfig } from '@lumenflow/core/config';
|
|
22
|
-
import { getErrorMessage, ProcessExitError } from '@lumenflow/core/error-handler';
|
|
23
|
+
import { createError, ErrorCodes, getErrorMessage, ProcessExitError, } from '@lumenflow/core/error-handler';
|
|
23
24
|
import { ORCHESTRATION_STATUS_VALUES } from '@lumenflow/control-plane-sdk';
|
|
25
|
+
import { buildOrchestrationLaunchEmittedEvent, buildOrchestrationPlanWrittenEvent, buildOrchestrationStatusUpdatedEvent, readOrgIdFromConfig, resolveConductorEventSink, } from './kernel-event-sync/lifecycle-emitters.js';
|
|
24
26
|
import { runCLI } from './cli-entry-point.js';
|
|
25
27
|
import { loadInitiativeExecutionSummary, } from './orchestrate-monitor.js';
|
|
26
28
|
import { readMaxActiveWorkersFromConfig, readStallThresholdMs } from './orchestrate-integrity.js';
|
|
29
|
+
import { renderBriefForClient, SUPPORTED_BRIEF_CLIENTS, } from './wu-spawn-prompt-builders.js';
|
|
27
30
|
const VALID_CLIENTS = ['claude-code', 'codex-cli', 'gemini-cli', 'cursor', 'windsurf'];
|
|
31
|
+
const SUPPORTED_BRIEF_CLIENT_SET = new Set(SUPPORTED_BRIEF_CLIENTS);
|
|
32
|
+
function isSupportedBriefClient(clientName) {
|
|
33
|
+
return SUPPORTED_BRIEF_CLIENT_SET.has(clientName);
|
|
34
|
+
}
|
|
28
35
|
export function mapExecutionSummaryToCheckpointEvidence(summary) {
|
|
29
36
|
return summary.wus.map((wu) => ({
|
|
30
37
|
wuId: wu.wuId,
|
|
@@ -51,15 +58,16 @@ const program = new Command()
|
|
|
51
58
|
.option('-c, --checkpoint-per-wave', 'Spawn next wave then exit (no polling)')
|
|
52
59
|
.option('--no-checkpoint', 'Force polling mode')
|
|
53
60
|
.option('--client <name>', 'Agent client (claude-code, codex-cli, gemini-cli, cursor, windsurf)')
|
|
61
|
+
.option('--print-handoffs', 'Print stored handoff artifacts inline for manual copy/paste output')
|
|
54
62
|
.option('--max-active-workers <count>', 'Cap concurrent active workers; overrides software_delivery.orchestration.max_active_workers', (value) => {
|
|
55
63
|
const parsed = Number.parseInt(value, 10);
|
|
56
64
|
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
57
|
-
throw
|
|
65
|
+
throw createError(ErrorCodes.INVALID_ARGUMENT, 'Invalid --max-active-workers: expected a non-negative integer', { value });
|
|
58
66
|
}
|
|
59
67
|
return parsed;
|
|
60
68
|
})
|
|
61
69
|
.action(async (options) => {
|
|
62
|
-
const { initiative: initIds, dryRun, progress: progressOnly, checkpointPerWave, checkpoint, client: clientArg, maxActiveWorkers: maxActiveWorkersFlag, } = options;
|
|
70
|
+
const { initiative: initIds, dryRun, progress: progressOnly, checkpointPerWave, checkpoint, client: clientArg, printHandoffs, maxActiveWorkers: maxActiveWorkersFlag, } = options;
|
|
63
71
|
const noCheckpoint = checkpoint === false;
|
|
64
72
|
try {
|
|
65
73
|
validateCheckpointFlags({ checkpointPerWave, dryRun, noCheckpoint });
|
|
@@ -89,6 +97,20 @@ const program = new Command()
|
|
|
89
97
|
console.error(' pnpm orchestrate:initiative --initiative INIT-001 --client codex-cli');
|
|
90
98
|
throw new ProcessExitError(message, EXIT_CODES.ERROR);
|
|
91
99
|
}
|
|
100
|
+
const restoreSharedHandoffRenderer = configureSharedHandoffRenderer(clientName && isSupportedBriefClient(clientName)
|
|
101
|
+
? ({ clientName: sharedClientName, doc, id, strategy, config: sharedConfig }) => {
|
|
102
|
+
if (!isSupportedBriefClient(sharedClientName)) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
return renderBriefForClient({
|
|
106
|
+
client: sharedClientName,
|
|
107
|
+
doc,
|
|
108
|
+
id,
|
|
109
|
+
strategy,
|
|
110
|
+
config: sharedConfig,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
: undefined);
|
|
92
114
|
try {
|
|
93
115
|
console.log(chalk.cyan(`${LOG_PREFIX} Loading initiative(s): ${initIds.join(', ')}`));
|
|
94
116
|
let wus;
|
|
@@ -135,7 +157,7 @@ const program = new Command()
|
|
|
135
157
|
return;
|
|
136
158
|
}
|
|
137
159
|
// WU-2375: Pass clientName to checkpoint output formatting
|
|
138
|
-
console.log(formatCheckpointOutput({ ...waveData, dryRun, clientName }));
|
|
160
|
+
console.log(formatCheckpointOutput({ ...waveData, dryRun, clientName }, { printHandoffs: printHandoffs === true }));
|
|
139
161
|
return;
|
|
140
162
|
}
|
|
141
163
|
console.log(chalk.cyan(`${LOG_PREFIX} Building execution plan...`));
|
|
@@ -182,28 +204,76 @@ const program = new Command()
|
|
|
182
204
|
console.log('');
|
|
183
205
|
console.log(chalk.bold('Monitoring Commands:'));
|
|
184
206
|
console.log(' pnpm mem:inbox --since 10m # Check for signals from agents');
|
|
207
|
+
console.log(' pnpm mem:roster # Inspect live session/display-name roster');
|
|
208
|
+
console.log(' pnpm delegation:list --initiative ' +
|
|
209
|
+
initIds[0] +
|
|
210
|
+
' # Cross-link sessions + delegations');
|
|
185
211
|
console.log(' pnpm orchestrate:init-status -i ' + initIds[0] + ' # Check progress');
|
|
186
212
|
console.log(' pnpm orchestrate:monitor # Live agent activity');
|
|
213
|
+
console.log('');
|
|
214
|
+
console.log(chalk.bold('Orchestrator Session Contract:'));
|
|
215
|
+
console.log(' When dispatching from an orchestrator WU, start the coordinator session with:');
|
|
216
|
+
console.log(' pnpm agent:session --wu <ORCHESTRATOR-WU> --tier 2 --lifecycle-role orchestrator --specialty-profile delivery');
|
|
217
|
+
console.log(' This keeps the coordinator visible in mem:roster and delegation:list.');
|
|
187
218
|
return;
|
|
188
219
|
}
|
|
189
220
|
// WU-1202: Output spawn content for actual execution (not dry-run)
|
|
190
221
|
// WU-2375: Format varies by client capability (XML for Claude, markdown for others)
|
|
222
|
+
let launchArtifacts;
|
|
191
223
|
if (initIds.length === 1) {
|
|
192
|
-
|
|
224
|
+
launchArtifacts = writeExecutionPlanArtifacts(initIds[0], wus, plan, { clientName });
|
|
193
225
|
console.log(chalk.cyan(`${LOG_PREFIX} Wrote plan/launch/status artifacts for launch attempt ${launchArtifacts.launchAttempt}`));
|
|
194
226
|
console.log(` Plan: ${launchArtifacts.planPath}`);
|
|
195
227
|
console.log(` Launch: ${launchArtifacts.launchPath}`);
|
|
196
228
|
console.log(` Status: ${launchArtifacts.statusPath}`);
|
|
229
|
+
// WU-2654: narrow conductor emissions now that plan/launch/status
|
|
230
|
+
// artifacts have been durably written. Fail-silent when the workspace
|
|
231
|
+
// is local-only (no control_plane.org_id). Discrete fire-once kinds:
|
|
232
|
+
// - orchestration:plan_written (1 per attempt)
|
|
233
|
+
// - orchestration:launch_emitted (1 per launchable WU)
|
|
234
|
+
// - orchestration:status_updated (1 per WU with handoff_emitted state)
|
|
235
|
+
const orgId = readOrgIdFromConfig(config);
|
|
236
|
+
if (orgId) {
|
|
237
|
+
const sink = await resolveConductorEventSink();
|
|
238
|
+
sink(buildOrchestrationPlanWrittenEvent({
|
|
239
|
+
initiative: initIds[0],
|
|
240
|
+
launch_attempt: launchArtifacts.launchAttempt,
|
|
241
|
+
}));
|
|
242
|
+
for (const receipt of launchArtifacts.handoffReceipts) {
|
|
243
|
+
sink(buildOrchestrationLaunchEmittedEvent({
|
|
244
|
+
initiative: initIds[0],
|
|
245
|
+
wu_id: receipt.wu_id,
|
|
246
|
+
launch_attempt: launchArtifacts.launchAttempt,
|
|
247
|
+
}));
|
|
248
|
+
sink(buildOrchestrationStatusUpdatedEvent({
|
|
249
|
+
initiative: initIds[0],
|
|
250
|
+
wu_id: receipt.wu_id,
|
|
251
|
+
orchestration_state: receipt.orchestration_state,
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
197
255
|
}
|
|
198
256
|
console.log('');
|
|
199
|
-
console.log(chalk.bold('
|
|
200
|
-
console.log(formatExecutionPlanWithEmbeddedSpawns(plan, clientName
|
|
257
|
+
console.log(chalk.bold('Launch Summary:'));
|
|
258
|
+
console.log(formatExecutionPlanWithEmbeddedSpawns(plan, clientName, {
|
|
259
|
+
printHandoffs,
|
|
260
|
+
artifactDir: launchArtifacts?.artifactDir,
|
|
261
|
+
planPath: launchArtifacts?.planPath,
|
|
262
|
+
launchPath: launchArtifacts?.launchPath,
|
|
263
|
+
statusPath: launchArtifacts?.statusPath,
|
|
264
|
+
handoffReceipts: launchArtifacts?.handoffReceipts,
|
|
265
|
+
}));
|
|
201
266
|
console.log(chalk.green(`${LOG_PREFIX} Execution plan output complete.`));
|
|
202
|
-
if (
|
|
203
|
-
|
|
267
|
+
if (printHandoffs) {
|
|
268
|
+
if (!clientName || clientName === 'claude-code') {
|
|
269
|
+
console.log(chalk.cyan('Copy the stored XML above to execute agents.'));
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
console.log(chalk.cyan('Copy the stored prompts above to your agent platform.'));
|
|
273
|
+
}
|
|
204
274
|
}
|
|
205
275
|
else {
|
|
206
|
-
console.log(chalk.cyan('
|
|
276
|
+
console.log(chalk.cyan('Use --print-handoffs to inline the stored handoff artifacts for manual copy/paste.'));
|
|
207
277
|
}
|
|
208
278
|
}
|
|
209
279
|
catch (error) {
|
|
@@ -214,6 +284,9 @@ const program = new Command()
|
|
|
214
284
|
console.error(chalk.red(message));
|
|
215
285
|
throw new ProcessExitError(message, EXIT_CODES.ERROR);
|
|
216
286
|
}
|
|
287
|
+
finally {
|
|
288
|
+
restoreSharedHandoffRenderer();
|
|
289
|
+
}
|
|
217
290
|
});
|
|
218
291
|
export async function main() {
|
|
219
292
|
await program.parseAsync(process.argv);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrate-initiative.js","sourceRoot":"","sources":["../src/orchestrate-initiative.ts"],"names":[],"mappings":";AACA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,gCAAgC,EAChC,4BAA4B,EAC5B,mBAAmB,EACnB,qCAAqC,EACrC,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAC1B,UAAU,GAGX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACL,8BAA8B,GAE/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,8BAA8B,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElG,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEvF,MAAM,UAAU,uCAAuC,CACrD,OAA0C;IAgB1C,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,cAAc,EACZ,EAAE,CAAC,KAAK,KAAK,2BAA2B,CAAC,eAAe,IAAI,EAAE,CAAC,aAAa,KAAK,SAAS;QAC5F,MAAM,EAAE,EAAE,CAAC,KAAK,KAAK,2BAA2B,CAAC,MAAM;QACvD,cAAc,EAAE,EAAE,CAAC,KAAK,KAAK,2BAA2B,CAAC,eAAe;QACxE,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,WAAW,EAAE,EAAE,CAAC,WAAW;QAC3B,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,aAAa,EAAE,EAAE,CAAC,KAAK,KAAK,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACvF,cAAc,EAAE,EAAE,CAAC,KAAK,KAAK,2BAA2B,CAAC,eAAe,IAAI,EAAE,CAAC,eAAe;QAC9F,aAAa,EAAE,EAAE,CAAC,KAAK,KAAK,2BAA2B,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC,eAAe;QAC9F,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;QACvC,OAAO,EAAE,EAAE,CAAC,OAAO;KACpB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,wBAAwB,CAAC;KAC9B,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,2BAA2B,EAAE,iCAAiC,CAAC;KACtE,MAAM,CAAC,eAAe,EAAE,6CAA6C,CAAC;KACtE,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;KACtD,MAAM,CAAC,2BAA2B,EAAE,wCAAwC,CAAC;KAC7E,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;KAC/C,MAAM,CAAC,iBAAiB,EAAE,qEAAqE,CAAC;KAChG,MAAM,CACL,8BAA8B,EAC9B,6FAA6F,EAC7F,CAAC,KAAK,EAAE,EAAE;IACR,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CACF;KACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EACJ,UAAU,EAAE,OAAO,EACnB,MAAM,EACN,QAAQ,EAAE,YAAY,EACtB,iBAAiB,EACjB,UAAU,EACV,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,oBAAoB,GACvC,GAAG,OAAO,CAAC;IACZ,MAAM,YAAY,GAAG,UAAU,KAAK,KAAK,CAAC;IAE1C,IAAI,CAAC;QACH,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,GAAG,UAAU,WAAW,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,MAAM,IAAI,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,+BAA+B;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAuB,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,SAAS,CAAC;IAE9F,IAAI,SAAS,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CACV,KAAK,CAAC,MAAM,CACV,GAAG,UAAU,6BAA6B,SAAS,KAAK;YACtD,kBAAkB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/C,CACF,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,YAAY,UAAU,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,GAAG,UAAU,kCAAkC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC/E,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;QACxF,MAAM,IAAI,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtF,IAAI,GAAc,CAAC;QACnB,IAAI,UAAyB,CAAC;QAE9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YAC/B,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACvC,UAAU,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACzE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,WAAW,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,0BAA0B,CACzD,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,EAAE,EAC3C,GAAG,CACJ,CAAC;QAEF,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,GAAG,UAAU,yDAAyD,CAAC;gBACvF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBAClC,MAAM,IAAI,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,gBAAgB,GAAG,MAAM,8BAA8B,CAC3D,OAAO,CAAC,GAAG,EAAE,EACb,OAAO,CAAC,CAAC,CAAC,EACV,GAAG,EACH,EAAE,gBAAgB,EAAE,CACrB,CAAC;YACF,MAAM,kBAAkB,GAAG,uCAAuC,CAAC,gBAAgB,CAAC,CAAC;YACrF,MAAM,gBAAgB,GACpB,OAAO,oBAAoB,KAAK,QAAQ;gBACtC,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC/C,MAAM;gBACN,UAAU;gBACV,iBAAiB,EAAE,kBAAkB;gBACrC,gBAAgB;aACjB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,0CAA0C,CAAC,CAAC,CAAC;gBAClF,OAAO;YACT,CAAC;YAED,2DAA2D;YAC3D,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,6BAA6B,CAAC,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,gCAAgC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,iDAAiD;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;YAClF,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC3E,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,GAAG,UAAU,IAAI,YAAY,8CAA8C,CAC5E,CACF,CAAC;gBACF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,GAAG,UAAU,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,sCAAsC,CAC9E,CACF,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,GAAG,UAAU,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,6BAA6B,CAC/E,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,4CAA4C,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAEnD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,UAAU,mCAAmC,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;YAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CACT,gFAAgF,CACjF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,oCAAoC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC;YACvF,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QAED,mEAAmE;QACnE,oFAAoF;QACpF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,eAAe,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,GAAG,UAAU,0DAA0D,eAAe,CAAC,aAAa,EAAE,CACvG,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,WAAW,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,aAAa,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,aAAa,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAErE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,kCAAkC,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,UAAU,WAAW,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,MAAM,IAAI,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"orchestrate-initiative.js","sourceRoot":"","sources":["../src/orchestrate-initiative.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Orchestrate Monitor — Quality Signal (WU-2667)
|
|
5
|
+
*
|
|
6
|
+
* Complements WU-2650 (at-merge commit-order gate) by catching the same
|
|
7
|
+
* TDD violation mid-execution. For each active worktree, walks the lane
|
|
8
|
+
* branch's commits vs the shared base and emits a non-blocking
|
|
9
|
+
* `quality:tests-missing` signal when production LOC exceeds the configured
|
|
10
|
+
* threshold with zero test-file commits past the grace window.
|
|
11
|
+
*
|
|
12
|
+
* This module is the pure core: the integration function accepts an injected
|
|
13
|
+
* commit resolver and clock so tests can drive it with real git fixtures or
|
|
14
|
+
* synthetic commits. See runQualityDetectionForActiveWorktrees for the shape
|
|
15
|
+
* that orchestrate-monitor.ts calls.
|
|
16
|
+
*
|
|
17
|
+
* @module orchestrate-monitor-quality
|
|
18
|
+
*/
|
|
19
|
+
import { execFileSync } from 'node:child_process';
|
|
20
|
+
import { join } from 'node:path';
|
|
21
|
+
import { TEST_FILE_PATTERNS } from '@lumenflow/core';
|
|
22
|
+
import { BRANCHES, GIT_REFS } from '@lumenflow/core/wu-constants';
|
|
23
|
+
import { createSignal } from '@lumenflow/memory/signal';
|
|
24
|
+
/**
|
|
25
|
+
* Default minimum production LOC required to trigger a signal. Chosen to match
|
|
26
|
+
* the WU-2650 gate so operators see the same threshold both mid-execution and
|
|
27
|
+
* at merge time unless they override one.
|
|
28
|
+
*/
|
|
29
|
+
export const DEFAULT_MONITOR_QUALITY_MIN_RUNTIME_LOC = 50;
|
|
30
|
+
/**
|
|
31
|
+
* Default grace window in minutes. Agents routinely land the first prod commit
|
|
32
|
+
* a few minutes after claim; the grace window absorbs that normal churn so the
|
|
33
|
+
* signal only fires on genuinely stalled TDD.
|
|
34
|
+
*/
|
|
35
|
+
export const DEFAULT_MONITOR_QUALITY_GRACE_MINUTES = 15;
|
|
36
|
+
/**
|
|
37
|
+
* Canonical signal type emitted by this detector. Orchestrators filter inbox
|
|
38
|
+
* signals on this type via the existing mem:inbox command.
|
|
39
|
+
*/
|
|
40
|
+
export const MONITOR_QUALITY_SIGNAL_TYPE = 'quality:tests-missing';
|
|
41
|
+
const MS_PER_MINUTE = 60 * 1000;
|
|
42
|
+
function isPositiveInteger(value) {
|
|
43
|
+
return typeof value === 'number' && Number.isInteger(value) && value > 0;
|
|
44
|
+
}
|
|
45
|
+
function isNonNegativeInteger(value) {
|
|
46
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= 0;
|
|
47
|
+
}
|
|
48
|
+
function readBool(value, fallback) {
|
|
49
|
+
return typeof value === 'boolean' ? value : fallback;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Read `software_delivery.agents.monitor_quality_signals` from the resolved
|
|
53
|
+
* workspace config, applying defaults and coercing invalid values back to
|
|
54
|
+
* defaults so a broken workspace.yaml never silently disables the detector.
|
|
55
|
+
*/
|
|
56
|
+
export function readMonitorQualitySignalsConfig(config) {
|
|
57
|
+
const defaults = {
|
|
58
|
+
enabled: true,
|
|
59
|
+
min_runtime_loc: DEFAULT_MONITOR_QUALITY_MIN_RUNTIME_LOC,
|
|
60
|
+
grace_minutes: DEFAULT_MONITOR_QUALITY_GRACE_MINUTES,
|
|
61
|
+
};
|
|
62
|
+
if (typeof config !== 'object' || config === null) {
|
|
63
|
+
return defaults;
|
|
64
|
+
}
|
|
65
|
+
const sd = config.software_delivery;
|
|
66
|
+
if (typeof sd !== 'object' || sd === null) {
|
|
67
|
+
return defaults;
|
|
68
|
+
}
|
|
69
|
+
const agents = sd.agents;
|
|
70
|
+
if (typeof agents !== 'object' || agents === null) {
|
|
71
|
+
return defaults;
|
|
72
|
+
}
|
|
73
|
+
const raw = agents.monitor_quality_signals;
|
|
74
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
75
|
+
return defaults;
|
|
76
|
+
}
|
|
77
|
+
const candidate = raw;
|
|
78
|
+
return {
|
|
79
|
+
enabled: readBool(candidate.enabled, defaults.enabled),
|
|
80
|
+
min_runtime_loc: isPositiveInteger(candidate.min_runtime_loc)
|
|
81
|
+
? candidate.min_runtime_loc
|
|
82
|
+
: defaults.min_runtime_loc,
|
|
83
|
+
grace_minutes: isNonNegativeInteger(candidate.grace_minutes)
|
|
84
|
+
? candidate.grace_minutes
|
|
85
|
+
: defaults.grace_minutes,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function normalisePath(filePath) {
|
|
89
|
+
return filePath.replace(/\\/g, '/');
|
|
90
|
+
}
|
|
91
|
+
function isTestFilePath(filePath) {
|
|
92
|
+
const normalized = normalisePath(filePath);
|
|
93
|
+
return TEST_FILE_PATTERNS.some((pattern) => pattern.test(normalized));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Documentation-only path prefixes and extensions. Kept intentionally narrow
|
|
97
|
+
* and static so the detector never depends on project-root lookup during a
|
|
98
|
+
* monitor tick — the monitor runs across multiple worktrees and any per-WU
|
|
99
|
+
* config resolution would be a hot-path hazard.
|
|
100
|
+
*/
|
|
101
|
+
const DOC_PATH_PREFIXES = ['docs/', 'apps/docs/', 'ai/', '.claude/', 'memory-bank/'];
|
|
102
|
+
function isDocPath(filePath) {
|
|
103
|
+
const normalized = normalisePath(filePath).toLowerCase();
|
|
104
|
+
if (normalized.endsWith('.md') || normalized.endsWith('.mdx')) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return DOC_PATH_PREFIXES.some((prefix) => normalized.startsWith(prefix));
|
|
108
|
+
}
|
|
109
|
+
function isRuntimeFilePath(filePath) {
|
|
110
|
+
if (isTestFilePath(filePath)) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
// Documentation-only paths (docs/, *.md, etc.) don't count as production code.
|
|
114
|
+
if (isDocPath(filePath)) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Pure violation detector. Returns `violator: true` when:
|
|
121
|
+
* - total non-test, non-doc LOC added across runtime commits >= minRuntimeLoc
|
|
122
|
+
* - at least one runtime commit exists
|
|
123
|
+
* - no commit touched a test file
|
|
124
|
+
* - wall-clock time since `claimedAt` exceeds graceMinutes (grace is waived
|
|
125
|
+
* when `claimedAt` is missing; we fall back to "detect on LOC alone").
|
|
126
|
+
*/
|
|
127
|
+
export function detectTestsMissingForWorktree(input) {
|
|
128
|
+
const { commits, minRuntimeLoc, graceMinutes, claimedAt, now } = input;
|
|
129
|
+
let productionLoc = 0;
|
|
130
|
+
let firstProductionCommit;
|
|
131
|
+
let sawTestCommit = false;
|
|
132
|
+
for (const commit of commits) {
|
|
133
|
+
const hasTestInCommit = commit.files.some((file) => isTestFilePath(file.path));
|
|
134
|
+
if (hasTestInCommit) {
|
|
135
|
+
sawTestCommit = true;
|
|
136
|
+
}
|
|
137
|
+
const runtimeAdded = commit.files.reduce((sum, file) => (isRuntimeFilePath(file.path) ? sum + file.added : sum), 0);
|
|
138
|
+
if (runtimeAdded > 0 && !firstProductionCommit) {
|
|
139
|
+
firstProductionCommit = { hash: commit.hash, subject: commit.subject };
|
|
140
|
+
}
|
|
141
|
+
productionLoc += runtimeAdded;
|
|
142
|
+
}
|
|
143
|
+
if (sawTestCommit) {
|
|
144
|
+
return { violator: false, productionLoc, withinGrace: false };
|
|
145
|
+
}
|
|
146
|
+
if (productionLoc < minRuntimeLoc || !firstProductionCommit) {
|
|
147
|
+
return { violator: false, productionLoc, withinGrace: false };
|
|
148
|
+
}
|
|
149
|
+
// Respect the grace window: agents routinely land the first prod commit a
|
|
150
|
+
// few minutes after claim; warning during that window is noise.
|
|
151
|
+
const claimedAtMs = claimedAt ? Date.parse(claimedAt) : NaN;
|
|
152
|
+
if (!Number.isNaN(claimedAtMs)) {
|
|
153
|
+
const elapsedMs = now.getTime() - claimedAtMs;
|
|
154
|
+
if (elapsedMs < graceMinutes * MS_PER_MINUTE) {
|
|
155
|
+
return { violator: false, productionLoc, withinGrace: true, firstProductionCommit };
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return { violator: true, productionLoc, withinGrace: false, firstProductionCommit };
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Default commit resolver: `git log main..HEAD --numstat`. Matches the
|
|
162
|
+
* invocation wu-prep.ts uses at merge time so the same parsing path applies.
|
|
163
|
+
*/
|
|
164
|
+
export function defaultResolveBranchCommitsSync(options) {
|
|
165
|
+
try {
|
|
166
|
+
// `git` is a first-class LumenFlow runtime dependency; other orchestrate
|
|
167
|
+
// modules resolve it from PATH the same way.
|
|
168
|
+
// eslint-disable-next-line sonarjs/no-os-command-from-path
|
|
169
|
+
let baseRef = GIT_REFS.ORIGIN_MAIN;
|
|
170
|
+
try {
|
|
171
|
+
// eslint-disable-next-line sonarjs/no-os-command-from-path
|
|
172
|
+
execFileSync('git', ['rev-parse', '--verify', baseRef], {
|
|
173
|
+
cwd: options.cwd,
|
|
174
|
+
stdio: 'pipe',
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
baseRef = BRANCHES.MAIN;
|
|
179
|
+
// eslint-disable-next-line sonarjs/no-os-command-from-path
|
|
180
|
+
execFileSync('git', ['rev-parse', '--verify', baseRef], {
|
|
181
|
+
cwd: options.cwd,
|
|
182
|
+
stdio: 'pipe',
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
const raw = execFileSync(
|
|
186
|
+
// eslint-disable-next-line sonarjs/no-os-command-from-path
|
|
187
|
+
'git', [
|
|
188
|
+
'log',
|
|
189
|
+
`${baseRef}..HEAD`,
|
|
190
|
+
'--reverse',
|
|
191
|
+
'--numstat',
|
|
192
|
+
'--format=__WU_COMMIT__%H%x09%s',
|
|
193
|
+
'--no-merges',
|
|
194
|
+
], { cwd: options.cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
|
|
195
|
+
return { ok: true, commits: parseBranchCommits(raw) };
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
return { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Parse `git log --numstat --format=__WU_COMMIT__<hash>\t<subject>` output.
|
|
203
|
+
* Binary files report `-` for added/deleted; those contribute 0 LOC.
|
|
204
|
+
*/
|
|
205
|
+
export function parseBranchCommits(raw) {
|
|
206
|
+
const commits = [];
|
|
207
|
+
let current = null;
|
|
208
|
+
for (const rawLine of raw.split('\n')) {
|
|
209
|
+
const line = rawLine.trimEnd();
|
|
210
|
+
if (line.startsWith('__WU_COMMIT__')) {
|
|
211
|
+
if (current)
|
|
212
|
+
commits.push(current);
|
|
213
|
+
const header = line.slice('__WU_COMMIT__'.length);
|
|
214
|
+
const tab = header.indexOf('\t');
|
|
215
|
+
const hash = tab === -1 ? header : header.slice(0, tab);
|
|
216
|
+
const subject = tab === -1 ? '' : header.slice(tab + 1);
|
|
217
|
+
current = { hash, subject, files: [] };
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
if (!current || line.length === 0)
|
|
221
|
+
continue;
|
|
222
|
+
const parts = line.split('\t');
|
|
223
|
+
if (parts.length < 3)
|
|
224
|
+
continue;
|
|
225
|
+
const [addedRaw, deletedRaw, ...pathParts] = parts;
|
|
226
|
+
const filePath = pathParts.join('\t');
|
|
227
|
+
const added = addedRaw === '-' ? 0 : Number.parseInt(addedRaw, 10);
|
|
228
|
+
const deleted = deletedRaw === '-' ? 0 : Number.parseInt(deletedRaw, 10);
|
|
229
|
+
if (Number.isNaN(added) || Number.isNaN(deleted) || !filePath)
|
|
230
|
+
continue;
|
|
231
|
+
current.files.push({ path: filePath, added, deleted });
|
|
232
|
+
}
|
|
233
|
+
if (current)
|
|
234
|
+
commits.push(current);
|
|
235
|
+
return commits;
|
|
236
|
+
}
|
|
237
|
+
function buildSignalMessage(wuId, productionLoc, threshold) {
|
|
238
|
+
return (`quality:tests-missing — ${wuId}: ${productionLoc} runtime LOC committed ` +
|
|
239
|
+
`(threshold ${threshold}) with zero test commits on the lane branch.`);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Run the detector across every active worktree and emit a signal for each
|
|
243
|
+
* violator. Returns the emitted signals so the monitor can surface them in
|
|
244
|
+
* its output; the canonical delivery channel is the appended
|
|
245
|
+
* `.lumenflow/memory/signals.jsonl` line (observable via mem:inbox).
|
|
246
|
+
*/
|
|
247
|
+
export async function runQualityDetectionForActiveWorktrees(options) {
|
|
248
|
+
const { baseDir, now, policy, activeWorktrees } = options;
|
|
249
|
+
if (!policy.enabled) {
|
|
250
|
+
return [];
|
|
251
|
+
}
|
|
252
|
+
const resolve = options.resolveBranchCommits ?? defaultResolveBranchCommitsSync;
|
|
253
|
+
const emissions = [];
|
|
254
|
+
for (const wt of activeWorktrees) {
|
|
255
|
+
const cwd = join(baseDir, wt.worktreePath);
|
|
256
|
+
const commitsResult = resolve({ cwd });
|
|
257
|
+
if (!commitsResult.ok) {
|
|
258
|
+
continue; // Silently skip worktrees we can't inspect — not our job to fail the monitor.
|
|
259
|
+
}
|
|
260
|
+
const detection = detectTestsMissingForWorktree({
|
|
261
|
+
commits: commitsResult.commits,
|
|
262
|
+
minRuntimeLoc: policy.min_runtime_loc,
|
|
263
|
+
graceMinutes: policy.grace_minutes,
|
|
264
|
+
claimedAt: wt.claimedAt,
|
|
265
|
+
now,
|
|
266
|
+
});
|
|
267
|
+
if (!detection.violator) {
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const message = buildSignalMessage(wt.wuId, detection.productionLoc, policy.min_runtime_loc);
|
|
271
|
+
const { signal } = await createSignal(baseDir, {
|
|
272
|
+
message,
|
|
273
|
+
wuId: wt.wuId,
|
|
274
|
+
lane: wt.lane,
|
|
275
|
+
type: MONITOR_QUALITY_SIGNAL_TYPE,
|
|
276
|
+
sender: 'orchestrate:monitor',
|
|
277
|
+
origin: 'local',
|
|
278
|
+
});
|
|
279
|
+
emissions.push({
|
|
280
|
+
wuId: wt.wuId,
|
|
281
|
+
lane: wt.lane,
|
|
282
|
+
productionLoc: detection.productionLoc,
|
|
283
|
+
firstProductionCommit: detection.firstProductionCommit,
|
|
284
|
+
signal,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
return emissions;
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=orchestrate-monitor-quality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrate-monitor-quality.js","sourceRoot":"","sources":["../src/orchestrate-monitor-quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,8 @@ import { join } from 'node:path';
|
|
|
27
27
|
import { EXIT_CODES, LUMENFLOW_PATHS, DelegationRegistryStore, analyzeDelegations, detectStuckDelegations, checkZombieLocks, generateSuggestions, formatMonitorOutput, formatRecoveryResults, runRecovery, processDelegationFailureSignals, formatSignalHandlerOutput, DEFAULT_THRESHOLD_MINUTES, calculateBackoff, } from '@lumenflow/core';
|
|
28
28
|
import { ORCHESTRATION_ARTIFACT_DIR, ORCHESTRATION_STATUS_VALUES, } from '@lumenflow/control-plane-sdk';
|
|
29
29
|
import { DEFAULT_STALL_THRESHOLD_MS, detectContaminatedCodePaths, getMainDirtyPaths, isWorktreeStalled, } from './orchestrate-integrity.js';
|
|
30
|
+
import { MONITOR_QUALITY_SIGNAL_TYPE, readMonitorQualitySignalsConfig, runQualityDetectionForActiveWorktrees, } from './orchestrate-monitor-quality.js';
|
|
31
|
+
import { getConfig } from '@lumenflow/core/config';
|
|
30
32
|
import { DelegationStatus } from '@lumenflow/core/delegation-registry-schema';
|
|
31
33
|
import { defaultWorktreeFrom } from '@lumenflow/core/wu-paths';
|
|
32
34
|
import { loadInitiativeWUs } from '@lumenflow/initiatives';
|
|
@@ -395,6 +397,7 @@ export async function loadInitiativeExecutionSummary(baseDir, initiativeId, wus,
|
|
|
395
397
|
blockerSignals,
|
|
396
398
|
contaminatedPaths: contaminatedPaths.length > 0 ? contaminatedPaths : undefined,
|
|
397
399
|
stalled: stalled ? true : undefined,
|
|
400
|
+
claimedAt: typeof wu.doc.claimed_at === 'string' ? wu.doc.claimed_at : undefined,
|
|
398
401
|
};
|
|
399
402
|
});
|
|
400
403
|
return {
|
|
@@ -559,6 +562,13 @@ export async function runMonitor(options = {}) {
|
|
|
559
562
|
if (executionEvidence.length > 0) {
|
|
560
563
|
result.executionEvidence = executionEvidence;
|
|
561
564
|
}
|
|
565
|
+
// WU-2667: Quality signal — active worktrees with prod commits but zero tests.
|
|
566
|
+
// Non-blocking: appended to MonitorResult so formatOutput can warn, and
|
|
567
|
+
// persisted via mem:signal so orchestrators poll it through mem:inbox.
|
|
568
|
+
const qualitySignals = await collectQualitySignals(baseDir, executionEvidence);
|
|
569
|
+
if (qualitySignals.length > 0) {
|
|
570
|
+
result.qualitySignals = qualitySignals;
|
|
571
|
+
}
|
|
562
572
|
// Run recovery if requested
|
|
563
573
|
if (recover) {
|
|
564
574
|
const recoveryResults = await runRecovery(stuckDelegations, { baseDir, dryRun });
|
|
@@ -566,6 +576,59 @@ export async function runMonitor(options = {}) {
|
|
|
566
576
|
}
|
|
567
577
|
return result;
|
|
568
578
|
}
|
|
579
|
+
/**
|
|
580
|
+
* WU-2667: Derive the list of active worktrees from execution evidence, then
|
|
581
|
+
* call the quality detector. Returns an empty list when the policy is
|
|
582
|
+
* disabled or no active worktrees exist.
|
|
583
|
+
*/
|
|
584
|
+
async function collectQualitySignals(baseDir, executionEvidence) {
|
|
585
|
+
const policy = readMonitorQualitySignalsConfig(getConfig());
|
|
586
|
+
if (!policy.enabled) {
|
|
587
|
+
return [];
|
|
588
|
+
}
|
|
589
|
+
const activeWorktrees = collectActiveWorktreesForQualityCheck(executionEvidence);
|
|
590
|
+
if (activeWorktrees.length === 0) {
|
|
591
|
+
return [];
|
|
592
|
+
}
|
|
593
|
+
return runQualityDetectionForActiveWorktrees({
|
|
594
|
+
baseDir,
|
|
595
|
+
now: new Date(),
|
|
596
|
+
policy,
|
|
597
|
+
activeWorktrees,
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
function collectActiveWorktreesForQualityCheck(executionEvidence) {
|
|
601
|
+
const seen = new Set();
|
|
602
|
+
const collected = [];
|
|
603
|
+
for (const summary of executionEvidence) {
|
|
604
|
+
for (const wu of summary.wus) {
|
|
605
|
+
if (!wu.worktreePresent || wu.state === EXECUTION_STATES.DONE) {
|
|
606
|
+
continue;
|
|
607
|
+
}
|
|
608
|
+
if (seen.has(wu.wuId)) {
|
|
609
|
+
continue;
|
|
610
|
+
}
|
|
611
|
+
seen.add(wu.wuId);
|
|
612
|
+
const worktreePath = deriveWorktreePathForQualityCheck(wu);
|
|
613
|
+
if (!worktreePath) {
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
collected.push({
|
|
617
|
+
wuId: wu.wuId,
|
|
618
|
+
lane: wu.lane,
|
|
619
|
+
worktreePath,
|
|
620
|
+
claimedAt: wu.claimedAt ?? wu.delegation?.pickedUpAt ?? wu.latestCheckpointAt,
|
|
621
|
+
});
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
return collected;
|
|
625
|
+
}
|
|
626
|
+
function deriveWorktreePathForQualityCheck(wu) {
|
|
627
|
+
if (typeof wu.lane !== 'string' || wu.lane.trim().length === 0) {
|
|
628
|
+
return null;
|
|
629
|
+
}
|
|
630
|
+
return defaultWorktreeFrom({ lane: wu.lane, id: wu.wuId });
|
|
631
|
+
}
|
|
569
632
|
/**
|
|
570
633
|
* Formats monitor result for display.
|
|
571
634
|
*
|
|
@@ -586,6 +649,10 @@ export function formatOutput(result) {
|
|
|
586
649
|
lines.push('');
|
|
587
650
|
lines.push(formatExecutionEvidenceSection(result.executionEvidence));
|
|
588
651
|
}
|
|
652
|
+
if (result.qualitySignals && result.qualitySignals.length > 0) {
|
|
653
|
+
lines.push('');
|
|
654
|
+
lines.push(formatQualitySignalsSection(result.qualitySignals));
|
|
655
|
+
}
|
|
589
656
|
// Add dry-run notice if applicable
|
|
590
657
|
if (result.dryRun) {
|
|
591
658
|
lines.push('');
|
|
@@ -594,6 +661,24 @@ export function formatOutput(result) {
|
|
|
594
661
|
}
|
|
595
662
|
return lines.join('\n');
|
|
596
663
|
}
|
|
664
|
+
/**
|
|
665
|
+
* WU-2667: Format the quality-signal section. Warning class — never fails
|
|
666
|
+
* the monitor exit code. The canonical delivery channel is the mem:inbox
|
|
667
|
+
* signal; this section exists so interactive monitor runs surface the same
|
|
668
|
+
* information without requiring a second `pnpm mem:inbox` call.
|
|
669
|
+
*/
|
|
670
|
+
export function formatQualitySignalsSection(signals) {
|
|
671
|
+
const lines = [];
|
|
672
|
+
lines.push(chalk.bold(`Quality Signals (${MONITOR_QUALITY_SIGNAL_TYPE}):`));
|
|
673
|
+
for (const emission of signals) {
|
|
674
|
+
const locLine = `${emission.productionLoc} runtime LOC without tests`;
|
|
675
|
+
lines.push(chalk.yellow(` ⚠ ${emission.wuId} [${emission.lane}]: ${locLine}`));
|
|
676
|
+
if (emission.firstProductionCommit) {
|
|
677
|
+
lines.push(chalk.gray(` first prod commit: ${emission.firstProductionCommit.hash.slice(0, 10)} ${emission.firstProductionCommit.subject}`));
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
return lines.join('\n');
|
|
681
|
+
}
|
|
597
682
|
function parseTimeString(timeStr) {
|
|
598
683
|
const msValue = ms(timeStr);
|
|
599
684
|
if (typeof msValue === 'number') {
|