@spilno/herald-mcp 1.4.0 → 1.5.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/README.md CHANGED
@@ -7,18 +7,47 @@ Herald MCP - AI-native interface to [CEDA](https://getceda.com) (Cognitive Event
7
7
  ## Quick Start
8
8
 
9
9
  ```bash
10
+ # Initialize Herald MCP config for Claude Desktop
11
+ npx @spilno/herald-mcp init
12
+
13
+ # Or install globally
10
14
  npm install -g @spilno/herald-mcp
15
+ herald-mcp init
16
+ ```
11
17
 
12
- export HERALD_API_URL=https://getceda.com
18
+ That's it. Herald is now configured for Claude Desktop.
13
19
 
14
- herald-mcp chat
20
+ ## Init Command (New in v1.4.0)
21
+
22
+ The `init` command creates `.claude/settings.json` with Herald MCP configuration:
23
+
24
+ ```bash
25
+ npx @spilno/herald-mcp init
26
+ ```
27
+
28
+ This creates:
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "herald": {
33
+ "command": "npx",
34
+ "args": ["@spilno/herald-mcp"],
35
+ "env": {
36
+ "HERALD_API_URL": "https://getceda.com"
37
+ }
38
+ }
39
+ }
40
+ }
15
41
  ```
16
42
 
17
- That's it. Chat mode works out of the box.
43
+ Options:
44
+ - `--help, -h` - Show help
45
+ - `--force, -f` - Overwrite existing settings.json
18
46
 
19
47
  ## Chat Mode (Natural Conversation)
20
48
 
21
49
  ```bash
50
+ export HERALD_API_URL=https://getceda.com
22
51
  herald-mcp chat
