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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/cli/benchmark.ts"],"names":[],"mappings":""}
@@ -0,0 +1,222 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
9
+ const inMemory_js_1 = require("@modelcontextprotocol/sdk/inMemory.js");
10
+ const server_js_1 = require("../server.js");
11
+ const BOOLEAN_FIELDS = new Set(['success']);
12
+ const NUMBER_FIELDS = new Set([
13
+ 'target_runs',
14
+ 'input_tokens',
15
+ 'output_tokens',
16
+ 'cached_input_tokens',
17
+ 'hub_llm_input_tokens',
18
+ 'hub_llm_output_tokens',
19
+ 'context_tokens',
20
+ 'tool_calls',
21
+ 'repeated_files',
22
+ 'clarification_count',
23
+ 'duration_ms',
24
+ 'result_quality',
25
+ 'limit',
26
+ ]);
27
+ function usage() {
28
+ return `Usage:
29
+ waymark-benchmark create --name <name> --scenario <scenario> [--project-id <id>] [--target-runs 5]
30
+ waymark-benchmark record --file <run.json>
31
+ waymark-benchmark record --experiment-id <id> --variant <without_hub|with_hub> [usage flags]
32
+ waymark-benchmark list [--project-id <id>] [--status <active|completed|cancelled>]
33
+ waymark-benchmark summary --id <experiment-id>
34
+ waymark-benchmark complete --id <experiment-id>
35
+
36
+ Common record flags:
37
+ --project-id, --session-id, --experiment-id, --variant
38
+ --provider, --model, --client, --measurement
39
+ --input-tokens, --output-tokens, --cached-input-tokens
40
+ --hub-llm-input-tokens, --hub-llm-output-tokens
41
+ --context-tokens, --context-file
42
+ --tool-calls, --files-read <json-array-or-comma-list>
43
+ --repeated-files, --clarification-count, --duration-ms
44
+ --result-quality, --success <true|false>, --notes
45
+
46
+ Set DB_PATH to target a database other than data/hub.db.`;
47
+ }
48
+ function parseFlags(args) {
49
+ const flags = {};
50
+ for (let index = 0; index < args.length; index++) {
51
+ const arg = args[index];
52
+ if (!arg.startsWith('--')) {
53
+ throw new Error(`Unexpected argument: ${arg}`);
54
+ }
55
+ const equalsIndex = arg.indexOf('=');
56
+ if (equalsIndex !== -1) {
57
+ flags[arg.slice(2, equalsIndex)] = arg.slice(equalsIndex + 1);
58
+ continue;
59
+ }
60
+ const name = arg.slice(2);
61
+ const next = args[index + 1];
62
+ if (next === undefined || next.startsWith('--')) {
63
+ flags[name] = true;
64
+ continue;
65
+ }
66
+ flags[name] = next;
67
+ index++;
68
+ }
69
+ return flags;
70
+ }
71
+ function snakeCase(name) {
72
+ return name.replace(/-/g, '_');
73
+ }
74
+ function parseBoolean(value, name) {
75
+ if (value === true || value === 'true')
76
+ return true;
77
+ if (value === 'false')
78
+ return false;
79
+ throw new Error(`--${name} must be true or false`);
80
+ }
81
+ function parseNumber(value, name) {
82
+ if (value === true || value.trim() === '') {
83
+ throw new Error(`--${name} requires a numeric value`);
84
+ }
85
+ const parsed = Number(value);
86
+ if (!Number.isFinite(parsed)) {
87
+ throw new Error(`--${name} must be a number`);
88
+ }
89
+ return parsed;
90
+ }
91
+ function parseFiles(value) {
92
+ if (value === true)
93
+ throw new Error('--files-read requires a value');
94
+ const trimmed = value.trim();
95
+ if (trimmed.startsWith('[')) {
96
+ const parsed = JSON.parse(trimmed);
97
+ if (!Array.isArray(parsed) || parsed.some((item) => typeof item !== 'string')) {
98
+ throw new Error('--files-read JSON must be an array of strings');
99
+ }
100
+ return parsed;
101
+ }
102
+ return trimmed.split(',').map(item => item.trim()).filter(Boolean);
103
+ }
104
+ function flagsToInput(flags) {
105
+ const input = {};
106
+ for (const [rawName, value] of Object.entries(flags)) {
107
+ if (rawName === 'file')
108
+ continue;
109
+ const name = snakeCase(rawName);
110
+ if (NUMBER_FIELDS.has(name)) {
111
+ input[name] = parseNumber(value, rawName);
112
+ }
113
+ else if (BOOLEAN_FIELDS.has(name)) {
114
+ input[name] = parseBoolean(value, rawName);
115
+ }
116
+ else if (name === 'files_read') {
117
+ input[name] = parseFiles(value);
118
+ }
119
+ else if (name === 'context_file') {
120
+ if (value === true)
121
+ throw new Error('--context-file requires a path');
122
+ input.context_text = node_fs_1.default.readFileSync(value, 'utf8');
123
+ }
124
+ else {
125
+ if (value === true)
126
+ throw new Error(`--${rawName} requires a value`);
127
+ input[name] = value;
128
+ }
129
+ }
130
+ return input;
131
+ }
132
+ function readJsonFile(file) {
133
+ if (file === undefined)
134
+ return {};
135
+ if (file === true)
136
+ throw new Error('--file requires a path');
137
+ const parsed = JSON.parse(node_fs_1.default.readFileSync(file, 'utf8'));
138
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
139
+ throw new Error('Benchmark JSON file must contain an object');
140
+ }
141
+ return parsed;
142
+ }
143
+ function textFromResult(result) {
144
+ if (!result || typeof result !== 'object' || !('content' in result)) {
145
+ throw new Error('Tool returned an unsupported result type');
146
+ }
147
+ const content = result.content;
148
+ if (!Array.isArray(content)) {
149
+ throw new Error('Tool returned no content');
150
+ }
151
+ const text = content.find(item => Boolean(item) &&
152
+ typeof item === 'object' &&
153
+ 'type' in item &&
154
+ item.type === 'text' &&
155
+ 'text' in item &&
156
+ typeof item.text === 'string');
157
+ if (!text) {
158
+ throw new Error('Tool returned no text result');
159
+ }
160
+ if ('isError' in result && result.isError === true)
161
+ throw new Error(text.text);
162
+ return text.text;
163
+ }
164
+ async function callTool(name, args) {
165
+ // The benchmark CLI inherently drives telemetry/experiment tools, so it always
166
+ // needs the full tool surface regardless of the ambient HUB_TOOLS profile.
167
+ process.env.HUB_TOOLS = 'full';
168
+ const [clientTransport, serverTransport] = inMemory_js_1.InMemoryTransport.createLinkedPair();
169
+ const client = new index_js_1.Client({ name: 'waymark-benchmark-cli', version: '1.0.0' });
170
+ const server = (0, server_js_1.createMcpServer)();
171
+ try {
172
+ await Promise.all([
173
+ client.connect(clientTransport),
174
+ server.connect(serverTransport),
175
+ ]);
176
+ return textFromResult(await client.callTool({ name, arguments: args }));
177
+ }
178
+ finally {
179
+ await client.close();
180
+ await server.close();
181
+ }
182
+ }
183
+ async function main() {
184
+ const [command, ...rest] = process.argv.slice(2);
185
+ if (!command || command === 'help' || command === '--help' || command === '-h') {
186
+ process.stdout.write(`${usage()}\n`);
187
+ return;
188
+ }
189
+ const flags = parseFlags(rest);
190
+ let tool;
191
+ let input;
192
+ switch (command) {
193
+ case 'create':
194
+ tool = 'experiment_create';
195
+ input = flagsToInput(flags);
196
+ break;
197
+ case 'record':
198
+ tool = 'usage_report';
199
+ input = { ...readJsonFile(flags.file), ...flagsToInput(flags) };
200
+ break;
201
+ case 'list':
202
+ tool = 'experiment_list';
203
+ input = flagsToInput(flags);
204
+ break;
205
+ case 'summary':
206
+ tool = 'experiment_summary';
207
+ input = flagsToInput(flags);
208
+ break;
209
+ case 'complete':
210
+ tool = 'experiment_update';
211
+ input = { ...flagsToInput(flags), status: 'completed' };
212
+ break;
213
+ default:
214
+ throw new Error(`Unknown command: ${command}\n\n${usage()}`);
215
+ }
216
+ process.stdout.write(`${await callTool(tool, input)}\n`);
217
+ }
218
+ main().catch(error => {
219
+ process.stderr.write(`Benchmark command failed: ${String(error)}\n`);
220
+ process.exitCode = 1;
221
+ });
222
+ //# sourceMappingURL=benchmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../src/cli/benchmark.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=waymark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waymark.d.ts","sourceRoot":"","sources":["../../src/cli/waymark.ts"],"names":[],"mappings":""}
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // waymark-hub — one-command setup and operations CLI.
4
+ //
5
+ // waymark-hub init interactive setup: register the MCP server in
6
+ // Claude Code / Codex, optionally install the
7
+ // SessionStart hook (flags for non-interactive use)
8
+ // waymark-hub serve run the hub (stdio; --http for :3747)
9
+ // waymark-hub dashboard run the web dashboard (:4747)
10
+ // waymark-hub doctor check the installation end to end
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const node_fs_1 = __importDefault(require("node:fs"));
16
+ const node_os_1 = __importDefault(require("node:os"));
17
+ const node_path_1 = __importDefault(require("node:path"));
18
+ const node_readline_1 = __importDefault(require("node:readline"));
19
+ const node_child_process_1 = require("node:child_process");
20
+ const client_js_1 = require("../db/client.js");
21
+ const PKG_ROOT = node_path_1.default.resolve(__dirname, '..', '..');
22
+ const SERVER_JS = node_path_1.default.join(PKG_ROOT, 'dist', 'server.js');
23
+ const DASHBOARD_MJS = node_path_1.default.join(PKG_ROOT, 'dashboard', 'server.mjs');
24
+ const HOOK_CJS = node_path_1.default.join(PKG_ROOT, 'scripts', 'hooks', 'session-start-resume.cjs');
25
+ const CODEX_CONFIG = node_path_1.default.join(node_os_1.default.homedir(), '.codex', 'config.toml');
26
+ const CLAUDE_SETTINGS = node_path_1.default.join(node_os_1.default.homedir(), '.claude', 'settings.json');
27
+ const ok = (m) => console.log(` + ${m}`);
28
+ const warn = (m) => console.log(` ! ${m}`);
29
+ const info = (m) => console.log(` - ${m}`);
30
+ function run(cmd, args) {
31
+ const r = (0, node_child_process_1.spawnSync)(cmd, args, { encoding: 'utf8', shell: process.platform === 'win32' });
32
+ return { status: r.status, out: `${r.stdout ?? ''}${r.stderr ?? ''}` };
33
+ }
34
+ function hasClaude() {
35
+ return run('claude', ['--version']).status === 0;
36
+ }
37
+ async function confirm(rl, question, fallback) {
38
+ if (!rl)
39
+ return fallback;
40
+ const answer = await new Promise(resolve => rl.question(`${question} [y/n] `, resolve));
41
+ return /^y(es)?$/i.test(answer.trim());
42
+ }
43
+ // ---- init steps -------------------------------------------------------------
44
+ function setupClaudeCode() {
45
+ if (!hasClaude()) {
46
+ warn('Claude Code CLI not found — skipped. Register later with:');
47
+ info(`claude mcp add --scope user waymark node "${SERVER_JS}"`);
48
+ return;
49
+ }
50
+ const listed = run('claude', ['mcp', 'list']);
51
+ if (/^waymark:/m.test(listed.out)) {
52
+ ok('Claude Code: "waymark" is already registered.');
53
+ return;
54
+ }
55
+ const added = run('claude', ['mcp', 'add', '--scope', 'user', 'waymark', 'node', SERVER_JS]);
56
+ if (added.status === 0)
57
+ ok('Claude Code: registered MCP server "waymark" (user scope).');
58
+ else
59
+ warn(`Claude Code: registration failed — ${added.out.trim()}`);
60
+ }
61
+ function setupCodex() {
62
+ if (!node_fs_1.default.existsSync(node_path_1.default.dirname(CODEX_CONFIG))) {
63
+ info('Codex not detected (~/.codex missing) — skipped.');
64
+ return;
65
+ }
66
+ let toml = '';
67
+ try {
68
+ toml = node_fs_1.default.readFileSync(CODEX_CONFIG, 'utf8');
69
+ }
70
+ catch { /* new file */ }
71
+ if (/\[mcp_servers\.waymark\]/.test(toml)) {
72
+ ok('Codex: [mcp_servers.waymark] is already configured.');
73
+ return;
74
+ }
75
+ const serverPath = SERVER_JS.replace(/\\/g, '\\\\');
76
+ const block = `\n[mcp_servers.waymark]\ncommand = "node"\nargs = ["${serverPath}"]\n`;
77
+ node_fs_1.default.writeFileSync(CODEX_CONFIG, toml + block);
78
+ ok(`Codex: added [mcp_servers.waymark] to ${CODEX_CONFIG}.`);
79
+ }
80
+ function setupHook() {
81
+ let settings = {};
82
+ try {
83
+ settings = JSON.parse(node_fs_1.default.readFileSync(CLAUDE_SETTINGS, 'utf8'));
84
+ }
85
+ catch { /* new file */ }
86
+ const hooks = (settings.hooks ?? {});
87
+ const sessionStart = hooks.SessionStart ?? [];
88
+ const already = sessionStart.some(entry => (entry.hooks ?? []).some(h => (h.command ?? '').includes('session-start-resume.cjs')));
89
+ if (already) {
90
+ ok('SessionStart hook is already installed.');
91
+ return;
92
+ }
93
+ sessionStart.push({
94
+ hooks: [{
95
+ type: 'command',
96
+ command: `node ${HOOK_CJS.replace(/\\/g, '/')}`,
97
+ timeout: 10,
98
+ statusMessage: 'Loading Waymark resume...',
99
+ }],
100
+ });
101
+ hooks.SessionStart = sessionStart;
102
+ settings.hooks = hooks;
103
+ node_fs_1.default.mkdirSync(node_path_1.default.dirname(CLAUDE_SETTINGS), { recursive: true });
104
+ node_fs_1.default.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2) + '\n');
105
+ ok('SessionStart hook installed: new Claude Code sessions get the resume packet automatically.');
106
+ }
107
+ async function init(argv) {
108
+ const yes = argv.includes('--yes') || argv.includes('-y');
109
+ const flagged = argv.some(a => ['--claude', '--codex', '--hook'].includes(a));
110
+ const interactive = !yes && !flagged && process.stdin.isTTY;
111
+ const rl = interactive
112
+ ? node_readline_1.default.createInterface({ input: process.stdin, output: process.stdout })
113
+ : null;
114
+ console.log('Waymark setup');
115
+ console.log(` package: ${PKG_ROOT}`);
116
+ console.log(` hub DB: ${(0, client_js_1.resolveDbPath)()}\n`);
117
+ const want = async (flag, question) => yes || argv.includes(flag) || await confirm(rl, question, false);
118
+ if (await want('--claude', 'Register the hub in Claude Code (claude mcp add)?'))
119
+ setupClaudeCode();
120
+ if (await want('--codex', 'Register the hub in Codex (~/.codex/config.toml)?'))
121
+ setupCodex();
122
+ if (await want('--hook', 'Install the Claude Code SessionStart hook (auto-resume, zero tool calls)?'))
123
+ setupHook();
124
+ rl?.close();
125
+ console.log('\nClaude Desktop / web: run "waymark-hub serve --http" and add the connector http://localhost:3747/mcp');
126
+ console.log('Dashboard: waymark-hub dashboard -> http://localhost:4747');
127
+ }
128
+ // ---- doctor ------------------------------------------------------------------
129
+ function doctor() {
130
+ console.log('Waymark doctor\n');
131
+ const [major] = process.versions.node.split('.').map(Number);
132
+ (major >= 22 ? ok : warn)(`node ${process.versions.node} ${major >= 22 ? '' : '(need >= 22)'}`.trim());
133
+ const dbPath = (0, client_js_1.resolveDbPath)();
134
+ if (node_fs_1.default.existsSync(dbPath)) {
135
+ try {
136
+ const { getDb } = require(node_path_1.default.join(PKG_ROOT, 'dist', 'db', 'client.js'));
137
+ const db = getDb();
138
+ const count = (t) => db.prepare(`SELECT COUNT(*) c FROM ${t}`).get().c;
139
+ ok(`DB ${dbPath}: ${count('projects')} projects, ${count('memory_nodes')} memories, ${count('tasks')} tasks, ${count('sessions')} sessions`);
140
+ }
141
+ catch (e) {
142
+ warn(`DB ${dbPath} exists but cannot be opened: ${String(e)}`);
143
+ }
144
+ }
145
+ else {
146
+ info(`DB not created yet (will appear at ${dbPath} on first use)`);
147
+ }
148
+ if (hasClaude()) {
149
+ const listed = run('claude', ['mcp', 'list']);
150
+ if (/^waymark:.*Connected/m.test(listed.out))
151
+ ok('Claude Code: "waymark" registered and connected');
152
+ else if (/^waymark:/m.test(listed.out))
153
+ warn('Claude Code: "waymark" registered but not connected');
154
+ else
155
+ warn('Claude Code: "waymark" not registered — run waymark-hub init --claude');
156
+ }
157
+ else {
158
+ info('Claude Code CLI not found');
159
+ }
160
+ let codexToml = '';
161
+ try {
162
+ codexToml = node_fs_1.default.readFileSync(CODEX_CONFIG, 'utf8');
163
+ }
164
+ catch { /* absent */ }
165
+ if (/\[mcp_servers\.waymark\]/.test(codexToml))
166
+ ok('Codex: [mcp_servers.waymark] configured');
167
+ else
168
+ info('Codex: not configured (run waymark-hub init --codex)');
169
+ let claudeSettings = '';
170
+ try {
171
+ claudeSettings = node_fs_1.default.readFileSync(CLAUDE_SETTINGS, 'utf8');
172
+ }
173
+ catch { /* absent */ }
174
+ if (claudeSettings.includes('session-start-resume.cjs'))
175
+ ok('SessionStart hook installed');
176
+ else
177
+ info('SessionStart hook not installed (run waymark-hub init --hook)');
178
+ }
179
+ // ---- main ---------------------------------------------------------------------
180
+ function usage() {
181
+ console.log(`waymark-hub — shared memory and handoff hub for AI agents
182
+
183
+ Usage:
184
+ waymark-hub init [--claude] [--codex] [--hook] [--yes]
185
+ waymark-hub serve [--http]
186
+ waymark-hub dashboard
187
+ waymark-hub doctor
188
+
189
+ init without flags asks interactively; --yes enables everything applicable.`);
190
+ }
191
+ async function main() {
192
+ const [command, ...rest] = process.argv.slice(2);
193
+ switch (command) {
194
+ case 'init':
195
+ await init(rest);
196
+ break;
197
+ case 'serve':
198
+ (0, node_child_process_1.spawn)(process.execPath, [SERVER_JS, ...rest], { stdio: 'inherit' });
199
+ break;
200
+ case 'dashboard':
201
+ (0, node_child_process_1.spawn)(process.execPath, [DASHBOARD_MJS, ...rest], { stdio: 'inherit' });
202
+ break;
203
+ case 'doctor':
204
+ doctor();
205
+ break;
206
+ default:
207
+ usage();
208
+ if (command && command !== 'help' && command !== '--help')
209
+ process.exitCode = 1;
210
+ }
211
+ }
212
+ main().catch(error => {
213
+ console.error(`waymark-hub failed: ${String(error)}`);
214
+ process.exitCode = 1;
215
+ });
216
+ //# sourceMappingURL=waymark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waymark.js","sourceRoot":"","sources":["../../src/cli/waymark.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { MemoryNode, Task } from '../db/schema.js';
2
+ interface ContextMemory {
3
+ id: string;
4
+ name: string;
5
+ type: MemoryNode['type'];
6
+ summary: string;
7
+ updated_at: string;
8
+ source: 'project' | 'global';
9
+ score: number;
10
+ reasons: string[];
11
+ importance: number;
12
+ confidence: number;
13
+ source_type: string | null;
14
+ source_ref: string | null;
15
+ body?: string;
16
+ }
17
+ interface ContextTask {
18
+ id: string;
19
+ title: string;
20
+ description: string | null;
21
+ status: Task['status'];
22
+ priority: number;
23
+ assigned_to: string | null;
24
+ assigned_agent_id: string | null;
25
+ updated_at: string;
26
+ }
27
+ interface ContextSession {
28
+ id: string;
29
+ summary: string | null;
30
+ outcome: string | null;
31
+ agent_id: string | null;
32
+ client: string | null;
33
+ ended_at: string | null;
34
+ }
35
+ export interface ContextPacket {
36
+ project: {
37
+ id: string;
38
+ name: string;
39
+ root_path: string;
40
+ stack: string | null;
41
+ description: string | null;
42
+ };
43
+ task: string | null;
44
+ notices?: string[];
45
+ active_tasks: ContextTask[];
46
+ memories: ContextMemory[];
47
+ recent_sessions: ContextSession[];
48
+ omitted: {
49
+ active_tasks: number;
50
+ memories: number;
51
+ recent_sessions: number;
52
+ };
53
+ estimated_tokens: number;
54
+ max_tokens: number;
55
+ }
56
+ export interface BuildContextOptions {
57
+ projectId: string;
58
+ task?: string;
59
+ agentId?: string;
60
+ clientId?: string;
61
+ maxTokens: number;
62
+ memoryTypes?: MemoryNode['type'][];
63
+ includeSources?: boolean;
64
+ }
65
+ export declare function buildContextPacket(options: BuildContextOptions): ContextPacket | null;
66
+ export {};
67
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/context/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAoB,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGrE,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IACnC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA4FD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa,GAAG,IAAI,CA8LrF"}