@tienne/gestalt 0.1.1 → 0.5.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/CLAUDE.md +175 -6
- package/README.md +381 -14
- package/dist/benchmarks/runners/passthrough-benchmark-runner.d.ts +94 -0
- package/dist/benchmarks/runners/passthrough-benchmark-runner.d.ts.map +1 -0
- package/dist/benchmarks/runners/passthrough-benchmark-runner.js +454 -0
- package/dist/benchmarks/runners/passthrough-benchmark-runner.js.map +1 -0
- package/dist/benchmarks/scenarios/api-gateway.scenario.d.ts +3 -0
- package/dist/benchmarks/scenarios/api-gateway.scenario.d.ts.map +1 -0
- package/dist/benchmarks/scenarios/api-gateway.scenario.js +115 -0
- package/dist/benchmarks/scenarios/api-gateway.scenario.js.map +1 -0
- package/dist/benchmarks/scenarios/auth-system.scenario.d.ts +3 -0
- package/dist/benchmarks/scenarios/auth-system.scenario.d.ts.map +1 -0
- package/dist/benchmarks/scenarios/auth-system.scenario.js +114 -0
- package/dist/benchmarks/scenarios/auth-system.scenario.js.map +1 -0
- package/dist/benchmarks/scenarios/dashboard.scenario.d.ts +3 -0
- package/dist/benchmarks/scenarios/dashboard.scenario.d.ts.map +1 -0
- package/dist/benchmarks/scenarios/dashboard.scenario.js +110 -0
- package/dist/benchmarks/scenarios/dashboard.scenario.js.map +1 -0
- package/dist/benchmarks/types.d.ts +148 -0
- package/dist/benchmarks/types.d.ts.map +1 -0
- package/dist/benchmarks/types.js +2 -0
- package/dist/benchmarks/types.js.map +1 -0
- package/dist/package.json +61 -0
- package/dist/schemas/gestalt.schema.json +98 -0
- package/dist/src/agent/parser.d.ts.map +1 -1
- package/dist/src/agent/parser.js +2 -0
- package/dist/src/agent/parser.js.map +1 -1
- package/dist/src/agent/passthrough-generator.d.ts +27 -0
- package/dist/src/agent/passthrough-generator.d.ts.map +1 -0
- package/dist/src/agent/passthrough-generator.js +133 -0
- package/dist/src/agent/passthrough-generator.js.map +1 -0
- package/dist/src/agent/registry.d.ts +1 -0
- package/dist/src/agent/registry.d.ts.map +1 -1
- package/dist/src/agent/registry.js +4 -1
- package/dist/src/agent/registry.js.map +1 -1
- package/dist/src/agent/role-agent-registry.d.ts +18 -0
- package/dist/src/agent/role-agent-registry.d.ts.map +1 -0
- package/dist/src/agent/role-agent-registry.js +62 -0
- package/dist/src/agent/role-agent-registry.js.map +1 -0
- package/dist/src/agent/role-consensus-engine.d.ts +9 -0
- package/dist/src/agent/role-consensus-engine.d.ts.map +1 -0
- package/dist/src/agent/role-consensus-engine.js +35 -0
- package/dist/src/agent/role-consensus-engine.js.map +1 -0
- package/dist/src/agent/role-match-engine.d.ts +14 -0
- package/dist/src/agent/role-match-engine.d.ts.map +1 -0
- package/dist/src/agent/role-match-engine.js +46 -0
- package/dist/src/agent/role-match-engine.js.map +1 -0
- package/dist/src/agent/role-prompt-generator.d.ts +10 -0
- package/dist/src/agent/role-prompt-generator.d.ts.map +1 -0
- package/dist/src/agent/role-prompt-generator.js +22 -0
- package/dist/src/agent/role-prompt-generator.js.map +1 -0
- package/dist/src/cli/commands/interview.js +2 -2
- package/dist/src/cli/commands/interview.js.map +1 -1
- package/dist/src/cli/commands/monitor.d.ts +2 -0
- package/dist/src/cli/commands/monitor.d.ts.map +1 -0
- package/dist/src/cli/commands/monitor.js +13 -0
- package/dist/src/cli/commands/monitor.js.map +1 -0
- package/dist/src/cli/commands/setup.d.ts +2 -0
- package/dist/src/cli/commands/setup.d.ts.map +1 -0
- package/dist/src/cli/commands/setup.js +20 -0
- package/dist/src/cli/commands/setup.js.map +1 -0
- package/dist/src/cli/commands/spec.js +2 -2
- package/dist/src/cli/commands/spec.js.map +1 -1
- package/dist/src/cli/commands/status.d.ts.map +1 -1
- package/dist/src/cli/commands/status.js +3 -3
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +16 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/core/config.d.ts +80 -17
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +141 -31
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/constants.d.ts +2 -2
- package/dist/src/core/constants.d.ts.map +1 -1
- package/dist/src/core/constants.js +2 -2
- package/dist/src/core/constants.js.map +1 -1
- package/dist/src/core/errors.d.ts +3 -0
- package/dist/src/core/errors.d.ts.map +1 -1
- package/dist/src/core/errors.js +6 -0
- package/dist/src/core/errors.js.map +1 -1
- package/dist/src/core/types.d.ts +83 -3
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/version.d.ts +10 -0
- package/dist/src/core/version.d.ts.map +1 -0
- package/dist/src/core/version.js +89 -0
- package/dist/src/core/version.js.map +1 -0
- package/dist/src/events/types.d.ts +16 -1
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/events/types.js +19 -0
- package/dist/src/events/types.js.map +1 -1
- package/dist/src/execute/passthrough-engine.d.ts +44 -2
- package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
- package/dist/src/execute/passthrough-engine.js +245 -10
- package/dist/src/execute/passthrough-engine.js.map +1 -1
- package/dist/src/execute/repository.d.ts.map +1 -1
- package/dist/src/execute/repository.js +24 -0
- package/dist/src/execute/repository.js.map +1 -1
- package/dist/src/execute/session.d.ts +6 -1
- package/dist/src/execute/session.d.ts.map +1 -1
- package/dist/src/execute/session.js +60 -0
- package/dist/src/execute/session.js.map +1 -1
- package/dist/src/mcp/schemas.d.ts +513 -9
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +102 -0
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +253 -38
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/benchmark-passthrough.d.ts +3 -0
- package/dist/src/mcp/tools/benchmark-passthrough.d.ts.map +1 -0
- package/dist/src/mcp/tools/benchmark-passthrough.js +95 -0
- package/dist/src/mcp/tools/benchmark-passthrough.js.map +1 -0
- package/dist/src/mcp/tools/create-agent-passthrough.d.ts +5 -0
- package/dist/src/mcp/tools/create-agent-passthrough.d.ts.map +1 -0
- package/dist/src/mcp/tools/create-agent-passthrough.js +59 -0
- package/dist/src/mcp/tools/create-agent-passthrough.js.map +1 -0
- package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute-passthrough.js +126 -0
- package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/review-passthrough.d.ts +6 -0
- package/dist/src/mcp/tools/review-passthrough.d.ts.map +1 -0
- package/dist/src/mcp/tools/review-passthrough.js +134 -0
- package/dist/src/mcp/tools/review-passthrough.js.map +1 -0
- package/dist/src/mcp/tools/status.d.ts +2 -1
- package/dist/src/mcp/tools/status.d.ts.map +1 -1
- package/dist/src/mcp/tools/status.js +81 -26
- package/dist/src/mcp/tools/status.js.map +1 -1
- package/dist/src/resilience/lateral.d.ts +17 -0
- package/dist/src/resilience/lateral.d.ts.map +1 -0
- package/dist/src/resilience/lateral.js +62 -0
- package/dist/src/resilience/lateral.js.map +1 -0
- package/dist/src/resilience/prompts.d.ts +5 -0
- package/dist/src/resilience/prompts.d.ts.map +1 -0
- package/dist/src/resilience/prompts.js +130 -0
- package/dist/src/resilience/prompts.js.map +1 -0
- package/dist/src/resilience/stagnation-detector.d.ts +19 -0
- package/dist/src/resilience/stagnation-detector.d.ts.map +1 -0
- package/dist/src/resilience/stagnation-detector.js +38 -0
- package/dist/src/resilience/stagnation-detector.js.map +1 -0
- package/dist/src/resilience/types.d.ts +39 -0
- package/dist/src/resilience/types.d.ts.map +1 -0
- package/dist/src/resilience/types.js +17 -0
- package/dist/src/resilience/types.js.map +1 -0
- package/dist/src/review/agent-matcher.d.ts +15 -0
- package/dist/src/review/agent-matcher.d.ts.map +1 -0
- package/dist/src/review/agent-matcher.js +61 -0
- package/dist/src/review/agent-matcher.js.map +1 -0
- package/dist/src/review/context-collector.d.ts +7 -0
- package/dist/src/review/context-collector.d.ts.map +1 -0
- package/dist/src/review/context-collector.js +44 -0
- package/dist/src/review/context-collector.js.map +1 -0
- package/dist/src/review/passthrough-engine.d.ts +53 -0
- package/dist/src/review/passthrough-engine.d.ts.map +1 -0
- package/dist/src/review/passthrough-engine.js +257 -0
- package/dist/src/review/passthrough-engine.js.map +1 -0
- package/dist/src/review/report-generator.d.ts +7 -0
- package/dist/src/review/report-generator.d.ts.map +1 -0
- package/dist/src/review/report-generator.js +82 -0
- package/dist/src/review/report-generator.js.map +1 -0
- package/dist/src/tui/components/TUIApp.d.ts +20 -0
- package/dist/src/tui/components/TUIApp.d.ts.map +1 -0
- package/dist/src/tui/components/TUIApp.js +84 -0
- package/dist/src/tui/components/TUIApp.js.map +1 -0
- package/dist/src/tui/hooks/event-store-reader.d.ts +28 -0
- package/dist/src/tui/hooks/event-store-reader.d.ts.map +1 -0
- package/dist/src/tui/hooks/event-store-reader.js +143 -0
- package/dist/src/tui/hooks/event-store-reader.js.map +1 -0
- package/dist/src/tui/hooks/useEventStorePoller.d.ts +12 -0
- package/dist/src/tui/hooks/useEventStorePoller.d.ts.map +1 -0
- package/dist/src/tui/hooks/useEventStorePoller.js +86 -0
- package/dist/src/tui/hooks/useEventStorePoller.js.map +1 -0
- package/dist/src/tui/screens/DashboardScreen.d.ts +4 -0
- package/dist/src/tui/screens/DashboardScreen.d.ts.map +1 -0
- package/dist/src/tui/screens/DashboardScreen.js +132 -0
- package/dist/src/tui/screens/DashboardScreen.js.map +1 -0
- package/dist/src/tui/screens/DebugScreen.d.ts +4 -0
- package/dist/src/tui/screens/DebugScreen.d.ts.map +1 -0
- package/dist/src/tui/screens/DebugScreen.js +40 -0
- package/dist/src/tui/screens/DebugScreen.js.map +1 -0
- package/dist/src/tui/screens/EvolutionScreen.d.ts +4 -0
- package/dist/src/tui/screens/EvolutionScreen.d.ts.map +1 -0
- package/dist/src/tui/screens/EvolutionScreen.js +136 -0
- package/dist/src/tui/screens/EvolutionScreen.js.map +1 -0
- package/dist/src/tui/screens/HUDPanel.d.ts +4 -0
- package/dist/src/tui/screens/HUDPanel.d.ts.map +1 -0
- package/dist/src/tui/screens/HUDPanel.js +13 -0
- package/dist/src/tui/screens/HUDPanel.js.map +1 -0
- package/dist/src/tui/screens/InterviewScreen.d.ts +4 -0
- package/dist/src/tui/screens/InterviewScreen.d.ts.map +1 -0
- package/dist/src/tui/screens/InterviewScreen.js +103 -0
- package/dist/src/tui/screens/InterviewScreen.js.map +1 -0
- package/dist/src/tui/screens/LogScreen.d.ts +4 -0
- package/dist/src/tui/screens/LogScreen.d.ts.map +1 -0
- package/dist/src/tui/screens/LogScreen.js +83 -0
- package/dist/src/tui/screens/LogScreen.js.map +1 -0
- package/dist/src/tui/screens/SessionListScreen.d.ts +4 -0
- package/dist/src/tui/screens/SessionListScreen.d.ts.map +1 -0
- package/dist/src/tui/screens/SessionListScreen.js +71 -0
- package/dist/src/tui/screens/SessionListScreen.js.map +1 -0
- package/dist/src/tui/screens/SpecViewerScreen.d.ts +4 -0
- package/dist/src/tui/screens/SpecViewerScreen.d.ts.map +1 -0
- package/dist/src/tui/screens/SpecViewerScreen.js +73 -0
- package/dist/src/tui/screens/SpecViewerScreen.js.map +1 -0
- package/dist/src/tui/widgets/DriftMeter.d.ts +15 -0
- package/dist/src/tui/widgets/DriftMeter.d.ts.map +1 -0
- package/dist/src/tui/widgets/DriftMeter.js +27 -0
- package/dist/src/tui/widgets/DriftMeter.js.map +1 -0
- package/dist/src/tui/widgets/GestaltPrincipleBar.d.ts +9 -0
- package/dist/src/tui/widgets/GestaltPrincipleBar.d.ts.map +1 -0
- package/dist/src/tui/widgets/GestaltPrincipleBar.js +35 -0
- package/dist/src/tui/widgets/GestaltPrincipleBar.js.map +1 -0
- package/dist/src/tui/widgets/TaskDAGTree.d.ts +15 -0
- package/dist/src/tui/widgets/TaskDAGTree.d.ts.map +1 -0
- package/dist/src/tui/widgets/TaskDAGTree.js +54 -0
- package/dist/src/tui/widgets/TaskDAGTree.js.map +1 -0
- package/package.json +11 -3
- package/schemas/gestalt.schema.json +98 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Gestalt Configuration",
|
|
4
|
+
"description": "Configuration file for Gestalt AI Development Harness",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"$schema": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "JSON Schema reference for IDE autocompletion"
|
|
10
|
+
},
|
|
11
|
+
"llm": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"description": "LLM provider settings",
|
|
14
|
+
"properties": {
|
|
15
|
+
"apiKey": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Anthropic API key (env: ANTHROPIC_API_KEY)"
|
|
18
|
+
},
|
|
19
|
+
"model": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "Model to use (env: GESTALT_MODEL)",
|
|
22
|
+
"default": "claude-sonnet-4-20250514"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"additionalProperties": false
|
|
26
|
+
},
|
|
27
|
+
"interview": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"description": "Interview engine settings",
|
|
30
|
+
"properties": {
|
|
31
|
+
"ambiguityThreshold": {
|
|
32
|
+
"type": "number",
|
|
33
|
+
"minimum": 0,
|
|
34
|
+
"maximum": 1,
|
|
35
|
+
"description": "Ambiguity threshold below which requirements are considered clear (env: GESTALT_AMBIGUITY_THRESHOLD)",
|
|
36
|
+
"default": 0.2
|
|
37
|
+
},
|
|
38
|
+
"maxRounds": {
|
|
39
|
+
"type": "integer",
|
|
40
|
+
"minimum": 1,
|
|
41
|
+
"description": "Maximum number of interview rounds (env: GESTALT_MAX_ROUNDS)",
|
|
42
|
+
"default": 10
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"additionalProperties": false
|
|
46
|
+
},
|
|
47
|
+
"execute": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"description": "Execute engine settings",
|
|
50
|
+
"properties": {
|
|
51
|
+
"driftThreshold": {
|
|
52
|
+
"type": "number",
|
|
53
|
+
"minimum": 0,
|
|
54
|
+
"maximum": 1,
|
|
55
|
+
"description": "Drift detection threshold (env: GESTALT_DRIFT_THRESHOLD)",
|
|
56
|
+
"default": 0.3
|
|
57
|
+
},
|
|
58
|
+
"successThreshold": {
|
|
59
|
+
"type": "number",
|
|
60
|
+
"minimum": 0,
|
|
61
|
+
"maximum": 1,
|
|
62
|
+
"description": "Evolution success threshold (env: GESTALT_EVOLVE_SUCCESS_THRESHOLD)",
|
|
63
|
+
"default": 0.85
|
|
64
|
+
},
|
|
65
|
+
"goalAlignmentThreshold": {
|
|
66
|
+
"type": "number",
|
|
67
|
+
"minimum": 0,
|
|
68
|
+
"maximum": 1,
|
|
69
|
+
"description": "Goal alignment threshold (env: GESTALT_EVOLVE_GOAL_ALIGNMENT_THRESHOLD)",
|
|
70
|
+
"default": 0.80
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"additionalProperties": false
|
|
74
|
+
},
|
|
75
|
+
"dbPath": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"description": "Path to the SQLite event store database (env: GESTALT_DB_PATH)",
|
|
78
|
+
"default": ".gestalt/gestalt.db"
|
|
79
|
+
},
|
|
80
|
+
"skillsDir": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"description": "Directory containing skill definitions (env: GESTALT_SKILLS_DIR)",
|
|
83
|
+
"default": "skills"
|
|
84
|
+
},
|
|
85
|
+
"agentsDir": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"description": "Directory containing agent definitions (env: GESTALT_AGENTS_DIR)",
|
|
88
|
+
"default": "agents"
|
|
89
|
+
},
|
|
90
|
+
"logLevel": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"enum": ["debug", "info", "warn", "error"],
|
|
93
|
+
"description": "Log level (env: GESTALT_LOG_LEVEL)",
|
|
94
|
+
"default": "info"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"additionalProperties": false
|
|
98
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/agent/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/agent/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAa1E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuB/E"}
|
package/dist/src/agent/parser.js
CHANGED
|
@@ -8,6 +8,8 @@ const agentFrontmatterSchema = z.object({
|
|
|
8
8
|
pipeline: z.enum(['interview', 'spec', 'execute', 'evaluate']),
|
|
9
9
|
escalateTo: z.string().optional(),
|
|
10
10
|
description: z.string().min(1),
|
|
11
|
+
role: z.boolean().default(false),
|
|
12
|
+
domain: z.array(z.string()).default([]),
|
|
11
13
|
});
|
|
12
14
|
export function parseAgentMd(content, filePath) {
|
|
13
15
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/agent/parser.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/agent/parser.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,QAAgB;IAC5D,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,MAAM,IAAI,eAAe,CACvB,mCAAmC,QAAQ,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,IAAwB;YAC5C,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE;YACzB,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,eAAe;YAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,eAAe,CACvB,+BAA+B,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { InterviewSession, AgentDefinition } from '../core/types.js';
|
|
2
|
+
import { AgentCreationError } from '../core/errors.js';
|
|
3
|
+
import { type Result } from '../core/result.js';
|
|
4
|
+
import { EventStore } from '../events/store.js';
|
|
5
|
+
import type { RoleAgentRegistry } from './role-agent-registry.js';
|
|
6
|
+
export interface AgentCreationContext {
|
|
7
|
+
systemPrompt: string;
|
|
8
|
+
creationPrompt: string;
|
|
9
|
+
existingAgents: {
|
|
10
|
+
name: string;
|
|
11
|
+
domain: string[];
|
|
12
|
+
description: string;
|
|
13
|
+
}[];
|
|
14
|
+
agentMdSchema: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class PassthroughAgentGenerator {
|
|
17
|
+
private eventStore;
|
|
18
|
+
private roleAgentRegistry?;
|
|
19
|
+
constructor(eventStore: EventStore, roleAgentRegistry?: RoleAgentRegistry | undefined);
|
|
20
|
+
buildAgentContext(session: InterviewSession): Result<AgentCreationContext, AgentCreationError>;
|
|
21
|
+
validateAndSave(session: InterviewSession, agentContent: string, cwd: string): Result<{
|
|
22
|
+
agent: AgentDefinition;
|
|
23
|
+
filePath: string;
|
|
24
|
+
overridden: boolean;
|
|
25
|
+
}, AgentCreationError>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=passthrough-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passthrough-generator.d.ts","sourceRoot":"","sources":["../../../src/agent/passthrough-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1E,aAAa,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,yBAAyB;IAElC,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,iBAAiB,CAAC;gBADlB,UAAU,EAAE,UAAU,EACtB,iBAAiB,CAAC,EAAE,iBAAiB,YAAA;IAG/C,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;IAoF9F,eAAe,CACb,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,GACV,MAAM,CAAC;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,EAAE,kBAAkB,CAAC;CAwDjG"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { AgentCreationError } from '../core/errors.js';
|
|
4
|
+
import { ok, err } from '../core/result.js';
|
|
5
|
+
import { EventType } from '../events/types.js';
|
|
6
|
+
import { parseAgentMd } from './parser.js';
|
|
7
|
+
// ─── Generator ──────────────────────────────────────────────────
|
|
8
|
+
export class PassthroughAgentGenerator {
|
|
9
|
+
eventStore;
|
|
10
|
+
roleAgentRegistry;
|
|
11
|
+
constructor(eventStore, roleAgentRegistry) {
|
|
12
|
+
this.eventStore = eventStore;
|
|
13
|
+
this.roleAgentRegistry = roleAgentRegistry;
|
|
14
|
+
}
|
|
15
|
+
buildAgentContext(session) {
|
|
16
|
+
if (session.status !== 'completed') {
|
|
17
|
+
return err(new AgentCreationError('Interview session must be completed before creating an agent'));
|
|
18
|
+
}
|
|
19
|
+
const existingAgents = (this.roleAgentRegistry?.getAll() ?? []).map((a) => ({
|
|
20
|
+
name: a.frontmatter.name,
|
|
21
|
+
domain: a.frontmatter.domain ?? [],
|
|
22
|
+
description: a.frontmatter.description,
|
|
23
|
+
}));
|
|
24
|
+
const roundsSummary = session.rounds
|
|
25
|
+
.filter((r) => r.userResponse !== null)
|
|
26
|
+
.map((r) => `Q${r.roundNumber}: ${r.question}\nA: ${r.userResponse}`)
|
|
27
|
+
.join('\n\n');
|
|
28
|
+
const existingList = existingAgents.length > 0
|
|
29
|
+
? existingAgents.map((a) => `- ${a.name}: ${a.description} (domains: ${a.domain.join(', ')})`).join('\n')
|
|
30
|
+
: '(none)';
|
|
31
|
+
const systemPrompt = `You are a Gestalt agent creator. Based on the completed interview, generate an AGENT.md file for a custom Role Agent. The agent must have role: true in its frontmatter.`;
|
|
32
|
+
const creationPrompt = `## Interview Summary
|
|
33
|
+
|
|
34
|
+
Topic: ${session.topic}
|
|
35
|
+
|
|
36
|
+
${roundsSummary}
|
|
37
|
+
|
|
38
|
+
## Existing Role Agents (avoid duplication)
|
|
39
|
+
|
|
40
|
+
${existingList}
|
|
41
|
+
|
|
42
|
+
## AGENT.md Format
|
|
43
|
+
|
|
44
|
+
Generate an AGENT.md file with YAML frontmatter and markdown body. The frontmatter must include all required fields.
|
|
45
|
+
|
|
46
|
+
### Frontmatter Fields
|
|
47
|
+
|
|
48
|
+
| Field | Type | Required | Description |
|
|
49
|
+
|-------|------|----------|-------------|
|
|
50
|
+
| name | string | yes | Unique agent name (lowercase, kebab-case) |
|
|
51
|
+
| tier | "frugal" \\| "standard" \\| "frontier" | yes | LLM tier for the agent |
|
|
52
|
+
| pipeline | "interview" \\| "spec" \\| "execute" \\| "evaluate" | yes | Which pipeline stage this agent operates in |
|
|
53
|
+
| role | boolean | yes | Must be \`true\` for role agents |
|
|
54
|
+
| domain | string[] | yes | List of domain keywords this agent covers |
|
|
55
|
+
| description | string | yes | One-line description of the agent's expertise |
|
|
56
|
+
| model | string | no | Specific model override |
|
|
57
|
+
| escalateTo | string | no | Agent to escalate to |
|
|
58
|
+
|
|
59
|
+
### Body
|
|
60
|
+
|
|
61
|
+
The markdown body after the frontmatter is the agent's system prompt. It should describe:
|
|
62
|
+
1. The agent's expertise and perspective
|
|
63
|
+
2. What the agent focuses on when reviewing tasks
|
|
64
|
+
3. The output format for perspectives
|
|
65
|
+
|
|
66
|
+
## Instructions
|
|
67
|
+
|
|
68
|
+
- The agent name must be unique (not in the existing agents list above)
|
|
69
|
+
- Set \`role: true\` (this is mandatory)
|
|
70
|
+
- Choose appropriate domain keywords based on the interview topic
|
|
71
|
+
- Write a clear, actionable system prompt in the body
|
|
72
|
+
|
|
73
|
+
Return the complete AGENT.md content (frontmatter + body) as a single string.`;
|
|
74
|
+
const agentMdSchema = `---
|
|
75
|
+
name: <string>
|
|
76
|
+
tier: frugal | standard | frontier
|
|
77
|
+
pipeline: interview | spec | execute | evaluate
|
|
78
|
+
role: true
|
|
79
|
+
domain: [<string>, ...]
|
|
80
|
+
description: "<string>"
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
<system prompt markdown body>`;
|
|
84
|
+
return ok({
|
|
85
|
+
systemPrompt,
|
|
86
|
+
creationPrompt,
|
|
87
|
+
existingAgents,
|
|
88
|
+
agentMdSchema,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
validateAndSave(session, agentContent, cwd) {
|
|
92
|
+
if (session.status !== 'completed') {
|
|
93
|
+
return err(new AgentCreationError('Interview session must be completed before creating an agent'));
|
|
94
|
+
}
|
|
95
|
+
// Parse and validate AGENT.md content
|
|
96
|
+
let agent;
|
|
97
|
+
try {
|
|
98
|
+
agent = parseAgentMd(agentContent, '<submitted>');
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
return err(new AgentCreationError(`Invalid AGENT.md content: ${e instanceof Error ? e.message : String(e)}`));
|
|
102
|
+
}
|
|
103
|
+
// Must be a role agent
|
|
104
|
+
if (!agent.frontmatter.role) {
|
|
105
|
+
return err(new AgentCreationError('Agent must have role=true. Only Role Agents can be created via ges_create_agent.'));
|
|
106
|
+
}
|
|
107
|
+
const agentName = agent.frontmatter.name;
|
|
108
|
+
const agentDir = join(cwd, 'agents', agentName);
|
|
109
|
+
const filePath = join(agentDir, 'AGENT.md');
|
|
110
|
+
const overridden = existsSync(filePath);
|
|
111
|
+
try {
|
|
112
|
+
mkdirSync(agentDir, { recursive: true });
|
|
113
|
+
writeFileSync(filePath, agentContent, 'utf-8');
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
return err(new AgentCreationError(`Failed to write AGENT.md: ${e instanceof Error ? e.message : String(e)}`));
|
|
117
|
+
}
|
|
118
|
+
// Update filePath to actual location
|
|
119
|
+
agent = { ...agent, filePath };
|
|
120
|
+
this.eventStore.append('agent', agentName, EventType.AGENT_CREATED, {
|
|
121
|
+
sessionId: session.sessionId,
|
|
122
|
+
agentName,
|
|
123
|
+
tier: agent.frontmatter.tier,
|
|
124
|
+
pipeline: agent.frontmatter.pipeline,
|
|
125
|
+
domain: agent.frontmatter.domain,
|
|
126
|
+
description: agent.frontmatter.description,
|
|
127
|
+
overridden,
|
|
128
|
+
filePath,
|
|
129
|
+
});
|
|
130
|
+
return ok({ agent, filePath, overridden });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=passthrough-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passthrough-generator.js","sourceRoot":"","sources":["../../../src/agent/passthrough-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,6 @@ export declare class AgentRegistry extends BaseRegistry<AgentDefinition> {
|
|
|
5
5
|
protected parse(content: string, filePath: string): AgentDefinition;
|
|
6
6
|
protected getName(item: AgentDefinition): string;
|
|
7
7
|
getByPipeline(pipeline: AgentPipeline): AgentDefinition[];
|
|
8
|
+
getByRole(): AgentDefinition[];
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/agent/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIvE,qBAAa,aAAc,SAAQ,YAAY,CAAC,eAAe,CAAC;gBAClD,SAAS,CAAC,EAAE,MAAM;IAQ9B,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe;IAInE,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM;IAIhD,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,eAAe,EAAE;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/agent/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIvE,qBAAa,aAAc,SAAQ,YAAY,CAAC,eAAe,CAAC;gBAClD,SAAS,CAAC,EAAE,MAAM;IAQ9B,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe;IAInE,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM;IAIhD,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,eAAe,EAAE;IAIzD,SAAS,IAAI,eAAe,EAAE;CAG/B"}
|
|
@@ -16,7 +16,10 @@ export class AgentRegistry extends BaseRegistry {
|
|
|
16
16
|
return item.frontmatter.name;
|
|
17
17
|
}
|
|
18
18
|
getByPipeline(pipeline) {
|
|
19
|
-
return this.getAll().filter((a) => a.frontmatter.pipeline === pipeline);
|
|
19
|
+
return this.getAll().filter((a) => a.frontmatter.pipeline === pipeline && !a.frontmatter.role);
|
|
20
|
+
}
|
|
21
|
+
getByRole() {
|
|
22
|
+
return this.getAll().filter((a) => a.frontmatter.role === true);
|
|
20
23
|
}
|
|
21
24
|
}
|
|
22
25
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agent/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,UAAU,GAAG,QAAQ,CAAC;AAE5B,MAAM,OAAO,aAAc,SAAQ,YAA6B;IAC9D,YAAY,SAAkB;QAC5B,KAAK,CAAC;YACJ,GAAG,EAAE,SAAS,IAAI,UAAU;YAC5B,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,OAAe,EAAE,QAAgB;QAC/C,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAES,OAAO,CAAC,IAAqB;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,QAAuB;QACnC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agent/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,UAAU,GAAG,QAAQ,CAAC;AAE5B,MAAM,OAAO,aAAc,SAAQ,YAA6B;IAC9D,YAAY,SAAkB;QAC5B,KAAK,CAAC;YACJ,GAAG,EAAE,SAAS,IAAI,UAAU;YAC5B,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,OAAe,EAAE,QAAgB;QAC/C,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAES,OAAO,CAAC,IAAqB;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,QAAuB;QACnC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACjG,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AgentDefinition } from '../core/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* RoleAgentRegistry: 내장 role-agents/ + 사용자 agents/ (role=true)를 병합.
|
|
4
|
+
* 동일 이름은 커스텀이 오버라이드.
|
|
5
|
+
*/
|
|
6
|
+
export declare class RoleAgentRegistry {
|
|
7
|
+
private builtinDir;
|
|
8
|
+
private customDir?;
|
|
9
|
+
private agents;
|
|
10
|
+
constructor(builtinDir: string, customDir?: string | undefined);
|
|
11
|
+
loadAll(): void;
|
|
12
|
+
private loadFromDir;
|
|
13
|
+
getAll(): AgentDefinition[];
|
|
14
|
+
getByName(name: string): AgentDefinition | undefined;
|
|
15
|
+
getByDomain(domain: string): AgentDefinition[];
|
|
16
|
+
has(name: string): boolean;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=role-agent-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-agent-registry.d.ts","sourceRoot":"","sources":["../../../src/agent/role-agent-registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;GAGG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS,CAAC;IAJpB,OAAO,CAAC,MAAM,CAAsC;gBAG1C,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,YAAA;IAG5B,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,WAAW;IAsBnB,MAAM,IAAI,eAAe,EAAE;IAI3B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIpD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE;IAO9C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG3B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { readFileSync, readdirSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { log } from '../core/log.js';
|
|
4
|
+
import { parseAgentMd } from './parser.js';
|
|
5
|
+
/**
|
|
6
|
+
* RoleAgentRegistry: 내장 role-agents/ + 사용자 agents/ (role=true)를 병합.
|
|
7
|
+
* 동일 이름은 커스텀이 오버라이드.
|
|
8
|
+
*/
|
|
9
|
+
export class RoleAgentRegistry {
|
|
10
|
+
builtinDir;
|
|
11
|
+
customDir;
|
|
12
|
+
agents = new Map();
|
|
13
|
+
constructor(builtinDir, customDir) {
|
|
14
|
+
this.builtinDir = builtinDir;
|
|
15
|
+
this.customDir = customDir;
|
|
16
|
+
}
|
|
17
|
+
loadAll() {
|
|
18
|
+
// 1. 내장 role agents 로드
|
|
19
|
+
this.loadFromDir(resolve(this.builtinDir));
|
|
20
|
+
// 2. 커스텀 디렉토리에서 role=true인 에이전트 로드 (오버라이드)
|
|
21
|
+
if (this.customDir) {
|
|
22
|
+
this.loadFromDir(resolve(this.customDir), true);
|
|
23
|
+
}
|
|
24
|
+
log(`Loaded ${this.agents.size} role agent(s)`);
|
|
25
|
+
}
|
|
26
|
+
loadFromDir(dir, onlyRoles = false) {
|
|
27
|
+
if (!existsSync(dir))
|
|
28
|
+
return;
|
|
29
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
30
|
+
for (const entry of entries) {
|
|
31
|
+
if (!entry.isDirectory())
|
|
32
|
+
continue;
|
|
33
|
+
const filePath = join(dir, entry.name, 'AGENT.md');
|
|
34
|
+
if (!existsSync(filePath))
|
|
35
|
+
continue;
|
|
36
|
+
try {
|
|
37
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
38
|
+
const agent = parseAgentMd(content, filePath);
|
|
39
|
+
if (onlyRoles && !agent.frontmatter.role)
|
|
40
|
+
continue;
|
|
41
|
+
this.agents.set(agent.frontmatter.name, agent);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
log(`Failed to load role agent at ${filePath}: ${e instanceof Error ? e.message : String(e)}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
getAll() {
|
|
49
|
+
return Array.from(this.agents.values());
|
|
50
|
+
}
|
|
51
|
+
getByName(name) {
|
|
52
|
+
return this.agents.get(name);
|
|
53
|
+
}
|
|
54
|
+
getByDomain(domain) {
|
|
55
|
+
const lower = domain.toLowerCase();
|
|
56
|
+
return this.getAll().filter((a) => a.frontmatter.domain?.some((d) => d.toLowerCase() === lower));
|
|
57
|
+
}
|
|
58
|
+
has(name) {
|
|
59
|
+
return this.agents.has(name);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=role-agent-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-agent-registry.js","sourceRoot":"","sources":["../../../src/agent/role-agent-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RolePerspective } from '../core/types.js';
|
|
2
|
+
export interface SynthesisContext {
|
|
3
|
+
systemPrompt: string;
|
|
4
|
+
synthesisPrompt: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class RoleConsensusEngine {
|
|
7
|
+
generateSynthesisContext(taskTitle: string, taskDescription: string, perspectives: RolePerspective[]): SynthesisContext;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=role-consensus-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-consensus-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/role-consensus-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,mBAAmB;IAC9B,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,eAAe,EAAE,GAC9B,gBAAgB;CAsCpB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export class RoleConsensusEngine {
|
|
2
|
+
generateSynthesisContext(taskTitle, taskDescription, perspectives) {
|
|
3
|
+
const systemPrompt = `You are a consensus synthesizer for a multi-role agent system.
|
|
4
|
+
Your job is to merge multiple role-agent perspectives into a unified, actionable guidance.
|
|
5
|
+
|
|
6
|
+
## Rules
|
|
7
|
+
1. Identify common themes across perspectives
|
|
8
|
+
2. Detect and resolve conflicts between perspectives
|
|
9
|
+
3. Prioritize based on relevance to the task
|
|
10
|
+
4. Produce a single coherent consensus that incorporates the best of each perspective
|
|
11
|
+
5. Explicitly list any conflict resolutions with reasoning
|
|
12
|
+
|
|
13
|
+
## Output Format
|
|
14
|
+
Respond with ONLY a JSON object:
|
|
15
|
+
{
|
|
16
|
+
"consensus": "Unified guidance text incorporating all perspectives",
|
|
17
|
+
"conflictResolutions": ["Description of conflict 1 and how it was resolved", ...]
|
|
18
|
+
}`;
|
|
19
|
+
const perspectiveList = perspectives
|
|
20
|
+
.map((p, i) => `### Perspective ${i + 1}: ${p.agentName} (confidence: ${p.confidence})\n${p.perspective}`)
|
|
21
|
+
.join('\n\n');
|
|
22
|
+
const synthesisPrompt = `## Consensus Synthesis
|
|
23
|
+
|
|
24
|
+
**Task**: ${taskTitle}
|
|
25
|
+
**Description**: ${taskDescription}
|
|
26
|
+
|
|
27
|
+
**Perspectives to synthesize** (${perspectives.length} role agents):
|
|
28
|
+
|
|
29
|
+
${perspectiveList}
|
|
30
|
+
|
|
31
|
+
Synthesize these perspectives into a single coherent consensus. Identify and resolve any conflicts.`;
|
|
32
|
+
return { systemPrompt, synthesisPrompt };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=role-consensus-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-consensus-engine.js","sourceRoot":"","sources":["../../../src/agent/role-consensus-engine.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,mBAAmB;IAC9B,wBAAwB,CACtB,SAAiB,EACjB,eAAuB,EACvB,YAA+B;QAE/B,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;EAevB,CAAC;QAEC,MAAM,eAAe,GAAG,YAAY;aACjC,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,iBAAiB,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,WAAW,EAAE,CAC7F;aACA,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,eAAe,GAAG;;YAEhB,SAAS;mBACF,eAAe;;kCAEA,YAAY,CAAC,MAAM;;EAEnD,eAAe;;oGAEmF,CAAC;QAEjG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentDefinition } from '../core/types.js';
|
|
2
|
+
export interface MatchContext {
|
|
3
|
+
systemPrompt: string;
|
|
4
|
+
matchingPrompt: string;
|
|
5
|
+
availableAgents: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
domain: string[];
|
|
8
|
+
description: string;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export declare class RoleMatchEngine {
|
|
12
|
+
generateMatchContext(taskId: string, taskTitle: string, taskDescription: string, roleAgents: AgentDefinition[]): MatchContext;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=role-match-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-match-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/role-match-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,qBAAa,eAAe;IAC1B,oBAAoB,CAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,eAAe,EAAE,GAC5B,YAAY;CAkDhB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export class RoleMatchEngine {
|
|
2
|
+
generateMatchContext(taskId, taskTitle, taskDescription, roleAgents) {
|
|
3
|
+
const availableAgents = roleAgents.map((a) => ({
|
|
4
|
+
name: a.frontmatter.name,
|
|
5
|
+
domain: a.frontmatter.domain ?? [],
|
|
6
|
+
description: a.frontmatter.description,
|
|
7
|
+
}));
|
|
8
|
+
const systemPrompt = `You are a role-agent matcher for the Gestalt execution system.
|
|
9
|
+
Your job is to analyze a task and determine which role agents are relevant.
|
|
10
|
+
|
|
11
|
+
## Rules
|
|
12
|
+
1. Match based on task content, not just keywords — understand the intent
|
|
13
|
+
2. A task can match 0 or more role agents
|
|
14
|
+
3. Each match should include a relevance score (0.0-1.0) and reasoning
|
|
15
|
+
4. Only match agents whose expertise is genuinely useful for the task
|
|
16
|
+
5. Err on the side of inclusion — it's better to include a marginally relevant agent than miss a useful one
|
|
17
|
+
|
|
18
|
+
## Output Format
|
|
19
|
+
Respond with ONLY a JSON object:
|
|
20
|
+
{
|
|
21
|
+
"matches": [
|
|
22
|
+
{
|
|
23
|
+
"agentName": "name",
|
|
24
|
+
"domain": ["relevant", "domains"],
|
|
25
|
+
"relevanceScore": 0.85,
|
|
26
|
+
"reasoning": "Why this agent is relevant"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}`;
|
|
30
|
+
const agentList = availableAgents
|
|
31
|
+
.map((a) => `- **${a.name}**: ${a.description} (domains: ${a.domain.join(', ')})`)
|
|
32
|
+
.join('\n');
|
|
33
|
+
const matchingPrompt = `## Role Agent Matching
|
|
34
|
+
|
|
35
|
+
**Task ID**: ${taskId}
|
|
36
|
+
**Task**: ${taskTitle}
|
|
37
|
+
**Description**: ${taskDescription}
|
|
38
|
+
|
|
39
|
+
**Available Role Agents** (${availableAgents.length}):
|
|
40
|
+
${agentList}
|
|
41
|
+
|
|
42
|
+
Analyze the task and select the most relevant role agents. Return matches sorted by relevance score (highest first).`;
|
|
43
|
+
return { systemPrompt, matchingPrompt, availableAgents };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=role-match-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-match-engine.js","sourceRoot":"","sources":["../../../src/agent/role-match-engine.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,eAAe;IAC1B,oBAAoB,CAClB,MAAc,EACd,SAAiB,EACjB,eAAuB,EACvB,UAA6B;QAE7B,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI;YACxB,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE;YAClC,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW;SACvC,CAAC,CAAC,CAAC;QAEJ,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;EAqBvB,CAAC;QAEC,MAAM,SAAS,GAAG,eAAe;aAC9B,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACxE;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,cAAc,GAAG;;eAEZ,MAAM;YACT,SAAS;mBACF,eAAe;;6BAEL,eAAe,CAAC,MAAM;EACjD,SAAS;;qHAE0G,CAAC;QAElH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;IAC3D,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AgentDefinition } from '../core/types.js';
|
|
2
|
+
export interface PerspectivePrompt {
|
|
3
|
+
agentName: string;
|
|
4
|
+
systemPrompt: string;
|
|
5
|
+
perspectivePrompt: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class RolePromptGenerator {
|
|
8
|
+
generatePerspectivePrompts(taskTitle: string, taskDescription: string, matchedAgents: AgentDefinition[]): PerspectivePrompt[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=role-prompt-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-prompt-generator.d.ts","sourceRoot":"","sources":["../../../src/agent/role-prompt-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,mBAAmB;IAC9B,0BAA0B,CACxB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,eAAe,EAAE,GAC/B,iBAAiB,EAAE;CAmBvB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export class RolePromptGenerator {
|
|
2
|
+
generatePerspectivePrompts(taskTitle, taskDescription, matchedAgents) {
|
|
3
|
+
return matchedAgents.map((agent) => ({
|
|
4
|
+
agentName: agent.frontmatter.name,
|
|
5
|
+
systemPrompt: agent.systemPrompt,
|
|
6
|
+
perspectivePrompt: `## Task Review Request
|
|
7
|
+
|
|
8
|
+
**Task**: ${taskTitle}
|
|
9
|
+
**Description**: ${taskDescription}
|
|
10
|
+
|
|
11
|
+
As a **${agent.frontmatter.name}** (${agent.frontmatter.description}), provide your expert perspective on this task.
|
|
12
|
+
|
|
13
|
+
Focus on your domain expertise and provide actionable guidance. Respond with ONLY a JSON object:
|
|
14
|
+
{
|
|
15
|
+
"agentName": "${agent.frontmatter.name}",
|
|
16
|
+
"perspective": "Your detailed perspective and recommendations",
|
|
17
|
+
"confidence": 0.85
|
|
18
|
+
}`,
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=role-prompt-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-prompt-generator.js","sourceRoot":"","sources":["../../../src/agent/role-prompt-generator.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,mBAAmB;IAC9B,0BAA0B,CACxB,SAAiB,EACjB,eAAuB,EACvB,aAAgC;QAEhC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI;YACjC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,iBAAiB,EAAE;;YAEb,SAAS;mBACF,eAAe;;SAEzB,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,CAAC,WAAW;;;;kBAIjD,KAAK,CAAC,WAAW,CAAC,IAAI;;;EAGtC;SACG,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
|
|
@@ -5,12 +5,12 @@ import { AnthropicAdapter } from '../../llm/adapter.js';
|
|
|
5
5
|
import { InterviewEngine } from '../../interview/engine.js';
|
|
6
6
|
export async function interviewCommand(topic) {
|
|
7
7
|
const config = loadConfig();
|
|
8
|
-
if (!config.
|
|
8
|
+
if (!config.llm.apiKey) {
|
|
9
9
|
console.error('Error: ANTHROPIC_API_KEY is required for CLI mode. Set it in .env or as environment variable.');
|
|
10
10
|
process.exit(1);
|
|
11
11
|
}
|
|
12
12
|
const eventStore = new EventStore(config.dbPath);
|
|
13
|
-
const llm = new AnthropicAdapter(config.
|
|
13
|
+
const llm = new AnthropicAdapter(config.llm.apiKey, config.llm.model);
|
|
14
14
|
const engine = new InterviewEngine(llm, eventStore);
|
|
15
15
|
const rl = createInterface({
|
|
16
16
|
input: process.stdin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAa;IAClD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/monitor.ts"],"names":[],"mappings":"AAKA,wBAAsB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtE"}
|