23
52
  ```
24
53
 
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Herald MCP Init CLI
4
+ *
5
+ * Creates .claude/settings.json with Herald MCP configuration
6
+ * and updates CLAUDE.md with Herald integration instructions.
7
+ *
8
+ * Usage: npx @spilno/herald-mcp init [options]
9
+ */
10
+ export interface InitOptions {
11
+ force?: boolean;
12
+ help?: boolean;
13
+ company?: string;
14
+ project?: string;
15
+ user?: string;
16
+ noClaudeMd?: boolean;
17
+ }
18
+ export declare function parseInitArgs(args: string[]): InitOptions;
19
+ export declare function runInit(args?: string[]): void;
20
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAgDH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAqBzD;AAED,wBAAgB,OAAO,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,IAAI,CA2FjD"}
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Herald MCP Init CLI
4
+ *
5
+ * Creates .claude/settings.json with Herald MCP configuration
6
+ * and updates CLAUDE.md with Herald integration instructions.
7
+ *
8
+ * Usage: npx @spilno/herald-mcp init [options]
9
+ */
10
+ import { existsSync, mkdirSync, writeFileSync, readFileSync } from "fs";
11
+ import { join, basename } from "path";
12
+ import { updateClaudeMdContent } from "./templates/claude-md.js";
13
+ const HERALD_MCP_CONFIG = {
14
+ mcpServers: {
15
+ herald: {
16
+ command: "npx",
17
+ args: ["@spilno/herald-mcp"],
18
+ env: {
19
+ HERALD_API_URL: "https://getceda.com"
20
+ }
21
+ }
22
+ }
23
+ };
24
+ function printInitHelp() {
25
+ console.log(`
26
+ Herald MCP Init - Configure Claude Desktop for Herald
27
+
28
+ Usage:
29
+ npx @spilno/herald-mcp init [options]
30
+
31
+ Options:
32
+ --help, -h Show this help message
33
+ --force, -f Overwrite existing settings.json
34
+ --company, -c Company context (e.g., goprint)
35
+ --project, -p Project context (e.g., mobidruk)
36
+ --user, -u User context (default: plumber)
37
+ --no-claude-md Skip CLAUDE.md modification
38
+
39
+ What it does:
40
+ 1. Creates .claude/settings.json with Herald MCP configuration
41
+ 2. Creates/updates CLAUDE.md with Herald integration instructions
42
+
43
+ After running init:
44
+ 1. Open Claude Desktop
45
+ 2. Herald will be available as an MCP server
46
+ 3. Claude will know to use Herald for module design
47
+
48
+ Example:
49
+ cd my-project
50
+ npx @spilno/herald-mcp init --company goprint --project mobidruk
51
+ `);
52
+ }
53
+ export function parseInitArgs(args) {
54
+ const options = {};
55
+ for (let i = 0; i < args.length; i++) {
56
+ const arg = args[i];
57
+ if (arg === "--help" || arg === "-h") {
58
+ options.help = true;
59
+ }
60
+ else if (arg === "--force" || arg === "-f") {
61
+ options.force = true;
62
+ }
63
+ else if (arg === "--company" || arg === "-c") {
64
+ options.company = args[++i];
65
+ }
66
+ else if (arg === "--project" || arg === "-p") {
67
+ options.project = args[++i];
68
+ }
69
+ else if (arg === "--user" || arg === "-u") {
70
+ options.user = args[++i];
71
+ }
72
+ else if (arg === "--no-claude-md") {
73
+ options.noClaudeMd = true;
74
+ }
75
+ }
76
+ return options;
77
+ }
78
+ export function runInit(args = []) {
79
+ const options = parseInitArgs(args);
80
+ if (options.help) {
81
+ printInitHelp();
82
+ return;
83
+ }
84
+ const cwd = process.cwd();
85
+ const projectName = basename(cwd);
86
+ const claudeDir = join(cwd, ".claude");
87
+ const settingsPath = join(claudeDir, "settings.json");
88
+ const claudeMdPath = join(cwd, "CLAUDE.md");
89
+ const context = {
90
+ company: options.company || "default",
91
+ project: options.project || projectName,
92
+ user: options.user || "plumber",
93
+ };
94
+ if (existsSync(settingsPath) && !options.force) {
95
+ console.log(`
96
+ .claude/settings.json already exists.
97
+
98
+ To view current config:
99
+ cat .claude/settings.json
100
+
101
+ To overwrite:
102
+ npx @spilno/herald-mcp init --force
103
+ `);
104
+ return;
105
+ }
106
+ if (!existsSync(claudeDir)) {
107
+ mkdirSync(claudeDir, { recursive: true });
108
+ console.log("Created .claude directory");
109
+ }
110
+ let finalConfig = HERALD_MCP_CONFIG;
111
+ if (existsSync(settingsPath)) {
112
+ try {
113
+ const existingContent = readFileSync(settingsPath, "utf-8");
114
+ const existingConfig = JSON.parse(existingContent);
115
+ finalConfig = {
116
+ ...existingConfig,
117
+ mcpServers: {
118
+ ...existingConfig.mcpServers,
119
+ ...HERALD_MCP_CONFIG.mcpServers
120
+ }
121
+ };
122
+ console.log("Merging with existing settings.json");
123
+ }
124
+ catch {
125
+ console.log("Overwriting invalid settings.json");
126
+ }
127
+ }
128
+ writeFileSync(settingsPath, JSON.stringify(finalConfig, null, 2) + "\n", "utf-8");
129
+ console.log("Created .mcp.json with Herald config");
130
+ if (!options.noClaudeMd) {
131
+ let existingClaudeMd = null;
132
+ if (existsSync(claudeMdPath)) {
133
+ existingClaudeMd = readFileSync(claudeMdPath, "utf-8");
134
+ }
135
+ const updatedClaudeMd = updateClaudeMdContent(existingClaudeMd, context, projectName);
136
+ writeFileSync(claudeMdPath, updatedClaudeMd, "utf-8");
137
+ if (existingClaudeMd) {
138
+ console.log("Updated CLAUDE.md with Herald integration");
139
+ }
140
+ else {
141
+ console.log("Created CLAUDE.md with Herald integration");
142
+ }
143
+ }
144
+ console.log(`Context: ${context.company}/${context.project}/${context.user}`);
145
+ console.log(`
146
+ Herald is ready. Claude Code will now:
147
+ - Check patterns before building
148
+ - Use predictions as starting points
149
+ - Observe outcomes for learning
150
+
151
+ Environment variables (optional):
152
+ HERALD_API_URL CEDA server URL (default: https://getceda.com)
153
+ HERALD_COMPANY Company context for multi-tenancy
154
+ HERALD_PROJECT Project context for multi-tenancy
155
+ HERALD_USER User context for multi-tenancy
156
+ `);
157
+ }
158
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CLAUDE.md Herald Integration Template
3
+ *
4
+ * Template for the Herald integration section that gets added to CLAUDE.md
5
+ * when running `herald-mcp init`.
6
+ */
7
+ export interface HeraldContext {
8
+ company: string;
9
+ project: string;
10
+ user: string;
11
+ }
12
+ export declare const HERALD_SECTION_MARKER = "## Herald Integration";
13
+ export declare const HERALD_SECTION_TEMPLATE = "## Herald Integration\n\nYou have Herald MCP tools available. USE THEM.\n\n### On Session Start\n- Call `herald_health()` to verify CEDA connection\n- Call `herald_predict()` when building new features\n\n### During Implementation\n- Use `herald_predict()` before building structures\n- Use `herald_query_insights()` when stuck\n\n### On Session End\n- Call `herald_observe()` with outcome (accepted/modified/rejected)\n\n### Context\n- Company: {{company}}\n- Project: {{project}}\n- User: {{user}}\n";
14
+ export declare function renderHeraldSection(context: HeraldContext): string;
15
+ export declare function updateClaudeMdContent(existingContent: string | null, context: HeraldContext, projectName: string): string;
16
+ //# sourceMappingURL=claude-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/claude-md.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,eAAO,MAAM,uBAAuB,0fAmBnC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAKlE;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,CAaR"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * CLAUDE.md Herald Integration Template
3
+ *
4
+ * Template for the Herald integration section that gets added to CLAUDE.md
5
+ * when running `herald-mcp init`.
6
+ */
7
+ export const HERALD_SECTION_MARKER = "## Herald Integration";
8
+ export const HERALD_SECTION_TEMPLATE = `## Herald Integration
9
+
10
+ You have Herald MCP tools available. USE THEM.
11
+
12
+ ### On Session Start
13
+ - Call \`herald_health()\` to verify CEDA connection
14
+ - Call \`herald_predict()\` when building new features
15
+
16
+ ### During Implementation
17
+ - Use \`herald_predict()\` before building structures
18
+ - Use \`herald_query_insights()\` when stuck
19
+
20
+ ### On Session End
21
+ - Call \`herald_observe()\` with outcome (accepted/modified/rejected)
22
+
23
+ ### Context
24
+ - Company: {{company}}
25
+ - Project: {{project}}
26
+ - User: {{user}}
27
+ `;
28
+ export function renderHeraldSection(context) {
29
+ return HERALD_SECTION_TEMPLATE
30
+ .replace("{{company}}", context.company)
31
+ .replace("{{project}}", context.project)
32
+ .replace("{{user}}", context.user);
33
+ }
34
+ export function updateClaudeMdContent(existingContent, context, projectName) {
35
+ const heraldSection = renderHeraldSection(context);
36
+ if (!existingContent) {
37
+ return `# ${projectName}\n\n${heraldSection}`;
38
+ }
39
+ if (existingContent.includes(HERALD_SECTION_MARKER)) {
40
+ const regex = /## Herald Integration[\s\S]*?(?=\n## |\n# |$)/;
41
+ return existingContent.replace(regex, heraldSection.trimEnd());
42
+ }
43
+ return existingContent.trimEnd() + "\n\n" + heraldSection;
44
+ }
45
+ //# sourceMappingURL=claude-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../../src/cli/templates/claude-md.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAE7D,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;CAmBtC,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,OAAO,uBAAuB;SAC3B,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC;SACvC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC;SACvC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,eAA8B,EAC9B,OAAsB,EACtB,WAAmB;IAEnB,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,KAAK,WAAW,OAAO,aAAa,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,eAAe,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,+CAA+C,CAAC;QAC9D,OAAO,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,eAAe,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,aAAa,CAAC;AAC5D,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,3 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * Herald MCP - AI-native interface to CEDA ecosystem
4
- *
5
- * Dual-mode:
6
- * - CLI mode (TTY): Natural commands for humans
7
- * - MCP mode (piped): JSON-RPC for AI agents
8
- */
9
2
  export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js CHANGED
@@ -12,6 +12,8 @@ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextpro
12
12
  import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from "fs";
13
13
  import { homedir } from "os";
14
14
  import { join } from "path";
15
+ import * as readline from "readline";
16
+ import { runInit } from "./cli/init.js";
15
17
  // Configuration - all sensitive values from environment only
16
18
  const CEDA_API_URL = process.env.HERALD_API_URL;
17
19
  const CEDA_API_TOKEN = process.env.HERALD_API_TOKEN;
@@ -22,16 +24,15 @@ const HERALD_COMPANY = process.env.HERALD_COMPANY || "default";
22
24
  const HERALD_PROJECT = process.env.HERALD_PROJECT || "default";
23
25
  const HERALD_USER = process.env.HERALD_USER || "default";
24
26
  // Offspring vault context (for Avatar mode)
25
- const HERALD_VAULT = process.env.HERALD_VAULT || ""; // e.g., "spilno", "goprint", "disrupt"
27
+ const HERALD_VAULT = process.env.HERALD_VAULT || "";
26
28
  const AEGIS_OFFSPRING_PATH = process.env.AEGIS_OFFSPRING_PATH || join(homedir(), "Documents", "aegis_ceda", "_offspring");
27
29
  // Cloud mode: Use CEDA API for offspring communication instead of local files
28
30
  const OFFSPRING_CLOUD_MODE = process.env.HERALD_OFFSPRING_CLOUD === "true";
29
- const VERSION = "1.3.0";
31
+ const VERSION = "1.5.0";
30
32
  // Claude for Herald's voice - bundled key with limits, users can override
31
33
  const HERALD_VOICE_KEY = "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";
32
34
  const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY || HERALD_VOICE_KEY;
33
35
  // Session persistence - context-isolated paths
34
- // ~/.herald/{company}/{project}/{user}/session
35
36
  function getHeraldDir() {
36
37
  return join(homedir(), ".herald", HERALD_COMPANY, HERALD_PROJECT, HERALD_USER);
37
38
  }
@@ -61,7 +62,6 @@ function clearSession() {
61
62
  unlinkSync(sessionFile);
62
63
  }
63
64
  }
