@renseiai/agentfactory 0.8.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/LICENSE +21 -0
- package/README.md +125 -0
- package/dist/src/config/index.d.ts +3 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +1 -0
- package/dist/src/config/repository-config.d.ts +44 -0
- package/dist/src/config/repository-config.d.ts.map +1 -0
- package/dist/src/config/repository-config.js +88 -0
- package/dist/src/config/repository-config.test.d.ts +2 -0
- package/dist/src/config/repository-config.test.d.ts.map +1 -0
- package/dist/src/config/repository-config.test.js +249 -0
- package/dist/src/deployment/deployment-checker.d.ts +110 -0
- package/dist/src/deployment/deployment-checker.d.ts.map +1 -0
- package/dist/src/deployment/deployment-checker.js +242 -0
- package/dist/src/deployment/index.d.ts +3 -0
- package/dist/src/deployment/index.d.ts.map +1 -0
- package/dist/src/deployment/index.js +2 -0
- package/dist/src/frontend/index.d.ts +2 -0
- package/dist/src/frontend/index.d.ts.map +1 -0
- package/dist/src/frontend/index.js +1 -0
- package/dist/src/frontend/types.d.ts +106 -0
- package/dist/src/frontend/types.d.ts.map +1 -0
- package/dist/src/frontend/types.js +11 -0
- package/dist/src/governor/decision-engine.d.ts +52 -0
- package/dist/src/governor/decision-engine.d.ts.map +1 -0
- package/dist/src/governor/decision-engine.js +220 -0
- package/dist/src/governor/decision-engine.test.d.ts +2 -0
- package/dist/src/governor/decision-engine.test.d.ts.map +1 -0
- package/dist/src/governor/decision-engine.test.js +629 -0
- package/dist/src/governor/event-bus.d.ts +43 -0
- package/dist/src/governor/event-bus.d.ts.map +1 -0
- package/dist/src/governor/event-bus.js +8 -0
- package/dist/src/governor/event-deduplicator.d.ts +43 -0
- package/dist/src/governor/event-deduplicator.d.ts.map +1 -0
- package/dist/src/governor/event-deduplicator.js +53 -0
- package/dist/src/governor/event-driven-governor.d.ts +131 -0
- package/dist/src/governor/event-driven-governor.d.ts.map +1 -0
- package/dist/src/governor/event-driven-governor.js +379 -0
- package/dist/src/governor/event-driven-governor.test.d.ts +2 -0
- package/dist/src/governor/event-driven-governor.test.d.ts.map +1 -0
- package/dist/src/governor/event-driven-governor.test.js +673 -0
- package/dist/src/governor/event-types.d.ts +78 -0
- package/dist/src/governor/event-types.d.ts.map +1 -0
- package/dist/src/governor/event-types.js +32 -0
- package/dist/src/governor/governor-types.d.ts +82 -0
- package/dist/src/governor/governor-types.d.ts.map +1 -0
- package/dist/src/governor/governor-types.js +21 -0
- package/dist/src/governor/governor.d.ts +100 -0
- package/dist/src/governor/governor.d.ts.map +1 -0
- package/dist/src/governor/governor.js +262 -0
- package/dist/src/governor/governor.test.d.ts +2 -0
- package/dist/src/governor/governor.test.d.ts.map +1 -0
- package/dist/src/governor/governor.test.js +514 -0
- package/dist/src/governor/human-touchpoints.d.ts +131 -0
- package/dist/src/governor/human-touchpoints.d.ts.map +1 -0
- package/dist/src/governor/human-touchpoints.js +251 -0
- package/dist/src/governor/human-touchpoints.test.d.ts +2 -0
- package/dist/src/governor/human-touchpoints.test.d.ts.map +1 -0
- package/dist/src/governor/human-touchpoints.test.js +366 -0
- package/dist/src/governor/in-memory-event-bus.d.ts +29 -0
- package/dist/src/governor/in-memory-event-bus.d.ts.map +1 -0
- package/dist/src/governor/in-memory-event-bus.js +79 -0
- package/dist/src/governor/index.d.ts +14 -0
- package/dist/src/governor/index.d.ts.map +1 -0
- package/dist/src/governor/index.js +13 -0
- package/dist/src/governor/override-parser.d.ts +60 -0
- package/dist/src/governor/override-parser.d.ts.map +1 -0
- package/dist/src/governor/override-parser.js +98 -0
- package/dist/src/governor/override-parser.test.d.ts +2 -0
- package/dist/src/governor/override-parser.test.d.ts.map +1 -0
- package/dist/src/governor/override-parser.test.js +312 -0
- package/dist/src/governor/platform-adapter.d.ts +69 -0
- package/dist/src/governor/platform-adapter.d.ts.map +1 -0
- package/dist/src/governor/platform-adapter.js +11 -0
- package/dist/src/governor/processing-state.d.ts +66 -0
- package/dist/src/governor/processing-state.d.ts.map +1 -0
- package/dist/src/governor/processing-state.js +43 -0
- package/dist/src/governor/processing-state.test.d.ts +2 -0
- package/dist/src/governor/processing-state.test.d.ts.map +1 -0
- package/dist/src/governor/processing-state.test.js +96 -0
- package/dist/src/governor/top-of-funnel.d.ts +118 -0
- package/dist/src/governor/top-of-funnel.d.ts.map +1 -0
- package/dist/src/governor/top-of-funnel.js +168 -0
- package/dist/src/governor/top-of-funnel.test.d.ts +2 -0
- package/dist/src/governor/top-of-funnel.test.d.ts.map +1 -0
- package/dist/src/governor/top-of-funnel.test.js +331 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +10 -0
- package/dist/src/linear-cli.d.ts +38 -0
- package/dist/src/linear-cli.d.ts.map +1 -0
- package/dist/src/linear-cli.js +674 -0
- package/dist/src/logger.d.ts +117 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +430 -0
- package/dist/src/manifest/generate.d.ts +20 -0
- package/dist/src/manifest/generate.d.ts.map +1 -0
- package/dist/src/manifest/generate.js +65 -0
- package/dist/src/manifest/index.d.ts +4 -0
- package/dist/src/manifest/index.d.ts.map +1 -0
- package/dist/src/manifest/index.js +2 -0
- package/dist/src/manifest/route-manifest.d.ts +34 -0
- package/dist/src/manifest/route-manifest.d.ts.map +1 -0
- package/dist/src/manifest/route-manifest.js +148 -0
- package/dist/src/orchestrator/activity-emitter.d.ts +119 -0
- package/dist/src/orchestrator/activity-emitter.d.ts.map +1 -0
- package/dist/src/orchestrator/activity-emitter.js +306 -0
- package/dist/src/orchestrator/api-activity-emitter.d.ts +167 -0
- package/dist/src/orchestrator/api-activity-emitter.d.ts.map +1 -0
- package/dist/src/orchestrator/api-activity-emitter.js +417 -0
- package/dist/src/orchestrator/heartbeat-writer.d.ts +57 -0
- package/dist/src/orchestrator/heartbeat-writer.d.ts.map +1 -0
- package/dist/src/orchestrator/heartbeat-writer.js +137 -0
- package/dist/src/orchestrator/index.d.ts +20 -0
- package/dist/src/orchestrator/index.d.ts.map +1 -0
- package/dist/src/orchestrator/index.js +22 -0
- package/dist/src/orchestrator/log-analyzer.d.ts +160 -0
- package/dist/src/orchestrator/log-analyzer.d.ts.map +1 -0
- package/dist/src/orchestrator/log-analyzer.js +572 -0
- package/dist/src/orchestrator/log-config.d.ts +39 -0
- package/dist/src/orchestrator/log-config.d.ts.map +1 -0
- package/dist/src/orchestrator/log-config.js +45 -0
- package/dist/src/orchestrator/orchestrator.d.ts +316 -0
- package/dist/src/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/src/orchestrator/orchestrator.js +3290 -0
- package/dist/src/orchestrator/parse-work-result.d.ts +16 -0
- package/dist/src/orchestrator/parse-work-result.d.ts.map +1 -0
- package/dist/src/orchestrator/parse-work-result.js +135 -0
- package/dist/src/orchestrator/parse-work-result.test.d.ts +2 -0
- package/dist/src/orchestrator/parse-work-result.test.d.ts.map +1 -0
- package/dist/src/orchestrator/parse-work-result.test.js +234 -0
- package/dist/src/orchestrator/progress-logger.d.ts +72 -0
- package/dist/src/orchestrator/progress-logger.d.ts.map +1 -0
- package/dist/src/orchestrator/progress-logger.js +135 -0
- package/dist/src/orchestrator/session-logger.d.ts +159 -0
- package/dist/src/orchestrator/session-logger.d.ts.map +1 -0
- package/dist/src/orchestrator/session-logger.js +275 -0
- package/dist/src/orchestrator/state-recovery.d.ts +96 -0
- package/dist/src/orchestrator/state-recovery.d.ts.map +1 -0
- package/dist/src/orchestrator/state-recovery.js +302 -0
- package/dist/src/orchestrator/state-types.d.ts +165 -0
- package/dist/src/orchestrator/state-types.d.ts.map +1 -0
- package/dist/src/orchestrator/state-types.js +7 -0
- package/dist/src/orchestrator/stream-parser.d.ts +151 -0
- package/dist/src/orchestrator/stream-parser.d.ts.map +1 -0
- package/dist/src/orchestrator/stream-parser.js +137 -0
- package/dist/src/orchestrator/types.d.ts +232 -0
- package/dist/src/orchestrator/types.d.ts.map +1 -0
- package/dist/src/orchestrator/types.js +4 -0
- package/dist/src/orchestrator/validate-git-remote.test.d.ts +2 -0
- package/dist/src/orchestrator/validate-git-remote.test.d.ts.map +1 -0
- package/dist/src/orchestrator/validate-git-remote.test.js +61 -0
- package/dist/src/providers/a2a-auth.d.ts +81 -0
- package/dist/src/providers/a2a-auth.d.ts.map +1 -0
- package/dist/src/providers/a2a-auth.js +188 -0
- package/dist/src/providers/a2a-auth.test.d.ts +2 -0
- package/dist/src/providers/a2a-auth.test.d.ts.map +1 -0
- package/dist/src/providers/a2a-auth.test.js +232 -0
- package/dist/src/providers/a2a-provider.d.ts +254 -0
- package/dist/src/providers/a2a-provider.d.ts.map +1 -0
- package/dist/src/providers/a2a-provider.integration.test.d.ts +9 -0
- package/dist/src/providers/a2a-provider.integration.test.d.ts.map +1 -0
- package/dist/src/providers/a2a-provider.integration.test.js +665 -0
- package/dist/src/providers/a2a-provider.js +811 -0
- package/dist/src/providers/a2a-provider.test.d.ts +2 -0
- package/dist/src/providers/a2a-provider.test.d.ts.map +1 -0
- package/dist/src/providers/a2a-provider.test.js +681 -0
- package/dist/src/providers/amp-provider.d.ts +20 -0
- package/dist/src/providers/amp-provider.d.ts.map +1 -0
- package/dist/src/providers/amp-provider.js +24 -0
- package/dist/src/providers/claude-provider.d.ts +18 -0
- package/dist/src/providers/claude-provider.d.ts.map +1 -0
- package/dist/src/providers/claude-provider.js +437 -0
- package/dist/src/providers/codex-provider.d.ts +133 -0
- package/dist/src/providers/codex-provider.d.ts.map +1 -0
- package/dist/src/providers/codex-provider.js +381 -0
- package/dist/src/providers/codex-provider.test.d.ts +2 -0
- package/dist/src/providers/codex-provider.test.d.ts.map +1 -0
- package/dist/src/providers/codex-provider.test.js +387 -0
- package/dist/src/providers/index.d.ts +44 -0
- package/dist/src/providers/index.d.ts.map +1 -0
- package/dist/src/providers/index.js +85 -0
- package/dist/src/providers/spring-ai-provider.d.ts +90 -0
- package/dist/src/providers/spring-ai-provider.d.ts.map +1 -0
- package/dist/src/providers/spring-ai-provider.integration.test.d.ts +13 -0
- package/dist/src/providers/spring-ai-provider.integration.test.d.ts.map +1 -0
- package/dist/src/providers/spring-ai-provider.integration.test.js +351 -0
- package/dist/src/providers/spring-ai-provider.js +317 -0
- package/dist/src/providers/spring-ai-provider.test.d.ts +2 -0
- package/dist/src/providers/spring-ai-provider.test.d.ts.map +1 -0
- package/dist/src/providers/spring-ai-provider.test.js +200 -0
- package/dist/src/providers/types.d.ts +165 -0
- package/dist/src/providers/types.d.ts.map +1 -0
- package/dist/src/providers/types.js +13 -0
- package/dist/src/templates/adapters.d.ts +51 -0
- package/dist/src/templates/adapters.d.ts.map +1 -0
- package/dist/src/templates/adapters.js +104 -0
- package/dist/src/templates/adapters.test.d.ts +2 -0
- package/dist/src/templates/adapters.test.d.ts.map +1 -0
- package/dist/src/templates/adapters.test.js +165 -0
- package/dist/src/templates/agent-definition.d.ts +85 -0
- package/dist/src/templates/agent-definition.d.ts.map +1 -0
- package/dist/src/templates/agent-definition.js +97 -0
- package/dist/src/templates/agent-definition.test.d.ts +2 -0
- package/dist/src/templates/agent-definition.test.d.ts.map +1 -0
- package/dist/src/templates/agent-definition.test.js +209 -0
- package/dist/src/templates/index.d.ts +14 -0
- package/dist/src/templates/index.d.ts.map +1 -0
- package/dist/src/templates/index.js +11 -0
- package/dist/src/templates/loader.d.ts +41 -0
- package/dist/src/templates/loader.d.ts.map +1 -0
- package/dist/src/templates/loader.js +114 -0
- package/dist/src/templates/registry.d.ts +80 -0
- package/dist/src/templates/registry.d.ts.map +1 -0
- package/dist/src/templates/registry.js +177 -0
- package/dist/src/templates/registry.test.d.ts +2 -0
- package/dist/src/templates/registry.test.d.ts.map +1 -0
- package/dist/src/templates/registry.test.js +198 -0
- package/dist/src/templates/renderer.d.ts +29 -0
- package/dist/src/templates/renderer.d.ts.map +1 -0
- package/dist/src/templates/renderer.js +35 -0
- package/dist/src/templates/strategy-templates.test.d.ts +2 -0
- package/dist/src/templates/strategy-templates.test.d.ts.map +1 -0
- package/dist/src/templates/strategy-templates.test.js +619 -0
- package/dist/src/templates/types.d.ts +233 -0
- package/dist/src/templates/types.d.ts.map +1 -0
- package/dist/src/templates/types.js +127 -0
- package/dist/src/templates/types.test.d.ts +2 -0
- package/dist/src/templates/types.test.d.ts.map +1 -0
- package/dist/src/templates/types.test.js +232 -0
- package/dist/src/tools/index.d.ts +6 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +3 -0
- package/dist/src/tools/linear-runner.d.ts +34 -0
- package/dist/src/tools/linear-runner.d.ts.map +1 -0
- package/dist/src/tools/linear-runner.js +700 -0
- package/dist/src/tools/plugins/linear.d.ts +9 -0
- package/dist/src/tools/plugins/linear.d.ts.map +1 -0
- package/dist/src/tools/plugins/linear.js +138 -0
- package/dist/src/tools/registry.d.ts +9 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +18 -0
- package/dist/src/tools/types.d.ts +18 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Orchestrator
|
|
3
|
+
* Spawns concurrent Claude agents to work on Linear backlog issues
|
|
4
|
+
* Uses the Claude Agent SDK for programmatic control
|
|
5
|
+
*/
|
|
6
|
+
import { type AgentWorkType } from '@renseiai/agentfactory-linear';
|
|
7
|
+
import type { OrchestratorConfig, OrchestratorIssue, AgentProcess, OrchestratorEvents, SpawnAgentOptions, OrchestratorResult, StopAgentResult, ForwardPromptResult, InjectMessageResult, SpawnAgentWithResumeOptions } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Validate that the git remote origin URL contains the expected repository pattern.
|
|
10
|
+
* Supports both HTTPS (github.com/org/repo) and SSH (git@github.com:org/repo) formats.
|
|
11
|
+
*
|
|
12
|
+
* @param expectedRepo - The expected repository pattern (e.g. 'github.com/renseiai/agentfactory')
|
|
13
|
+
* @param cwd - Working directory to run git commands in
|
|
14
|
+
* @throws Error if the git remote does not match the expected repository
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateGitRemote(expectedRepo: string, cwd?: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Generate a worktree identifier that includes the work type suffix
|
|
19
|
+
*
|
|
20
|
+
* @param issueIdentifier - Issue identifier (e.g., "SUP-294")
|
|
21
|
+
* @param workType - Type of work being performed
|
|
22
|
+
* @returns Worktree identifier with suffix (e.g., "SUP-294-QA")
|
|
23
|
+
*/
|
|
24
|
+
export declare function getWorktreeIdentifier(issueIdentifier: string, workType: AgentWorkType): string;
|
|
25
|
+
export declare class AgentOrchestrator {
|
|
26
|
+
private readonly config;
|
|
27
|
+
private readonly client;
|
|
28
|
+
private readonly events;
|
|
29
|
+
private readonly activeAgents;
|
|
30
|
+
private readonly agentHandles;
|
|
31
|
+
private provider;
|
|
32
|
+
private readonly agentSessions;
|
|
33
|
+
private readonly activityEmitters;
|
|
34
|
+
private readonly sessionToIssue;
|
|
35
|
+
private readonly abortControllers;
|
|
36
|
+
private readonly agentLoggers;
|
|
37
|
+
private readonly heartbeatWriters;
|
|
38
|
+
private readonly progressLoggers;
|
|
39
|
+
private readonly sessionLoggers;
|
|
40
|
+
private readonly templateRegistry;
|
|
41
|
+
private allowedProjects?;
|
|
42
|
+
private projectPaths?;
|
|
43
|
+
private sharedPaths?;
|
|
44
|
+
private linearCli?;
|
|
45
|
+
private packageManager?;
|
|
46
|
+
private buildCommand?;
|
|
47
|
+
private testCommand?;
|
|
48
|
+
private validateCommand?;
|
|
49
|
+
private readonly toolRegistry;
|
|
50
|
+
constructor(config?: OrchestratorConfig, events?: OrchestratorEvents);
|
|
51
|
+
/**
|
|
52
|
+
* Update the last activity timestamp for an agent (for inactivity timeout tracking)
|
|
53
|
+
* @param issueId - The issue ID of the agent
|
|
54
|
+
* @param activityType - Optional description of the activity type
|
|
55
|
+
*/
|
|
56
|
+
private updateLastActivity;
|
|
57
|
+
/**
|
|
58
|
+
* Get timeout configuration for a specific work type
|
|
59
|
+
* @param workType - The work type to get timeout config for
|
|
60
|
+
* @returns Timeout configuration with inactivity and max session values
|
|
61
|
+
*/
|
|
62
|
+
private getTimeoutConfig;
|
|
63
|
+
/**
|
|
64
|
+
* Get backlog issues for the configured project
|
|
65
|
+
*/
|
|
66
|
+
getBacklogIssues(limit?: number): Promise<OrchestratorIssue[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Validate that a path is a valid git worktree
|
|
69
|
+
*/
|
|
70
|
+
private validateWorktree;
|
|
71
|
+
/**
|
|
72
|
+
* Extract the full error message from an execSync error.
|
|
73
|
+
*
|
|
74
|
+
* Node's execSync throws an Error where .message only contains
|
|
75
|
+
* "Command failed: <command>", but the actual git error output
|
|
76
|
+
* is in .stderr. This helper combines both for reliable pattern matching.
|
|
77
|
+
*/
|
|
78
|
+
private getExecSyncErrorMessage;
|
|
79
|
+
/**
|
|
80
|
+
* Check if a git error indicates a branch/worktree conflict.
|
|
81
|
+
*
|
|
82
|
+
* Git uses different error messages depending on the situation:
|
|
83
|
+
* - "is already checked out at '/path'" - branch checked out in another worktree
|
|
84
|
+
* - "is already used by worktree at '/path'" - branch associated with another worktree
|
|
85
|
+
*
|
|
86
|
+
* Both mean the same thing: the branch is occupied by another worktree.
|
|
87
|
+
*/
|
|
88
|
+
private isBranchConflictError;
|
|
89
|
+
/**
|
|
90
|
+
* Extract the conflicting worktree path from a git branch conflict error.
|
|
91
|
+
*
|
|
92
|
+
* Parses paths like:
|
|
93
|
+
* - "fatal: 'SUP-402' is already checked out at '/path/to/.worktrees/SUP-402-DEV'"
|
|
94
|
+
* - "fatal: 'SUP-402' is already used by worktree at '/path/to/.worktrees/SUP-402-DEV'"
|
|
95
|
+
*/
|
|
96
|
+
private parseConflictingWorktreePath;
|
|
97
|
+
/**
|
|
98
|
+
* Check if a path is the main git working tree (not a worktree).
|
|
99
|
+
*
|
|
100
|
+
* The main working tree has a `.git` directory, while worktrees have a
|
|
101
|
+
* `.git` file containing a `gitdir:` pointer. This is the primary safeguard
|
|
102
|
+
* against accidentally destroying the main repository.
|
|
103
|
+
*/
|
|
104
|
+
private isMainWorktree;
|
|
105
|
+
/**
|
|
106
|
+
* Check if a path is inside the configured .worktrees/ directory.
|
|
107
|
+
*
|
|
108
|
+
* Only paths within the worktrees directory should ever be candidates for
|
|
109
|
+
* automated cleanup. This prevents the main repo or other directories from
|
|
110
|
+
* being targeted.
|
|
111
|
+
*/
|
|
112
|
+
private isInsideWorktreesDir;
|
|
113
|
+
/**
|
|
114
|
+
* Attempt to clean up a stale worktree that is blocking branch creation.
|
|
115
|
+
*
|
|
116
|
+
* During dev\u2192qa\u2192acceptance handoffs, the prior work type's worktree may still
|
|
117
|
+
* exist after its agent has finished (the orchestrator cleans up externally,
|
|
118
|
+
* but there's a race window). This method checks if the blocking worktree's
|
|
119
|
+
* agent is still alive via heartbeat. If not, it removes the stale worktree
|
|
120
|
+
* so the new work type can proceed.
|
|
121
|
+
*
|
|
122
|
+
* SAFETY: This method will NEVER clean up the main working tree. It only
|
|
123
|
+
* operates on paths inside the .worktrees/ directory. This prevents
|
|
124
|
+
* catastrophic data loss when a branch is checked out in the main tree
|
|
125
|
+
* (e.g., by a user in their IDE).
|
|
126
|
+
*
|
|
127
|
+
* @returns true if the conflicting worktree was cleaned up
|
|
128
|
+
*/
|
|
129
|
+
private tryCleanupConflictingWorktree;
|
|
130
|
+
/**
|
|
131
|
+
* Handle a branch conflict error by attempting to clean up the stale worktree
|
|
132
|
+
* and retrying, or throwing a retriable error for the worker's retry loop.
|
|
133
|
+
*/
|
|
134
|
+
private handleBranchConflict;
|
|
135
|
+
/**
|
|
136
|
+
* Create a git worktree for an issue with work type suffix
|
|
137
|
+
*
|
|
138
|
+
* @param issueIdentifier - Issue identifier (e.g., "SUP-294")
|
|
139
|
+
* @param workType - Type of work being performed
|
|
140
|
+
* @returns Object containing worktreePath and worktreeIdentifier
|
|
141
|
+
*/
|
|
142
|
+
createWorktree(issueIdentifier: string, workType: AgentWorkType): {
|
|
143
|
+
worktreePath: string;
|
|
144
|
+
worktreeIdentifier: string;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Clean up a git worktree
|
|
148
|
+
*
|
|
149
|
+
* @param worktreeIdentifier - Worktree identifier with work type suffix (e.g., "SUP-294-QA")
|
|
150
|
+
*/
|
|
151
|
+
removeWorktree(worktreeIdentifier: string): void;
|
|
152
|
+
/**
|
|
153
|
+
* Write helper scripts into the worktree's .agent/ directory.
|
|
154
|
+
*
|
|
155
|
+
* Currently writes:
|
|
156
|
+
* - .agent/add-dep.sh: Safely adds a new dependency by removing symlinked
|
|
157
|
+
* node_modules first, then running `pnpm add` with the guard bypass.
|
|
158
|
+
*/
|
|
159
|
+
private writeWorktreeHelpers;
|
|
160
|
+
/**
|
|
161
|
+
* Link dependencies from the main repo into a worktree via symlinks.
|
|
162
|
+
*
|
|
163
|
+
* Creates a REAL node_modules directory in the worktree and symlinks each
|
|
164
|
+
* entry (packages, .pnpm, .bin) individually. This prevents pnpm from
|
|
165
|
+
* resolving through a directory-level symlink and corrupting the main
|
|
166
|
+
* repo's node_modules when an agent accidentally runs `pnpm install`.
|
|
167
|
+
*
|
|
168
|
+
* For non-Node repos (no node_modules in main repo), this is a no-op.
|
|
169
|
+
*
|
|
170
|
+
* Falls back to `pnpm install --frozen-lockfile` if symlinking fails.
|
|
171
|
+
*/
|
|
172
|
+
linkDependencies(worktreePath: string, identifier: string): void;
|
|
173
|
+
/**
|
|
174
|
+
* Create a real node_modules directory and symlink each entry from the source.
|
|
175
|
+
*
|
|
176
|
+
* Instead of symlinking the entire node_modules directory (which lets pnpm
|
|
177
|
+
* resolve through the symlink and corrupt the original), we create a real
|
|
178
|
+
* directory and symlink each entry individually. If pnpm "recreates" this
|
|
179
|
+
* directory, it only destroys the worktree's symlinks — not the originals.
|
|
180
|
+
*/
|
|
181
|
+
private linkNodeModulesContents;
|
|
182
|
+
/**
|
|
183
|
+
* Fallback: install dependencies via pnpm install.
|
|
184
|
+
* Only called when symlinking fails.
|
|
185
|
+
*/
|
|
186
|
+
private installDependencies;
|
|
187
|
+
/**
|
|
188
|
+
* @deprecated Use linkDependencies() instead. This now delegates to linkDependencies.
|
|
189
|
+
*/
|
|
190
|
+
preInstallDependencies(worktreePath: string, identifier: string): void;
|
|
191
|
+
/**
|
|
192
|
+
* Spawn a Claude agent for a specific issue using the Agent SDK
|
|
193
|
+
*/
|
|
194
|
+
spawnAgent(options: SpawnAgentOptions): AgentProcess;
|
|
195
|
+
/**
|
|
196
|
+
* Process the provider event stream and emit activities
|
|
197
|
+
*/
|
|
198
|
+
private processEventStream;
|
|
199
|
+
/**
|
|
200
|
+
* Handle a single normalized agent event from any provider
|
|
201
|
+
*/
|
|
202
|
+
private handleAgentEvent;
|
|
203
|
+
/**
|
|
204
|
+
* Extract GitHub PR URL from text (typically from gh pr create output)
|
|
205
|
+
*/
|
|
206
|
+
private extractPullRequestUrl;
|
|
207
|
+
/**
|
|
208
|
+
* Update the Linear session with the PR URL
|
|
209
|
+
*/
|
|
210
|
+
private updateSessionPullRequest;
|
|
211
|
+
/**
|
|
212
|
+
* Post completion comment with full result message
|
|
213
|
+
* Uses multi-comment splitting for long messages (up to 10 comments, 10k chars each)
|
|
214
|
+
*/
|
|
215
|
+
private postCompletionComment;
|
|
216
|
+
/**
|
|
217
|
+
* Clean up agent resources
|
|
218
|
+
*/
|
|
219
|
+
private cleanupAgent;
|
|
220
|
+
/**
|
|
221
|
+
* Finalize the session logger with final status
|
|
222
|
+
*/
|
|
223
|
+
private finalizeSessionLogger;
|
|
224
|
+
/**
|
|
225
|
+
* Run the orchestrator - spawn agents for backlog issues
|
|
226
|
+
*/
|
|
227
|
+
run(): Promise<OrchestratorResult>;
|
|
228
|
+
/**
|
|
229
|
+
* Spawn agent for a single issue (webhook-triggered or CLI)
|
|
230
|
+
* Generates a session ID if not provided to enable autonomous mode
|
|
231
|
+
*
|
|
232
|
+
* This method includes crash recovery support:
|
|
233
|
+
* - If a worktree exists with valid state and stale heartbeat, triggers recovery
|
|
234
|
+
* - If a worktree exists with fresh heartbeat (agent alive), throws error to prevent duplicates
|
|
235
|
+
*
|
|
236
|
+
* @param issueIdOrIdentifier - Issue ID or identifier (e.g., SUP-123)
|
|
237
|
+
* @param sessionId - Optional Linear session ID
|
|
238
|
+
* @param workType - Optional work type (auto-detected from issue status if not provided)
|
|
239
|
+
* @param prompt - Optional custom prompt override
|
|
240
|
+
*/
|
|
241
|
+
spawnAgentForIssue(issueIdOrIdentifier: string, sessionId?: string, workType?: AgentWorkType, prompt?: string): Promise<AgentProcess>;
|
|
242
|
+
/**
|
|
243
|
+
* Get all active agents
|
|
244
|
+
*/
|
|
245
|
+
getActiveAgents(): AgentProcess[];
|
|
246
|
+
/**
|
|
247
|
+
* Stop a running agent by issue ID
|
|
248
|
+
* @param issueId - The Linear issue ID
|
|
249
|
+
* @param cleanupWorktree - Whether to remove the git worktree
|
|
250
|
+
* @param stopReason - Why the agent is being stopped: 'user_request' or 'timeout'
|
|
251
|
+
*/
|
|
252
|
+
stopAgent(issueId: string, cleanupWorktree?: boolean, stopReason?: 'user_request' | 'timeout'): Promise<StopAgentResult>;
|
|
253
|
+
/**
|
|
254
|
+
* Stop a running agent by session ID
|
|
255
|
+
*/
|
|
256
|
+
stopAgentBySession(sessionId: string, cleanupWorktree?: boolean): Promise<StopAgentResult>;
|
|
257
|
+
/**
|
|
258
|
+
* Get agent by session ID
|
|
259
|
+
*/
|
|
260
|
+
getAgentBySession(sessionId: string): AgentProcess | undefined;
|
|
261
|
+
/**
|
|
262
|
+
* Update the worker ID for all active activity emitters.
|
|
263
|
+
* Called after worker re-registration to ensure activities are attributed
|
|
264
|
+
* to the new worker ID and pass ownership checks.
|
|
265
|
+
*
|
|
266
|
+
* @param newWorkerId - The new worker ID after re-registration
|
|
267
|
+
*/
|
|
268
|
+
updateWorkerId(newWorkerId: string): void;
|
|
269
|
+
/**
|
|
270
|
+
* Forward a follow-up prompt to an existing or new agent
|
|
271
|
+
*
|
|
272
|
+
* If the agent is running, attempts to inject the message into the running session
|
|
273
|
+
* without stopping it. If injection fails or agent isn't running, it will be
|
|
274
|
+
* stopped gracefully and resumed with the new prompt.
|
|
275
|
+
*
|
|
276
|
+
* @param workType - Optional work type. If not provided, inherits from existing agent or defaults to 'development'.
|
|
277
|
+
*/
|
|
278
|
+
forwardPrompt(issueId: string, sessionId: string, prompt: string, providerSessionId?: string, workType?: AgentWorkType): Promise<ForwardPromptResult>;
|
|
279
|
+
/**
|
|
280
|
+
* Inject a user message into a running agent session without stopping it.
|
|
281
|
+
*
|
|
282
|
+
* Uses the SDK's streamInput() method to send follow-up messages to a running session.
|
|
283
|
+
* This is the preferred method for user follow-ups as it doesn't interrupt agent work.
|
|
284
|
+
*
|
|
285
|
+
* @param issueId - The issue ID the agent is working on
|
|
286
|
+
* @param sessionId - The Linear session ID
|
|
287
|
+
* @param message - The user message to inject
|
|
288
|
+
* @returns Result indicating if injection was successful
|
|
289
|
+
*/
|
|
290
|
+
injectMessage(issueId: string, sessionId: string, message: string): Promise<InjectMessageResult>;
|
|
291
|
+
/**
|
|
292
|
+
* Spawn an agent with resume capability for continuing a previous session
|
|
293
|
+
* If autoTransition is enabled, also transitions the issue status to the appropriate working state
|
|
294
|
+
*/
|
|
295
|
+
spawnAgentWithResume(options: SpawnAgentWithResumeOptions): Promise<AgentProcess>;
|
|
296
|
+
/**
|
|
297
|
+
* Stop all running agents
|
|
298
|
+
*/
|
|
299
|
+
stopAll(): void;
|
|
300
|
+
/**
|
|
301
|
+
* Wait for all agents to complete with inactivity-based timeout
|
|
302
|
+
*
|
|
303
|
+
* Unlike a simple session timeout, this method monitors each agent's activity
|
|
304
|
+
* and only stops agents that have been inactive for longer than the inactivity
|
|
305
|
+
* timeout. Active agents are allowed to run indefinitely (unless maxSessionTimeoutMs
|
|
306
|
+
* is set as a hard cap).
|
|
307
|
+
*
|
|
308
|
+
* @param inactivityTimeoutMsOverride - Override inactivity timeout from config (for backwards compatibility)
|
|
309
|
+
*/
|
|
310
|
+
waitForAll(inactivityTimeoutMsOverride?: number): Promise<AgentProcess[]>;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Create an orchestrator instance
|
|
314
|
+
*/
|
|
315
|
+
export declare function createOrchestrator(config?: OrchestratorConfig, events?: OrchestratorEvents): AgentOrchestrator;
|
|
316
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA+BH,OAAO,EAML,KAAK,aAAa,EAQnB,MAAM,+BAA+B,CAAA;AAStC,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAElB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,YAAY,CAAA;AAmBnB;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CA6B1E;AAyoBD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,aAAa,GACtB,MAAM,CAGR;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAOtB;IACD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuC;IACrE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+D;IAEhG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAEhE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0C;IAE3E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiC;IAE9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0C;IAE3E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IAEzE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwC;IAEvE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAE1D,OAAO,CAAC,eAAe,CAAC,CAAU;IAElC,OAAO,CAAC,YAAY,CAAC,CAAwB;IAE7C,OAAO,CAAC,WAAW,CAAC,CAAU;IAE9B,OAAO,CAAC,SAAS,CAAC,CAAQ;IAE1B,OAAO,CAAC,cAAc,CAAC,CAAQ;IAE/B,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAQ;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;gBAE/B,MAAM,GAAE,kBAAuB,EAAE,MAAM,GAAE,kBAAuB;IA6G5E;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACG,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAmGpE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B;IAMpC;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAyBtB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,6BAA6B;IAiIrC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;;;;OAMG;IACH,cAAc,CACZ,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,aAAa,GACtB;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE;IA6JvD;;;;OAIG;IACH,cAAc,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI;IA4BhD;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAwC5B;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IA4DhE;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IAmC/B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAgE3B;;OAEG;IACH,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAItE;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY;IAkRpD;;OAEG;YACW,kBAAkB;IAgUhC;;OAEG;YACW,gBAAgB;IAqP9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;YACW,wBAAwB;IAiDtC;;;OAGG;YACW,qBAAqB;IA+DnC;;OAEG;IACH,OAAO,CAAC,YAAY;IA8BpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA8DxC;;;;;;;;;;;;OAYG;IACG,kBAAkB,CACtB,mBAAmB,EAAE,MAAM,EAC3B,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,aAAa,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC;IAoJxB;;OAEG;IACH,eAAe,IAAI,YAAY,EAAE;IAMjC;;;;;OAKG;IACG,SAAS,CACb,OAAO,EAAE,MAAM,EACf,eAAe,UAAQ,EACvB,UAAU,GAAE,cAAc,GAAG,SAA0B,GACtD,OAAO,CAAC,eAAe,CAAC;IA4D3B;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAS9F;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAM9D;;;;;;OAMG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAgBzC;;;;;;;;OAQG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,MAAM,EAC1B,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,mBAAmB,CAAC;IA6I/B;;;;;;;;;;OAUG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC;IAqD/B;;;OAGG;IACG,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,YAAY,CAAC;IAgPvF;;OAEG;IACH,OAAO,IAAI,IAAI;IAkBf;;;;;;;;;OASG;IACG,UAAU,CAAC,2BAA2B,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CA8DhF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,CAAC,EAAE,kBAAkB,EAC3B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,iBAAiB,CAEnB"}
|