swarm-engine 1.43.0 → 1.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -42
- package/agents/implementer.md +1 -14
- package/agents/orchestrator.md +127 -246
- package/agents/reviewer.md +3 -18
- package/dist/cli/commands/agents.js +13 -1
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/dashboard.d.ts +3 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +43 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/orchestrate.d.ts.map +1 -1
- package/dist/cli/commands/orchestrate.js +17 -0
- package/dist/cli/commands/orchestrate.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +20 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +5 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/usage.d.ts +3 -0
- package/dist/cli/commands/usage.d.ts.map +1 -0
- package/dist/cli/commands/usage.js +85 -0
- package/dist/cli/commands/usage.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +4 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/types.d.ts +44 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +4 -0
- package/dist/core/types.js.map +1 -1
- package/dist/hooks/cli.js +4 -1
- package/dist/hooks/cli.js.map +1 -1
- package/dist/hooks/index.d.ts +9 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +54 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/transcript-parser.d.ts +68 -0
- package/dist/hooks/transcript-parser.d.ts.map +1 -0
- package/dist/hooks/transcript-parser.js +163 -0
- package/dist/hooks/transcript-parser.js.map +1 -0
- package/dist/hooks/usage-logger.d.ts +30 -0
- package/dist/hooks/usage-logger.d.ts.map +1 -0
- package/dist/hooks/usage-logger.js +67 -0
- package/dist/hooks/usage-logger.js.map +1 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/memory/index.js +2 -2
- package/dist/memory/index.js.map +1 -1
- package/dist/runtime/agent-runner.d.ts +9 -0
- package/dist/runtime/agent-runner.d.ts.map +1 -1
- package/dist/runtime/agent-runner.js +167 -11
- package/dist/runtime/agent-runner.js.map +1 -1
- package/dist/runtime/backends/claude.d.ts +30 -0
- package/dist/runtime/backends/claude.d.ts.map +1 -1
- package/dist/runtime/backends/claude.js +112 -2
- package/dist/runtime/backends/claude.js.map +1 -1
- package/dist/runtime/backends/codex.d.ts.map +1 -1
- package/dist/runtime/backends/codex.js +4 -0
- package/dist/runtime/backends/codex.js.map +1 -1
- package/dist/runtime/backends/gemini.d.ts.map +1 -1
- package/dist/runtime/backends/gemini.js +4 -0
- package/dist/runtime/backends/gemini.js.map +1 -1
- package/dist/runtime/benefits.d.ts +81 -1
- package/dist/runtime/benefits.d.ts.map +1 -1
- package/dist/runtime/benefits.js +199 -12
- package/dist/runtime/benefits.js.map +1 -1
- package/dist/runtime/cache-optimizer.d.ts +7 -3
- package/dist/runtime/cache-optimizer.d.ts.map +1 -1
- package/dist/runtime/cache-optimizer.js +11 -7
- package/dist/runtime/cache-optimizer.js.map +1 -1
- package/dist/runtime/compaction.d.ts +6 -1
- package/dist/runtime/compaction.d.ts.map +1 -1
- package/dist/runtime/compaction.js +39 -2
- package/dist/runtime/compaction.js.map +1 -1
- package/dist/runtime/cost-model.d.ts.map +1 -1
- package/dist/runtime/cost-model.js +20 -17
- package/dist/runtime/cost-model.js.map +1 -1
- package/dist/runtime/engine.d.ts +2 -0
- package/dist/runtime/engine.d.ts.map +1 -1
- package/dist/runtime/engine.js +162 -3
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/graph-discovery.js +2 -2
- package/dist/runtime/graph-discovery.js.map +1 -1
- package/dist/runtime/graph-trajectory.js +3 -3
- package/dist/runtime/graph-trajectory.js.map +1 -1
- package/dist/runtime/handoff.d.ts +8 -0
- package/dist/runtime/handoff.d.ts.map +1 -0
- package/dist/runtime/handoff.js +109 -0
- package/dist/runtime/handoff.js.map +1 -0
- package/dist/runtime/heuristics.d.ts +2 -1
- package/dist/runtime/heuristics.d.ts.map +1 -1
- package/dist/runtime/heuristics.js +15 -2
- package/dist/runtime/heuristics.js.map +1 -1
- package/dist/runtime/lsp.d.ts.map +1 -1
- package/dist/runtime/lsp.js +4 -0
- package/dist/runtime/lsp.js.map +1 -1
- package/dist/runtime/mcp.d.ts +1 -0
- package/dist/runtime/mcp.d.ts.map +1 -1
- package/dist/runtime/mcp.js +38 -0
- package/dist/runtime/mcp.js.map +1 -1
- package/dist/runtime/model-router.d.ts +2 -1
- package/dist/runtime/model-router.d.ts.map +1 -1
- package/dist/runtime/model-router.js +8 -1
- package/dist/runtime/model-router.js.map +1 -1
- package/dist/runtime/output-summarizer.d.ts +45 -0
- package/dist/runtime/output-summarizer.d.ts.map +1 -0
- package/dist/runtime/output-summarizer.js +171 -0
- package/dist/runtime/output-summarizer.js.map +1 -0
- package/dist/runtime/plugins.d.ts +5 -1
- package/dist/runtime/plugins.d.ts.map +1 -1
- package/dist/runtime/plugins.js +14 -2
- package/dist/runtime/plugins.js.map +1 -1
- package/dist/runtime/prompt-tier.d.ts +33 -0
- package/dist/runtime/prompt-tier.d.ts.map +1 -0
- package/dist/runtime/prompt-tier.js +105 -0
- package/dist/runtime/prompt-tier.js.map +1 -0
- package/dist/runtime/savings-manifest.d.ts +66 -0
- package/dist/runtime/savings-manifest.d.ts.map +1 -0
- package/dist/runtime/savings-manifest.js +103 -0
- package/dist/runtime/savings-manifest.js.map +1 -0
- package/dist/runtime/sharing.js +2 -1
- package/dist/runtime/sharing.js.map +1 -1
- package/dist/runtime/stats.d.ts +2 -0
- package/dist/runtime/stats.d.ts.map +1 -1
- package/dist/runtime/stats.js +23 -3
- package/dist/runtime/stats.js.map +1 -1
- package/dist/runtime/violation-tracker.d.ts +31 -0
- package/dist/runtime/violation-tracker.d.ts.map +1 -0
- package/dist/runtime/violation-tracker.js +125 -0
- package/dist/runtime/violation-tracker.js.map +1 -0
- package/dist/utils/project-config.d.ts +20 -0
- package/dist/utils/project-config.d.ts.map +1 -1
- package/dist/utils/project-config.js +46 -1
- package/dist/utils/project-config.js.map +1 -1
- package/dist/utils/redact.d.ts.map +1 -1
- package/dist/utils/redact.js +5 -1
- package/dist/utils/redact.js.map +1 -1
- package/dist/web/bridge.d.ts +47 -0
- package/dist/web/bridge.d.ts.map +1 -0
- package/dist/web/bridge.js +267 -0
- package/dist/web/bridge.js.map +1 -0
- package/dist/web/graph-api.d.ts +19 -0
- package/dist/web/graph-api.d.ts.map +1 -0
- package/dist/web/graph-api.js +157 -0
- package/dist/web/graph-api.js.map +1 -0
- package/dist/web/index.d.ts +21 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +38 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/public/index.html +1304 -0
- package/dist/web/public/public/index.html +1307 -0
- package/dist/web/server.d.ts +24 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +113 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/tray.d.ts +23 -0
- package/dist/web/tray.d.ts.map +1 -0
- package/dist/web/tray.js +205 -0
- package/dist/web/tray.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
1
2
|
/**
|
|
2
3
|
* Project-level config loaded from .swarm.yml / .swarm.yaml (snake_case).
|
|
3
4
|
*
|
|
@@ -23,6 +24,25 @@ export interface ProjectConfig {
|
|
|
23
24
|
disabled?: boolean;
|
|
24
25
|
}>;
|
|
25
26
|
}
|
|
27
|
+
export declare const ProjectConfigSchema: z.ZodObject<{
|
|
28
|
+
project: z.ZodOptional<z.ZodString>;
|
|
29
|
+
default_backend: z.ZodOptional<z.ZodString>;
|
|
30
|
+
default_pattern: z.ZodOptional<z.ZodString>;
|
|
31
|
+
cost_budget: z.ZodOptional<z.ZodNumber>;
|
|
32
|
+
autonomy: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
ask: "ask";
|
|
34
|
+
auto: "auto";
|
|
35
|
+
}>>;
|
|
36
|
+
agents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
37
|
+
extra_rules: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
38
|
+
model: z.ZodOptional<z.ZodString>;
|
|
39
|
+
backend: z.ZodOptional<z.ZodString>;
|
|
40
|
+
}, z.core.$strict>>>;
|
|
41
|
+
context_files: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
42
|
+
patterns: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
43
|
+
disabled: z.ZodOptional<z.ZodBoolean>;
|
|
44
|
+
}, z.core.$strict>>>;
|
|
45
|
+
}, z.core.$strip>;
|
|
26
46
|
export declare function loadProjectConfig(cwd?: string): ProjectConfig | null;
|
|
27
47
|
/**
|
|
28
48
|
* Resolve the effective default backend from project config (.swarm.yml).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/utils/project-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/utils/project-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CACb,MAAM,EACN;QAEE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CACF,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CACf,MAAM,EACN;QAEE,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CACF,CAAC;CACH;AAgBD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;iBAS9B,CAAC;AA2BH,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAmBpE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpE;AAED,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB1D"}
|
|
@@ -1,6 +1,51 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'fs';
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import yaml from 'js-yaml';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
const AgentOverrideSchema = z
|
|
6
|
+
.object({
|
|
7
|
+
extra_rules: z.array(z.string()).optional(),
|
|
8
|
+
model: z.string().optional(),
|
|
9
|
+
backend: z.string().optional(),
|
|
10
|
+
})
|
|
11
|
+
.strict();
|
|
12
|
+
const PatternOverrideSchema = z
|
|
13
|
+
.object({
|
|
14
|
+
disabled: z.boolean().optional(),
|
|
15
|
+
})
|
|
16
|
+
.strict();
|
|
17
|
+
export const ProjectConfigSchema = z.object({
|
|
18
|
+
project: z.string().optional(),
|
|
19
|
+
default_backend: z.string().optional(),
|
|
20
|
+
default_pattern: z.string().optional(),
|
|
21
|
+
cost_budget: z.number().optional(),
|
|
22
|
+
autonomy: z.enum(['ask', 'auto']).optional(),
|
|
23
|
+
agents: z.record(z.string(), AgentOverrideSchema).optional(),
|
|
24
|
+
context_files: z.array(z.string()).optional(),
|
|
25
|
+
patterns: z.record(z.string(), PatternOverrideSchema).optional(),
|
|
26
|
+
});
|
|
27
|
+
/** Fields that should never appear in a project config (potential code execution vectors) */
|
|
28
|
+
const DANGEROUS_FIELDS = new Set(['command', 'exec', 'script', 'shell', 'run', 'postinstall']);
|
|
29
|
+
function validateProjectConfig(parsed, path) {
|
|
30
|
+
// Strip dangerous top-level fields
|
|
31
|
+
for (const key of Object.keys(parsed)) {
|
|
32
|
+
if (DANGEROUS_FIELDS.has(key)) {
|
|
33
|
+
console.warn(`[swarm] Stripped dangerous field "${key}" from ${path}`);
|
|
34
|
+
delete parsed[key];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const result = ProjectConfigSchema.safeParse(parsed);
|
|
38
|
+
if (!result.success) {
|
|
39
|
+
for (const issue of result.error.issues) {
|
|
40
|
+
console.warn(`[swarm] Config warning in ${path}: ${issue.path.join('.')} — ${issue.message}`);
|
|
41
|
+
}
|
|
42
|
+
// Still return the parsed config with unknown fields stripped for safety
|
|
43
|
+
// Use the successfully parsed fields from a partial parse
|
|
44
|
+
const partial = ProjectConfigSchema.partial().safeParse(parsed);
|
|
45
|
+
return (partial.success ? partial.data : parsed);
|
|
46
|
+
}
|
|
47
|
+
return result.data;
|
|
48
|
+
}
|
|
4
49
|
export function loadProjectConfig(cwd) {
|
|
5
50
|
const dir = cwd ?? process.cwd();
|
|
6
51
|
const candidates = [join(dir, '.swarm.yml'), join(dir, '.swarm.yaml'), join(dir, '.swarm', 'config.yml')];
|
|
@@ -10,7 +55,7 @@ export function loadProjectConfig(cwd) {
|
|
|
10
55
|
const content = readFileSync(path, 'utf-8');
|
|
11
56
|
const parsed = yaml.load(content, { schema: yaml.DEFAULT_SCHEMA });
|
|
12
57
|
if (parsed && typeof parsed === 'object') {
|
|
13
|
-
return parsed;
|
|
58
|
+
return validateProjectConfig(parsed, path);
|
|
14
59
|
}
|
|
15
60
|
}
|
|
16
61
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/utils/project-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,IAAI,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/utils/project-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD"}
|
package/dist/utils/redact.js
CHANGED
|
@@ -7,13 +7,17 @@ const SECRET_PATTERNS = [
|
|
|
7
7
|
/(?:secret|token)\s*[:=]\s*(?:"[^"]*"|'[^']*'|[^\s"']+)/gi,
|
|
8
8
|
/(?:postgres|mysql|mongodb|redis):\/\/[^\s"']+/gi,
|
|
9
9
|
/(?:mongodb\+srv|rediss?|amqps?):\/\/[^\s"']+/gi,
|
|
10
|
-
/sk-[a-zA-Z0-
|
|
10
|
+
/sk-[a-zA-Z0-9_-]{20,}/g,
|
|
11
11
|
/ghp_[a-zA-Z0-9]{36}/g,
|
|
12
12
|
/github_pat_[a-zA-Z0-9_]{22,}/g,
|
|
13
13
|
/AKIA[0-9A-Z]{16}/g,
|
|
14
14
|
/-----BEGIN[A-Z ]*PRIVATE KEY-----/g,
|
|
15
15
|
/Bearer\s+[^\s"']+/gi,
|
|
16
16
|
/Authorization:\s*Basic\s+[^\s"']+/gi,
|
|
17
|
+
/xox[bpars]-[a-zA-Z0-9-]{10,}/g,
|
|
18
|
+
/npm_[a-zA-Z0-9]{36}/g,
|
|
19
|
+
/vercel_[a-zA-Z0-9_]{20,}/g,
|
|
20
|
+
/x-api-key:\s*sk-ant[a-zA-Z0-9_-]+/gi,
|
|
17
21
|
];
|
|
18
22
|
export function redactSecrets(text) {
|
|
19
23
|
let result = text;
|
package/dist/utils/redact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,eAAe,GAAG;IACtB,iEAAiE;IACjE,gEAAgE;IAChE,0DAA0D;IAC1D,iDAAiD;IACjD,gDAAgD;IAChD,
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,eAAe,GAAG;IACtB,iEAAiE;IACjE,gEAAgE;IAChE,0DAA0D;IAC1D,iDAAiD;IACjD,gDAAgD;IAChD,wBAAwB;IACxB,sBAAsB;IACtB,+BAA+B;IAC/B,mBAAmB;IACnB,oCAAoC;IACpC,qBAAqB;IACrB,qCAAqC;IACrC,+BAA+B;IAC/B,sBAAsB;IACtB,2BAA2B;IAC3B,qCAAqC;CACtC,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { EventBus } from '../core/event-bus.js';
|
|
2
|
+
import type { DashboardServer } from './server.js';
|
|
3
|
+
export interface DashboardState {
|
|
4
|
+
orchestrationName: string;
|
|
5
|
+
pattern: string;
|
|
6
|
+
status: string;
|
|
7
|
+
startedAt: Date | null;
|
|
8
|
+
phases: PhaseState[];
|
|
9
|
+
usage: {
|
|
10
|
+
tokens: number;
|
|
11
|
+
cost: number;
|
|
12
|
+
turns: number;
|
|
13
|
+
toolCalls: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface PhaseState {
|
|
17
|
+
name: string;
|
|
18
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
|
|
19
|
+
agents: AgentState[];
|
|
20
|
+
startedAt: Date | null;
|
|
21
|
+
completedAt: Date | null;
|
|
22
|
+
}
|
|
23
|
+
export interface AgentState {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
type: string;
|
|
27
|
+
model: string;
|
|
28
|
+
backend: string;
|
|
29
|
+
status: 'waiting' | 'spawning' | 'running' | 'done' | 'error' | 'timeout';
|
|
30
|
+
tokens: number;
|
|
31
|
+
detail: string;
|
|
32
|
+
}
|
|
33
|
+
export declare class DashboardBridge {
|
|
34
|
+
private bus;
|
|
35
|
+
private server;
|
|
36
|
+
private state;
|
|
37
|
+
private handler;
|
|
38
|
+
constructor(bus: EventBus, server: DashboardServer);
|
|
39
|
+
start(): void;
|
|
40
|
+
stop(): void;
|
|
41
|
+
/** Get a readonly copy of the current state (for testing). */
|
|
42
|
+
getState(): Readonly<DashboardState>;
|
|
43
|
+
private updateState;
|
|
44
|
+
private findOrCreatePhase;
|
|
45
|
+
private findOrCreateAgent;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/web/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnE,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,OAAO,CAA8C;gBAEjD,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe;IAalD,KAAK,IAAI,IAAI;IAgBb,IAAI,IAAI,IAAI;IAOZ,8DAA8D;IAC9D,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC;IAMpC,OAAO,CAAC,WAAW;IAoJnB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,iBAAiB;CA0E1B"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { WebSocket } from 'ws';
|
|
2
|
+
// ─── Bridge ────────────────────────────────────────────────────────
|
|
3
|
+
export class DashboardBridge {
|
|
4
|
+
bus;
|
|
5
|
+
server;
|
|
6
|
+
state;
|
|
7
|
+
handler = null;
|
|
8
|
+
constructor(bus, server) {
|
|
9
|
+
this.bus = bus;
|
|
10
|
+
this.server = server;
|
|
11
|
+
this.state = {
|
|
12
|
+
orchestrationName: 'Waiting for orchestration...',
|
|
13
|
+
pattern: '',
|
|
14
|
+
status: 'pending',
|
|
15
|
+
startedAt: null,
|
|
16
|
+
phases: [],
|
|
17
|
+
usage: { tokens: 0, cost: 0, turns: 0, toolCalls: 0 },
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
start() {
|
|
21
|
+
// On new WebSocket connection, send current state snapshot
|
|
22
|
+
this.server.setOnConnect((ws) => {
|
|
23
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
24
|
+
ws.send(JSON.stringify({ type: 'snapshot', data: this.state }));
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
// Subscribe to all events via wildcard
|
|
28
|
+
this.handler = (event) => {
|
|
29
|
+
this.updateState(event);
|
|
30
|
+
this.server.broadcast(JSON.stringify({ type: 'event', data: event }));
|
|
31
|
+
};
|
|
32
|
+
this.bus.on('*', this.handler);
|
|
33
|
+
}
|
|
34
|
+
stop() {
|
|
35
|
+
if (this.handler) {
|
|
36
|
+
this.bus.off('*', this.handler);
|
|
37
|
+
this.handler = null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Get a readonly copy of the current state (for testing). */
|
|
41
|
+
getState() {
|
|
42
|
+
return this.state;
|
|
43
|
+
}
|
|
44
|
+
// ─── State Updates (same logic as TUI dashboard) ─────────────────
|
|
45
|
+
updateState(event) {
|
|
46
|
+
const data = event.data;
|
|
47
|
+
switch (event.type) {
|
|
48
|
+
case 'orchestration:start': {
|
|
49
|
+
this.state.orchestrationName = String(data.name ?? 'Orchestration');
|
|
50
|
+
this.state.pattern = String(data.pattern ?? '');
|
|
51
|
+
this.state.status = 'running';
|
|
52
|
+
this.state.startedAt = new Date();
|
|
53
|
+
const phaseCount = Number(data.phaseCount ?? 0);
|
|
54
|
+
if (this.state.phases.length === 0 && phaseCount > 0) {
|
|
55
|
+
for (let i = 0; i < phaseCount; i++) {
|
|
56
|
+
this.state.phases.push({
|
|
57
|
+
name: `Phase ${i + 1}`,
|
|
58
|
+
status: 'pending',
|
|
59
|
+
agents: [],
|
|
60
|
+
startedAt: null,
|
|
61
|
+
completedAt: null,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
case 'orchestration:phase-start': {
|
|
68
|
+
const phaseName = String(data.phase ?? '');
|
|
69
|
+
const agentCount = Number(data.agentCount ?? 0);
|
|
70
|
+
const phase = this.findOrCreatePhase(phaseName);
|
|
71
|
+
phase.status = 'running';
|
|
72
|
+
phase.startedAt = new Date();
|
|
73
|
+
if (phase.agents.length === 0 && agentCount > 0) {
|
|
74
|
+
for (let i = 0; i < agentCount; i++) {
|
|
75
|
+
phase.agents.push({
|
|
76
|
+
id: '',
|
|
77
|
+
name: `agent-${i + 1}`,
|
|
78
|
+
type: '',
|
|
79
|
+
model: '',
|
|
80
|
+
backend: '',
|
|
81
|
+
status: 'waiting',
|
|
82
|
+
tokens: 0,
|
|
83
|
+
detail: '',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case 'orchestration:phase-complete': {
|
|
90
|
+
const phaseName = String(data.phase ?? '');
|
|
91
|
+
const status = String(data.status ?? 'completed');
|
|
92
|
+
const phase = this.state.phases.find((p) => p.name === phaseName);
|
|
93
|
+
if (phase) {
|
|
94
|
+
phase.status = status === 'failed' ? 'failed' : 'completed';
|
|
95
|
+
phase.completedAt = new Date();
|
|
96
|
+
}
|
|
97
|
+
const usage = data.usage;
|
|
98
|
+
if (usage) {
|
|
99
|
+
this.state.usage.tokens += usage.totalTokens ?? 0;
|
|
100
|
+
this.state.usage.cost += usage.costUsd ?? 0;
|
|
101
|
+
this.state.usage.turns += usage.turns ?? 0;
|
|
102
|
+
this.state.usage.toolCalls += usage.toolCalls ?? 0;
|
|
103
|
+
}
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
case 'orchestration:complete':
|
|
107
|
+
this.state.status = 'completed';
|
|
108
|
+
break;
|
|
109
|
+
case 'orchestration:failed':
|
|
110
|
+
this.state.status = 'failed';
|
|
111
|
+
break;
|
|
112
|
+
case 'agent:spawning': {
|
|
113
|
+
const agent = this.findOrCreateAgent(data);
|
|
114
|
+
agent.status = 'spawning';
|
|
115
|
+
agent.model = String(data.model ?? agent.model);
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case 'agent:running': {
|
|
119
|
+
const agent = this.findOrCreateAgent(data);
|
|
120
|
+
agent.status = 'running';
|
|
121
|
+
agent.model = String(data.model ?? agent.model);
|
|
122
|
+
agent.backend = String(data.backend ?? agent.backend);
|
|
123
|
+
if (data.task) {
|
|
124
|
+
agent.detail = String(data.task).slice(0, 80);
|
|
125
|
+
}
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
case 'agent:idle': {
|
|
129
|
+
const agent = this.findOrCreateAgent(data);
|
|
130
|
+
agent.status = 'done';
|
|
131
|
+
const usage = data.usage;
|
|
132
|
+
if (usage) {
|
|
133
|
+
agent.tokens = usage.totalTokens ?? 0;
|
|
134
|
+
}
|
|
135
|
+
const result = data.result;
|
|
136
|
+
if (result?.filesTouched) {
|
|
137
|
+
const files = result.filesTouched;
|
|
138
|
+
agent.detail = files.length > 0 ? `${files.length} files` : '';
|
|
139
|
+
}
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
case 'agent:error': {
|
|
143
|
+
const agent = this.findOrCreateAgent(data);
|
|
144
|
+
agent.status = 'error';
|
|
145
|
+
agent.detail = String(data.error ?? 'unknown error').slice(0, 60);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
case 'agent:timeout': {
|
|
149
|
+
const agent = this.findOrCreateAgent(data);
|
|
150
|
+
agent.status = 'timeout';
|
|
151
|
+
agent.detail = 'timed out';
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case 'agent:finding': {
|
|
155
|
+
const agent = this.findOrCreateAgent(data);
|
|
156
|
+
const severity = String(data.severity ?? 'info');
|
|
157
|
+
const finding = String(data.finding ?? '').slice(0, 60);
|
|
158
|
+
agent.detail = `[${severity}] ${finding}`;
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case 'agent:doom-loop': {
|
|
162
|
+
const agent = this.findOrCreateAgent(data);
|
|
163
|
+
agent.status = 'error';
|
|
164
|
+
agent.detail = `doom loop: ${String(data.tool ?? 'unknown')} x${data.callCount ?? '?'}`;
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case 'system:warning': {
|
|
168
|
+
// system:warning carries various subtypes — store as a detail on the orchestration status
|
|
169
|
+
const warnType = String(data.type ?? data.reason ?? 'warning');
|
|
170
|
+
this.state.status = `running (${warnType})`;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// ─── State Helpers (mirrored from TUI dashboard) ─────────────────
|
|
176
|
+
findOrCreatePhase(name) {
|
|
177
|
+
let phase = this.state.phases.find((p) => p.name === name);
|
|
178
|
+
if (!phase) {
|
|
179
|
+
phase = this.state.phases.find((p) => p.name.startsWith('Phase ') && p.status === 'pending');
|
|
180
|
+
if (phase) {
|
|
181
|
+
phase.name = name;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
phase = {
|
|
185
|
+
name,
|
|
186
|
+
status: 'pending',
|
|
187
|
+
agents: [],
|
|
188
|
+
startedAt: null,
|
|
189
|
+
completedAt: null,
|
|
190
|
+
};
|
|
191
|
+
this.state.phases.push(phase);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return phase;
|
|
195
|
+
}
|
|
196
|
+
findOrCreateAgent(data) {
|
|
197
|
+
const agentId = String(data.agentId ?? '');
|
|
198
|
+
const agentType = String(data.agentType ?? '');
|
|
199
|
+
// Search across all phases
|
|
200
|
+
for (const phase of this.state.phases) {
|
|
201
|
+
const existing = phase.agents.find((a) => a.id === agentId && agentId !== '');
|
|
202
|
+
if (existing)
|
|
203
|
+
return existing;
|
|
204
|
+
}
|
|
205
|
+
// Find running phase, fill a waiting slot or create one
|
|
206
|
+
const runningPhase = this.state.phases.find((p) => p.status === 'running');
|
|
207
|
+
if (runningPhase) {
|
|
208
|
+
const slot = runningPhase.agents.find((a) => a.status === 'waiting' && a.id === '');
|
|
209
|
+
if (slot) {
|
|
210
|
+
slot.id = agentId;
|
|
211
|
+
slot.name = agentType;
|
|
212
|
+
slot.type = agentType;
|
|
213
|
+
return slot;
|
|
214
|
+
}
|
|
215
|
+
const agent = {
|
|
216
|
+
id: agentId,
|
|
217
|
+
name: agentType,
|
|
218
|
+
type: agentType,
|
|
219
|
+
model: '',
|
|
220
|
+
backend: String(data.backend ?? ''),
|
|
221
|
+
status: 'waiting',
|
|
222
|
+
tokens: 0,
|
|
223
|
+
detail: '',
|
|
224
|
+
};
|
|
225
|
+
runningPhase.agents.push(agent);
|
|
226
|
+
return agent;
|
|
227
|
+
}
|
|
228
|
+
// Fallback: attach to last phase
|
|
229
|
+
const lastPhase = this.state.phases[this.state.phases.length - 1];
|
|
230
|
+
if (lastPhase) {
|
|
231
|
+
const agent = {
|
|
232
|
+
id: agentId,
|
|
233
|
+
name: agentType,
|
|
234
|
+
type: agentType,
|
|
235
|
+
model: '',
|
|
236
|
+
backend: String(data.backend ?? ''),
|
|
237
|
+
status: 'waiting',
|
|
238
|
+
tokens: 0,
|
|
239
|
+
detail: '',
|
|
240
|
+
};
|
|
241
|
+
lastPhase.agents.push(agent);
|
|
242
|
+
return agent;
|
|
243
|
+
}
|
|
244
|
+
// No phases yet — create one
|
|
245
|
+
const phase = {
|
|
246
|
+
name: 'Phase 1',
|
|
247
|
+
status: 'running',
|
|
248
|
+
agents: [],
|
|
249
|
+
startedAt: new Date(),
|
|
250
|
+
completedAt: null,
|
|
251
|
+
};
|
|
252
|
+
this.state.phases.push(phase);
|
|
253
|
+
const agent = {
|
|
254
|
+
id: agentId,
|
|
255
|
+
name: agentType,
|
|
256
|
+
type: agentType,
|
|
257
|
+
model: '',
|
|
258
|
+
backend: String(data.backend ?? ''),
|
|
259
|
+
status: 'waiting',
|
|
260
|
+
tokens: 0,
|
|
261
|
+
detail: '',
|
|
262
|
+
};
|
|
263
|
+
phase.agents.push(agent);
|
|
264
|
+
return agent;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/web/bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
+
import type { ExecutionGraph } from '../runtime/execution-graph.js';
|
|
3
|
+
import type { EventBus } from '../core/event-bus.js';
|
|
4
|
+
export declare class GraphApi {
|
|
5
|
+
private graph;
|
|
6
|
+
private bus;
|
|
7
|
+
constructor(graph: ExecutionGraph, bus?: EventBus);
|
|
8
|
+
/** Handle an API request. Returns true if the route was handled. */
|
|
9
|
+
handleRequest(req: IncomingMessage, res: ServerResponse): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* POST /api/events — accept external events and inject into the EventBus.
|
|
12
|
+
* Body: single event { type, data, source? } or array of events.
|
|
13
|
+
* This allows Claude Code, Codex, and other external processes to push
|
|
14
|
+
* orchestration events into a running dashboard.
|
|
15
|
+
*/
|
|
16
|
+
private handleEventIngest;
|
|
17
|
+
private json;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=graph-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-api.d.ts","sourceRoot":"","sources":["../../src/web/graph-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAmBrD,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,GAAG,CAAkB;gBAEjB,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,QAAQ;IAKjD,oEAAoE;IACpE,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO;IAyGjE;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,IAAI;CAIb"}
|