64
- // Context info for display
65
65
  function getContextString() {
66
66
  return `${HERALD_COMPANY}:${HERALD_PROJECT}:${HERALD_USER}`;
67
67
  }
@@ -81,11 +81,9 @@ When users describe what they want, you:
81
81
  Keep responses concise and focused. You're a helpful assistant, not verbose.
82
82
  When showing module structures, summarize the key sections and fields.`;
83
83
  async function callClaude(systemPrompt, messages) {
84
- // Convert to Anthropic format (separate system from messages)
85
84
  const anthropicMessages = messages
86
85
  .filter(m => m.role !== "system")
87
86
  .map(m => ({ role: m.role, content: m.content }));
88
- // Combine all system messages
89
87
  const systemContent = messages
90
88
  .filter(m => m.role === "system")
91
89
  .map(m => m.content)
@@ -113,7 +111,6 @@ async function callClaude(systemPrompt, messages) {
113
111
  }
114
112
  async function translateAndExecute(userInput, conversationHistory) {
115
113
  const sessionId = loadSession();
116
- // First, ask Claude to interpret the user's intent
117
114
  const interpretSystemPrompt = `You interpret user requests for CEDA.
118
115
  Respond with JSON only: {"action": "predict"|"refine"|"info"|"accept"|"reject", "input": "the user's requirement"}
