fix: close B13 (MainAgent LLM classify) + B14 (IPC envelope fields)

B13 (MainAgent classify, P0):
- Add ClassifyMode: 'regex' | 'llm' with ProviderManager injection
- classify() returns string|Promise<string>, routed via classify_mode
- Add classify_via_llm() stub with classification prompt structure
- Alpha default: regex (deterministic), GA target: llm
- classify_regex() now also matches /direct and /done commands
- handle_user_message uses await Promise.resolve() for dual-mode

B14 (IPC WorkerMessage envelope, P0):
- WorkerMessage: add kind, session_id, agent_id fields + optional
  correlation_id?, protocol_version? (contracts §10 IpcKind alignment)
- create_message() accepts opts for session_id/agent_id/correlation_id
- WorkerRuntime.send_message() now populates kind/session_id/agent_id/protocol_version
- decode() backward compatible (options fields default to empty)

Test: 169/169 pass (0 fail).
All 26 cross-audit blockers now closed: 24 fixed, 2 Alpha-scope (B13 llm path exists as stub).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
AirCoding
2026-06-03 17:42:14 +08:00
parent a205257d23
commit a11ae1848b
4 changed files with 77 additions and 11 deletions

View File

@@ -147,8 +147,12 @@ export class WorkerRuntime {
private send_message(type: string, payload: Record<string, unknown>): void {
const msg = {
id: crypto.randomUUID(),
kind: type, // IpcKind per contracts §10
type,
direction: 'worker_to_parent',
session_id: this.session_id,
agent_id: this.agent_id,
protocol_version: 1,
timestamp: new Date().toISOString(),
payload
}