@adhd/agent-mcp 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +236 -0
- package/CHANGELOG.md +115 -0
- package/LICENSE +21 -0
- package/README.md +201 -0
- package/docs/architecture-and-security.md +405 -0
- package/docs/marketing/.catalog/capabilities.md +143 -0
- package/docs/marketing/.catalog/consumer.md +111 -0
- package/docs/marketing/.catalog/distribution.md +223 -0
- package/docs/marketing/.catalog/doc-conformance.md +237 -0
- package/docs/marketing/.catalog/doc-ops.md +98 -0
- package/docs/marketing/.catalog/metrics.md +119 -0
- package/docs/marketing/.catalog/required-tooling.md +224 -0
- package/docs/marketing/.catalog/review.md +164 -0
- package/docs/provider-call-audit.md +254 -0
- package/llms.txt +133 -0
- package/package.json +30 -51
- package/src/__tests__/integration/harness.d.ts +871 -39
- package/src/__tests__/integration/harness.d.ts.map +1 -1
- package/src/__tests__/integration/harness.js +93 -87
- package/src/__tests__/integration/harness.js.map +1 -1
- package/src/__tests__/integration/scripted-provider.d.ts +1 -2
- package/src/__tests__/integration/scripted-provider.d.ts.map +1 -1
- package/src/__tests__/integration/scripted-provider.js +1 -3
- package/src/__tests__/integration/scripted-provider.js.map +1 -1
- package/src/config.d.ts +6 -69
- package/src/config.d.ts.map +1 -1
- package/src/config.js +1 -50
- package/src/config.js.map +1 -1
- package/src/db/client.d.ts +1516 -2
- package/src/db/client.d.ts.map +1 -1
- package/src/db/client.js +4 -2
- package/src/db/client.js.map +1 -1
- package/src/db/migrate-runner.d.ts +0 -28
- package/src/db/migrate-runner.d.ts.map +1 -1
- package/src/db/migrate-runner.js +0 -24
- package/src/db/migrate-runner.js.map +1 -1
- package/src/db/migrate.d.ts +0 -7
- package/src/db/migrate.d.ts.map +1 -1
- package/src/db/migrate.js +0 -7
- package/src/db/migrate.js.map +1 -1
- package/src/db/schema.d.ts +0 -1260
- package/src/db/schema.d.ts.map +1 -1
- package/src/db/schema.js +2 -179
- package/src/db/schema.js.map +1 -1
- package/src/index.d.ts +3 -42
- package/src/index.d.ts.map +1 -1
- package/src/index.js +32 -123
- package/src/index.js.map +1 -1
- package/src/logger.d.ts +0 -8
- package/src/logger.d.ts.map +1 -1
- package/src/logger.js +1 -12
- package/src/logger.js.map +1 -1
- package/src/scripts/agent-mcp-tail.d.ts +3 -0
- package/src/scripts/agent-mcp-tail.d.ts.map +1 -0
- package/src/scripts/agent-mcp-tail.js +227 -0
- package/src/scripts/agent-mcp-tail.js.map +1 -0
- package/src/server.d.ts +13 -34
- package/src/server.d.ts.map +1 -1
- package/src/server.js +234 -326
- package/src/server.js.map +1 -1
- package/src/store/agent-store.d.ts +3 -16
- package/src/store/agent-store.d.ts.map +1 -1
- package/src/store/agent-store.js +38 -41
- package/src/store/agent-store.js.map +1 -1
- package/src/streaming/chat-gateway.d.ts +17 -0
- package/src/streaming/chat-gateway.d.ts.map +1 -0
- package/src/streaming/chat-gateway.js +336 -0
- package/src/streaming/chat-gateway.js.map +1 -0
- package/src/streaming/event-bus.d.ts +4 -0
- package/src/streaming/event-bus.d.ts.map +1 -1
- package/src/streaming/event-bus.js +14 -1
- package/src/streaming/event-bus.js.map +1 -1
- package/src/streaming/sse-server.d.ts +3 -14
- package/src/streaming/sse-server.d.ts.map +1 -1
- package/src/streaming/sse-server.js +37 -37
- package/src/streaming/sse-server.js.map +1 -1
- package/src/utils/load-env.d.ts +0 -14
- package/src/utils/load-env.d.ts.map +1 -1
- package/src/utils/load-env.js +0 -18
- package/src/utils/load-env.js.map +1 -1
- package/drizzle/0000_nifty_sasquatch.sql +0 -55
- package/drizzle/0001_task_usage.sql +0 -16
- package/drizzle/0002_lumpy_silver_centurion.sql +0 -2
- package/drizzle/0003_nifty_shriek.sql +0 -2
- package/drizzle/0004_brief_shocker.sql +0 -4
- package/drizzle/0005_clear_lenny_balinger.sql +0 -25
- package/drizzle/0006_composed_prompts_cache.sql +0 -24
- package/drizzle/meta/0000_snapshot.json +0 -387
- package/drizzle/meta/0001_snapshot.json +0 -495
- package/drizzle/meta/0002_snapshot.json +0 -509
- package/drizzle/meta/0003_snapshot.json +0 -523
- package/drizzle/meta/0004_snapshot.json +0 -551
- package/drizzle/meta/0005_snapshot.json +0 -545
- package/drizzle/meta/0006_snapshot.json +0 -651
- package/drizzle/meta/_journal.json +0 -55
- package/src/clients/http-client.d.ts +0 -24
- package/src/clients/http-client.d.ts.map +0 -1
- package/src/clients/http-client.js +0 -98
- package/src/clients/http-client.js.map +0 -1
- package/src/clients/in-process.d.ts +0 -27
- package/src/clients/in-process.d.ts.map +0 -1
- package/src/clients/in-process.js +0 -37
- package/src/clients/in-process.js.map +0 -1
- package/src/clients/index.d.ts +0 -7
- package/src/clients/index.d.ts.map +0 -1
- package/src/clients/index.js +0 -5
- package/src/clients/index.js.map +0 -1
- package/src/clients/registry.d.ts +0 -54
- package/src/clients/registry.d.ts.map +0 -1
- package/src/clients/registry.js +0 -164
- package/src/clients/registry.js.map +0 -1
- package/src/clients/stdio-client.d.ts +0 -16
- package/src/clients/stdio-client.d.ts.map +0 -1
- package/src/clients/stdio-client.js +0 -97
- package/src/clients/stdio-client.js.map +0 -1
- package/src/clients/tool-naming.d.ts +0 -44
- package/src/clients/tool-naming.d.ts.map +0 -1
- package/src/clients/tool-naming.js +0 -65
- package/src/clients/tool-naming.js.map +0 -1
- package/src/clients/types.d.ts +0 -18
- package/src/clients/types.d.ts.map +0 -1
- package/src/clients/types.js +0 -2
- package/src/clients/types.js.map +0 -1
- package/src/engine/dag-engine.d.ts +0 -62
- package/src/engine/dag-engine.d.ts.map +0 -1
- package/src/engine/dag-engine.js +0 -158
- package/src/engine/dag-engine.js.map +0 -1
- package/src/engine/hooks.d.ts +0 -24
- package/src/engine/hooks.d.ts.map +0 -1
- package/src/engine/hooks.js +0 -50
- package/src/engine/hooks.js.map +0 -1
- package/src/engine/orchestrator.d.ts +0 -40
- package/src/engine/orchestrator.d.ts.map +0 -1
- package/src/engine/orchestrator.js +0 -507
- package/src/engine/orchestrator.js.map +0 -1
- package/src/engine/policy.d.ts +0 -66
- package/src/engine/policy.d.ts.map +0 -1
- package/src/engine/policy.js +0 -112
- package/src/engine/policy.js.map +0 -1
- package/src/engine/prompt-resolver.d.ts +0 -89
- package/src/engine/prompt-resolver.d.ts.map +0 -1
- package/src/engine/prompt-resolver.js +0 -96
- package/src/engine/prompt-resolver.js.map +0 -1
- package/src/engine/queue.d.ts +0 -29
- package/src/engine/queue.d.ts.map +0 -1
- package/src/engine/queue.js +0 -56
- package/src/engine/queue.js.map +0 -1
- package/src/plugins/index.d.ts +0 -2
- package/src/plugins/index.d.ts.map +0 -1
- package/src/plugins/index.js +0 -2
- package/src/plugins/index.js.map +0 -1
- package/src/plugins/loader.d.ts +0 -65
- package/src/plugins/loader.d.ts.map +0 -1
- package/src/plugins/loader.js +0 -222
- package/src/plugins/loader.js.map +0 -1
- package/src/plugins/usage-plugin.d.ts +0 -27
- package/src/plugins/usage-plugin.d.ts.map +0 -1
- package/src/plugins/usage-plugin.js +0 -148
- package/src/plugins/usage-plugin.js.map +0 -1
- package/src/providers/anthropic.d.ts +0 -13
- package/src/providers/anthropic.d.ts.map +0 -1
- package/src/providers/anthropic.js +0 -260
- package/src/providers/anthropic.js.map +0 -1
- package/src/providers/claudecli.d.ts +0 -153
- package/src/providers/claudecli.d.ts.map +0 -1
- package/src/providers/claudecli.js +0 -510
- package/src/providers/claudecli.js.map +0 -1
- package/src/providers/factory.d.ts +0 -10
- package/src/providers/factory.d.ts.map +0 -1
- package/src/providers/factory.js +0 -24
- package/src/providers/factory.js.map +0 -1
- package/src/providers/index.d.ts +0 -6
- package/src/providers/index.d.ts.map +0 -1
- package/src/providers/index.js +0 -5
- package/src/providers/index.js.map +0 -1
- package/src/providers/openai.d.ts +0 -14
- package/src/providers/openai.d.ts.map +0 -1
- package/src/providers/openai.js +0 -162
- package/src/providers/openai.js.map +0 -1
- package/src/providers/types.d.ts +0 -36
- package/src/providers/types.d.ts.map +0 -1
- package/src/providers/types.js +0 -2
- package/src/providers/types.js.map +0 -1
- package/src/store/composed-prompt-store.d.ts +0 -24
- package/src/store/composed-prompt-store.d.ts.map +0 -1
- package/src/store/composed-prompt-store.js +0 -75
- package/src/store/composed-prompt-store.js.map +0 -1
- package/src/store/index.d.ts +0 -5
- package/src/store/index.d.ts.map +0 -1
- package/src/store/index.js +0 -5
- package/src/store/index.js.map +0 -1
- package/src/store/session-store.d.ts +0 -45
- package/src/store/session-store.d.ts.map +0 -1
- package/src/store/session-store.js +0 -197
- package/src/store/session-store.js.map +0 -1
- package/src/store/task-store.d.ts +0 -55
- package/src/store/task-store.d.ts.map +0 -1
- package/src/store/task-store.js +0 -186
- package/src/store/task-store.js.map +0 -1
- package/src/tools/agent-crud.d.ts +0 -15
- package/src/tools/agent-crud.d.ts.map +0 -1
- package/src/tools/agent-crud.js +0 -32
- package/src/tools/agent-crud.js.map +0 -1
- package/src/tools/session.d.ts +0 -33
- package/src/tools/session.d.ts.map +0 -1
- package/src/tools/session.js +0 -73
- package/src/tools/session.js.map +0 -1
- package/src/tools/task.d.ts +0 -86
- package/src/tools/task.d.ts.map +0 -1
- package/src/tools/task.js +0 -406
- package/src/tools/task.js.map +0 -1
- package/src/tools/usage.d.ts +0 -60
- package/src/tools/usage.d.ts.map +0 -1
- package/src/tools/usage.js +0 -174
- package/src/tools/usage.js.map +0 -1
- package/src/types/agent.d.ts +0 -2
- package/src/types/agent.d.ts.map +0 -1
- package/src/types/agent.js +0 -3
- package/src/types/agent.js.map +0 -1
- package/src/types/execution.d.ts +0 -2
- package/src/types/execution.d.ts.map +0 -1
- package/src/types/execution.js +0 -3
- package/src/types/execution.js.map +0 -1
- package/src/types/index.d.ts +0 -2
- package/src/types/index.d.ts.map +0 -1
- package/src/types/index.js +0 -2
- package/src/types/index.js.map +0 -1
- package/src/types/mcp.d.ts +0 -2
- package/src/types/mcp.d.ts.map +0 -1
- package/src/types/mcp.js +0 -3
- package/src/types/mcp.js.map +0 -1
- package/src/types/message.d.ts +0 -2
- package/src/types/message.d.ts.map +0 -1
- package/src/types/message.js +0 -3
- package/src/types/message.js.map +0 -1
- package/src/types/session.d.ts +0 -2
- package/src/types/session.d.ts.map +0 -1
- package/src/types/session.js +0 -3
- package/src/types/session.js.map +0 -1
- package/src/types/task.d.ts +0 -2
- package/src/types/task.d.ts.map +0 -1
- package/src/types/task.js +0 -3
- package/src/types/task.js.map +0 -1
- package/src/utils/ids.d.ts +0 -2
- package/src/utils/ids.d.ts.map +0 -1
- package/src/utils/ids.js +0 -5
- package/src/utils/ids.js.map +0 -1
- package/src/utils/logger.d.ts +0 -2
- package/src/utils/logger.d.ts.map +0 -1
- package/src/utils/logger.js +0 -5
- package/src/utils/logger.js.map +0 -1
- package/src/utils/timestamps.d.ts +0 -2
- package/src/utils/timestamps.d.ts.map +0 -1
- package/src/utils/timestamps.js +0 -4
- package/src/utils/timestamps.js.map +0 -1
- package/src/validation/agent.d.ts +0 -400
- package/src/validation/agent.d.ts.map +0 -1
- package/src/validation/agent.js +0 -251
- package/src/validation/agent.js.map +0 -1
- package/src/validation/agents.d.ts +0 -2
- package/src/validation/agents.d.ts.map +0 -1
- package/src/validation/agents.js +0 -3
- package/src/validation/agents.js.map +0 -1
- package/src/validation/errors.d.ts +0 -32
- package/src/validation/errors.d.ts.map +0 -1
- package/src/validation/errors.js +0 -42
- package/src/validation/errors.js.map +0 -1
- package/src/validation/execution.d.ts +0 -86
- package/src/validation/execution.d.ts.map +0 -1
- package/src/validation/execution.js +0 -28
- package/src/validation/execution.js.map +0 -1
- package/src/validation/index.d.ts +0 -9
- package/src/validation/index.d.ts.map +0 -1
- package/src/validation/index.js +0 -9
- package/src/validation/index.js.map +0 -1
- package/src/validation/mcp.d.ts +0 -42
- package/src/validation/mcp.d.ts.map +0 -1
- package/src/validation/mcp.js +0 -28
- package/src/validation/mcp.js.map +0 -1
- package/src/validation/message.d.ts +0 -43
- package/src/validation/message.d.ts.map +0 -1
- package/src/validation/message.js +0 -23
- package/src/validation/message.js.map +0 -1
- package/src/validation/session.d.ts +0 -49
- package/src/validation/session.d.ts.map +0 -1
- package/src/validation/session.js +0 -34
- package/src/validation/session.js.map +0 -1
- package/src/validation/task.d.ts +0 -146
- package/src/validation/task.d.ts.map +0 -1
- package/src/validation/task.js +0 -95
- package/src/validation/task.js.map +0 -1
- package/src/validation/tasks.d.ts +0 -2
- package/src/validation/tasks.d.ts.map +0 -1
- package/src/validation/tasks.js +0 -3
- package/src/validation/tasks.js.map +0 -1
- package/src/validation/usage.d.ts +0 -89
- package/src/validation/usage.d.ts.map +0 -1
- package/src/validation/usage.js +0 -98
- package/src/validation/usage.js.map +0 -1
package/src/db/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../entrypoint/agent-mcp/src/db/schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMtB,CAAC"}
|
package/src/db/schema.js
CHANGED
|
@@ -1,186 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
// ──────────────────────────────────────────────
|
|
3
|
-
// agents
|
|
4
|
-
// ──────────────────────────────────────────────
|
|
1
|
+
import { sqliteTable, integer, text } from "drizzle-orm/sqlite-core";
|
|
5
2
|
export const agentsTable = sqliteTable("agents", {
|
|
6
3
|
name: text("name").primaryKey(),
|
|
7
4
|
version: integer("version").notNull().default(1),
|
|
8
|
-
data: text("data").notNull(),
|
|
5
|
+
data: text("data").notNull(),
|
|
9
6
|
createdAt: text("created_at").notNull(),
|
|
10
7
|
updatedAt: text("updated_at").notNull(),
|
|
11
8
|
});
|
|
12
|
-
// ──────────────────────────────────────────────
|
|
13
|
-
// sessions
|
|
14
|
-
// ──────────────────────────────────────────────
|
|
15
|
-
export const sessionsTable = sqliteTable("sessions", {
|
|
16
|
-
id: text("id").primaryKey(),
|
|
17
|
-
agentName: text("agent_name")
|
|
18
|
-
.notNull()
|
|
19
|
-
.references(() => agentsTable.name, {
|
|
20
|
-
onDelete: "cascade"
|
|
21
|
-
}),
|
|
22
|
-
agentVersion: integer("agent_version").notNull(),
|
|
23
|
-
// Full JSON snapshot of AgentDefinition at session creation time.
|
|
24
|
-
// Not exposed in the public Session type — accessed only via
|
|
25
|
-
// SessionStore.getAgentDefinition(sessionId).
|
|
26
|
-
agentData: text("agent_data").notNull(),
|
|
27
|
-
status: text("status", {
|
|
28
|
-
enum: ["active", "closed"]
|
|
29
|
-
}).notNull().default("active"),
|
|
30
|
-
createdAt: text("created_at").notNull(),
|
|
31
|
-
updatedAt: text("updated_at").notNull(),
|
|
32
|
-
closedAt: text("closed_at"),
|
|
33
|
-
// Nullable FK → composed_prompts.id; set at session start when the compiler
|
|
34
|
-
// produces or finds a cached compiled prompt. Null for sessions created before
|
|
35
|
-
// the registry integration (backward-compatible additive column).
|
|
36
|
-
composedPromptId: text("composed_prompt_id"),
|
|
37
|
-
});
|
|
38
|
-
// ──────────────────────────────────────────────
|
|
39
|
-
// messages
|
|
40
|
-
// ──────────────────────────────────────────────
|
|
41
|
-
export const messagesTable = sqliteTable("messages", {
|
|
42
|
-
id: text("id").primaryKey(),
|
|
43
|
-
sessionId: text("session_id")
|
|
44
|
-
.notNull()
|
|
45
|
-
.references(() => sessionsTable.id, {
|
|
46
|
-
onDelete: "cascade"
|
|
47
|
-
}),
|
|
48
|
-
role: text("role", {
|
|
49
|
-
enum: ["system", "user", "assistant", "tool"]
|
|
50
|
-
}).notNull(),
|
|
51
|
-
content: text("content"),
|
|
52
|
-
// JSON blobs for tool call / result payloads
|
|
53
|
-
toolCalls: text("tool_calls"),
|
|
54
|
-
toolResults: text("tool_results"),
|
|
55
|
-
createdAt: text("created_at").notNull(),
|
|
56
|
-
});
|
|
57
|
-
// ──────────────────────────────────────────────
|
|
58
|
-
// tasks
|
|
59
|
-
// ──────────────────────────────────────────────
|
|
60
|
-
export const tasksTable = sqliteTable("tasks", {
|
|
61
|
-
id: text("id").primaryKey(),
|
|
62
|
-
// Nullable: ephemeral tasks (agent_name one-shot mode) have no session row.
|
|
63
|
-
// No FK reference: the session may not exist (ephemeral) or may have been
|
|
64
|
-
// deleted; we never want a cascade-delete triggered by session cleanup to
|
|
65
|
-
// destroy task history.
|
|
66
|
-
sessionId: text("session_id"),
|
|
67
|
-
parentTaskId: text("parent_task_id"),
|
|
68
|
-
// SQLite boolean: 0 = session-backed task, 1 = ephemeral one-shot task.
|
|
69
|
-
// Ephemeral tasks persist a tasks row + task_events + task_usage but
|
|
70
|
-
// have no sessions row and no messages rows.
|
|
71
|
-
isEphemeral: integer("is_ephemeral").notNull().default(0),
|
|
72
|
-
recursionDepth: integer("recursion_depth").notNull().default(0),
|
|
73
|
-
status: text("status", {
|
|
74
|
-
enum: ["pending", "running", "completed", "failed", "cancelled", "waiting", "awaiting_input"]
|
|
75
|
-
}).notNull().default("pending"),
|
|
76
|
-
prompt: text("prompt").notNull(),
|
|
77
|
-
result: text("result"),
|
|
78
|
-
error: text("error"),
|
|
79
|
-
createdAt: text("created_at").notNull(),
|
|
80
|
-
updatedAt: text("updated_at").notNull(),
|
|
81
|
-
completedAt: text("completed_at"),
|
|
82
|
-
cancelledAt: text("cancelled_at"),
|
|
83
|
-
// Dependency DAG fields (consumed by task-dependency-dag plan)
|
|
84
|
-
depends_on: text("depends_on"), // nullable JSON array of upstream task IDs
|
|
85
|
-
on_upstream_failure: text("on_upstream_failure"), // nullable: 'fail'|'skip' (default: 'fail')
|
|
86
|
-
inputs: text("inputs"), // nullable JSON blob: upstream taskId→result map
|
|
87
|
-
// HITL suspension field (consumed by hitl-interrupts plan)
|
|
88
|
-
resume_token: text("resume_token"), // nullable UUID written before await
|
|
89
|
-
});
|
|
90
|
-
// ──────────────────────────────────────────────
|
|
91
|
-
// task_events
|
|
92
|
-
// ──────────────────────────────────────────────
|
|
93
|
-
export const taskEventsTable = sqliteTable("task_events", {
|
|
94
|
-
id: text("id").primaryKey(),
|
|
95
|
-
taskId: text("task_id")
|
|
96
|
-
.notNull()
|
|
97
|
-
.references(() => tasksTable.id, {
|
|
98
|
-
onDelete: "cascade"
|
|
99
|
-
}),
|
|
100
|
-
type: text("type", {
|
|
101
|
-
enum: [
|
|
102
|
-
"MODEL_REQUEST",
|
|
103
|
-
"MODEL_RESPONSE",
|
|
104
|
-
"TOOL_CALL",
|
|
105
|
-
"TOOL_RESULT",
|
|
106
|
-
"TASK_COMPLETED",
|
|
107
|
-
"TASK_FAILED",
|
|
108
|
-
"TASK_CANCELLED"
|
|
109
|
-
]
|
|
110
|
-
}).notNull(),
|
|
111
|
-
payload: text("payload"), // JSON
|
|
112
|
-
createdAt: text("created_at").notNull(),
|
|
113
|
-
});
|
|
114
|
-
// ──────────────────────────────────────────────
|
|
115
|
-
// composed_prompts (runtime-sink-schema, Domain 5)
|
|
116
|
-
// ──────────────────────────────────────────────
|
|
117
|
-
// Runtime cache of compiler-output rows keyed by (agent_slug, context_hash).
|
|
118
|
-
// Written on cache-miss at session start; consumed by compiler-integration.
|
|
119
|
-
export const composedPromptsTable = sqliteTable("composed_prompts", {
|
|
120
|
-
id: text("id").primaryKey(),
|
|
121
|
-
agentSlug: text("agent_slug").notNull(),
|
|
122
|
-
// Opaque hash of the compilation context (component versions, etc.).
|
|
123
|
-
// Together with agent_slug this is the cache lookup key.
|
|
124
|
-
contextHash: text("context_hash").notNull(),
|
|
125
|
-
// Flat, fully-resolved system-prompt string produced by compileAgent().
|
|
126
|
-
content: text("content").notNull(),
|
|
127
|
-
// JSON blob: record of component-version ids used during compilation.
|
|
128
|
-
componentVersions: text("component_versions").notNull(),
|
|
129
|
-
createdAt: text("created_at").notNull(),
|
|
130
|
-
}, (table) => [
|
|
131
|
-
// Cache lookup: WHERE agent_slug = ? AND context_hash = ?
|
|
132
|
-
uniqueIndex("idx_composed_prompts_agent_ctx").on(table.agentSlug, table.contextHash),
|
|
133
|
-
]);
|
|
134
|
-
// ──────────────────────────────────────────────
|
|
135
|
-
// experiment_assignments (runtime-sink-schema, Domain 5)
|
|
136
|
-
// ──────────────────────────────────────────────
|
|
137
|
-
// Records which A/B variant a session was assigned to for each experiment slug.
|
|
138
|
-
export const experimentAssignmentsTable = sqliteTable("experiment_assignments", {
|
|
139
|
-
id: text("id").primaryKey(),
|
|
140
|
-
sessionId: text("session_id")
|
|
141
|
-
.notNull()
|
|
142
|
-
.references(() => sessionsTable.id, { onDelete: "cascade" }),
|
|
143
|
-
experimentSlug: text("experiment_slug").notNull(),
|
|
144
|
-
variant: text("variant").notNull(),
|
|
145
|
-
createdAt: text("created_at").notNull(),
|
|
146
|
-
});
|
|
147
|
-
// ──────────────────────────────────────────────
|
|
148
|
-
// task_usage
|
|
149
|
-
// ──────────────────────────────────────────────
|
|
150
|
-
// No FK on task_id → tasks.id: ephemeral tasks never write a tasks row,
|
|
151
|
-
// and cleanup scenarios make the constraint unreliable.
|
|
152
|
-
export const taskUsageTable = sqliteTable("task_usage", {
|
|
153
|
-
taskId: text("task_id").primaryKey(),
|
|
154
|
-
// null = this task IS the root of its delegation tree.
|
|
155
|
-
// non-null = task_id of the topmost ancestor.
|
|
156
|
-
rootTaskId: text("root_task_id"),
|
|
157
|
-
agentName: text("agent_name").notNull(),
|
|
158
|
-
// "openai" | "anthropic" | "lmstudio" | "claudecli" — kept as plain
|
|
159
|
-
// text rather than an enum so new providers don't require a migration.
|
|
160
|
-
providerType: text("provider_type").notNull(),
|
|
161
|
-
model: text("model").notNull(),
|
|
162
|
-
// Accumulated across all post:model_response events for this task.
|
|
163
|
-
inputTokens: integer("input_tokens").notNull().default(0),
|
|
164
|
-
outputTokens: integer("output_tokens").notNull().default(0),
|
|
165
|
-
toolCallCount: integer("tool_call_count").notNull().default(0),
|
|
166
|
-
modelCalls: integer("model_calls").notNull().default(0),
|
|
167
|
-
// Wall-clock ms from task start to terminal event; 0 until terminal.
|
|
168
|
-
latencyMs: integer("latency_ms").notNull().default(0),
|
|
169
|
-
// 0 = in-progress or crashed before terminal; 1 = terminal event fired.
|
|
170
|
-
isComplete: integer("is_complete").notNull().default(0),
|
|
171
|
-
// null until first post:model_response — most-severe stop reason across all
|
|
172
|
-
// model calls for this task. See [ref:normalised-stop-reason].
|
|
173
|
-
stopReason: text("stop_reason"),
|
|
174
|
-
// null for claudecli (no maxTokens in config) and for tasks started before
|
|
175
|
-
// this migration. Written once at task-start from provider.maxTokens.
|
|
176
|
-
maxTokens: integer("max_tokens"),
|
|
177
|
-
// Anthropic prompt-caching tokens — null for other providers and non-caching tiers
|
|
178
|
-
cacheReadTokens: integer("cache_read_input_tokens"),
|
|
179
|
-
cacheCreationTokens: integer("cache_creation_input_tokens"),
|
|
180
|
-
createdAt: text("created_at").notNull(),
|
|
181
|
-
}, (table) => [
|
|
182
|
-
// Critical for O(1) subtree aggregation:
|
|
183
|
-
// WHERE task_id = ? OR root_task_id = ?
|
|
184
|
-
index("idx_task_usage_root_task_id").on(table.rootTaskId),
|
|
185
|
-
]);
|
|
186
9
|
//# sourceMappingURL=schema.js.map
|
package/src/db/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../entrypoint/agent-mcp/src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE;IAC7C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;IAC/B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAC5B,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACvC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CAC1C,CAAC,CAAC"}
|
package/src/index.d.ts
CHANGED
|
@@ -1,50 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export type { ResolveInput, ResolveResult, ResolveResult as PromptResolveResult, CompileAgentFn, PromptResolverDeps } from "./engine/prompt-resolver.js";
|
|
6
|
-
import type { CompileAgentFn, PromptResolverDeps } from "./engine/prompt-resolver.js";
|
|
2
|
+
import type { CompileAgentFn, PromptResolverDeps } from "@adhd/agent-engine-orchestrator";
|
|
3
|
+
export { HookRegistry } from "@adhd/agent-engine-orchestrator";
|
|
4
|
+
export { ComposedPromptStore } from "@adhd/agent-store-prompts";
|
|
7
5
|
export interface BuildPromptResolverOpts {
|
|
8
|
-
/** Path to the agent-registry SQLite file. Absent → resolver is undefined. */
|
|
9
6
|
registryDbPath?: string;
|
|
10
|
-
/**
|
|
11
|
-
* The agent-mcp Drizzle DB handle, used to construct ComposedPromptStore.
|
|
12
|
-
* Must already have agent-mcp migrations applied.
|
|
13
|
-
*/
|
|
14
7
|
agentMcpDb: any;
|
|
15
|
-
/**
|
|
16
|
-
* The compileAgent function from @adhd/agent-compiler. When absent (the
|
|
17
|
-
* package is not installed), the resolver returns undefined and every agent
|
|
18
|
-
* falls back to its flat systemPrompt — the same graceful path used when the
|
|
19
|
-
* registry DB itself is absent.
|
|
20
|
-
*
|
|
21
|
-
* In production, main() performs a dynamic optional import and passes the
|
|
22
|
-
* resolved function here. Tests that exercise compiler integration inject a
|
|
23
|
-
* real or stubbed compileAgentFn directly.
|
|
24
|
-
*/
|
|
25
8
|
compileAgentFn?: CompileAgentFn;
|
|
26
9
|
}
|
|
27
|
-
/**
|
|
28
|
-
* Build a {@link PromptResolverDeps} from a registry DB path, an optional
|
|
29
|
-
* compile function, and the agent-mcp DB handle.
|
|
30
|
-
*
|
|
31
|
-
* Returns `undefined` (flat-systemPrompt fallback) when ANY of the following is
|
|
32
|
-
* true:
|
|
33
|
-
* - `registryDbPath` is absent (undefined / empty string).
|
|
34
|
-
* - `compileAgentFn` is absent — @adhd/agent-compiler is not installed.
|
|
35
|
-
* - The registry SQLite file cannot be opened (file missing, directory absent).
|
|
36
|
-
*
|
|
37
|
-
* When all three prerequisites are satisfied, opens the SQLite file in WAL mode,
|
|
38
|
-
* wraps it with Drizzle, and returns a fully-wired {@link PromptResolverDeps}.
|
|
39
|
-
*
|
|
40
|
-
* This function has no observable side-effects beyond opening the SQLite file
|
|
41
|
-
* when a path is supplied, so it is safe to call in tests with a real on-disk
|
|
42
|
-
* DB path.
|
|
43
|
-
*
|
|
44
|
-
* @param opts.registryDbPath - Path to the agent-registry SQLite file.
|
|
45
|
-
* @param opts.agentMcpDb - Drizzle handle for the agent-mcp DB.
|
|
46
|
-
* @param opts.compileAgentFn - Compile function from @adhd/agent-compiler (optional).
|
|
47
|
-
* @returns Wired {@link PromptResolverDeps} or `undefined`.
|
|
48
|
-
*/
|
|
49
10
|
export declare function buildPromptResolver(opts: BuildPromptResolverOpts): PromptResolverDeps | undefined;
|
|
50
11
|
//# sourceMappingURL=index.d.ts.map
|
package/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../entrypoint/agent-mcp/src/index.ts"],"names":[],"mappings":";AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAwB1F,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,WAAW,uBAAuB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,EAAE,GAAG,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,kBAAkB,GAAG,SAAS,CAsCjG"}
|
package/src/index.js
CHANGED
|
@@ -1,71 +1,31 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// Re-export HookRegistry so plugins can import it for testing without deep internal paths
|
|
3
|
-
export { HookRegistry } from "./engine/hooks.js";
|
|
4
|
-
// Re-export stores so consumers (tests, plugins) can import from the package root
|
|
5
|
-
export { ComposedPromptStore } from "./store/composed-prompt-store.js";
|
|
6
|
-
// Re-export prompt resolver for consumers that wire the compiler integration
|
|
7
|
-
export { resolveComposedPrompt, computeContextHash } from "./engine/prompt-resolver.js";
|
|
8
|
-
import Database from "better-sqlite3";
|
|
9
|
-
import { drizzle } from "drizzle-orm/better-sqlite3";
|
|
10
2
|
import { db } from "./db/client.js";
|
|
11
3
|
import { runMigrations } from "./db/migrate.js";
|
|
12
4
|
import { logger } from "./logger.js";
|
|
13
5
|
import { config } from "./config.js";
|
|
14
|
-
import { AgentStore
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import { DagEngine } from "
|
|
18
|
-
import { Orchestrator } from "./engine/orchestrator.js";
|
|
19
|
-
import { HookRegistry } from "./engine/hooks.js";
|
|
20
|
-
import { PolicyEngine } from "./engine/policy.js";
|
|
21
|
-
import { UsagePlugin } from "./plugins/index.js";
|
|
22
|
-
import { loadExternalPlugins } from "./plugins/loader.js";
|
|
6
|
+
import { AgentStore } from "./store/agent-store.js";
|
|
7
|
+
import { SessionStore, TaskStore } from "@adhd/agent-store-runtime";
|
|
8
|
+
import { ComposedPromptStore } from "@adhd/agent-store-prompts";
|
|
9
|
+
import { BackgroundQueue, DagEngine, Orchestrator, HookRegistry, PolicyEngine, UsagePlugin, loadExternalPlugins, enqueueExistingTask, } from "@adhd/agent-engine-orchestrator";
|
|
23
10
|
import { startServer } from "./server.js";
|
|
24
11
|
import { startSseServer } from "./streaming/sse-server.js";
|
|
25
|
-
import {
|
|
26
|
-
import { tasksTable } from "
|
|
12
|
+
import { emitTaskEvent } from "./streaming/event-bus.js";
|
|
13
|
+
import { tasksTable } from "@adhd/agent-store-runtime";
|
|
27
14
|
import { eq } from "drizzle-orm";
|
|
28
|
-
import { ToolError } from "
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
* Returns `undefined` (flat-systemPrompt fallback) when ANY of the following is
|
|
34
|
-
* true:
|
|
35
|
-
* - `registryDbPath` is absent (undefined / empty string).
|
|
36
|
-
* - `compileAgentFn` is absent — @adhd/agent-compiler is not installed.
|
|
37
|
-
* - The registry SQLite file cannot be opened (file missing, directory absent).
|
|
38
|
-
*
|
|
39
|
-
* When all three prerequisites are satisfied, opens the SQLite file in WAL mode,
|
|
40
|
-
* wraps it with Drizzle, and returns a fully-wired {@link PromptResolverDeps}.
|
|
41
|
-
*
|
|
42
|
-
* This function has no observable side-effects beyond opening the SQLite file
|
|
43
|
-
* when a path is supplied, so it is safe to call in tests with a real on-disk
|
|
44
|
-
* DB path.
|
|
45
|
-
*
|
|
46
|
-
* @param opts.registryDbPath - Path to the agent-registry SQLite file.
|
|
47
|
-
* @param opts.agentMcpDb - Drizzle handle for the agent-mcp DB.
|
|
48
|
-
* @param opts.compileAgentFn - Compile function from @adhd/agent-compiler (optional).
|
|
49
|
-
* @returns Wired {@link PromptResolverDeps} or `undefined`.
|
|
50
|
-
*/
|
|
15
|
+
import { ToolError } from "@adhd/agent-engine-orchestrator";
|
|
16
|
+
import Database from "better-sqlite3";
|
|
17
|
+
import { drizzle } from "drizzle-orm/better-sqlite3";
|
|
18
|
+
export { HookRegistry } from "@adhd/agent-engine-orchestrator";
|
|
19
|
+
export { ComposedPromptStore } from "@adhd/agent-store-prompts";
|
|
51
20
|
export function buildPromptResolver(opts) {
|
|
52
21
|
const { registryDbPath, agentMcpDb, compileAgentFn } = opts;
|
|
53
22
|
if (!registryDbPath) {
|
|
54
23
|
return undefined;
|
|
55
24
|
}
|
|
56
|
-
// When the compiler package is not installed (optional dependency), degrade
|
|
57
|
-
// gracefully to the flat-systemPrompt path — same as when the registry DB is absent.
|
|
58
25
|
if (!compileAgentFn) {
|
|
59
|
-
logger.info("@adhd/agent-compiler not available — registry/compiler integration disabled; using flat system-prompts");
|
|
26
|
+
logger.info("@adhd/agent-engine-compiler not available — registry/compiler integration disabled; using flat system-prompts");
|
|
60
27
|
return undefined;
|
|
61
28
|
}
|
|
62
|
-
// Graceful degradation: the registry DB at the default path
|
|
63
|
-
// (~/.adhd/agent-mcp/registry.db) will be absent or unmigrated until Plan 7
|
|
64
|
-
// imports the corpus. Opening a nonexistent directory throws; an empty /
|
|
65
|
-
// unmigrated DB produces empty tables that cause compileAgent to throw, which
|
|
66
|
-
// resolveComposedPrompt already catches and converts to a null (flat-prompt
|
|
67
|
-
// fallback). We catch the open failure here so the server still starts and
|
|
68
|
-
// every flat-systemPrompt agent continues to work unchanged.
|
|
69
29
|
let registrySqlite;
|
|
70
30
|
try {
|
|
71
31
|
logger.info({ registryDbPath }, "Opening registry DB for compiler integration");
|
|
@@ -86,11 +46,6 @@ export function buildPromptResolver(opts) {
|
|
|
86
46
|
registryDb,
|
|
87
47
|
};
|
|
88
48
|
}
|
|
89
|
-
// DEBT-001: top-level safety net for anything that escapes the per-component
|
|
90
|
-
// handlers (SSE 'error' event: BUG-001; queue catch: BackgroundQueue.enqueue;
|
|
91
|
-
// orchestrator try/catch; provider pRetry). An unhandled error here means a
|
|
92
|
-
// structural bug — log structured context and exit so the process doesn't
|
|
93
|
-
// silently hang or produce opaque output.
|
|
94
49
|
process.on("uncaughtException", (err) => {
|
|
95
50
|
logger.fatal({ err }, "Uncaught exception — exiting");
|
|
96
51
|
process.exit(1);
|
|
@@ -99,11 +54,6 @@ process.on("unhandledRejection", (reason) => {
|
|
|
99
54
|
logger.fatal({ reason }, "Unhandled promise rejection — exiting");
|
|
100
55
|
process.exit(1);
|
|
101
56
|
});
|
|
102
|
-
// ── Startup env-ref verification (§4) ────────────────────────────────────────
|
|
103
|
-
// Harvest every ADHD_AGENT_* env-var name referenced across all agent env blocks,
|
|
104
|
-
// then call config.verifyEnvRefs to surface missing / disallowed names as
|
|
105
|
-
// structured warnings. Never crashes — one misconfigured agent must not block the
|
|
106
|
-
// rest of a mixed deployment.
|
|
107
57
|
function verifyAgentEnvRefs(agents) {
|
|
108
58
|
const names = [];
|
|
109
59
|
for (const agent of agents) {
|
|
@@ -120,7 +70,8 @@ function verifyAgentEnvRefs(agents) {
|
|
|
120
70
|
}
|
|
121
71
|
if (names.length === 0)
|
|
122
72
|
return;
|
|
123
|
-
const
|
|
73
|
+
const uniqueNames = [...new Set(names)];
|
|
74
|
+
const { missing, disallowed } = config.verifyEnvRefs(uniqueNames);
|
|
124
75
|
if (missing.length > 0) {
|
|
125
76
|
logger.warn({ missingEnvVars: missing }, "Startup warning: the following env vars are referenced in agent configs but are not set. " +
|
|
126
77
|
"Tasks using those agents will fail at credential resolution. " +
|
|
@@ -132,43 +83,23 @@ function verifyAgentEnvRefs(agents) {
|
|
|
132
83
|
}
|
|
133
84
|
}
|
|
134
85
|
async function main() {
|
|
135
|
-
// Run DB migrations synchronously before advertising tools
|
|
136
86
|
runMigrations();
|
|
137
|
-
// Instantiate hooks registry
|
|
138
87
|
const hooks = new HookRegistry();
|
|
139
|
-
// Instantiate stores
|
|
140
88
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
141
89
|
const dbAny = db;
|
|
142
90
|
const agentStore = new AgentStore(dbAny, hooks);
|
|
143
91
|
const sessionStore = new SessionStore(dbAny, hooks);
|
|
144
92
|
const taskStore = new TaskStore(dbAny);
|
|
145
|
-
// Observational usage tracking: accumulates per-task token usage into
|
|
146
|
-
// task_usage on every post:model_response and finalises on terminal events.
|
|
147
|
-
// Must never throw — handlers are internally guarded.
|
|
148
93
|
const usagePlugin = new UsagePlugin(dbAny);
|
|
149
94
|
await usagePlugin.install(hooks);
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
// exports a createPlugin(ctx) factory. Failures are logged and skipped.
|
|
153
|
-
await loadExternalPlugins(hooks, dbAny);
|
|
154
|
-
// Instantiate engine components
|
|
155
|
-
const queue = new BackgroundQueue();
|
|
95
|
+
await loadExternalPlugins(hooks, dbAny, undefined, config.plugins.configPath, config.plugins.entries, logger);
|
|
96
|
+
const queue = new BackgroundQueue(config.queue.concurrency, logger);
|
|
156
97
|
const orchestrator = new Orchestrator();
|
|
157
98
|
const policy = new PolicyEngine({
|
|
158
99
|
serverMaxDepth: config.server.maxDepth,
|
|
159
100
|
serverMaxToolLoops: config.server.maxToolLoops,
|
|
160
101
|
serverAllowedAgents: config.server.allowedAgents,
|
|
161
102
|
});
|
|
162
|
-
// Build DagEngine with an injected dispatchFn closure.
|
|
163
|
-
//
|
|
164
|
-
// The closure avoids a circular import between dag-engine.ts and tools/task.ts:
|
|
165
|
-
// DagEngine dispatches waiting→pending tasks by calling dispatchFn(taskId) rather
|
|
166
|
-
// than importing enqueueExistingTask directly. The closure captures `taskDepsRef`
|
|
167
|
-
// whose value is populated after startServer resolves (below).
|
|
168
|
-
//
|
|
169
|
-
// dispatchFn is only invoked when DagEngine.dispatchReady() finds a ready task,
|
|
170
|
-
// which always happens AFTER server startup, so `taskDepsRef.value` is guaranteed
|
|
171
|
-
// to be set by the time the closure executes.
|
|
172
103
|
const taskDepsRef = { value: undefined };
|
|
173
104
|
const dispatchFn = async (taskId) => {
|
|
174
105
|
if (!taskDepsRef.value) {
|
|
@@ -176,36 +107,19 @@ async function main() {
|
|
|
176
107
|
}
|
|
177
108
|
await enqueueExistingTask(taskId, taskDepsRef.value);
|
|
178
109
|
};
|
|
179
|
-
const dagEngine = new DagEngine(dbAny, queue, taskStore, dispatchFn);
|
|
180
|
-
// ── Prompt resolver (compiler integration) ────────────────────────────
|
|
181
|
-
//
|
|
182
|
-
// Delegates to buildPromptResolver() — the exported factory that is also
|
|
183
|
-
// exercised directly by index-wiring.test.ts (Plan 6 gap F-P6-8b).
|
|
184
|
-
//
|
|
185
|
-
// @adhd/agent-compiler is an OPTIONAL dependency: the dynamic import below
|
|
186
|
-
// succeeds only when the package is installed. On failure (standalone install
|
|
187
|
-
// without the compiler), the catch logs an info message and leaves
|
|
188
|
-
// compileAgentFn undefined — buildPromptResolver then returns undefined and
|
|
189
|
-
// every agent falls back to its flat systemPrompt.
|
|
190
|
-
//
|
|
191
|
-
// When ADHD_AGENT_REGISTRY_DB_PATH is set AND the compiler is installed,
|
|
192
|
-
// buildPromptResolver opens the SQLite file and wires compileAgentFn. Every
|
|
193
|
-
// `agent` tool call then resolves the system-prompt via the compiler (with
|
|
194
|
-
// a composed_prompts cache look-up) before creating the session.
|
|
110
|
+
const dagEngine = new DagEngine(dbAny, queue, taskStore, dispatchFn, logger);
|
|
195
111
|
let compileAgentFn;
|
|
196
112
|
try {
|
|
197
|
-
({ compileAgent: compileAgentFn } = await import("@adhd/agent-compiler"));
|
|
113
|
+
({ compileAgent: compileAgentFn } = await import("@adhd/agent-engine-compiler"));
|
|
198
114
|
}
|
|
199
115
|
catch {
|
|
200
|
-
logger.info("@adhd/agent-compiler not installed — registry/compiler integration disabled; using flat system-prompts");
|
|
116
|
+
logger.info("@adhd/agent-engine-compiler not installed — registry/compiler integration disabled; using flat system-prompts");
|
|
201
117
|
}
|
|
202
118
|
const promptResolver = buildPromptResolver({
|
|
203
119
|
registryDbPath: config.server.registryDbPath,
|
|
204
120
|
agentMcpDb: dbAny,
|
|
205
121
|
compileAgentFn,
|
|
206
122
|
});
|
|
207
|
-
// ── Startup env-ref verification (§4) ─────────────────────────────────
|
|
208
|
-
// Must run after store init so we can list all agents.
|
|
209
123
|
try {
|
|
210
124
|
const allAgents = agentStore.list();
|
|
211
125
|
verifyAgentEnvRefs(allAgents);
|
|
@@ -213,8 +127,8 @@ async function main() {
|
|
|
213
127
|
catch (err) {
|
|
214
128
|
logger.warn({ err }, "Startup env-ref verification failed — continuing");
|
|
215
129
|
}
|
|
216
|
-
|
|
217
|
-
const sseServer = startSseServer(taskStore);
|
|
130
|
+
const gatewayDepsRef = { value: undefined };
|
|
131
|
+
const sseServer = startSseServer(taskStore, config.sse.port, config.sse.host, gatewayDepsRef);
|
|
218
132
|
const { close } = await startServer({
|
|
219
133
|
agentStore,
|
|
220
134
|
sessionStore,
|
|
@@ -227,19 +141,6 @@ async function main() {
|
|
|
227
141
|
dagEngine,
|
|
228
142
|
promptResolver,
|
|
229
143
|
});
|
|
230
|
-
// Startup re-enqueue scan: recover tasks that were transitioned to "pending"
|
|
231
|
-
// by DagEngine.dispatchReady() but lost their queue slot due to a process
|
|
232
|
-
// crash between the DB UPDATE and queue.enqueue(). Safe to run every startup
|
|
233
|
-
// because the queue is idempotent — already-running tasks are just re-queued.
|
|
234
|
-
//
|
|
235
|
-
// taskDepsRef.value must be set before the orphan scan so dispatchFn can call
|
|
236
|
-
// enqueueExistingTask.
|
|
237
|
-
//
|
|
238
|
-
// NOTE: inProcessDescriptors and inProcessHandler are not available here
|
|
239
|
-
// (they are local to server.ts). Dag-dispatched tasks do NOT support
|
|
240
|
-
// in-process recursive calls at the dispatch level — they can use in-process
|
|
241
|
-
// tools once running via the normal orchestrator path through server.ts.
|
|
242
|
-
// Pass empty stubs: the orchestrator builds its own registry per task.
|
|
243
144
|
taskDepsRef.value = {
|
|
244
145
|
agentStore,
|
|
245
146
|
sessionStore,
|
|
@@ -255,6 +156,16 @@ async function main() {
|
|
|
255
156
|
},
|
|
256
157
|
db: dbAny,
|
|
257
158
|
dagEngine,
|
|
159
|
+
config,
|
|
160
|
+
logger,
|
|
161
|
+
emitTaskEvent: emitTaskEvent,
|
|
162
|
+
};
|
|
163
|
+
const taskDeps = taskDepsRef.value;
|
|
164
|
+
gatewayDepsRef.value = {
|
|
165
|
+
agentStore,
|
|
166
|
+
sessionStore,
|
|
167
|
+
taskStore,
|
|
168
|
+
taskDeps,
|
|
258
169
|
};
|
|
259
170
|
const orphanedPending = dbAny
|
|
260
171
|
.select()
|
|
@@ -265,7 +176,7 @@ async function main() {
|
|
|
265
176
|
logger.info({ count: orphanedPending.length }, "Re-enqueueing orphaned pending tasks");
|
|
266
177
|
for (const row of orphanedPending) {
|
|
267
178
|
try {
|
|
268
|
-
await enqueueExistingTask(row.id,
|
|
179
|
+
await enqueueExistingTask(row.id, taskDeps);
|
|
269
180
|
}
|
|
270
181
|
catch (err) {
|
|
271
182
|
logger.warn({ taskId: row.id, err }, "Failed to re-enqueue orphaned task");
|
|
@@ -275,8 +186,6 @@ async function main() {
|
|
|
275
186
|
const shutdown = async (signal) => {
|
|
276
187
|
logger.info({ signal }, "Server shutdown");
|
|
277
188
|
await close();
|
|
278
|
-
// Await SSE drain before exiting — close() is callback-based, so calling
|
|
279
|
-
// process.exit on the next line would race the drain.
|
|
280
189
|
await new Promise(resolve => sseServer.close(() => resolve()));
|
|
281
190
|
process.exit(0);
|
|
282
191
|
};
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../entrypoint/agent-mcp/src/index.ts"],"names":[],"mappings":"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"}
|
package/src/logger.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
1
|
import pino from "pino";
|
|
2
|
-
/**
|
|
3
|
-
* Application logger.
|
|
4
|
-
*
|
|
5
|
-
* CRITICAL: All output goes to fd 2 (stderr).
|
|
6
|
-
* When TRANSPORT=stdio, stdout is the MCP JSON-RPC stream — any write
|
|
7
|
-
* to stdout would corrupt the framing. Never use console.log or pino's
|
|
8
|
-
* default stdout destination.
|
|
9
|
-
*/
|
|
10
2
|
export declare const logger: pino.Logger<never, boolean>;
|
|
11
3
|
//# sourceMappingURL=logger.d.ts.map
|
package/src/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../entrypoint/agent-mcp/src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,eAAO,MAAM,MAAM,6BAMlB,CAAC"}
|
package/src/logger.js
CHANGED
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
import pino from "pino";
|
|
2
2
|
import { config } from "./config.js";
|
|
3
|
-
/**
|
|
4
|
-
* Application logger.
|
|
5
|
-
*
|
|
6
|
-
* CRITICAL: All output goes to fd 2 (stderr).
|
|
7
|
-
* When TRANSPORT=stdio, stdout is the MCP JSON-RPC stream — any write
|
|
8
|
-
* to stdout would corrupt the framing. Never use console.log or pino's
|
|
9
|
-
* default stdout destination.
|
|
10
|
-
*/
|
|
11
3
|
export const logger = pino({
|
|
12
4
|
level: config.logging.level,
|
|
13
|
-
// Remove default `pid` and `hostname` fields for cleaner structured logs.
|
|
14
5
|
base: undefined,
|
|
15
|
-
},
|
|
16
|
-
// Bind explicitly to fd 2 (stderr).
|
|
17
|
-
pino.destination(2));
|
|
6
|
+
}, pino.destination(2));
|
|
18
7
|
//# sourceMappingURL=logger.js.map
|
package/src/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../entrypoint/agent-mcp/src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CACtB;IACI,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;IAC3B,IAAI,EAAE,SAAS;CAClB,EACD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CACtB,CAAC"}
|