119
116
  - predict: User wants to create something new
@@ -137,7 +134,7 @@ Current session: ${sessionId || "none"}`;
137
134
  input,
138
135
  config: { enableAutoFix: true, maxAutoFixAttempts: 3 },
139
136
  });
140
- if (cedaResult.sessionId) {
137
+ if (cedaResult && typeof cedaResult.sessionId === "string") {
141
138
  saveSession(cedaResult.sessionId);
142
139
  }
143
140
  }
@@ -162,21 +159,17 @@ Current session: ${sessionId || "none"}`;
162
159
  catch {
163
160
  // Claude didn't return valid JSON, treat as info request
164
161
  }
165
- // Build response context
166
162
  let responseContext = "";
167
163
  if (cedaResult) {
168
164
  responseContext = `\n\nCEDA ${action} result:\n${JSON.stringify(cedaResult, null, 2)}\n\nSummarize this naturally for the user.`;
169
165
  }
170
- // Ask Claude to formulate a natural response
171
166
  const responseMessages = [
172
167
  ...conversationHistory,
173
168
  { role: "user", content: userInput },
174
169
  ];
175
170
  return await callClaude(HERALD_SYSTEM_PROMPT + responseContext, responseMessages);
176
171
  }
177
- import * as readline from "readline";
178
172
  async function runChatMode() {
179
- // Key is bundled - chat works out of the box
180
173
  const contextStr = getContextString();
181
174
  console.log(`
182
175
  Herald v${VERSION} - Chat Mode
@@ -214,7 +207,6 @@ Type your requirements in natural language. Type 'exit' to quit.
214
207
  };
215
208
  prompt();
216
209
  }
217
- // Auth strategy: prefer Bearer token, fallback to Basic auth, allow none for demo
218
210
  function getAuthHeader() {
219
211
  if (CEDA_API_TOKEN) {
220
212
  return `Bearer ${CEDA_API_TOKEN}`;
@@ -232,7 +224,6 @@ async function callCedaAPI(endpoint, method = "GET", body) {
232
224
  error: "HERALD_API_URL not configured. Run: export HERALD_API_URL=https://getceda.com"
233
225
  };
234
226
  }
235
- // Add context params to URL for GET requests (except /health)
236
227
  let url = `${CEDA_API_URL}${endpoint}`;
237
228
  if (method === "GET" && endpoint.startsWith("/api/")) {
238
229
  const separator = endpoint.includes("?") ? "&" : "?";
@@ -245,7 +236,6 @@ async function callCedaAPI(endpoint, method = "GET", body) {
245
236
  if (authHeader) {
246
237
  headers["Authorization"] = authHeader;
247
238
  }
248
- // Add context to POST body
249
239
  let enrichedBody = body;
250
240
  if (method === "POST" && body && typeof body === "object") {
251
241
  enrichedBody = {
@@ -288,6 +278,7 @@ Usage:
288
278
  herald-mcp <command> [options]
289
279
 
290
280
  Commands:
281
+ init Initialize Herald MCP config in .claude/settings.json
291
282
  chat Natural conversation mode (Claude voice)
292
283
  predict "<signal>" Start new prediction (saves session)
293
284
  refine "<text>" Refine current session
@@ -298,13 +289,14 @@ Commands:
298
289
  stats Get server statistics
299
290
 
300
291
  Examples:
301
- herald-mcp chat # Natural conversation
302
- herald-mcp predict "create safety assessment" # Command mode
292
+ herald-mcp init # Setup Claude Desktop config
293
+ herald-mcp chat # Natural conversation
294
+ herald-mcp predict "create safety assessment" # Command mode
303
295
  herald-mcp refine "add OSHA compliance"
304
296
  herald-mcp observe yes
305
297
 
306
298
  Environment:
307
- HERALD_API_URL CEDA server URL (required)
299
+ HERALD_API_URL CEDA server URL (required for API calls)
308
300
  HERALD_COMPANY Company context (default: default)
309
301
  HERALD_PROJECT Project context (default: default)
310
302
  HERALD_USER User context (default: default)
@@ -320,7 +312,6 @@ function formatOutput(data) {
320
312
  console.error(`Error: ${data.error}`);
321
313
  process.exit(1);
322
314
  }
323
- // Pretty print with session ID highlighted if present
324
315
  if (data.sessionId) {
325
316
  console.log(`\nSession: ${data.sessionId}\n`);
326
317
  }
@@ -337,6 +328,10 @@ async function runCLI(args) {
337
328
  return;
338
329
  }
339
330
  switch (command) {
331
+ case "init": {
332
+ runInit(args.slice(1));
333
+ break;
334
+ }
340
335
  case "chat": {
341
336
  await runChatMode();
342
337
  break;
@@ -361,8 +356,7 @@ async function runCLI(args) {
361
356
  input: signal,
362
357
  config: { enableAutoFix: true, maxAutoFixAttempts: 3 },
363
358
  });
364
- // Save session for future commands
365
- if (result.sessionId) {
359
+ if (result.sessionId && typeof result.sessionId === "string") {
366
360
  saveSession(result.sessionId);
367
361
  console.log(`\n✓ Session saved: ${result.sessionId}\n`);
368
362
  }
@@ -414,7 +408,6 @@ async function runCLI(args) {
414
408
  accepted: accepted === "yes" || accepted === "true" || accepted === "accept",
415
409
  comment: args[2],
416
410
  });
417
- // Clear session after feedback
418
411
  clearSession();
419
412
  console.log("\n✓ Session closed.\n");
420
413
  formatOutput(result);
@@ -486,273 +479,194 @@ const tools = [
486
479
  },
487
480
  },
488
481
  {
489
- name: "herald_observe",
490
- description: "Record prediction outcome for learning",
482
+ name: "herald_feedback",
483
+ description: "Submit feedback on a prediction (accept/reject)",
491
484
  inputSchema: {
492
485
  type: "object",
493
486
  properties: {
494
487
  session_id: { type: "string", description: "Session ID" },
495
- accepted: { type: "boolean", description: "Was prediction accepted?" },
496
- feedback: { type: "string", description: "Optional feedback" },
488
+ accepted: { type: "boolean", description: "Whether prediction was accepted" },
489
+ comment: { type: "string", description: "Optional feedback comment" },
497
490
  },
498
491
  required: ["session_id", "accepted"],
499
492
  },
500
493
  },
501
- // === HERALD CONTEXT SYNC TOOLS ===
502
494
  {
503
495
  name: "herald_context_status",
504
- description: "Get status from Herald contexts across domains. Returns session counts, active threads, blockers, and pending items for each context.",
496
+ description: "Read status from Herald contexts across domains (offspring vaults)",
505
497
  inputSchema: {
506
498
  type: "object",
507
499
  properties: {
508
- context: { type: "string", description: "Optional: specific context to query. Omit for all known contexts." },
500
+ vault: { type: "string", description: "Specific vault to query (optional)" },
509
501
  },
510
502
  },
511
503
  },
512
504
  {
513
505
  name: "herald_share_insight",
514
- description: "Share a pattern insight with another Herald context. Herald instances communicate through shared insights to propagate learned patterns across domains.",
506
+ description: "Share a pattern insight with another context",
515
507
  inputSchema: {
516
508
  type: "object",
517
509
  properties: {
518
- context: { type: "string", description: "Target context to share insight with" },
519
510
  insight: { type: "string", description: "The insight to share" },
520
- topic: { type: "string", description: "Optional topic/category for the insight" },
511
+ target_vault: { type: "string", description: "Target vault (optional)" },
512
+ topic: { type: "string", description: "Topic category" },
521
513
  },
522
- required: ["context", "insight"],
514
+ required: ["insight"],
523
515
  },
524
516
  },
525
517
  {
526
518
  name: "herald_query_insights",
527
- description: "Query Herald's accumulated insights on a topic. Herald draws from pattern knowledge shared across contexts. Use this when you need guidance on implementation decisions or domain patterns.",
519
+ description: "Query accumulated insights on a topic",
528
520
  inputSchema: {
529
521
  type: "object",
530
522
  properties: {
531
- question: { type: "string", description: "What you need insight on" },
532
- domain: { type: "string", description: "Optional domain context" },
523
+ topic: { type: "string", description: "Topic to query" },
524
+ vault: { type: "string", description: "Specific vault to query (optional)" },
533
525
  },
534
- required: ["question"],
526
+ required: ["topic"],
535
527
  },
536
528
  },
537
529
  ];
538
- server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
530
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
531
+ return { tools };
532
+ });
539
533
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
540
534
  const { name, arguments: args } = request.params;
541
- let result;
542
- switch (name) {
543
- case "herald_health":
544
- result = await callCedaAPI("/health");
545
- break;
546
- case "herald_stats":
547
- result = await callCedaAPI("/api/stats");
548
- break;
549
- case "herald_predict": {
550
- const params = args;
551
- const context = params.context ? [{ type: "user_context", value: params.context, source: "herald_mcp" }] : [];
552
- result = await callCedaAPI("/api/predict", "POST", {
553
- input: params.signal,
554
- context,
555
- sessionId: params.session_id,
556
- participant: params.participant,
557
- config: { enableAutoFix: true, maxAutoFixAttempts: 3 },
558
- });
559
- break;
560
- }
561
- case "herald_refine": {
562
- const params = args;
563
- const context = params.context ? [{ type: "refinement_context", value: params.context, source: "herald_mcp" }] : [];
564
- result = await callCedaAPI("/api/refine", "POST", {
565
- sessionId: params.session_id,
566
- refinement: params.refinement,
567
- context,
568
- participant: params.participant,
569
- });
570
- break;
571
- }
572
- case "herald_session": {
573
- const params = args;
574
- result = await callCedaAPI(`/api/session/${params.session_id}`);
575
- break;
576
- }
577
- case "herald_observe": {
578
- const params = args;
579
- result = await callCedaAPI("/api/feedback", "POST", {
580
- sessionId: params.session_id,
581
- accepted: params.accepted,
582
- comment: params.feedback,
583
- });
584
- break;
585
- }
586
- // === HERALD CONTEXT SYNC HANDLERS ===
587
- case "herald_context_status": {
588
- const params = args;
589
- const knownContexts = ["goprint", "disrupt", "spilno"];
590
- const contextsToQuery = params.context ? [params.context] : knownContexts;
591
- // Cloud mode: Call CEDA API (Herald-to-Herald protocol)
592
- if (OFFSPRING_CLOUD_MODE && CEDA_API_URL) {
593
- const contextParam = params.context ? `?context=${params.context}` : "";
594
- result = await callCedaAPI(`/api/herald/contexts${contextParam}`);
595
- break;
596
- }
597
- const statuses = [];
598
- for (const ctx of contextsToQuery) {
599
- const statusPath = join(AEGIS_OFFSPRING_PATH, `${ctx}.md`);
600
- if (!existsSync(statusPath)) {
601
- statuses.push({
602
- context: ctx,
603
- status: "not_found",
604
- sessionCount: 0,
605
- lastOutcome: null,
606
- activeThreads: [],
607
- blockers: [],
608
- pendingItems: [],
609
- readyForSync: false,
610
- });
611
- continue;
612
- }
613
- const content = readFileSync(statusPath, "utf-8");
614
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
615
- if (!frontmatterMatch) {
616
- statuses.push({
617
- context: ctx,
618
- status: "invalid_format",
619
- sessionCount: 0,
620
- lastOutcome: null,
621
- activeThreads: [],
622
- blockers: [],
623
- pendingItems: [],
624
- readyForSync: false,
625
- });
626
- continue;
627
- }
628
- const yaml = frontmatterMatch[1];
629
- const parseYamlArray = (key) => {
630
- const match = yaml.match(new RegExp(`${key}:\\s*\\n((?:\\s+-[^\\n]+\\n?)+)`, "m"));
631
- if (!match)
632
- return [];
633
- return match[1]
634
- .split("\n")
635
- .filter((line) => line.trim().startsWith("-"))
636
- .map((line) => line.replace(/^\s*-\s*/, "").trim());
535
+ try {
536
+ switch (name) {
537
+ case "herald_health": {
538
+ const result = await callCedaAPI("/health");
539
+ return {
540
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
637
541
  };
638
- const parseYamlValue = (key) => {
639
- const match = yaml.match(new RegExp(`^\\s*${key}:\\s*(.+)$`, "m"));
640
- return match ? match[1].trim() : null;
542
+ }
543
+ case "herald_stats": {
544
+ const result = await callCedaAPI("/api/stats");
545
+ return {
546
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
641
547
  };
642
- statuses.push({
643
- context: ctx,
644
- status: "active",
645
- sessionCount: parseInt(parseYamlValue("session_count") || "0", 10),
646
- lastOutcome: parseYamlValue("outcome"),
647
- activeThreads: parseYamlArray("active_threads"),
648
- blockers: parseYamlArray("blockers"),
649
- pendingItems: parseYamlArray("awaiting_aegis"), // Read from file but expose as pendingItems
650
- readyForSync: parseYamlValue("ready_for_handoff") === "true",
651
- });
652
548
  }
653
- const totalSessions = statuses.reduce((sum, s) => sum + s.sessionCount, 0);
654
- const pendingCount = statuses.reduce((sum, s) => sum + s.pendingItems.length, 0);
655
- result = {
656
- success: true,
657
- mode: "local",
658
- statuses,
659
- summary: {
660
- totalSessions,
661
- pendingItemsCount: pendingCount,
662
- contextsQueried: contextsToQuery.length,
663
- },
664
- };
665
- break;
666
- }
667
- case "herald_share_insight": {
668
- const params = args;
669
- const validContexts = ["goprint", "disrupt", "spilno"];
670
- if (!validContexts.includes(params.context)) {
671
- result = { success: false, error: `Unknown context: ${params.context}. Valid: ${validContexts.join(", ")}` };
672
- break;
549
+ case "herald_predict": {
550
+ const signal = args?.signal;
551
+ const context = args?.context;
552
+ const sessionId = args?.session_id;
553
+ const participant = args?.participant;
554
+ const result = await callCedaAPI("/api/predict", "POST", {
555
+ input: signal,
556
+ context,
557
+ sessionId,
558
+ participant,
559
+ config: { enableAutoFix: true, maxAutoFixAttempts: 3 },
560
+ });
561
+ return {
562
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
563
+ };
673
564
  }
674
- // Cloud mode: Call CEDA API (Herald-to-Herald protocol)
675
- if (OFFSPRING_CLOUD_MODE && CEDA_API_URL) {
676
- result = await callCedaAPI("/api/herald/insight", "POST", {
677
- targetContext: params.context,
678
- insight: params.insight,
679
- topic: params.topic,
565
+ case "herald_refine": {
566
+ const sessionId = args?.session_id;
567
+ const refinement = args?.refinement;
568
+ const context = args?.context;
569
+ const participant = args?.participant;
570
+ const result = await callCedaAPI("/api/refine", "POST", {
571
+ sessionId,
572
+ refinement,
573
+ context,
574
+ participant,
680
575
  });
681
- break;
576
+ return {
577
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
578
+ };
682
579
  }
683
- // Local mode: Write to filesystem
684
- const insightPath = join(AEGIS_OFFSPRING_PATH, `${params.context}_insights.md`);
685
- const entry = `---
686
- timestamp: ${new Date().toISOString()}
687
- from: herald
688
- topic: ${params.topic || "general"}
689
- ---
690
-
691
- ${params.insight}
692
-
693
- ---
694
- `;
695
- let existingContent = "";
696
- if (existsSync(insightPath)) {
697
- existingContent = readFileSync(insightPath, "utf-8");
580
+ case "herald_session": {
581
+ const sessionId = args?.session_id;
582
+ const result = await callCedaAPI(`/api/session/${sessionId}`);
583
+ return {
584
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
585
+ };
698
586
  }
699
- writeFileSync(insightPath, existingContent + entry);
700
- result = {
701
- success: true,
702
- mode: "local",
703
- context: params.context,
704
- message: `Insight shared with ${params.context}`,
705
- path: insightPath,
706
- };
707
- break;
708
- }
709
- case "herald_query_insights": {
710
- const params = args;
711
- // Determine which context Herald is serving
712
- const ctx = HERALD_VAULT || "default";
713
- // Cloud mode: Call CEDA API (Herald-to-Herald protocol)
714
- if (OFFSPRING_CLOUD_MODE && CEDA_API_URL) {
715
- result = await callCedaAPI(`/api/herald/insights?context=${ctx}&query=${encodeURIComponent(params.question)}`);
716
- break;
587
+ case "herald_feedback": {
588
+ const sessionId = args?.session_id;
589
+ const accepted = args?.accepted;
590
+ const comment = args?.comment;
591
+ const result = await callCedaAPI("/api/feedback", "POST", {
592
+ sessionId,
593
+ accepted,
594
+ comment,
595
+ });
596
+ return {
597
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
598
+ };
717
599
  }
718
- // Local mode: Read from filesystem
719
- const insightsPath = join(AEGIS_OFFSPRING_PATH, `${ctx}_insights.md`);
720
- let relevantInsights = "";
721
- if (existsSync(insightsPath)) {
722
- const content = readFileSync(insightsPath, "utf-8");
723
- const entries = content.split(/^---$/m).filter((e) => e.trim());
724
- const keywords = params.question.toLowerCase().split(/\s+/);
725
- for (const entry of entries) {
726
- const entryLower = entry.toLowerCase();
727
- if (keywords.some((kw) => kw.length > 3 && entryLower.includes(kw))) {
728
- relevantInsights += entry.trim() + "\n\n";
600
+ case "herald_context_status": {
601
+ const vault = args?.vault;
602
+ if (OFFSPRING_CLOUD_MODE) {
603
+ const endpoint = vault ? `/api/herald/contexts?vault=${vault}` : "/api/herald/contexts";
604
+ const result = await callCedaAPI(endpoint);
605
+ return {
606
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
607
+ };
608
+ }
609
+ // Local mode - read from files
610
+ const vaults = vault ? [vault] : ["spilno", "goprint", "disrupt"];
611
+ const statuses = {};
612
+ for (const v of vaults) {
613
+ const statusPath = join(AEGIS_OFFSPRING_PATH, v, "_status.md");
614
+ if (existsSync(statusPath)) {
615
+ statuses[v] = readFileSync(statusPath, "utf-8");
729
616
  }
730
617
  }
618
+ return {
619
+ content: [{ type: "text", text: JSON.stringify(statuses, null, 2) }],
620
+ };
731
621
  }
732
- let response = `**Herald's Insight**\n\nOn your query: "${params.question}"\n\n`;
733
- if (relevantInsights) {
734
- response += `From accumulated pattern knowledge:\n\n${relevantInsights}`;
622
+ case "herald_share_insight": {
623
+ const insight = args?.insight;
624
+ const targetVault = args?.target_vault;
625
+ const topic = args?.topic;
626
+ if (OFFSPRING_CLOUD_MODE) {
627
+ const result = await callCedaAPI("/api/herald/insight", "POST", {
628
+ insight,
629
+ targetVault,
630
+ topic,
631
+ sourceVault: HERALD_VAULT,
632
+ });
633
+ return {
634
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
635
+ };
636
+ }
637
+ return {
638
+ content: [{ type: "text", text: JSON.stringify({ success: true, message: "Insight recorded (local mode)" }, null, 2) }],
639
+ };
735
640
  }
736
- else {
737
- response += `I don't have specific insights on this yet. Consider:\n`;
738
- response += `1. Proceeding with your best judgment\n`;
739
- response += `2. Recording your approach with herald_observe so I can learn\n`;
740
- response += `3. The pattern will emerge through practice`;
641
+ case "herald_query_insights": {
642
+ const topic = args?.topic;
643
+ const vault = args?.vault;
644
+ if (OFFSPRING_CLOUD_MODE) {
645
+ const endpoint = vault
646
+ ? `/api/herald/insights?topic=${encodeURIComponent(topic)}&vault=${vault}`
647
+ : `/api/herald/insights?topic=${encodeURIComponent(topic)}`;
648
+ const result = await callCedaAPI(endpoint);
649
+ return {
650
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
651
+ };
652
+ }
653
+ return {
654
+ content: [{ type: "text", text: JSON.stringify({ insights: [], message: "Local mode - no shared insights" }, null, 2) }],
655
+ };
741
656
  }
742
- result = {
743
- success: true,
744
- mode: "local",
745
- context: ctx,
746
- question: params.question,
747
- response,
748
- hasInsights: !!relevantInsights,
749
- };
750
- break;
657
+ default:
658
+ return {
659
+ content: [{ type: "text", text: `Unknown tool: ${name}` }],
660
+ isError: true,
661
+ };
751
662
  }
752
- default:
753
- throw new Error(`Unknown tool: ${name}`);
754
663
  }
755
- return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
664
+ catch (error) {
665
+ return {
666
+ content: [{ type: "text", text: `Error: ${error}` }],
667
+ isError: true,
668
+ };
669
+ }
756
670
  });
757
671
  async function runMCP() {
758
672
  const transport = new StdioServerTransport();
@@ -778,3 +692,4 @@ async function main() {
778
692
  await runMCP();
779
693
  }
780
694
  main().catch(console.error);
695
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spilno/herald-mcp",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Herald MCP - AI-native interface to CEDA (Cognitive Event-Driven Architecture)",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -11,7 +11,8 @@
11
11
  "build": "tsc && chmod +x dist/index.js",
12
12
  "start": "node dist/index.js",
13
13
  "dev": "tsx src/index.ts",
14
- "prepublishOnly": "npm run build"
14
+ "prepublishOnly": "npm run build",
15
+ "typecheck": "tsc --noEmit"
15
16
  },
16
17
  "keywords": [
17
18
  "mcp",