@telora/daemon 0.17.33 → 0.17.40
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/build-info.json +5 -3
- package/dist/assembly-engine.d.ts +6 -0
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-engine.js +19 -0
- package/dist/assembly-engine.js.map +1 -1
- package/dist/assembly-resolvers.d.ts +17 -8
- package/dist/assembly-resolvers.d.ts.map +1 -1
- package/dist/assembly-resolvers.js +19 -8
- package/dist/assembly-resolvers.js.map +1 -1
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +4 -0
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/session-state.d.ts +10 -0
- package/dist/cli/session-state.d.ts.map +1 -1
- package/dist/cli/session-state.js +31 -0
- package/dist/cli/session-state.js.map +1 -1
- package/dist/completion/completion-decision.d.ts +83 -0
- package/dist/completion/completion-decision.d.ts.map +1 -0
- package/dist/completion/completion-decision.js +48 -0
- package/dist/completion/completion-decision.js.map +1 -0
- package/dist/completion/event-escalations.d.ts +97 -0
- package/dist/completion/event-escalations.d.ts.map +1 -0
- package/dist/completion/event-escalations.js +213 -0
- package/dist/completion/event-escalations.js.map +1 -0
- package/dist/completion/event.d.ts +1 -72
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +149 -329
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/exit-classification.d.ts +82 -0
- package/dist/completion/exit-classification.d.ts.map +1 -0
- package/dist/completion/exit-classification.js +61 -0
- package/dist/completion/exit-classification.js.map +1 -0
- package/dist/completion/index.d.ts +14 -5
- package/dist/completion/index.d.ts.map +1 -1
- package/dist/completion/index.js +14 -5
- package/dist/completion/index.js.map +1 -1
- package/dist/completion/merge-phase.d.ts +114 -0
- package/dist/completion/merge-phase.d.ts.map +1 -0
- package/dist/completion/merge-phase.js +198 -0
- package/dist/completion/merge-phase.js.map +1 -0
- package/dist/completion/review-exit-phase.d.ts +82 -0
- package/dist/completion/review-exit-phase.d.ts.map +1 -0
- package/dist/completion/review-exit-phase.js +228 -0
- package/dist/completion/review-exit-phase.js.map +1 -0
- package/dist/completion/status-advance-phase.d.ts +61 -0
- package/dist/completion/status-advance-phase.d.ts.map +1 -0
- package/dist/completion/status-advance-phase.js +182 -0
- package/dist/completion/status-advance-phase.js.map +1 -0
- package/dist/completion/team-completion.d.ts +28 -269
- package/dist/completion/team-completion.d.ts.map +1 -1
- package/dist/completion/team-completion.js +145 -676
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +70 -41
- package/dist/config.js.map +1 -1
- package/dist/daemon-process.d.ts +18 -2
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/daemon-process.js +15 -2
- package/dist/daemon-process.js.map +1 -1
- package/dist/directive/close-loop-stage.d.ts +50 -0
- package/dist/directive/close-loop-stage.d.ts.map +1 -0
- package/dist/directive/close-loop-stage.js +196 -0
- package/dist/directive/close-loop-stage.js.map +1 -0
- package/dist/directive/directive-assembly.d.ts +33 -0
- package/dist/directive/directive-assembly.d.ts.map +1 -0
- package/dist/directive/directive-assembly.js +77 -0
- package/dist/directive/directive-assembly.js.map +1 -0
- package/dist/directive/directive-dispatch.d.ts +103 -0
- package/dist/directive/directive-dispatch.d.ts.map +1 -0
- package/dist/directive/directive-dispatch.js +279 -0
- package/dist/directive/directive-dispatch.js.map +1 -0
- package/dist/directive/phase-sync.d.ts +89 -0
- package/dist/directive/phase-sync.d.ts.map +1 -0
- package/dist/directive/phase-sync.js +173 -0
- package/dist/directive/phase-sync.js.map +1 -0
- package/dist/directive-executor.d.ts +21 -223
- package/dist/directive-executor.d.ts.map +1 -1
- package/dist/directive-executor.js +28 -687
- package/dist/directive-executor.js.map +1 -1
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +16 -10
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +29 -8
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +29 -10
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-stage-lifecycle.d.ts +7 -5
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +11 -6
- package/dist/focus-stage-lifecycle.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +4 -10
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/pipeline-config.d.ts +13 -0
- package/dist/pipeline-config.d.ts.map +1 -1
- package/dist/pipeline-config.js +15 -0
- package/dist/pipeline-config.js.map +1 -1
- package/dist/resolvers/agent-escalations.d.ts +8 -1
- package/dist/resolvers/agent-escalations.d.ts.map +1 -1
- package/dist/resolvers/agent-escalations.js +25 -22
- package/dist/resolvers/agent-escalations.js.map +1 -1
- package/dist/resolvers/agent-session-summaries.d.ts +8 -1
- package/dist/resolvers/agent-session-summaries.d.ts.map +1 -1
- package/dist/resolvers/agent-session-summaries.js +21 -18
- package/dist/resolvers/agent-session-summaries.js.map +1 -1
- package/dist/resolvers/delivery-acceptance-criteria.d.ts +7 -1
- package/dist/resolvers/delivery-acceptance-criteria.d.ts.map +1 -1
- package/dist/resolvers/delivery-acceptance-criteria.js +14 -11
- package/dist/resolvers/delivery-acceptance-criteria.js.map +1 -1
- package/dist/resolvers/delivery-description.d.ts +7 -1
- package/dist/resolvers/delivery-description.d.ts.map +1 -1
- package/dist/resolvers/delivery-description.js +14 -11
- package/dist/resolvers/delivery-description.js.map +1 -1
- package/dist/resolvers/delivery-issues.d.ts +8 -1
- package/dist/resolvers/delivery-issues.d.ts.map +1 -1
- package/dist/resolvers/delivery-issues.js +51 -48
- package/dist/resolvers/delivery-issues.js.map +1 -1
- package/dist/resolvers/delivery-listing.d.ts +16 -1
- package/dist/resolvers/delivery-listing.d.ts.map +1 -1
- package/dist/resolvers/delivery-listing.js +36 -33
- package/dist/resolvers/delivery-listing.js.map +1 -1
- package/dist/resolvers/delivery-tech-context.d.ts +7 -1
- package/dist/resolvers/delivery-tech-context.d.ts.map +1 -1
- package/dist/resolvers/delivery-tech-context.js +14 -11
- package/dist/resolvers/delivery-tech-context.js.map +1 -1
- package/dist/resolvers/deployment-profile.d.ts +8 -1
- package/dist/resolvers/deployment-profile.d.ts.map +1 -1
- package/dist/resolvers/deployment-profile.js +20 -17
- package/dist/resolvers/deployment-profile.js.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.d.ts +26 -1
- package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.js +91 -88
- package/dist/resolvers/focus-anchoring-injections.js.map +1 -1
- package/dist/resolvers/focus-context.d.ts +9 -1
- package/dist/resolvers/focus-context.d.ts.map +1 -1
- package/dist/resolvers/focus-context.js +38 -35
- package/dist/resolvers/focus-context.js.map +1 -1
- package/dist/resolvers/focus-injections.d.ts +13 -1
- package/dist/resolvers/focus-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-injections.js +60 -57
- package/dist/resolvers/focus-injections.js.map +1 -1
- package/dist/resolvers/focus-last-review-report.d.ts +2 -1
- package/dist/resolvers/focus-last-review-report.d.ts.map +1 -1
- package/dist/resolvers/focus-last-review-report.js +33 -30
- package/dist/resolvers/focus-last-review-report.js.map +1 -1
- package/dist/resolvers/focus-reality-tree.d.ts +15 -1
- package/dist/resolvers/focus-reality-tree.d.ts.map +1 -1
- package/dist/resolvers/focus-reality-tree.js +35 -32
- package/dist/resolvers/focus-reality-tree.js.map +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts +8 -1
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +33 -30
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/guards-evaluation-results.d.ts +7 -1
- package/dist/resolvers/guards-evaluation-results.d.ts.map +1 -1
- package/dist/resolvers/guards-evaluation-results.js +25 -22
- package/dist/resolvers/guards-evaluation-results.js.map +1 -1
- package/dist/resolvers/index.d.ts +22 -40
- package/dist/resolvers/index.d.ts.map +1 -1
- package/dist/resolvers/index.js +112 -41
- package/dist/resolvers/index.js.map +1 -1
- package/dist/resolvers/loop-context.d.ts +18 -1
- package/dist/resolvers/loop-context.d.ts.map +1 -1
- package/dist/resolvers/loop-context.js +21 -18
- package/dist/resolvers/loop-context.js.map +1 -1
- package/dist/resolvers/loop-delivery-index.d.ts +17 -1
- package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
- package/dist/resolvers/loop-delivery-index.js +51 -48
- package/dist/resolvers/loop-delivery-index.js.map +1 -1
- package/dist/resolvers/loop-documents.d.ts +9 -1
- package/dist/resolvers/loop-documents.d.ts.map +1 -1
- package/dist/resolvers/loop-documents.js +22 -19
- package/dist/resolvers/loop-documents.js.map +1 -1
- package/dist/resolvers/loop-expected-effects.d.ts +11 -1
- package/dist/resolvers/loop-expected-effects.d.ts.map +1 -1
- package/dist/resolvers/loop-expected-effects.js +53 -50
- package/dist/resolvers/loop-expected-effects.js.map +1 -1
- package/dist/resolvers/loop-frt-statement.d.ts +11 -1
- package/dist/resolvers/loop-frt-statement.d.ts.map +1 -1
- package/dist/resolvers/loop-frt-statement.js +28 -25
- package/dist/resolvers/loop-frt-statement.js.map +1 -1
- package/dist/resolvers/loop-injection.d.ts +10 -1
- package/dist/resolvers/loop-injection.d.ts.map +1 -1
- package/dist/resolvers/loop-injection.js +38 -35
- package/dist/resolvers/loop-injection.js.map +1 -1
- package/dist/resolvers/loop-persona.d.ts +20 -1
- package/dist/resolvers/loop-persona.d.ts.map +1 -1
- package/dist/resolvers/loop-persona.js +20 -17
- package/dist/resolvers/loop-persona.js.map +1 -1
- package/dist/resolvers/loop-questions.d.ts +8 -1
- package/dist/resolvers/loop-questions.d.ts.map +1 -1
- package/dist/resolvers/loop-questions.js +39 -36
- package/dist/resolvers/loop-questions.js.map +1 -1
- package/dist/resolvers/loop-upstream-udes.d.ts +11 -1
- package/dist/resolvers/loop-upstream-udes.d.ts.map +1 -1
- package/dist/resolvers/loop-upstream-udes.js +74 -71
- package/dist/resolvers/loop-upstream-udes.js.map +1 -1
- package/dist/resolvers/prd-context.d.ts +2 -0
- package/dist/resolvers/prd-context.d.ts.map +1 -1
- package/dist/resolvers/prd-context.js +16 -13
- package/dist/resolvers/prd-context.js.map +1 -1
- package/dist/resolvers/prd-persona.d.ts +2 -0
- package/dist/resolvers/prd-persona.d.ts.map +1 -1
- package/dist/resolvers/prd-persona.js +6 -3
- package/dist/resolvers/prd-persona.js.map +1 -1
- package/dist/resolvers/reality-metrics.d.ts +8 -1
- package/dist/resolvers/reality-metrics.d.ts.map +1 -1
- package/dist/resolvers/reality-metrics.js +73 -70
- package/dist/resolvers/reality-metrics.js.map +1 -1
- package/dist/resolvers/reality-projections.d.ts +7 -1
- package/dist/resolvers/reality-projections.d.ts.map +1 -1
- package/dist/resolvers/reality-projections.js +35 -32
- package/dist/resolvers/reality-projections.js.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.d.ts +10 -1
- package/dist/resolvers/reality-tree-snapshot.d.ts.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.js +34 -31
- package/dist/resolvers/reality-tree-snapshot.js.map +1 -1
- package/dist/resolvers/retired-injections.d.ts +10 -1
- package/dist/resolvers/retired-injections.d.ts.map +1 -1
- package/dist/resolvers/retired-injections.js +68 -65
- package/dist/resolvers/retired-injections.js.map +1 -1
- package/dist/resolvers/review-outcomes.d.ts +11 -1
- package/dist/resolvers/review-outcomes.d.ts.map +1 -1
- package/dist/resolvers/review-outcomes.js +27 -24
- package/dist/resolvers/review-outcomes.js.map +1 -1
- package/dist/resolvers/security-advisory.d.ts +2 -1
- package/dist/resolvers/security-advisory.d.ts.map +1 -1
- package/dist/resolvers/security-advisory.js +47 -44
- package/dist/resolvers/security-advisory.js.map +1 -1
- package/dist/resolvers/wiki-search.d.ts +8 -1
- package/dist/resolvers/wiki-search.d.ts.map +1 -1
- package/dist/resolvers/wiki-search.js +17 -14
- package/dist/resolvers/wiki-search.js.map +1 -1
- package/dist/resolvers/wiki-topic.d.ts +9 -1
- package/dist/resolvers/wiki-topic.d.ts.map +1 -1
- package/dist/resolvers/wiki-topic.js +21 -18
- package/dist/resolvers/wiki-topic.js.map +1 -1
- package/dist/resolvers/workflow-stages.d.ts +7 -1
- package/dist/resolvers/workflow-stages.d.ts.map +1 -1
- package/dist/resolvers/workflow-stages.js +20 -17
- package/dist/resolvers/workflow-stages.js.map +1 -1
- package/dist/review-defect-detector.d.ts +4 -1
- package/dist/review-defect-detector.d.ts.map +1 -1
- package/dist/review-defect-detector.js +6 -8
- package/dist/review-defect-detector.js.map +1 -1
- package/dist/self-update.d.ts +6 -0
- package/dist/self-update.d.ts.map +1 -1
- package/dist/self-update.js +6 -1
- package/dist/self-update.js.map +1 -1
- package/dist/spawner/index.d.ts +2 -1
- package/dist/spawner/index.d.ts.map +1 -1
- package/dist/spawner/index.js +2 -1
- package/dist/spawner/index.js.map +1 -1
- package/dist/spawner/spawn-team.d.ts +14 -52
- package/dist/spawner/spawn-team.d.ts.map +1 -1
- package/dist/spawner/spawn-team.js +14 -469
- package/dist/spawner/spawn-team.js.map +1 -1
- package/dist/staleness.d.ts +124 -0
- package/dist/staleness.d.ts.map +1 -0
- package/dist/staleness.js +215 -0
- package/dist/staleness.js.map +1 -0
- package/dist/state-cascade.d.ts +3 -2
- package/dist/state-cascade.d.ts.map +1 -1
- package/dist/state-cascade.js +7 -3
- package/dist/state-cascade.js.map +1 -1
- package/dist/types/focus.d.ts +5 -4
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/session.d.ts +2 -3
- package/dist/types/session.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.js +2 -23
- package/dist/unified-engine-lifecycle.js.map +1 -1
- package/dist/unified-shell-config.d.ts +2 -7
- package/dist/unified-shell-config.d.ts.map +1 -1
- package/dist/unified-shell-config.js +2 -23
- package/dist/unified-shell-config.js.map +1 -1
- package/dist/unified-shell-status.d.ts.map +1 -1
- package/dist/unified-shell-status.js +2 -4
- package/dist/unified-shell-status.js.map +1 -1
- package/dist/unified-shell.d.ts.map +1 -1
- package/dist/unified-shell.js +21 -24
- package/dist/unified-shell.js.map +1 -1
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +6 -4
- package/dist/version-check.js.map +1 -1
- package/package.json +3 -3
- package/dist/pm/adaptive-poller.d.ts +0 -26
- package/dist/pm/adaptive-poller.d.ts.map +0 -1
- package/dist/pm/adaptive-poller.js +0 -53
- package/dist/pm/adaptive-poller.js.map +0 -1
- package/dist/pm/cascade-evaluator.d.ts +0 -29
- package/dist/pm/cascade-evaluator.d.ts.map +0 -1
- package/dist/pm/cascade-evaluator.js +0 -135
- package/dist/pm/cascade-evaluator.js.map +0 -1
- package/dist/pm/channel-email.d.ts +0 -42
- package/dist/pm/channel-email.d.ts.map +0 -1
- package/dist/pm/channel-email.js +0 -47
- package/dist/pm/channel-email.js.map +0 -1
- package/dist/pm/channel-slack.d.ts +0 -40
- package/dist/pm/channel-slack.d.ts.map +0 -1
- package/dist/pm/channel-slack.js +0 -46
- package/dist/pm/channel-slack.js.map +0 -1
- package/dist/pm/communication-drafter.d.ts +0 -44
- package/dist/pm/communication-drafter.d.ts.map +0 -1
- package/dist/pm/communication-drafter.js +0 -84
- package/dist/pm/communication-drafter.js.map +0 -1
- package/dist/pm/dialog-handler.d.ts +0 -32
- package/dist/pm/dialog-handler.d.ts.map +0 -1
- package/dist/pm/dialog-handler.js +0 -107
- package/dist/pm/dialog-handler.js.map +0 -1
- package/dist/pm/mitigation-correlator.d.ts +0 -29
- package/dist/pm/mitigation-correlator.d.ts.map +0 -1
- package/dist/pm/mitigation-correlator.js +0 -147
- package/dist/pm/mitigation-correlator.js.map +0 -1
- package/dist/pm/risk-scanner.d.ts +0 -28
- package/dist/pm/risk-scanner.d.ts.map +0 -1
- package/dist/pm/risk-scanner.js +0 -112
- package/dist/pm/risk-scanner.js.map +0 -1
- package/dist/pm-engine.d.ts +0 -96
- package/dist/pm-engine.d.ts.map +0 -1
- package/dist/pm-engine.js +0 -540
- package/dist/pm-engine.js.map +0 -1
- package/dist/pm-process.d.ts +0 -45
- package/dist/pm-process.d.ts.map +0 -1
- package/dist/pm-process.js +0 -195
- package/dist/pm-process.js.map +0 -1
- package/dist/pm-prompt-builder.d.ts +0 -23
- package/dist/pm-prompt-builder.d.ts.map +0 -1
- package/dist/pm-prompt-builder.js +0 -64
- package/dist/pm-prompt-builder.js.map +0 -1
- package/dist/session-lifecycle.d.ts +0 -78
- package/dist/session-lifecycle.d.ts.map +0 -1
- package/dist/session-lifecycle.js +0 -382
- package/dist/session-lifecycle.js.map +0 -1
- package/dist/types/pm.d.ts +0 -53
- package/dist/types/pm.d.ts.map +0 -1
- package/dist/types/pm.js +0 -10
- package/dist/types/pm.js.map +0 -1
package/dist/pm-process.js
DELETED
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PM process state and lifecycle management.
|
|
3
|
-
*
|
|
4
|
-
* Manages the spawning, monitoring, and termination of PM Claude Code
|
|
5
|
-
* processes. Each product gets one PM process that runs /loop for its
|
|
6
|
-
* PM cycle.
|
|
7
|
-
*/
|
|
8
|
-
import { spawn } from 'node:child_process';
|
|
9
|
-
import { buildStreamJsonArgs, stripClaudeCodeEnvVars, sendMessage, } from '@telora/daemon-core';
|
|
10
|
-
import { DEFAULT_PM_PROCESS_CONFIG } from './types/pm.js';
|
|
11
|
-
import { buildPMPrompt } from './pm-prompt-builder.js';
|
|
12
|
-
import { callApi } from './queries/shared.js';
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
// Active processes
|
|
15
|
-
// ---------------------------------------------------------------------------
|
|
16
|
-
/** Map of productId -> PMProcessState for active PM processes. */
|
|
17
|
-
const activeProcesses = new Map();
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
// Spawn
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
/**
|
|
22
|
-
* Spawn a PM Claude Code process for a product.
|
|
23
|
-
*
|
|
24
|
-
* The process runs in the product's repo directory with the PM CLAUDE.md
|
|
25
|
-
* as context, and is given a /loop command to run the PM cycle periodically.
|
|
26
|
-
*/
|
|
27
|
-
export async function spawnPMProcess(config, productId, repoPath, governor, pmConfig = DEFAULT_PM_PROCESS_CONFIG, existingSessionId) {
|
|
28
|
-
// Acquire governor slot
|
|
29
|
-
await governor.acquireSlot('pm');
|
|
30
|
-
// Use existing session if provided (from poll), otherwise create one
|
|
31
|
-
let pmSessionId;
|
|
32
|
-
if (existingSessionId) {
|
|
33
|
-
pmSessionId = existingSessionId;
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
try {
|
|
37
|
-
const result = await callApi('pm_session_create', {
|
|
38
|
-
productId,
|
|
39
|
-
});
|
|
40
|
-
pmSessionId = result?.session?.id ?? `pm-${productId}`;
|
|
41
|
-
}
|
|
42
|
-
catch {
|
|
43
|
-
pmSessionId = `pm-${productId}`;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
// Fetch product info
|
|
47
|
-
let productName = productId;
|
|
48
|
-
try {
|
|
49
|
-
const productResult = await callApi('product_get', {
|
|
50
|
-
productId,
|
|
51
|
-
});
|
|
52
|
-
productName = productResult?.name ?? productId;
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
// Use productId as fallback name
|
|
56
|
-
}
|
|
57
|
-
// Build initial prompt
|
|
58
|
-
const initialPrompt = await buildPMPrompt(repoPath, { id: productId, name: productName }, pmConfig.loopIntervalMinutes);
|
|
59
|
-
// Build CLI args
|
|
60
|
-
const args = buildStreamJsonArgs();
|
|
61
|
-
// Build environment (strip inherited Claude Code vars)
|
|
62
|
-
const spawnEnv = stripClaudeCodeEnvVars(process.env, {
|
|
63
|
-
preserve: ['CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS'],
|
|
64
|
-
});
|
|
65
|
-
// Spawn Claude Code process in the product repo
|
|
66
|
-
const proc = spawn(config.claudeCodePath, args, {
|
|
67
|
-
cwd: repoPath,
|
|
68
|
-
env: spawnEnv,
|
|
69
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
70
|
-
});
|
|
71
|
-
const state = {
|
|
72
|
-
productId,
|
|
73
|
-
proc,
|
|
74
|
-
pmSessionId,
|
|
75
|
-
phase: 'starting',
|
|
76
|
-
restartCount: 0,
|
|
77
|
-
lastRestartAt: null,
|
|
78
|
-
stdin: proc.stdin,
|
|
79
|
-
spawnedAt: new Date(),
|
|
80
|
-
};
|
|
81
|
-
activeProcesses.set(productId, state);
|
|
82
|
-
// Send initial prompt
|
|
83
|
-
sendMessage(proc.stdin, initialPrompt);
|
|
84
|
-
state.phase = 'running';
|
|
85
|
-
// Log stdout (simple line-by-line)
|
|
86
|
-
proc.stdout.on('data', (data) => {
|
|
87
|
-
const lines = data.toString().split('\n').filter(Boolean);
|
|
88
|
-
for (const line of lines) {
|
|
89
|
-
try {
|
|
90
|
-
const event = JSON.parse(line);
|
|
91
|
-
// Capture Claude session ID from init event
|
|
92
|
-
if (event.type === 'system' && event.sessionId) {
|
|
93
|
-
state.claudeSessionId = event.sessionId;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
// Non-JSON output -- log as-is
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
proc.stderr.on('data', (data) => {
|
|
102
|
-
console.log(`[PM] stderr (${productId}): ${data.toString().trim()}`);
|
|
103
|
-
});
|
|
104
|
-
// Handle process exit
|
|
105
|
-
proc.on('close', (code) => {
|
|
106
|
-
console.log(`[PM] Process exited for product ${productId} (code: ${code})`);
|
|
107
|
-
state.phase = 'crashed';
|
|
108
|
-
governor.releaseSlot('pm');
|
|
109
|
-
activeProcesses.delete(productId);
|
|
110
|
-
});
|
|
111
|
-
proc.on('error', (err) => {
|
|
112
|
-
console.log(`[PM] Process error for product ${productId}: ${err.message}`);
|
|
113
|
-
state.phase = 'crashed';
|
|
114
|
-
governor.releaseSlot('pm');
|
|
115
|
-
activeProcesses.delete(productId);
|
|
116
|
-
});
|
|
117
|
-
console.log(`[PM] Spawned process for product ${productId} (pid: ${proc.pid})`);
|
|
118
|
-
return state;
|
|
119
|
-
}
|
|
120
|
-
// ---------------------------------------------------------------------------
|
|
121
|
-
// Terminate
|
|
122
|
-
// ---------------------------------------------------------------------------
|
|
123
|
-
/**
|
|
124
|
-
* Gracefully terminate a PM process for a product.
|
|
125
|
-
*/
|
|
126
|
-
export function terminatePMProcess(productId) {
|
|
127
|
-
const state = activeProcesses.get(productId);
|
|
128
|
-
if (!state)
|
|
129
|
-
return false;
|
|
130
|
-
state.phase = 'stopping';
|
|
131
|
-
// Try graceful shutdown: close stdin, then SIGTERM
|
|
132
|
-
try {
|
|
133
|
-
state.stdin.end();
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
// Already closed
|
|
137
|
-
}
|
|
138
|
-
setTimeout(() => {
|
|
139
|
-
if (state.proc.exitCode === null) {
|
|
140
|
-
state.proc.kill('SIGTERM');
|
|
141
|
-
}
|
|
142
|
-
}, 5000);
|
|
143
|
-
setTimeout(() => {
|
|
144
|
-
if (state.proc.exitCode === null) {
|
|
145
|
-
state.proc.kill('SIGKILL');
|
|
146
|
-
}
|
|
147
|
-
}, 15000);
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Terminate all active PM processes.
|
|
152
|
-
*/
|
|
153
|
-
export function terminateAllPMProcesses() {
|
|
154
|
-
for (const productId of activeProcesses.keys()) {
|
|
155
|
-
terminatePMProcess(productId);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
// ---------------------------------------------------------------------------
|
|
159
|
-
// Query
|
|
160
|
-
// ---------------------------------------------------------------------------
|
|
161
|
-
/**
|
|
162
|
-
* Get the active PM process for a product, or undefined if none.
|
|
163
|
-
*/
|
|
164
|
-
export function getPMProcess(productId) {
|
|
165
|
-
return activeProcesses.get(productId);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Get all active PM processes.
|
|
169
|
-
*/
|
|
170
|
-
export function getActivePMProcesses() {
|
|
171
|
-
return activeProcesses;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Check if a PM process is running for a product.
|
|
175
|
-
*/
|
|
176
|
-
export function isPMProcessRunning(productId) {
|
|
177
|
-
const state = activeProcesses.get(productId);
|
|
178
|
-
return state !== undefined && state.phase === 'running';
|
|
179
|
-
}
|
|
180
|
-
// ---------------------------------------------------------------------------
|
|
181
|
-
// Backoff
|
|
182
|
-
// ---------------------------------------------------------------------------
|
|
183
|
-
/**
|
|
184
|
-
* Calculate exponential backoff delay for PM process restart.
|
|
185
|
-
*
|
|
186
|
-
* Backoff schedule: 1m, 2m, 4m, 8m, 16m, 30m (capped)
|
|
187
|
-
* Returns delay in milliseconds.
|
|
188
|
-
*/
|
|
189
|
-
export function calculateRestartDelay(restartCount) {
|
|
190
|
-
const baseMs = 60_000; // 1 minute
|
|
191
|
-
const maxMs = 30 * 60_000; // 30 minutes
|
|
192
|
-
const delay = Math.min(baseMs * Math.pow(2, restartCount), maxMs);
|
|
193
|
-
return delay;
|
|
194
|
-
}
|
|
195
|
-
//# sourceMappingURL=pm-process.js.map
|
package/dist/pm-process.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pm-process.js","sourceRoot":"","sources":["../src/pm-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PM prompt builder -- builds the initial prompt for a PM Claude Code process.
|
|
3
|
-
*
|
|
4
|
-
* Reads pm/CLAUDE.md from the product repo, fetches product details and PM
|
|
5
|
-
* session state, and composes the initial prompt that boots the PM agent
|
|
6
|
-
* with /loop at the configured interval.
|
|
7
|
-
*/
|
|
8
|
-
interface ProductInfo {
|
|
9
|
-
id: string;
|
|
10
|
-
name: string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Build the initial prompt for a PM Claude Code process.
|
|
14
|
-
*
|
|
15
|
-
* The prompt includes:
|
|
16
|
-
* 1. pm/CLAUDE.md contents (the PM agent's system instructions)
|
|
17
|
-
* 2. Product context (name, ID)
|
|
18
|
-
* 3. PM session state (last assessment, pending items)
|
|
19
|
-
* 4. /loop instruction at the configured interval
|
|
20
|
-
*/
|
|
21
|
-
export declare function buildPMPrompt(repoPath: string, product: ProductInfo, loopIntervalMinutes: number): Promise<string>;
|
|
22
|
-
export {};
|
|
23
|
-
//# sourceMappingURL=pm-prompt-builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pm-prompt-builder.d.ts","sourceRoot":"","sources":["../src/pm-prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAYD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,EACpB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PM prompt builder -- builds the initial prompt for a PM Claude Code process.
|
|
3
|
-
*
|
|
4
|
-
* Reads pm/CLAUDE.md from the product repo, fetches product details and PM
|
|
5
|
-
* session state, and composes the initial prompt that boots the PM agent
|
|
6
|
-
* with /loop at the configured interval.
|
|
7
|
-
*/
|
|
8
|
-
import { readFile } from 'node:fs/promises';
|
|
9
|
-
import { join } from 'node:path';
|
|
10
|
-
import { callApi } from './queries/shared.js';
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
// Builder
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
/**
|
|
15
|
-
* Build the initial prompt for a PM Claude Code process.
|
|
16
|
-
*
|
|
17
|
-
* The prompt includes:
|
|
18
|
-
* 1. pm/CLAUDE.md contents (the PM agent's system instructions)
|
|
19
|
-
* 2. Product context (name, ID)
|
|
20
|
-
* 3. PM session state (last assessment, pending items)
|
|
21
|
-
* 4. /loop instruction at the configured interval
|
|
22
|
-
*/
|
|
23
|
-
export async function buildPMPrompt(repoPath, product, loopIntervalMinutes) {
|
|
24
|
-
const parts = [];
|
|
25
|
-
// 1. Read pm/CLAUDE.md from the product repo
|
|
26
|
-
const pmClaudeMdPath = join(repoPath, 'pm', 'CLAUDE.md');
|
|
27
|
-
let pmInstructions = '';
|
|
28
|
-
try {
|
|
29
|
-
pmInstructions = await readFile(pmClaudeMdPath, 'utf-8');
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
// If pm/CLAUDE.md doesn't exist, use a minimal fallback
|
|
33
|
-
pmInstructions = '# PM Agent\n\nYou are a PM agent. Run your cycle to check inbox, review action plan, and generate reports.';
|
|
34
|
-
}
|
|
35
|
-
parts.push(pmInstructions);
|
|
36
|
-
// 2. Product context
|
|
37
|
-
parts.push(`\n## Product\n\n- **Name**: ${product.name}\n- **ID**: ${product.id}`);
|
|
38
|
-
// 3. PM session state
|
|
39
|
-
let sessionState = null;
|
|
40
|
-
try {
|
|
41
|
-
const sessionResult = await callApi('pm_session_get', {
|
|
42
|
-
productId: product.id,
|
|
43
|
-
});
|
|
44
|
-
sessionState = sessionResult?.session ?? null;
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
// Session may not exist yet -- PM will create it during first cycle
|
|
48
|
-
}
|
|
49
|
-
if (sessionState) {
|
|
50
|
-
parts.push('\n## Session State\n');
|
|
51
|
-
if (sessionState.lastCycleAt) {
|
|
52
|
-
parts.push(`- **Last cycle**: ${sessionState.lastCycleAt}`);
|
|
53
|
-
}
|
|
54
|
-
if (sessionState.lastAssessment) {
|
|
55
|
-
parts.push(`- **Last assessment**: ${JSON.stringify(sessionState.lastAssessment, null, 2)}`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// 4. /loop instruction
|
|
59
|
-
parts.push(`\n## Instructions\n\n` +
|
|
60
|
-
`Run the PM cycle now, then continue running it on a loop.\n\n` +
|
|
61
|
-
`/loop ${loopIntervalMinutes}m /pm-cycle`);
|
|
62
|
-
return parts.join('\n');
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=pm-prompt-builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pm-prompt-builder.js","sourceRoot":"","sources":["../src/pm-prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiB9C,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,OAAoB,EACpB,mBAA2B;IAE3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,6CAA6C;IAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACzD,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,cAAc,GAAG,4GAA4G,CAAC;IAChI,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE3B,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,IAAI,eAAe,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnF,sBAAsB;IACtB,IAAI,YAAY,GAA0B,IAAI,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE;YACpD,SAAS,EAAE,OAAO,CAAC,EAAE;SACtB,CAAiC,CAAC;QACnC,YAAY,GAAG,aAAa,EAAE,OAAO,IAAI,IAAI,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,qBAAqB,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,IAAI,CACR,uBAAuB;QACvB,+DAA+D;QAC/D,SAAS,mBAAmB,aAAa,CAC1C,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session lifecycle management for focus teams.
|
|
3
|
-
*
|
|
4
|
-
* Extracted from focus-executor.ts. Contains functions for session
|
|
5
|
-
* start/end, cleanup, error handling, team completion detection,
|
|
6
|
-
* termination, and deactivation checks.
|
|
7
|
-
*/
|
|
8
|
-
import type { ChildProcess } from 'node:child_process';
|
|
9
|
-
import type { DaemonConfig, FocusTeamState } from './types.js';
|
|
10
|
-
import type { CompletionDetector } from './completion/index.js';
|
|
11
|
-
import type { ActivityTracker } from './activity-tracker.js';
|
|
12
|
-
import type { SpawnFocusTeamParams } from './spawner/index.js';
|
|
13
|
-
import type { LogStreams } from './types.js';
|
|
14
|
-
export interface SessionLifecycleContext {
|
|
15
|
-
proc: ChildProcess;
|
|
16
|
-
params: SpawnFocusTeamParams;
|
|
17
|
-
teamState: FocusTeamState;
|
|
18
|
-
sessionId: string;
|
|
19
|
-
focusId: string;
|
|
20
|
-
focusName: string;
|
|
21
|
-
completionDetector: CompletionDetector;
|
|
22
|
-
activityTracker: ActivityTracker;
|
|
23
|
-
logStreams: LogStreams;
|
|
24
|
-
resumeId: string | null;
|
|
25
|
-
spawnedAt: number;
|
|
26
|
-
config: DaemonConfig;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Attach session lifecycle handlers to a team lead process.
|
|
30
|
-
*
|
|
31
|
-
* Wires up the 'complete', 'close', and 'error' event handlers that manage
|
|
32
|
-
* the full lifecycle of the team lead process: completion detection,
|
|
33
|
-
* resume-failure retry, cleanup, and error reporting.
|
|
34
|
-
*/
|
|
35
|
-
export declare function attachSessionLifecycle(ctx: SessionLifecycleContext): void;
|
|
36
|
-
/**
|
|
37
|
-
* Terminate a focus team.
|
|
38
|
-
*
|
|
39
|
-
* Sends a deactivation message via stdin (if open) before SIGTERM
|
|
40
|
-
* to allow the team lead to process the shutdown gracefully.
|
|
41
|
-
*/
|
|
42
|
-
export declare function terminateTeam(focusId: string): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Wait for a team's process to exit (leave activeTeams).
|
|
45
|
-
*
|
|
46
|
-
* Polls activeTeams until the focus is no longer present,
|
|
47
|
-
* which happens when handleTeamCompletion runs on the 'close' event.
|
|
48
|
-
* If the timeout expires, sends SIGKILL and waits briefly.
|
|
49
|
-
*
|
|
50
|
-
* @param focusId - Focus to wait for
|
|
51
|
-
* @param timeoutMs - Max wait time in ms (default 30s)
|
|
52
|
-
* @returns true if team exited within timeout, false if forced
|
|
53
|
-
*/
|
|
54
|
-
export declare function waitForTeamExit(focusId: string, timeoutMs?: number): Promise<boolean>;
|
|
55
|
-
/**
|
|
56
|
-
* Terminate all active teams.
|
|
57
|
-
*/
|
|
58
|
-
export declare function terminateAllTeams(): void;
|
|
59
|
-
/**
|
|
60
|
-
* Detect focuses that have been deactivated (agent role removed)
|
|
61
|
-
* and shut down their active teams.
|
|
62
|
-
*/
|
|
63
|
-
export declare function detectDeactivatedFocuses(config: DaemonConfig): Promise<void>;
|
|
64
|
-
/**
|
|
65
|
-
* Check active teams for newly completed deliveries and merge
|
|
66
|
-
* the focus branch to integration incrementally.
|
|
67
|
-
*
|
|
68
|
-
* Called from the poll loop. For each active team, queries delivery
|
|
69
|
-
* statuses and triggers a merge when any delivery reaches verify/done
|
|
70
|
-
* that hasn't already been merged mid-flight.
|
|
71
|
-
*
|
|
72
|
-
* After processing merges, checks if ALL active deliveries are terminal
|
|
73
|
-
* and merged. If so, terminates the team proactively since no more work
|
|
74
|
-
* remains. The focus stays active in the DB -- if new deliveries
|
|
75
|
-
* arrive later, the next poll cycle spawns a fresh team.
|
|
76
|
-
*/
|
|
77
|
-
export declare function checkAndMergeCompletedDeliveries(config: DaemonConfig): Promise<void>;
|
|
78
|
-
//# sourceMappingURL=session-lifecycle.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../src/session-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAc7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA0F7C,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,uBAAuB,GAAG,IAAI,CA6HzE;AAID;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA2CtD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAsB1F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CA0Ff"}
|