waymark-hub 1.0.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.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -0
  3. package/dashboard/README.md +71 -0
  4. package/dashboard/index.html +520 -0
  5. package/dashboard/server.mjs +343 -0
  6. package/dashboard/vendor/tailwind.js +83 -0
  7. package/dist/cli/benchmark.d.ts +3 -0
  8. package/dist/cli/benchmark.d.ts.map +1 -0
  9. package/dist/cli/benchmark.js +222 -0
  10. package/dist/cli/benchmark.js.map +1 -0
  11. package/dist/cli/waymark.d.ts +3 -0
  12. package/dist/cli/waymark.d.ts.map +1 -0
  13. package/dist/cli/waymark.js +216 -0
  14. package/dist/cli/waymark.js.map +1 -0
  15. package/dist/context/builder.d.ts +67 -0
  16. package/dist/context/builder.d.ts.map +1 -0
  17. package/dist/context/builder.js +270 -0
  18. package/dist/context/builder.js.map +1 -0
  19. package/dist/db/client.d.ts +5 -0
  20. package/dist/db/client.d.ts.map +1 -0
  21. package/dist/db/client.js +67 -0
  22. package/dist/db/client.js.map +1 -0
  23. package/dist/db/migrations/001_initial.sql +85 -0
  24. package/dist/db/migrations/002_usage_experiments.sql +52 -0
  25. package/dist/db/migrations/003_agent_identity.sql +37 -0
  26. package/dist/db/migrations/004_memory_lifecycle.sql +25 -0
  27. package/dist/db/migrations/005_task_coordination.sql +17 -0
  28. package/dist/db/schema.d.ts +132 -0
  29. package/dist/db/schema.d.ts.map +1 -0
  30. package/dist/db/schema.js +3 -0
  31. package/dist/db/schema.js.map +1 -0
  32. package/dist/server.d.ts +12 -0
  33. package/dist/server.d.ts.map +1 -0
  34. package/dist/server.js +164 -0
  35. package/dist/server.js.map +1 -0
  36. package/dist/telemetry/tokens.d.ts +9 -0
  37. package/dist/telemetry/tokens.d.ts.map +1 -0
  38. package/dist/telemetry/tokens.js +23 -0
  39. package/dist/telemetry/tokens.js.map +1 -0
  40. package/dist/tools/agents.d.ts +3 -0
  41. package/dist/tools/agents.d.ts.map +1 -0
  42. package/dist/tools/agents.js +126 -0
  43. package/dist/tools/agents.js.map +1 -0
  44. package/dist/tools/context.d.ts +3 -0
  45. package/dist/tools/context.d.ts.map +1 -0
  46. package/dist/tools/context.js +53 -0
  47. package/dist/tools/context.js.map +1 -0
  48. package/dist/tools/memory.d.ts +3 -0
  49. package/dist/tools/memory.d.ts.map +1 -0
  50. package/dist/tools/memory.js +273 -0
  51. package/dist/tools/memory.js.map +1 -0
  52. package/dist/tools/projects.d.ts +3 -0
  53. package/dist/tools/projects.d.ts.map +1 -0
  54. package/dist/tools/projects.js +92 -0
  55. package/dist/tools/projects.js.map +1 -0
  56. package/dist/tools/sessions.d.ts +3 -0
  57. package/dist/tools/sessions.d.ts.map +1 -0
  58. package/dist/tools/sessions.js +113 -0
  59. package/dist/tools/sessions.js.map +1 -0
  60. package/dist/tools/tasks.d.ts +3 -0
  61. package/dist/tools/tasks.d.ts.map +1 -0
  62. package/dist/tools/tasks.js +304 -0
  63. package/dist/tools/tasks.js.map +1 -0
  64. package/dist/tools/telemetry.d.ts +3 -0
  65. package/dist/tools/telemetry.d.ts.map +1 -0
  66. package/dist/tools/telemetry.js +291 -0
  67. package/dist/tools/telemetry.js.map +1 -0
  68. package/docs/AGENT_IDENTITY.md +67 -0
  69. package/docs/BENCHMARKING.md +161 -0
  70. package/docs/CONTEXT.md +95 -0
  71. package/docs/MEMORY_LIFECYCLE.md +65 -0
  72. package/docs/TASK_COORDINATION.md +27 -0
  73. package/package.json +70 -0
  74. package/scripts/hooks/session-start-resume.cjs +70 -0
