symphony-github 0.1.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 +201 -0
- package/README.md +341 -0
- package/config.example.yaml +101 -0
- package/dist/agents/launcher.d.ts +24 -0
- package/dist/agents/launcher.d.ts.map +1 -0
- package/dist/agents/launcher.js +152 -0
- package/dist/agents/launcher.js.map +1 -0
- package/dist/agents/registry.d.ts +10 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +324 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/runner.d.ts +58 -0
- package/dist/agents/runner.d.ts.map +1 -0
- package/dist/agents/runner.js +1190 -0
- package/dist/agents/runner.js.map +1 -0
- package/dist/app.d.ts +11 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +829 -0
- package/dist/app.js.map +1 -0
- package/dist/components/ActivityView.d.ts +9 -0
- package/dist/components/ActivityView.d.ts.map +1 -0
- package/dist/components/ActivityView.js +73 -0
- package/dist/components/ActivityView.js.map +1 -0
- package/dist/components/Header.d.ts +12 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +44 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/IssueList.d.ts +10 -0
- package/dist/components/IssueList.d.ts.map +1 -0
- package/dist/components/IssueList.js +119 -0
- package/dist/components/IssueList.js.map +1 -0
- package/dist/components/Onboarding.d.ts +26 -0
- package/dist/components/Onboarding.d.ts.map +1 -0
- package/dist/components/Onboarding.js +948 -0
- package/dist/components/Onboarding.js.map +1 -0
- package/dist/components/PaneView.d.ts +9 -0
- package/dist/components/PaneView.d.ts.map +1 -0
- package/dist/components/PaneView.js +74 -0
- package/dist/components/PaneView.js.map +1 -0
- package/dist/components/StartupRecoveryView.d.ts +13 -0
- package/dist/components/StartupRecoveryView.d.ts.map +1 -0
- package/dist/components/StartupRecoveryView.js +85 -0
- package/dist/components/StartupRecoveryView.js.map +1 -0
- package/dist/components/StatusBar.d.ts +9 -0
- package/dist/components/StatusBar.d.ts.map +1 -0
- package/dist/components/StatusBar.js +70 -0
- package/dist/components/StatusBar.js.map +1 -0
- package/dist/components/TableView.d.ts +8 -0
- package/dist/components/TableView.d.ts.map +1 -0
- package/dist/components/TableView.js +87 -0
- package/dist/components/TableView.js.map +1 -0
- package/dist/config/index.d.ts +18 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +357 -0
- package/dist/config/index.js.map +1 -0
- package/dist/git/merge.d.ts +23 -0
- package/dist/git/merge.d.ts.map +1 -0
- package/dist/git/merge.js +131 -0
- package/dist/git/merge.js.map +1 -0
- package/dist/git/utils.d.ts +34 -0
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/git/utils.js +214 -0
- package/dist/git/utils.js.map +1 -0
- package/dist/git/worktree.d.ts +23 -0
- package/dist/git/worktree.d.ts.map +1 -0
- package/dist/git/worktree.js +116 -0
- package/dist/git/worktree.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +225 -0
- package/dist/index.js.map +1 -0
- package/dist/paths.d.ts +21 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +59 -0
- package/dist/paths.js.map +1 -0
- package/dist/runModes.d.ts +7 -0
- package/dist/runModes.d.ts.map +1 -0
- package/dist/runModes.js +36 -0
- package/dist/runModes.js.map +1 -0
- package/dist/services/daemon.d.ts +85 -0
- package/dist/services/daemon.d.ts.map +1 -0
- package/dist/services/daemon.js +836 -0
- package/dist/services/daemon.js.map +1 -0
- package/dist/services/github.d.ts +101 -0
- package/dist/services/github.d.ts.map +1 -0
- package/dist/services/github.js +367 -0
- package/dist/services/github.js.map +1 -0
- package/dist/services/githubProgressReporter.d.ts +33 -0
- package/dist/services/githubProgressReporter.d.ts.map +1 -0
- package/dist/services/githubProgressReporter.js +272 -0
- package/dist/services/githubProgressReporter.js.map +1 -0
- package/dist/services/runtime.d.ts +43 -0
- package/dist/services/runtime.d.ts.map +1 -0
- package/dist/services/runtime.js +126 -0
- package/dist/services/runtime.js.map +1 -0
- package/dist/services/state.d.ts +43 -0
- package/dist/services/state.d.ts.map +1 -0
- package/dist/services/state.js +176 -0
- package/dist/services/state.js.map +1 -0
- package/dist/services/tmux.d.ts +50 -0
- package/dist/services/tmux.d.ts.map +1 -0
- package/dist/services/tmux.js +157 -0
- package/dist/services/tmux.js.map +1 -0
- package/dist/swarm/backlog.d.ts +25 -0
- package/dist/swarm/backlog.d.ts.map +1 -0
- package/dist/swarm/backlog.js +83 -0
- package/dist/swarm/backlog.js.map +1 -0
- package/dist/swarm/config.d.ts +14 -0
- package/dist/swarm/config.d.ts.map +1 -0
- package/dist/swarm/config.js +112 -0
- package/dist/swarm/config.js.map +1 -0
- package/dist/swarm/dependencies.d.ts +36 -0
- package/dist/swarm/dependencies.d.ts.map +1 -0
- package/dist/swarm/dependencies.js +141 -0
- package/dist/swarm/dependencies.js.map +1 -0
- package/dist/swarm/director.d.ts +67 -0
- package/dist/swarm/director.d.ts.map +1 -0
- package/dist/swarm/director.js +358 -0
- package/dist/swarm/director.js.map +1 -0
- package/dist/swarm/directorPrompt.d.ts +15 -0
- package/dist/swarm/directorPrompt.d.ts.map +1 -0
- package/dist/swarm/directorPrompt.js +60 -0
- package/dist/swarm/directorPrompt.js.map +1 -0
- package/dist/swarm/index.d.ts +7 -0
- package/dist/swarm/index.d.ts.map +1 -0
- package/dist/swarm/index.js +6 -0
- package/dist/swarm/index.js.map +1 -0
- package/dist/swarm/proposals.d.ts +29 -0
- package/dist/swarm/proposals.d.ts.map +1 -0
- package/dist/swarm/proposals.js +141 -0
- package/dist/swarm/proposals.js.map +1 -0
- package/dist/swarm/types.d.ts +65 -0
- package/dist/swarm/types.d.ts.map +1 -0
- package/dist/swarm/types.js +3 -0
- package/dist/swarm/types.js.map +1 -0
- package/dist/theme.d.ts +64 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +161 -0
- package/dist/theme.js.map +1 -0
- package/dist/triggers/index.d.ts +17 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +124 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/types.d.ts +327 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/duplicateDetection.d.ts +14 -0
- package/dist/utils/duplicateDetection.d.ts.map +1 -0
- package/dist/utils/duplicateDetection.js +45 -0
- package/dist/utils/duplicateDetection.js.map +1 -0
- package/dist/utils/shell.d.ts +46 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +79 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/slug.d.ts +13 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +32 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/version.d.ts +28 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +105 -0
- package/dist/version.js.map +1 -0
- package/examples/run-claude.example.sh +11 -0
- package/examples/run-codex.example.sh +11 -0
- package/package.json +68 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { findSymphonyHome } from '../paths.js';
|
|
3
|
+
const HOME = process.env.HOME || '';
|
|
4
|
+
function expandPath(p) {
|
|
5
|
+
if (p.startsWith('~/'))
|
|
6
|
+
return resolve(HOME, p.slice(2));
|
|
7
|
+
return resolve(p);
|
|
8
|
+
}
|
|
9
|
+
const VALID_DIRECTOR_SCOPES = ['session', 'organization', 'repo'];
|
|
10
|
+
const VALID_APPROVAL_MODES = ['auto', 'director_review', 'human_approval'];
|
|
11
|
+
export const DEFAULT_SWARM = {
|
|
12
|
+
enabled: false,
|
|
13
|
+
director: {
|
|
14
|
+
agent: 'claude',
|
|
15
|
+
scope: 'session',
|
|
16
|
+
analyze_interval_min: 30,
|
|
17
|
+
max_proposed_issues: 5,
|
|
18
|
+
},
|
|
19
|
+
proposals: {
|
|
20
|
+
approval_mode: 'director_review',
|
|
21
|
+
},
|
|
22
|
+
labels: {
|
|
23
|
+
paused: 'agent:paused',
|
|
24
|
+
blocker: 'agent:blocker',
|
|
25
|
+
proposed: 'agent:proposed',
|
|
26
|
+
},
|
|
27
|
+
backlog: {
|
|
28
|
+
enabled: true,
|
|
29
|
+
file: resolve(findSymphonyHome(), 'swarm', 'backlog.md'),
|
|
30
|
+
github_issue: true,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Parse the `swarm` section from raw YAML config.
|
|
35
|
+
* Returns a fully-resolved SwarmSettings with defaults applied.
|
|
36
|
+
*/
|
|
37
|
+
export function parseSwarmSettings(raw) {
|
|
38
|
+
if (!raw || typeof raw !== 'object') {
|
|
39
|
+
return { ...DEFAULT_SWARM };
|
|
40
|
+
}
|
|
41
|
+
const settings = {
|
|
42
|
+
enabled: typeof raw.enabled === 'boolean' ? raw.enabled : false,
|
|
43
|
+
director: { ...DEFAULT_SWARM.director },
|
|
44
|
+
proposals: { ...DEFAULT_SWARM.proposals },
|
|
45
|
+
labels: { ...DEFAULT_SWARM.labels },
|
|
46
|
+
backlog: { ...DEFAULT_SWARM.backlog },
|
|
47
|
+
};
|
|
48
|
+
// Director
|
|
49
|
+
if (raw.director && typeof raw.director === 'object') {
|
|
50
|
+
const d = raw.director;
|
|
51
|
+
if (typeof d.agent === 'string')
|
|
52
|
+
settings.director.agent = d.agent;
|
|
53
|
+
if (typeof d.model === 'string')
|
|
54
|
+
settings.director.model = d.model;
|
|
55
|
+
if (typeof d.scope === 'string') {
|
|
56
|
+
if (!VALID_DIRECTOR_SCOPES.includes(d.scope)) {
|
|
57
|
+
throw new Error(`Invalid swarm.director.scope: ${d.scope}. Must be one of: ${VALID_DIRECTOR_SCOPES.join(', ')}`);
|
|
58
|
+
}
|
|
59
|
+
settings.director.scope = d.scope;
|
|
60
|
+
}
|
|
61
|
+
if (typeof d.analyze_interval_min === 'number') {
|
|
62
|
+
settings.director.analyze_interval_min = d.analyze_interval_min;
|
|
63
|
+
}
|
|
64
|
+
if (typeof d.max_proposed_issues === 'number') {
|
|
65
|
+
settings.director.max_proposed_issues = d.max_proposed_issues;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Proposals
|
|
69
|
+
if (raw.proposals && typeof raw.proposals === 'object') {
|
|
70
|
+
const p = raw.proposals;
|
|
71
|
+
if (typeof p.approval_mode === 'string') {
|
|
72
|
+
if (!VALID_APPROVAL_MODES.includes(p.approval_mode)) {
|
|
73
|
+
throw new Error(`Invalid swarm.proposals.approval_mode: ${p.approval_mode}. Must be one of: ${VALID_APPROVAL_MODES.join(', ')}`);
|
|
74
|
+
}
|
|
75
|
+
settings.proposals.approval_mode = p.approval_mode;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Labels
|
|
79
|
+
if (raw.labels && typeof raw.labels === 'object') {
|
|
80
|
+
const l = raw.labels;
|
|
81
|
+
if (typeof l.paused === 'string')
|
|
82
|
+
settings.labels.paused = l.paused;
|
|
83
|
+
if (typeof l.blocker === 'string')
|
|
84
|
+
settings.labels.blocker = l.blocker;
|
|
85
|
+
if (typeof l.proposed === 'string')
|
|
86
|
+
settings.labels.proposed = l.proposed;
|
|
87
|
+
}
|
|
88
|
+
// Backlog
|
|
89
|
+
if (raw.backlog && typeof raw.backlog === 'object') {
|
|
90
|
+
const b = raw.backlog;
|
|
91
|
+
if (typeof b.enabled === 'boolean')
|
|
92
|
+
settings.backlog.enabled = b.enabled;
|
|
93
|
+
if (typeof b.file === 'string')
|
|
94
|
+
settings.backlog.file = expandPath(b.file);
|
|
95
|
+
if (typeof b.github_issue === 'boolean')
|
|
96
|
+
settings.backlog.github_issue = b.github_issue;
|
|
97
|
+
}
|
|
98
|
+
return settings;
|
|
99
|
+
}
|
|
100
|
+
/** Path to the swarm data directory (~/.symphony/swarm/) */
|
|
101
|
+
export function swarmDirPath() {
|
|
102
|
+
return resolve(findSymphonyHome(), 'swarm');
|
|
103
|
+
}
|
|
104
|
+
/** Path to the proposals directory (~/.symphony/swarm/proposals/) */
|
|
105
|
+
export function proposalsDirPath() {
|
|
106
|
+
return resolve(swarmDirPath(), 'proposals');
|
|
107
|
+
}
|
|
108
|
+
/** Path to the dependencies file (~/.symphony/swarm/dependencies.json) */
|
|
109
|
+
export function dependenciesFilePath() {
|
|
110
|
+
return resolve(swarmDirPath(), 'dependencies.json');
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/swarm/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { IssueRef, IssueDependency } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tracks issue dependency relationships for the swarm.
|
|
4
|
+
* Persisted to ~/.symphony/swarm/dependencies.json.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DependencyGraph {
|
|
7
|
+
private deps;
|
|
8
|
+
private filePath;
|
|
9
|
+
constructor(filePath?: string);
|
|
10
|
+
/** Add a blocker relationship: `issue` is blocked by `blocker`. */
|
|
11
|
+
addBlocker(issue: IssueRef, blocker: IssueRef): void;
|
|
12
|
+
/** Remove a specific blocker from an issue. */
|
|
13
|
+
removeBlocker(issue: IssueRef, blocker: IssueRef): void;
|
|
14
|
+
/** Get all blockers for a given issue. */
|
|
15
|
+
getBlockers(issue: IssueRef): IssueRef[];
|
|
16
|
+
/** Get all issues that have status 'blocked'. */
|
|
17
|
+
getBlockedIssues(): IssueDependency[];
|
|
18
|
+
/** Get all issues that were blocked but are now ready (all blockers resolved). */
|
|
19
|
+
getReadyIssues(): IssueDependency[];
|
|
20
|
+
/** Check if an issue is currently blocked. */
|
|
21
|
+
isBlocked(issue: IssueRef): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Mark a blocker as resolved. Returns list of issues that became unblocked
|
|
24
|
+
* as a result (status changed from 'blocked' to 'ready').
|
|
25
|
+
*/
|
|
26
|
+
resolveBlocker(blocker: IssueRef): IssueRef[];
|
|
27
|
+
/** Remove a dependency entry entirely (e.g., after the issue is resumed). */
|
|
28
|
+
remove(issue: IssueRef): void;
|
|
29
|
+
/** Get the full dependency map as a plain object (for serialization to director context). */
|
|
30
|
+
toJSON(): Record<string, IssueDependency>;
|
|
31
|
+
/** Persist to disk. */
|
|
32
|
+
save(): void;
|
|
33
|
+
/** Load from disk. */
|
|
34
|
+
load(): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/swarm/dependencies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAU5D;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAA2C;IACvD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAK7B,mEAAmE;IACnE,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;IAqBpD,+CAA+C;IAC/C,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;IAcvD,0CAA0C;IAC1C,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAKxC,iDAAiD;IACjD,gBAAgB,IAAI,eAAe,EAAE;IAIrC,kFAAkF;IAClF,cAAc,IAAI,eAAe,EAAE;IAInC,8CAA8C;IAC9C,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAKnC;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAwB7C,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAK7B,6FAA6F;IAC7F,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAQzC,uBAAuB;IACvB,IAAI,IAAI,IAAI;IAKZ,sBAAsB;IACtB,IAAI,IAAI,IAAI;CAmBb"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { dependenciesFilePath } from './config.js';
|
|
3
|
+
function issueKey(ref) {
|
|
4
|
+
return `${ref.repo}#${ref.number}`;
|
|
5
|
+
}
|
|
6
|
+
function issueRefsEqual(a, b) {
|
|
7
|
+
return a.repo === b.repo && a.number === b.number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Tracks issue dependency relationships for the swarm.
|
|
11
|
+
* Persisted to ~/.symphony/swarm/dependencies.json.
|
|
12
|
+
*/
|
|
13
|
+
export class DependencyGraph {
|
|
14
|
+
deps = new Map();
|
|
15
|
+
filePath;
|
|
16
|
+
constructor(filePath) {
|
|
17
|
+
this.filePath = filePath || dependenciesFilePath();
|
|
18
|
+
this.load();
|
|
19
|
+
}
|
|
20
|
+
/** Add a blocker relationship: `issue` is blocked by `blocker`. */
|
|
21
|
+
addBlocker(issue, blocker) {
|
|
22
|
+
const key = issueKey(issue);
|
|
23
|
+
const existing = this.deps.get(key);
|
|
24
|
+
if (existing) {
|
|
25
|
+
// Don't add duplicate
|
|
26
|
+
if (!existing.blocked_by.some(b => issueRefsEqual(b, blocker))) {
|
|
27
|
+
existing.blocked_by.push(blocker);
|
|
28
|
+
}
|
|
29
|
+
existing.status = 'blocked';
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.deps.set(key, {
|
|
33
|
+
issue,
|
|
34
|
+
blocked_by: [blocker],
|
|
35
|
+
status: 'blocked',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
this.save();
|
|
39
|
+
}
|
|
40
|
+
/** Remove a specific blocker from an issue. */
|
|
41
|
+
removeBlocker(issue, blocker) {
|
|
42
|
+
const key = issueKey(issue);
|
|
43
|
+
const existing = this.deps.get(key);
|
|
44
|
+
if (!existing)
|
|
45
|
+
return;
|
|
46
|
+
existing.blocked_by = existing.blocked_by.filter(b => !issueRefsEqual(b, blocker));
|
|
47
|
+
if (existing.blocked_by.length === 0) {
|
|
48
|
+
existing.status = 'ready';
|
|
49
|
+
}
|
|
50
|
+
this.save();
|
|
51
|
+
}
|
|
52
|
+
/** Get all blockers for a given issue. */
|
|
53
|
+
getBlockers(issue) {
|
|
54
|
+
const dep = this.deps.get(issueKey(issue));
|
|
55
|
+
return dep ? [...dep.blocked_by] : [];
|
|
56
|
+
}
|
|
57
|
+
/** Get all issues that have status 'blocked'. */
|
|
58
|
+
getBlockedIssues() {
|
|
59
|
+
return Array.from(this.deps.values()).filter(d => d.status === 'blocked');
|
|
60
|
+
}
|
|
61
|
+
/** Get all issues that were blocked but are now ready (all blockers resolved). */
|
|
62
|
+
getReadyIssues() {
|
|
63
|
+
return Array.from(this.deps.values()).filter(d => d.status === 'ready');
|
|
64
|
+
}
|
|
65
|
+
/** Check if an issue is currently blocked. */
|
|
66
|
+
isBlocked(issue) {
|
|
67
|
+
const dep = this.deps.get(issueKey(issue));
|
|
68
|
+
return dep?.status === 'blocked';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Mark a blocker as resolved. Returns list of issues that became unblocked
|
|
72
|
+
* as a result (status changed from 'blocked' to 'ready').
|
|
73
|
+
*/
|
|
74
|
+
resolveBlocker(blocker) {
|
|
75
|
+
const newlyUnblocked = [];
|
|
76
|
+
for (const dep of this.deps.values()) {
|
|
77
|
+
if (dep.status !== 'blocked')
|
|
78
|
+
continue;
|
|
79
|
+
const hadBlocker = dep.blocked_by.some(b => issueRefsEqual(b, blocker));
|
|
80
|
+
if (!hadBlocker)
|
|
81
|
+
continue;
|
|
82
|
+
dep.blocked_by = dep.blocked_by.filter(b => !issueRefsEqual(b, blocker));
|
|
83
|
+
if (dep.blocked_by.length === 0) {
|
|
84
|
+
dep.status = 'ready';
|
|
85
|
+
newlyUnblocked.push(dep.issue);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (newlyUnblocked.length > 0) {
|
|
89
|
+
this.save();
|
|
90
|
+
}
|
|
91
|
+
return newlyUnblocked;
|
|
92
|
+
}
|
|
93
|
+
/** Remove a dependency entry entirely (e.g., after the issue is resumed). */
|
|
94
|
+
remove(issue) {
|
|
95
|
+
this.deps.delete(issueKey(issue));
|
|
96
|
+
this.save();
|
|
97
|
+
}
|
|
98
|
+
/** Get the full dependency map as a plain object (for serialization to director context). */
|
|
99
|
+
toJSON() {
|
|
100
|
+
const result = {};
|
|
101
|
+
for (const [key, dep] of this.deps) {
|
|
102
|
+
result[key] = dep;
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
/** Persist to disk. */
|
|
107
|
+
save() {
|
|
108
|
+
const data = JSON.stringify(this.toJSON(), null, 2);
|
|
109
|
+
writeFileSync(this.filePath, data);
|
|
110
|
+
}
|
|
111
|
+
/** Load from disk. */
|
|
112
|
+
load() {
|
|
113
|
+
this.deps.clear();
|
|
114
|
+
if (!existsSync(this.filePath))
|
|
115
|
+
return;
|
|
116
|
+
try {
|
|
117
|
+
const content = readFileSync(this.filePath, 'utf-8');
|
|
118
|
+
const parsed = JSON.parse(content);
|
|
119
|
+
if (parsed && typeof parsed === 'object') {
|
|
120
|
+
for (const [key, dep] of Object.entries(parsed)) {
|
|
121
|
+
if (isValidDependency(dep)) {
|
|
122
|
+
this.deps.set(key, dep);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Start fresh if file is corrupted
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function isValidDependency(dep) {
|
|
133
|
+
return (dep &&
|
|
134
|
+
typeof dep === 'object' &&
|
|
135
|
+
dep.issue &&
|
|
136
|
+
typeof dep.issue.repo === 'string' &&
|
|
137
|
+
typeof dep.issue.number === 'number' &&
|
|
138
|
+
Array.isArray(dep.blocked_by) &&
|
|
139
|
+
typeof dep.status === 'string');
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/swarm/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { RuntimeStore } from '../services/runtime.js';
|
|
2
|
+
import type { Settings, SymphonyPane } from '../types.js';
|
|
3
|
+
import type { IssueProposal } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Manages the Director Agent lifecycle and swarm orchestration.
|
|
6
|
+
*
|
|
7
|
+
* The Director is a long-lived Claude agent in its own tmux pane.
|
|
8
|
+
* It reviews proposals, manages dependencies, and evolves the project.
|
|
9
|
+
*/
|
|
10
|
+
export declare class DirectorService {
|
|
11
|
+
private settings;
|
|
12
|
+
private swarm;
|
|
13
|
+
private tmux;
|
|
14
|
+
private github;
|
|
15
|
+
private proposals;
|
|
16
|
+
private deps;
|
|
17
|
+
private backlog;
|
|
18
|
+
private runtime;
|
|
19
|
+
private directorPanes;
|
|
20
|
+
private recentCompletions;
|
|
21
|
+
private lastEvolutionCycle;
|
|
22
|
+
constructor(settings: Settings, runtime: RuntimeStore);
|
|
23
|
+
/** Launch director pane(s) based on scope configuration. */
|
|
24
|
+
start(sessionName: string): Promise<SymphonyPane[]>;
|
|
25
|
+
/** Get all director panes. */
|
|
26
|
+
getDirectorPanes(): SymphonyPane[];
|
|
27
|
+
/**
|
|
28
|
+
* Process approved proposals: create GitHub issues and manage dependencies.
|
|
29
|
+
* Called by the daemon during each poll cycle.
|
|
30
|
+
*/
|
|
31
|
+
processApprovedProposals(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Auto-approve proposals if approval_mode is 'auto'.
|
|
34
|
+
* Called by the daemon during each poll cycle.
|
|
35
|
+
*/
|
|
36
|
+
autoApproveProposals(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Check blocked issues — if all blockers are resolved, resume the issue.
|
|
39
|
+
* Called by the daemon during each poll cycle.
|
|
40
|
+
*/
|
|
41
|
+
reconcileDependencies(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Update the director's context file with fresh state.
|
|
44
|
+
* Called by the daemon during each poll cycle.
|
|
45
|
+
*/
|
|
46
|
+
updateDirectorContext(activeRuns: SymphonyPane[]): Promise<void>;
|
|
47
|
+
/** Record a completed run for backlog tracking. */
|
|
48
|
+
recordCompletion(pane: SymphonyPane): void;
|
|
49
|
+
/** Get pending proposals (for TUI display in human_approval mode). */
|
|
50
|
+
getPendingProposals(): IssueProposal[];
|
|
51
|
+
/** Human approves a proposal from the TUI. */
|
|
52
|
+
humanApproveProposal(proposalId: string): Promise<void>;
|
|
53
|
+
/** Human rejects a proposal from the TUI. */
|
|
54
|
+
humanRejectProposal(proposalId: string, reason: string): Promise<void>;
|
|
55
|
+
/** Check if it's time for an evolution cycle. */
|
|
56
|
+
shouldRunEvolution(): boolean;
|
|
57
|
+
/** Mark evolution cycle as complete. */
|
|
58
|
+
markEvolutionComplete(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Trigger one director analysis/evolution cycle in every idle director pane.
|
|
61
|
+
* Returns the number of panes that received a new cycle prompt.
|
|
62
|
+
*/
|
|
63
|
+
runEvolutionCycle(): Promise<number>;
|
|
64
|
+
private launchDirectorPane;
|
|
65
|
+
private handleApprovedProposal;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=director.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"director.d.ts","sourceRoot":"","sources":["../../src/swarm/director.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAOtD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAa,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAe;IAE9B,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,kBAAkB,CAAK;gBAEnB,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY;IAWrD,4DAA4D;IACtD,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAsCzD,8BAA8B;IAC9B,gBAAgB,IAAI,YAAY,EAAE;IAIlC;;;OAGG;IACG,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB/C;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3C;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B5C;;;OAGG;IACG,qBAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BtE,mDAAmD;IACnD,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAmB1C,sEAAsE;IACtE,mBAAmB,IAAI,aAAa,EAAE;IAItC,8CAA8C;IACxC,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,6CAA6C;IACvC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5E,iDAAiD;IACjD,kBAAkB,IAAI,OAAO;IAK7B,wCAAwC;IACxC,qBAAqB,IAAI,IAAI;IAI7B;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;YA+C5B,kBAAkB;YA6ElB,sBAAsB;CAuDrC"}
|