@winspan/claude-forge 8.26.3 → 8.28.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/dist/capability/index.d.ts +9 -0
- package/dist/capability/index.d.ts.map +1 -0
- package/dist/capability/index.js +9 -0
- package/dist/capability/index.js.map +1 -0
- package/dist/capability/methodologies/bmad.yaml +69 -0
- package/dist/capability/methodologies/harness-engineering.yaml +69 -0
- package/dist/capability/methodology-planner.d.ts +33 -0
- package/dist/capability/methodology-planner.d.ts.map +1 -0
- package/dist/capability/methodology-planner.js +178 -0
- package/dist/capability/methodology-planner.js.map +1 -0
- package/dist/capability/methodology-registry.d.ts +32 -0
- package/dist/capability/methodology-registry.d.ts.map +1 -0
- package/dist/capability/methodology-registry.js +97 -0
- package/dist/capability/methodology-registry.js.map +1 -0
- package/dist/capability/types.d.ts +68 -0
- package/dist/capability/types.d.ts.map +1 -0
- package/dist/capability/types.js +7 -0
- package/dist/capability/types.js.map +1 -0
- package/dist/core/storage/schema.sql +40 -0
- package/dist/core/storage/sqlite.d.ts +25 -0
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +87 -0
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/daemon/handlers/methodology-formatter.d.ts +9 -0
- package/dist/daemon/handlers/methodology-formatter.d.ts.map +1 -0
- package/dist/daemon/handlers/methodology-formatter.js +73 -0
- package/dist/daemon/handlers/methodology-formatter.js.map +1 -0
- package/dist/daemon/handlers/post-tool-use.d.ts +9 -1
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +94 -2
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +5 -0
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.js +88 -0
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +5 -1
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +106 -16
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +8 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/routing-state.d.ts +49 -0
- package/dist/daemon/routing-state.d.ts.map +1 -0
- package/dist/daemon/routing-state.js +189 -0
- package/dist/daemon/routing-state.js.map +1 -0
- package/dist/engine/conventions/routing.yaml +5 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +122 -1
- package/dist/web/server.js.map +1 -1
- package/dist/web/static/assets/index-CtylfoaN.css +1 -0
- package/dist/web/static/assets/index-DnaQt27h.js +388 -0
- package/dist/web/static/assets/index-DnaQt27h.js.map +1 -0
- package/dist/web/static/index.html +12 -2971
- package/package.json +5 -2
|
@@ -7,6 +7,20 @@
|
|
|
7
7
|
* 3. Return block/warn/allow decision
|
|
8
8
|
*/
|
|
9
9
|
import { logger } from '../../core/utils/logger.js';
|
|
10
|
+
import { routingState } from '../routing-state.js';
|
|
11
|
+
// Tools that are allowed even when routing is active (investigation phase)
|
|
12
|
+
const ROUTING_WHITELIST = new Set([
|
|
13
|
+
'Read', 'Grep', 'Glob', // Code exploration
|
|
14
|
+
'AskUserQuestion', // Clarification
|
|
15
|
+
'WebSearch', 'WebFetch', // Research
|
|
16
|
+
]);
|
|
17
|
+
// Tools that trigger routing enforcement (decision/action phase)
|
|
18
|
+
const ROUTING_ENFORCEMENT_TOOLS = new Set([
|
|
19
|
+
'Edit', 'Write', 'Bash', // Code modification & execution
|
|
20
|
+
'Agent', 'Task', // Delegation (must match routed agent)
|
|
21
|
+
'NotebookEdit', // Notebook modification
|
|
22
|
+
'EnterPlanMode', 'ExitPlanMode', // Planning (should be done by agent)
|
|
23
|
+
]);
|
|
10
24
|
export class PreToolUseHandler {
|
|
11
25
|
ruleEngine;
|
|
12
26
|
contextBuilder;
|
|
@@ -16,9 +30,83 @@ export class PreToolUseHandler {
|
|
|
16
30
|
this.contextBuilder = contextBuilder;
|
|
17
31
|
}
|
|
18
32
|
async handle(event) {
|
|
33
|
+
// 1. Check routing enforcement FIRST (before governance rules)
|
|
34
|
+
const routingCheck = this.checkRoutingEnforcement(event);
|
|
35
|
+
if (!routingCheck.allow) {
|
|
36
|
+
return routingCheck;
|
|
37
|
+
}
|
|
38
|
+
// 2. Then run governance rules
|
|
19
39
|
const { result } = await this.handleWithDecision(event);
|
|
20
40
|
return result;
|
|
21
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Enforce routing decisions: if session was routed to an agent,
|
|
44
|
+
* block direct tool calls that bypass the agent.
|
|
45
|
+
*/
|
|
46
|
+
checkRoutingEnforcement(event) {
|
|
47
|
+
const routing = routingState.getRouting(event.session_id);
|
|
48
|
+
logger.warn(`[PreToolUse] checkRoutingEnforcement: session=${event.session_id}, tool=${event.tool_name}, routing=${routing ? routing.agentName : 'null'}`);
|
|
49
|
+
if (!routing) {
|
|
50
|
+
logger.warn(`[PreToolUse] No routing state found, allowing`);
|
|
51
|
+
return { allow: true }; // No active routing, allow everything
|
|
52
|
+
}
|
|
53
|
+
const toolName = event.tool_name;
|
|
54
|
+
if (!toolName) {
|
|
55
|
+
return { allow: true };
|
|
56
|
+
}
|
|
57
|
+
// Allow whitelisted tools (investigation phase)
|
|
58
|
+
if (ROUTING_WHITELIST.has(toolName)) {
|
|
59
|
+
logger.info(`[PreToolUse] Tool ${toolName} is whitelisted, allowing`);
|
|
60
|
+
return { allow: true };
|
|
61
|
+
}
|
|
62
|
+
// Check if this is the correct Agent/Task call
|
|
63
|
+
if (toolName === 'Agent' || toolName === 'Task') {
|
|
64
|
+
const subagentType = event.tool_input?.subagent_type;
|
|
65
|
+
if (subagentType === routing.agentName) {
|
|
66
|
+
// Correct agent invoked - clear routing state and allow
|
|
67
|
+
routingState.clearRouting(event.session_id);
|
|
68
|
+
logger.info(`[PreToolUse] Routing enforced: ${routing.agentName} invoked correctly`);
|
|
69
|
+
return { allow: true };
|
|
70
|
+
}
|
|
71
|
+
// Wrong agent - block
|
|
72
|
+
logger.warn(`[PreToolUse] Routing violation: expected ${routing.agentName}, got ${subagentType}`);
|
|
73
|
+
return {
|
|
74
|
+
allow: false,
|
|
75
|
+
reason: [
|
|
76
|
+
`⚠️ 路由冲突:当前任务已被路由到 ${routing.agentName} agent。`,
|
|
77
|
+
``,
|
|
78
|
+
`你尝试调用的是 ${subagentType},这与路由决策不符。`,
|
|
79
|
+
``,
|
|
80
|
+
`请使用正确的 agent:`,
|
|
81
|
+
` Tool: Agent`,
|
|
82
|
+
` subagent_type: "${routing.agentName}"`,
|
|
83
|
+
` prompt: <用户原始 prompt>`,
|
|
84
|
+
].join('\n'),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Enforcement tools (Edit/Write/Bash) - block and force Agent call
|
|
88
|
+
if (ROUTING_ENFORCEMENT_TOOLS.has(toolName)) {
|
|
89
|
+
logger.warn(`[PreToolUse] Routing enforcement: blocked ${toolName}, must use ${routing.agentName}`);
|
|
90
|
+
return {
|
|
91
|
+
allow: false,
|
|
92
|
+
reason: [
|
|
93
|
+
`⚠️ 路由强制执行:当前任务必须通过 ${routing.agentName} agent 处理。`,
|
|
94
|
+
``,
|
|
95
|
+
`你尝试直接调用 ${toolName} 工具,这违反了路由决策。`,
|
|
96
|
+
``,
|
|
97
|
+
`正确做法:使用 Agent 工具调用专业 agent`,
|
|
98
|
+
` Tool: Agent`,
|
|
99
|
+
` subagent_type: "${routing.agentName}"`,
|
|
100
|
+
` description: "执行用户请求的任务"`,
|
|
101
|
+
` prompt: <将用户的完整 prompt 传入>`,
|
|
102
|
+
``,
|
|
103
|
+
`Agent 职责:${routing.agentDescription}`,
|
|
104
|
+
].join('\n'),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Other tools - allow (e.g., AskUserQuestion for clarification)
|
|
108
|
+
return { allow: true };
|
|
109
|
+
}
|
|
22
110
|
async handleWithDecision(event) {
|
|
23
111
|
try {
|
|
24
112
|
const options = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@ import type { ExperimentRouter } from '../../engine/experiment-router.js';
|
|
|
18
18
|
import type { SQLiteStorage } from '../../core/storage/sqlite.js';
|
|
19
19
|
import type { RoutingObserver } from '../routing-observer.js';
|
|
20
20
|
import type { AgentRegistry } from '../../agents/registry.js';
|
|
21
|
+
import type { MethodologyRegistry } from '../../capability/methodology-registry.js';
|
|
22
|
+
import type { MethodologyPlanner } from '../../capability/methodology-planner.js';
|
|
21
23
|
export declare const INJECTION_VERSION = "v1-declarative-2026-05-08";
|
|
22
24
|
export declare class UserPromptHandler {
|
|
23
25
|
private classifier;
|
|
@@ -27,9 +29,11 @@ export declare class UserPromptHandler {
|
|
|
27
29
|
private agents;
|
|
28
30
|
private storage;
|
|
29
31
|
private observer;
|
|
32
|
+
private methodologyRegistry;
|
|
33
|
+
private methodologyPlanner;
|
|
30
34
|
private resumeInjected;
|
|
31
35
|
private conventionInjected;
|
|
32
|
-
constructor(classifier: IntentClassifier, resume?: ResumeManager | null, conventionExtractor?: ConventionExtractor | null, router?: ExperimentRouter | null, agents?: AgentRegistry | null, storage?: SQLiteStorage | null, observer?: RoutingObserver | null);
|
|
36
|
+
constructor(classifier: IntentClassifier, resume?: ResumeManager | null, conventionExtractor?: ConventionExtractor | null, router?: ExperimentRouter | null, agents?: AgentRegistry | null, storage?: SQLiteStorage | null, observer?: RoutingObserver | null, methodologyRegistry?: MethodologyRegistry | null, methodologyPlanner?: MethodologyPlanner | null);
|
|
33
37
|
handle(event: ForgeEvent): Promise<HookResult>;
|
|
34
38
|
}
|
|
35
39
|
//# sourceMappingURL=user-prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-prompt.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,mCAAmC,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"user-prompt.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,mCAAmC,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAKlF,eAAO,MAAM,iBAAiB,8BAA8B,CAAC;AAE7D,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,kBAAkB;IAZ5B,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,kBAAkB,CAAqB;gBAGrC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,GAAE,aAAa,GAAG,IAAW,EACnC,mBAAmB,GAAE,mBAAmB,GAAG,IAAW,EACtD,MAAM,GAAE,gBAAgB,GAAG,IAAW,EACtC,MAAM,GAAE,aAAa,GAAG,IAAW,EACnC,OAAO,GAAE,aAAa,GAAG,IAAW,EACpC,QAAQ,GAAE,eAAe,GAAG,IAAW,EACvC,mBAAmB,GAAE,mBAAmB,GAAG,IAAW,EACtD,kBAAkB,GAAE,kBAAkB,GAAG,IAAW;IAGxD,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAgMrD"}
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
* 4. Persist routing_events row for Web UI observation
|
|
12
12
|
*/
|
|
13
13
|
import { logger } from '../../core/utils/logger.js';
|
|
14
|
+
import { routingState } from '../routing-state.js';
|
|
15
|
+
import { formatMethodologyPhaseDirective } from './methodology-formatter.js';
|
|
14
16
|
export const INJECTION_VERSION = 'v1-declarative-2026-05-08';
|
|
15
17
|
export class UserPromptHandler {
|
|
16
18
|
classifier;
|
|
@@ -20,9 +22,11 @@ export class UserPromptHandler {
|
|
|
20
22
|
agents;
|
|
21
23
|
storage;
|
|
22
24
|
observer;
|
|
25
|
+
methodologyRegistry;
|
|
26
|
+
methodologyPlanner;
|
|
23
27
|
resumeInjected = new Set();
|
|
24
28
|
conventionInjected = new Set();
|
|
25
|
-
constructor(classifier, resume = null, conventionExtractor = null, router = null, agents = null, storage = null, observer = null) {
|
|
29
|
+
constructor(classifier, resume = null, conventionExtractor = null, router = null, agents = null, storage = null, observer = null, methodologyRegistry = null, methodologyPlanner = null) {
|
|
26
30
|
this.classifier = classifier;
|
|
27
31
|
this.resume = resume;
|
|
28
32
|
this.conventionExtractor = conventionExtractor;
|
|
@@ -30,6 +34,8 @@ export class UserPromptHandler {
|
|
|
30
34
|
this.agents = agents;
|
|
31
35
|
this.storage = storage;
|
|
32
36
|
this.observer = observer;
|
|
37
|
+
this.methodologyRegistry = methodologyRegistry;
|
|
38
|
+
this.methodologyPlanner = methodologyPlanner;
|
|
33
39
|
}
|
|
34
40
|
async handle(event) {
|
|
35
41
|
const prompt = event.user_prompt || event.tool_input?.user_prompt;
|
|
@@ -64,17 +70,71 @@ export class UserPromptHandler {
|
|
|
64
70
|
const source = analysis.fallbackUsed ? 'regex' : (analysis.classificationMs ? 'ai' : 'ground-truth');
|
|
65
71
|
logger.info(`[UserPrompt] Intent: complexity=${analysis.complexity} taskType=${analysis.taskType} ` +
|
|
66
72
|
`source=${source}${analysis.classificationMs ? ` (${analysis.classificationMs}ms)` : ''}`);
|
|
67
|
-
//
|
|
73
|
+
// 1.5 Methodology matching and dynamic plan generation (NEW)
|
|
74
|
+
let methodologyExecutionId = null;
|
|
75
|
+
let methodologyHandled = false;
|
|
76
|
+
if (this.methodologyRegistry && this.methodologyPlanner && this.storage) {
|
|
77
|
+
try {
|
|
78
|
+
logger.info(`[Methodology] Checking match for taskType=${analysis.taskType} complexity=${analysis.complexity}`);
|
|
79
|
+
// Check if there's an active methodology execution for this session
|
|
80
|
+
const activeExecution = this.storage.getActiveMethodologyExecution(event.session_id);
|
|
81
|
+
if (activeExecution) {
|
|
82
|
+
logger.info(`[Methodology] Active execution found: ${activeExecution.id}`);
|
|
83
|
+
// Methodology already running, don't create new one
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Match methodology based on intent
|
|
87
|
+
const methodology = this.methodologyRegistry.match(analysis);
|
|
88
|
+
if (methodology) {
|
|
89
|
+
logger.info(`[Methodology] Matched: ${methodology.id}`);
|
|
90
|
+
// Generate execution plan via AI
|
|
91
|
+
const plan = await this.methodologyPlanner.plan(prompt, analysis, methodology);
|
|
92
|
+
logger.info(`[Methodology] Generated plan with ${plan.phases.length} phases`);
|
|
93
|
+
// Persist execution
|
|
94
|
+
methodologyExecutionId = this.storage.createMethodologyExecution({
|
|
95
|
+
session_id: event.session_id,
|
|
96
|
+
methodology_id: methodology.id,
|
|
97
|
+
plan_json: JSON.stringify(plan),
|
|
98
|
+
});
|
|
99
|
+
logger.info(`[Methodology] Created execution: ${methodologyExecutionId}`);
|
|
100
|
+
// Inject Phase 1 directive
|
|
101
|
+
const phase1 = plan.phases[0];
|
|
102
|
+
if (phase1) {
|
|
103
|
+
systemParts.push(formatMethodologyPhaseDirective(methodology, plan, phase1, 0, methodologyExecutionId));
|
|
104
|
+
methodologyHandled = true;
|
|
105
|
+
logger.info(`[Methodology] Injected Phase 1 directive: ${phase1.id} → ${phase1.agent}`);
|
|
106
|
+
// Create phase execution record
|
|
107
|
+
this.storage.createPhaseExecution({
|
|
108
|
+
methodology_execution_id: methodologyExecutionId,
|
|
109
|
+
phase_id: phase1.id,
|
|
110
|
+
phase_index: 0,
|
|
111
|
+
agent_name: phase1.agent,
|
|
112
|
+
prompt: phase1.prompt,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
logger.info(`[Methodology] No match found for taskType=${analysis.taskType} complexity=${analysis.complexity}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
logger.warn(`[Methodology] Matching/planning failed: ${err}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// 2. Route (skip if methodology handled this prompt)
|
|
68
126
|
let decision = null;
|
|
69
127
|
let routedAgentName = null;
|
|
128
|
+
let routedAgentDef = null;
|
|
70
129
|
let routedType = 'none';
|
|
71
|
-
if (this.router) {
|
|
130
|
+
if (this.router && !methodologyHandled) {
|
|
72
131
|
decision = this.router.decide({ taskType: analysis.taskType, complexity: analysis.complexity }, event.session_id);
|
|
73
132
|
if (decision.action.type === 'route_to_agent') {
|
|
74
133
|
const agentName = decision.action.name;
|
|
75
134
|
const agentDef = this.agents?.get(agentName);
|
|
76
135
|
if (agentDef) {
|
|
77
136
|
routedAgentName = agentName;
|
|
137
|
+
routedAgentDef = agentDef;
|
|
78
138
|
routedType = 'agent';
|
|
79
139
|
systemParts.push(formatAgentDirective(agentName, agentDef.description));
|
|
80
140
|
logger.info(`[UserPrompt] Routed to agent: ${agentName}`);
|
|
@@ -90,7 +150,13 @@ export class UserPromptHandler {
|
|
|
90
150
|
// 4. Persist routing_events row
|
|
91
151
|
if (this.storage) {
|
|
92
152
|
try {
|
|
93
|
-
|
|
153
|
+
// Always use Date.now() as the server-side wall-clock reference.
|
|
154
|
+
// event.timestamp comes from Claude Code as an ISO string without
|
|
155
|
+
// timezone (e.g. "2026-05-09T07:57:47"); Date.parse treats it as
|
|
156
|
+
// UTC, but Claude Code actually emits it in *local* time, which
|
|
157
|
+
// silently offsets ts from first_tool_ts (taken via Date.now)
|
|
158
|
+
// by the TZ delta and makes latency math meaningless.
|
|
159
|
+
const ts = Date.now();
|
|
94
160
|
const routeRequestId = `${event.session_id}:${ts}`;
|
|
95
161
|
const eventId = this.storage.writeRoutingEvent({
|
|
96
162
|
session_id: event.session_id,
|
|
@@ -111,6 +177,16 @@ export class UserPromptHandler {
|
|
|
111
177
|
if (routedType === 'agent' && this.observer) {
|
|
112
178
|
this.observer.beginPending(event.session_id, eventId, routeRequestId, routedAgentName);
|
|
113
179
|
}
|
|
180
|
+
// Record routing state for PreToolUse enforcement
|
|
181
|
+
if (routedType === 'agent' && routedAgentName && routedAgentDef) {
|
|
182
|
+
routingState.setRouting(event.session_id, {
|
|
183
|
+
agentName: routedAgentName,
|
|
184
|
+
agentDescription: routedAgentDef.description,
|
|
185
|
+
timestamp: ts,
|
|
186
|
+
routeRequestId,
|
|
187
|
+
});
|
|
188
|
+
logger.info(`[UserPrompt] Routing state recorded for session ${event.session_id}`);
|
|
189
|
+
}
|
|
114
190
|
}
|
|
115
191
|
catch (err) {
|
|
116
192
|
logger.warn(`[UserPrompt] Failed to persist routing_events: ${err}`);
|
|
@@ -130,24 +206,38 @@ export class UserPromptHandler {
|
|
|
130
206
|
}
|
|
131
207
|
}
|
|
132
208
|
/**
|
|
133
|
-
*
|
|
134
|
-
* Uses
|
|
135
|
-
* imperative wording that triggers Claude's refusal instinct.
|
|
209
|
+
* Ruflo-style agent routing directive (inspired by Ruflo's CLAUDE.md).
|
|
210
|
+
* Uses clear, mandatory language with visual markers to enforce routing.
|
|
136
211
|
*/
|
|
137
212
|
function formatAgentDirective(agentName, agentDescription) {
|
|
138
213
|
return [
|
|
139
|
-
'
|
|
140
|
-
|
|
214
|
+
'╔═══════════════════════════════════════════════════════════════╗',
|
|
215
|
+
`║ ROUTING DECISION: ${agentName.padEnd(44)} ║`,
|
|
216
|
+
'╠═══════════════════════════════════════════════════════════════╣',
|
|
217
|
+
'║ ACTION REQUIRED: Use Agent tool immediately ║',
|
|
218
|
+
'║ ENFORCEMENT: Active (see CLAUDE.md Behavioral Rules) ║',
|
|
219
|
+
'╚═══════════════════════════════════════════════════════════════╝',
|
|
220
|
+
'',
|
|
221
|
+
`[ROUTE_TO: ${agentName}] [ROUTING_ENFORCED] [AGENT_REQUIRED]`,
|
|
222
|
+
'',
|
|
223
|
+
'**MANDATORY WORKFLOW**:',
|
|
224
|
+
'1. Investigate (optional) → Use Read/Grep/WebSearch to understand',
|
|
225
|
+
'2. Execute (required) → MUST use Agent tool with configuration below',
|
|
226
|
+
'3. Never bypass → Direct Edit/Write/Bash calls violate routing rules',
|
|
141
227
|
'',
|
|
142
|
-
'
|
|
143
|
-
|
|
144
|
-
'
|
|
145
|
-
|
|
228
|
+
'**AGENT CONFIGURATION**:',
|
|
229
|
+
'```typescript',
|
|
230
|
+
'Agent({',
|
|
231
|
+
` subagent_type: "${agentName}",`,
|
|
232
|
+
' description: "Execute the user\'s task",',
|
|
233
|
+
' prompt: "<user\'s complete original prompt>"',
|
|
234
|
+
'})',
|
|
235
|
+
'```',
|
|
146
236
|
'',
|
|
147
|
-
|
|
237
|
+
`**Agent Role**: ${agentDescription}`,
|
|
148
238
|
'',
|
|
149
|
-
'
|
|
150
|
-
'
|
|
239
|
+
'⚠️ **REMINDER**: See CLAUDE.md "Behavioral Rules (Always Enforced)" section',
|
|
240
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
151
241
|
].join('\n');
|
|
152
242
|
}
|
|
153
243
|
//# sourceMappingURL=user-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-prompt.js","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"user-prompt.js","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0CH,wBAAsB,WAAW,CAAC,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6P5E"}
|
package/dist/daemon/index.js
CHANGED
|
@@ -36,6 +36,8 @@ import { UserPromptHandler } from './handlers/user-prompt.js';
|
|
|
36
36
|
import { PreToolUseHandler } from './handlers/pre-tool-use.js';
|
|
37
37
|
import { PostToolUseHandler } from './handlers/post-tool-use.js';
|
|
38
38
|
import { StopHandler } from './handlers/stop.js';
|
|
39
|
+
import { MethodologyRegistry } from '../capability/methodology-registry.js';
|
|
40
|
+
import { MethodologyPlanner } from '../capability/methodology-planner.js';
|
|
39
41
|
export async function startDaemon(foreground = false) {
|
|
40
42
|
// ── 1. Config & Logging ────────────────────────────────────────────────────
|
|
41
43
|
const config = new ConfigManager().get();
|
|
@@ -106,6 +108,10 @@ export async function startDaemon(foreground = false) {
|
|
|
106
108
|
});
|
|
107
109
|
const routingObserver = new RoutingObserver(storage);
|
|
108
110
|
const autoDisableScheduler = new AutoDisableScheduler(storage);
|
|
111
|
+
// Methodology system (dynamic orchestration)
|
|
112
|
+
const methodologyRegistry = new MethodologyRegistry();
|
|
113
|
+
const methodologyPlanner = new MethodologyPlanner(ai);
|
|
114
|
+
logger.info(`[Methodology] Loaded ${methodologyRegistry.getAll().length} methodologies`);
|
|
109
115
|
// Enable hot-reload for routing.yaml (Phase 3) and experiments.yaml (Phase 5)
|
|
110
116
|
defaultRouter.enableHotReload();
|
|
111
117
|
experimentRouter.enableHotReload();
|
|
@@ -119,9 +125,9 @@ export async function startDaemon(foreground = false) {
|
|
|
119
125
|
logger.info('[Engines] IntentClassifier in fallback mode (no API key) — agent routing still active');
|
|
120
126
|
// ── 6. Create handlers ─────────────────────────────────────────────────────
|
|
121
127
|
const handlers = {
|
|
122
|
-
UserPromptSubmit: new UserPromptHandler(classifier, resume, conventionExtractor, experimentRouter, agents, storage, routingObserver),
|
|
128
|
+
UserPromptSubmit: new UserPromptHandler(classifier, resume, conventionExtractor, experimentRouter, agents, storage, routingObserver, methodologyRegistry, methodologyPlanner),
|
|
123
129
|
PreToolUse: new PreToolUseHandler(ruleEngine, contextBuilder),
|
|
124
|
-
PostToolUse: new PostToolUseHandler(qualityGate ?? null, storage, routingObserver),
|
|
130
|
+
PostToolUse: new PostToolUseHandler(qualityGate ?? null, storage, routingObserver, methodologyRegistry),
|
|
125
131
|
Stop: new StopHandler(distiller ?? null, exporter, resume, routingObserver, taskSegmenter),
|
|
126
132
|
};
|
|
127
133
|
// ── 7. Event handler ───────────────────────────────────────────────────────
|
package/dist/daemon/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoutingState — in-memory session routing state for PreToolUse enforcement
|
|
3
|
+
*
|
|
4
|
+
* Tracks which sessions have active routing decisions, so PreToolUse can
|
|
5
|
+
* enforce "must use Agent tool" when Claude tries to bypass the routing.
|
|
6
|
+
*/
|
|
7
|
+
export interface RoutingDecision {
|
|
8
|
+
agentName: string;
|
|
9
|
+
agentDescription: string;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
routeRequestId: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Global routing state manager (singleton pattern)
|
|
15
|
+
*/
|
|
16
|
+
declare class RoutingStateManager {
|
|
17
|
+
private readonly state;
|
|
18
|
+
/**
|
|
19
|
+
* Record that a session has been routed to a specific agent
|
|
20
|
+
*/
|
|
21
|
+
setRouting(sessionId: string, decision: RoutingDecision): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get the active routing decision for a session (if any)
|
|
24
|
+
* Returns null if no routing exists or if routing has expired
|
|
25
|
+
*/
|
|
26
|
+
getRouting(sessionId: string): RoutingDecision | null;
|
|
27
|
+
/**
|
|
28
|
+
* Clear routing state for a session (called after agent is invoked or session ends)
|
|
29
|
+
*/
|
|
30
|
+
clearRouting(sessionId: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Check if a session has an active routing decision
|
|
33
|
+
*/
|
|
34
|
+
hasRouting(sessionId: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Get statistics about current routing state (for debugging/monitoring)
|
|
37
|
+
*/
|
|
38
|
+
getStats(): {
|
|
39
|
+
totalSessions: number;
|
|
40
|
+
oldestAge: number | null;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Cleanup expired routing states (called periodically by daemon)
|
|
44
|
+
*/
|
|
45
|
+
cleanup(): number;
|
|
46
|
+
}
|
|
47
|
+
export declare const routingState: RoutingStateManager;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=routing-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-state.d.ts","sourceRoot":"","sources":["../../src/daemon/routing-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAKD;;GAEG;AACH,cAAM,mBAAmB;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAE5D;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IA+B9D;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IA0BrD;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAkBrC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAetC;;OAEG;IACH,QAAQ,IAAI;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IA6B/D;;OAEG;IACH,OAAO,IAAI,MAAM;CAsClB;AAGD,eAAO,MAAM,YAAY,qBAA4B,CAAC"}
|