@@ -0,0 +1,132 @@
1
+ export interface Project {
2
+ id: string;
3
+ name: string;
4
+ root_path: string;
5
+ stack: string | null;
6
+ status: 'active' | 'paused' | 'archived';
7
+ description: string | null;
8
+ created_at: string;
9
+ updated_at: string;
10
+ }
11
+ export interface MemoryNode {
12
+ id: string;
13
+ project_id: string | null;
14
+ surface: string;
15
+ name: string;
16
+ description: string | null;
17
+ type: 'user' | 'feedback' | 'project' | 'reference' | 'handoff' | 'decision';
18
+ body: string;
19
+ tags: string | null;
20
+ origin_session: string | null;
21
+ created_at: string;
22
+ updated_at: string;
23
+ created_by_agent: string | null;
24
+ status: 'active' | 'superseded' | 'stale' | 'archived';
25
+ importance: number;
26
+ confidence: number;
27
+ source_type: string | null;
28
+ source_ref: string | null;
29
+ valid_from: string | null;
30
+ valid_until: string | null;
31
+ supersedes_id: string | null;
32
+ last_verified_at: string | null;
33
+ }
34
+ export interface Task {
35
+ id: string;
36
+ project_id: string | null;
37
+ title: string;
38
+ description: string | null;
39
+ status: 'pending' | 'in_progress' | 'done' | 'cancelled';
40
+ priority: number;
41
+ created_by: string;
42
+ assigned_to: string | null;
43
+ context_json: string | null;
44
+ created_at: string;
45
+ updated_at: string;
46
+ completed_at: string | null;
47
+ created_by_agent: string | null;
48
+ assigned_agent_id: string | null;
49
+ required_capabilities: string | null;
50
+ claimed_by_agent: string | null;
51
+ claimed_at: string | null;
52
+ blocker: string | null;
53
+ progress: number;
54
+ }
55
+ export interface Session {
56
+ id: string;
57
+ project_id: string | null;
58
+ surface: string;
59
+ started_at: string;
60
+ ended_at: string | null;
61
+ summary: string | null;
62
+ files_touched: string | null;
63
+ commits_made: string | null;
64
+ outcome: string | null;
65
+ agent_id: string | null;
66
+ provider: string | null;
67
+ model: string | null;
68
+ client: string | null;
69
+ client_session_id: string | null;
70
+ }
71
+ export interface Agent {
72
+ id: string;
73
+ display_name: string;
74
+ provider: string | null;
75
+ model: string | null;
76
+ client: string | null;
77
+ client_version: string | null;
78
+ capabilities: string | null;
79
+ metadata: string | null;
80
+ status: 'active' | 'paused' | 'retired';
81
+ created_at: string;
82
+ updated_at: string;
83
+ }
84
+ export interface MemoryFeedback {
85
+ id: string;
86
+ memory_id: string;
87
+ agent_id: string | null;
88
+ session_id: string | null;
89
+ rating: 'used' | 'not_used' | 'helpful' | 'irrelevant' | 'stale' | 'incorrect' | 'too_verbose';
90
+ notes: string | null;
91
+ created_at: string;
92
+ }
93
+ export interface Experiment {
94
+ id: string;
95
+ project_id: string | null;
96
+ name: string;
97
+ description: string | null;
98
+ scenario: string;
99
+ status: 'active' | 'completed' | 'cancelled';
100
+ target_runs: number;
101
+ created_at: string;
102
+ updated_at: string;
103
+ }
104
+ export interface UsageReport {
105
+ id: string;
106
+ project_id: string | null;
107
+ session_id: string | null;
108
+ experiment_id: string | null;
109
+ variant: 'without_hub' | 'with_hub' | null;
110
+ provider: string | null;
111
+ model: string | null;
112
+ client: string | null;
113
+ measurement: 'exact' | 'estimated';
114
+ input_tokens: number | null;
115
+ output_tokens: number | null;
116
+ cached_input_tokens: number | null;
117
+ hub_llm_input_tokens: number;
118
+ hub_llm_output_tokens: number;
119
+ context_tokens: number | null;
120
+ context_chars: number | null;
121
+ tool_calls: number | null;
122
+ files_read: string | null;
123
+ repeated_files: number | null;
124
+ clarification_count: number | null;
125
+ duration_ms: number | null;
126
+ result_quality: number | null;
127
+ success: number | null;
128
+ notes: string | null;
129
+ created_at: string;
130
+ agent_id: string | null;
131
+ }
132
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { Express } from 'express';
3
+ import { Server as HttpServer } from 'node:http';
4
+ export interface HttpAppOptions {
5
+ host?: string;
6
+ allowedHosts?: string[];
7
+ allowedOrigins?: string[];
8
+ }
9
+ export declare function createMcpServer(): McpServer;
10
+ export declare function createHttpApp(options?: HttpAppOptions): Express;
11
+ export declare function startHttp(): Promise<HttpServer>;
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AA6CjD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,eAAe,IAAI,SAAS,CAqB3C;AAuBD,wBAAgB,aAAa,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAuEnE;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CASrD"}
package/dist/server.js ADDED
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMcpServer = createMcpServer;
4
+ exports.createHttpApp = createHttpApp;
5
+ exports.startHttp = startHttp;
6
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
7
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
8
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
9
+ const express_js_1 = require("@modelcontextprotocol/sdk/server/express.js");
10
+ const projects_js_1 = require("./tools/projects.js");
11
+ const memory_js_1 = require("./tools/memory.js");
12
+ const tasks_js_1 = require("./tools/tasks.js");
13
+ const sessions_js_1 = require("./tools/sessions.js");
14
+ const telemetry_js_1 = require("./tools/telemetry.js");
15
+ const agents_js_1 = require("./tools/agents.js");
16
+ const context_js_1 = require("./tools/context.js");
17
+ const PORT = parseInt(process.env.PORT || '3747', 10);
18
+ const HOST = process.env.HOST || '127.0.0.1';
19
+ const HTTP_MODE = process.argv.includes('--http');
20
+ const LOOPBACK_HOSTS = new Set(['127.0.0.1', 'localhost', '::1']);
21
+ // Compact daily-work toolset exposed by default. Eager clients (e.g. Codex) inject
22
+ // every tool schema into context on every turn, so a smaller default set directly
23
+ // cuts recurring token cost. The full admin/telemetry surface is opt-in via HUB_TOOLS.
24
+ const CORE_TOOLS = new Set([
25
+ 'workspace_resume',
26
+ 'context_get',
27
+ 'memory_write',
28
+ 'memory_read',
29
+ 'memory_search',
30
+ 'task_create',
31
+ 'task_list',
32
+ 'task_claim',
33
+ 'task_update',
34
+ 'session_log',
35
+ ]);
36
+ function toolProfile() {
37
+ return (process.env.HUB_TOOLS || 'core').toLowerCase() === 'full' ? 'full' : 'core';
38
+ }
39
+ // Wrap registerTool so only tools allowed by the active profile are exposed.
40
+ function applyToolProfile(server) {
41
+ if (toolProfile() === 'full')
42
+ return;
43
+ const original = server.registerTool.bind(server);
44
+ server.registerTool =
45
+ (name, ...rest) => CORE_TOOLS.has(name) ? original(name, ...rest) : undefined;
46
+ }
47
+ function createMcpServer() {
48
+ const server = new mcp_js_1.McpServer({ name: 'waymark-hub', version: '1.0.0' }, {
49
+ instructions: 'Shared context hub for AI agents. At session start call one workspace_resume ' +
50
+ '(project, task, token budget). Use memory/task tools as needed; at session end ' +
51
+ 'call session_log, then memory_write for durable decisions. Default profile exposes a ' +
52
+ 'compact core toolset; set HUB_TOOLS=full for admin/telemetry/agent tools.',
53
+ });
54
+ applyToolProfile(server);
55
+ (0, projects_js_1.registerProjectTools)(server);
56
+ (0, memory_js_1.registerMemoryTools)(server);
57
+ (0, tasks_js_1.registerTaskTools)(server);
58
+ (0, sessions_js_1.registerSessionTools)(server);
59
+ (0, telemetry_js_1.registerTelemetryTools)(server);
60
+ (0, agents_js_1.registerAgentTools)(server);
61
+ (0, context_js_1.registerContextTools)(server);
62
+ return server;
63
+ }
64
+ async function startStdio() {
65
+ const server = createMcpServer();
66
+ const transport = new stdio_js_1.StdioServerTransport();
67
+ await server.connect(transport);
68
+ }
69
+ function parseList(value) {
70
+ return value?.split(',').map(item => item.trim()).filter(Boolean) ?? [];
71
+ }
72
+ function isAllowedOrigin(origin, allowedOrigins) {
73
+ if (allowedOrigins.includes(origin))
74
+ return true;
75
+ try {
76
+ const hostname = new URL(origin).hostname;
77
+ return LOOPBACK_HOSTS.has(hostname);
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ function createHttpApp(options = {}) {
84
+ const host = options.host ?? HOST;
85
+ const allowedHosts = options.allowedHosts ?? parseList(process.env.ALLOWED_HOSTS);
86
+ const allowedOrigins = options.allowedOrigins ?? parseList(process.env.ALLOWED_ORIGINS);
87
+ if (!LOOPBACK_HOSTS.has(host) && allowedHosts.length === 0) {
88
+ throw new Error('ALLOWED_HOSTS is required when HTTP binds to a non-loopback interface.');
89
+ }
90
+ const app = (0, express_js_1.createMcpExpressApp)({
91
+ host,
92
+ allowedHosts: allowedHosts.length > 0 ? allowedHosts : undefined,
93
+ });
94
+ app.use((req, res, next) => {
95
+ const origin = req.headers.origin;
96
+ if (!origin || isAllowedOrigin(origin, allowedOrigins)) {
97
+ next();
98
+ return;
99
+ }
100
+ res.status(403).json({
101
+ jsonrpc: '2.0',
102
+ error: { code: -32000, message: 'Invalid Origin header' },
103
+ id: null,
104
+ });
105
+ });
106
+ app.get('/health', (_req, res) => {
107
+ res.json({ status: 'ok', server: 'waymark-hub', version: '1.0.0' });
108
+ });
109
+ app.post('/mcp', async (req, res) => {
110
+ const server = createMcpServer();
111
+ const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
112
+ try {
113
+ await server.connect(transport);
114
+ await transport.handleRequest(req, res, req.body);
115
+ }
116
+ catch (error) {
117
+ process.stderr.write(`MCP request failed: ${String(error)}\n`);
118
+ if (!res.headersSent) {
119
+ res.status(500).json({
120
+ jsonrpc: '2.0',
121
+ error: { code: -32603, message: 'Internal server error' },
122
+ id: null,
123
+ });
124
+ }
125
+ }
126
+ finally {
127
+ await transport.close();
128
+ await server.close();
129
+ }
130
+ });
131
+ app.get('/mcp', (_req, res) => {
132
+ res.status(405).json({
133
+ jsonrpc: '2.0',
134
+ error: { code: -32000, message: 'Method not allowed.' },
135
+ id: null,
136
+ });
137
+ });
138
+ app.delete('/mcp', (_req, res) => {
139
+ res.status(405).json({
140
+ jsonrpc: '2.0',
141
+ error: { code: -32000, message: 'Method not allowed.' },
142
+ id: null,
143
+ });
144
+ });
145
+ return app;
146
+ }
147
+ async function startHttp() {
148
+ const app = createHttpApp();
149
+ return await new Promise((resolve, reject) => {
150
+ const listener = app.listen(PORT, HOST, () => {
151
+ process.stderr.write(`Waymark Hub listening on http://${HOST}:${PORT}/mcp\n`);
152
+ resolve(listener);
153
+ });
154
+ listener.on('error', reject);
155
+ });
156
+ }
157
+ if (require.main === module) {
158
+ const start = HTTP_MODE ? startHttp : startStdio;
159
+ start().catch((err) => {
160
+ process.stderr.write(`Fatal: ${err}\n`);
161
+ process.exitCode = 1;
162
+ });
163
+ }
164
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface TokenUsage {
2
+ inputTokens?: number | null;
3
+ outputTokens?: number | null;
4
+ hubLlmInputTokens?: number | null;
5
+ hubLlmOutputTokens?: number | null;
6
+ }
7
+ export declare function estimateTokens(text: string): number;
8
+ export declare function totalModelTokens(usage: TokenUsage): number | null;
9
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/telemetry/tokens.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAajE"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.estimateTokens = estimateTokens;
4
+ exports.totalModelTokens = totalModelTokens;
5
+ function estimateTokens(text) {
6
+ if (!text)
7
+ return 0;
8
+ const bytes = Buffer.byteLength(text, 'utf8');
9
+ return Math.max(1, Math.ceil(bytes / 4));
10
+ }
11
+ function totalModelTokens(usage) {
12
+ const values = [
13
+ usage.inputTokens,
14
+ usage.outputTokens,
15
+ usage.hubLlmInputTokens ?? 0,
16
+ usage.hubLlmOutputTokens ?? 0,
17
+ ];
18
+ if (usage.inputTokens == null && usage.outputTokens == null) {
19
+ return null;
20
+ }
21
+ return values.reduce((total, value) => total + (value ?? 0), 0);
22
+ }
23
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/telemetry/tokens.ts"],"names":[],"mappings":";;AAOA,wCAKC;AAED,4CAaC;AApBD,SAAgB,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAiB;IAChD,MAAM,MAAM,GAAG;QACb,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,iBAAiB,IAAI,CAAC;QAC5B,KAAK,CAAC,kBAAkB,IAAI,CAAC;KAC9B,CAAC;IAEF,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,KAAK,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerAgentTools(server: McpServer): void;
3
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/tools/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0K1D"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAgentTools = registerAgentTools;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const zod_1 = require("zod");
6
+ const client_js_1 = require("../db/client.js");
7
+ function parseAgent(row) {
8
+ return {
9
+ ...row,
10
+ capabilities: row.capabilities ? JSON.parse(row.capabilities) : [],
11
+ metadata: row.metadata ? JSON.parse(row.metadata) : null,
12
+ };
13
+ }
14
+ function registerAgentTools(server) {
15
+ server.registerTool('agent_register', {
16
+ description: 'Register or update an AI agent identity independently of model provider or client.',
17
+ inputSchema: zod_1.z.object({
18
+ id: zod_1.z.string().optional().describe('Stable agent id. A UUID is generated when omitted.'),
19
+ display_name: zod_1.z.string().min(1),
20
+ provider: zod_1.z.string().optional(),
21
+ model: zod_1.z.string().optional(),
22
+ client: zod_1.z.string().optional(),
23
+ client_version: zod_1.z.string().optional(),
24
+ capabilities: zod_1.z.array(zod_1.z.string()).default([]),
25
+ metadata: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
26
+ status: zod_1.z.enum(['active', 'paused', 'retired']).default('active'),
27
+ }),
28
+ }, ({ id: requestedId, display_name, provider, model, client, client_version, capabilities, metadata, status, }) => {
29
+ const db = (0, client_js_1.getDb)();
30
+ const id = requestedId ?? (0, node_crypto_1.randomUUID)();
31
+ const now = new Date().toISOString();
32
+ const existing = db.prepare('SELECT 1 FROM agents WHERE id = ?').get(id);
33
+ if (existing) {
34
+ db.prepare(`
35
+ UPDATE agents SET
36
+ display_name = ?,
37
+ provider = ?,
38
+ model = ?,
39
+ client = ?,
40
+ client_version = ?,
41
+ capabilities = ?,
42
+ metadata = ?,
43
+ status = ?,
44
+ updated_at = ?
45
+ WHERE id = ?
46
+ `).run(display_name, provider ?? null, model ?? null, client ?? null, client_version ?? null, JSON.stringify(capabilities), metadata ? JSON.stringify(metadata) : null, status, now, id);
47
+ }
48
+ else {
49
+ db.prepare(`
50
+ INSERT INTO agents (
51
+ id, display_name, provider, model, client, client_version,
52
+ capabilities, metadata, status, created_at, updated_at
53
+ )
54
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
55
+ `).run(id, display_name, provider ?? null, model ?? null, client ?? null, client_version ?? null, JSON.stringify(capabilities), metadata ? JSON.stringify(metadata) : null, status, now, now);
56
+ }
57
+ const row = db.prepare('SELECT * FROM agents WHERE id = ?').get(id);
58
+ return { content: [{ type: 'text', text: JSON.stringify(parseAgent(row), null, 2) }] };
59
+ });
60
+ server.registerTool('agent_get', {
61
+ description: 'Get one registered agent identity.',
62
+ inputSchema: zod_1.z.object({ id: zod_1.z.string() }),
63
+ annotations: { readOnlyHint: true },
64
+ }, ({ id }) => {
65
+ const db = (0, client_js_1.getDb)();
66
+ const row = db.prepare('SELECT * FROM agents WHERE id = ?').get(id);
67
+ if (!row) {
68
+ return { content: [{ type: 'text', text: `Agent "${id}" not found.` }], isError: true };
69
+ }
70
+ return { content: [{ type: 'text', text: JSON.stringify(parseAgent(row), null, 2) }] };
71
+ });
72
+ server.registerTool('agent_list', {
73
+ description: 'List registered agents by provider, model, client, status, or capability.',
74
+ inputSchema: zod_1.z.object({
75
+ provider: zod_1.z.string().optional(),
76
+ model: zod_1.z.string().optional(),
77
+ client: zod_1.z.string().optional(),
78
+ status: zod_1.z.enum(['active', 'paused', 'retired']).optional(),
79
+ capability: zod_1.z.string().optional(),
80
+ limit: zod_1.z.number().int().min(1).max(100).default(20),
81
+ }),
82
+ annotations: { readOnlyHint: true },
83
+ }, ({ provider, model, client, status, capability, limit }) => {
84
+ const db = (0, client_js_1.getDb)();
85
+ let sql = 'SELECT * FROM agents WHERE 1=1';
86
+ const params = [];
87
+ if (provider) {
88
+ sql += ' AND provider = ?';
89
+ params.push(provider);
90
+ }
91
+ if (model) {
92
+ sql += ' AND model = ?';
93
+ params.push(model);
94
+ }
95
+ if (client) {
96
+ sql += ' AND client = ?';
97
+ params.push(client);
98
+ }
99
+ if (status) {
100
+ sql += ' AND status = ?';
101
+ params.push(status);
102
+ }
103
+ sql += ' ORDER BY updated_at DESC';
104
+ const rows = db.prepare(sql).all(...params)
105
+ .map(parseAgent)
106
+ .filter(row => !capability || row.capabilities.includes(capability))
107
+ .slice(0, limit);
108
+ return { content: [{ type: 'text', text: JSON.stringify(rows, null, 2) }] };
109
+ });
110
+ server.registerTool('agent_set_status', {
111
+ description: 'Set an agent identity to active, paused, or retired.',
112
+ inputSchema: zod_1.z.object({
113
+ id: zod_1.z.string(),
114
+ status: zod_1.z.enum(['active', 'paused', 'retired']),
115
+ }),
116
+ }, ({ id, status }) => {
117
+ const db = (0, client_js_1.getDb)();
118
+ const result = db.prepare('UPDATE agents SET status = ?, updated_at = ? WHERE id = ?').run(status, new Date().toISOString(), id);
119
+ if (result.changes === 0) {
120
+ return { content: [{ type: 'text', text: `Agent "${id}" not found.` }], isError: true };
121
+ }
122
+ const row = db.prepare('SELECT * FROM agents WHERE id = ?').get(id);
123
+ return { content: [{ type: 'text', text: JSON.stringify(parseAgent(row), null, 2) }] };
124
+ });
125
+ }
126
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/tools/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerContextTools(server: McpServer): void;
3
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqCpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoD5D"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerContextTools = registerContextTools;
4
+ const zod_1 = require("zod");
5
+ const builder_js_1 = require("../context/builder.js");
6
+ const memoryType = zod_1.z.enum(['user', 'feedback', 'project', 'reference', 'handoff', 'decision']);
7
+ function contextResult(projectId, task, agentId, clientId, maxTokens, memoryTypes, includeSources) {
8
+ const packet = (0, builder_js_1.buildContextPacket)({
9
+ projectId,
10
+ task,
11
+ agentId,
12
+ clientId,
13
+ maxTokens,
14
+ memoryTypes,
15
+ includeSources,
16
+ });
17
+ if (!packet) {
18
+ return {
19
+ content: [{ type: 'text', text: `Project "${projectId}" not found.` }],
20
+ isError: true,
21
+ };
22
+ }
23
+ return {
24
+ content: [{ type: 'text', text: JSON.stringify(packet, null, 2) }],
25
+ };
26
+ }
27
+ function registerContextTools(server) {
28
+ server.registerTool('context_get', {
29
+ description: 'Build task-specific project context using deterministic ranking within a token budget.',
30
+ inputSchema: zod_1.z.object({
31
+ project_id: zod_1.z.string(),
32
+ task: zod_1.z.string().min(1),
33
+ agent_id: zod_1.z.string().optional(),
34
+ client_id: zod_1.z.string().optional(),
35
+ max_tokens: zod_1.z.number().int().min(200).max(20_000).default(1200),
36
+ memory_types: zod_1.z.array(memoryType).optional(),
37
+ include_sources: zod_1.z.boolean().default(false),
38
+ }),
39
+ annotations: { readOnlyHint: true },
40
+ }, ({ project_id, task, agent_id, client_id, max_tokens, memory_types, include_sources }) => contextResult(project_id, task, agent_id, client_id, max_tokens, memory_types, include_sources));
41
+ server.registerTool('workspace_resume', {
42
+ description: 'Restore compact project state for a new agent session in one token-budgeted call.',
43
+ inputSchema: zod_1.z.object({
44
+ project_id: zod_1.z.string(),
45
+ task: zod_1.z.string().optional(),
46
+ agent_id: zod_1.z.string().optional(),
47
+ client_id: zod_1.z.string().optional(),
48
+ max_tokens: zod_1.z.number().int().min(200).max(20_000).default(1200),
49
+ }),
50
+ annotations: { readOnlyHint: true },
51
+ }, ({ project_id, task, agent_id, client_id, max_tokens }) => contextResult(project_id, task, agent_id, client_id, max_tokens, undefined, false));
52
+ }
53
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerMemoryTools(server: McpServer): void;
3
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsX3D"}