@sesamespace/hivemind 0.8.13 → 0.10.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 (54) hide show
  1. package/README.md +2 -1
  2. package/dist/{chunk-MLY4VFOO.js → chunk-BHCDOHSK.js} +3 -3
  3. package/dist/{chunk-PFZO67E2.js → chunk-DPLCEMEC.js} +2 -2
  4. package/dist/{chunk-HTLHMXAL.js → chunk-FBQBBAPZ.js} +2 -2
  5. package/dist/{chunk-NSTTILSN.js → chunk-FK6WYXRM.js} +79 -2
  6. package/dist/chunk-FK6WYXRM.js.map +1 -0
  7. package/dist/{chunk-LJHJGDKY.js → chunk-ICSJNKI6.js} +62 -2
  8. package/dist/chunk-ICSJNKI6.js.map +1 -0
  9. package/dist/{chunk-4Y7A25UG.js → chunk-IXBIAX76.js} +2 -2
  10. package/dist/{chunk-ZM7RK5YV.js → chunk-M3A2WRXM.js} +560 -37
  11. package/dist/chunk-M3A2WRXM.js.map +1 -0
  12. package/dist/commands/fleet.js +3 -3
  13. package/dist/commands/init.js +3 -3
  14. package/dist/commands/start.js +3 -3
  15. package/dist/commands/upgrade.js +1 -1
  16. package/dist/commands/watchdog.js +3 -3
  17. package/dist/dashboard.html +873 -131
  18. package/dist/index.js +2 -2
  19. package/dist/main.js +375 -7
  20. package/dist/main.js.map +1 -1
  21. package/dist/start.js +1 -1
  22. package/install.sh +162 -0
  23. package/package.json +24 -23
  24. package/packages/memory/Cargo.lock +6480 -0
  25. package/packages/memory/Cargo.toml +21 -0
  26. package/packages/memory/src/src/context.rs +179 -0
  27. package/packages/memory/src/src/embeddings.rs +51 -0
  28. package/packages/memory/src/src/main.rs +887 -0
  29. package/packages/memory/src/src/promotion.rs +808 -0
  30. package/packages/memory/src/src/scoring.rs +142 -0
  31. package/packages/memory/src/src/store.rs +460 -0
  32. package/packages/memory/src/src/tasks.rs +321 -0
  33. package/.pnpmrc.json +0 -1
  34. package/AUTO-DEBUG-DESIGN.md +0 -267
  35. package/DASHBOARD-PLAN.md +0 -206
  36. package/MEMORY-ENHANCEMENT-PLAN.md +0 -211
  37. package/TOOL-USE-DESIGN.md +0 -173
  38. package/dist/chunk-LJHJGDKY.js.map +0 -1
  39. package/dist/chunk-NSTTILSN.js.map +0 -1
  40. package/dist/chunk-ZM7RK5YV.js.map +0 -1
  41. package/docs/TOOL-PARITY-PLAN.md +0 -191
  42. package/src/memory/dashboard-integration.ts +0 -295
  43. package/src/memory/index.ts +0 -187
  44. package/src/memory/performance-test.ts +0 -208
  45. package/src/memory/processors/agent-sync.ts +0 -312
  46. package/src/memory/processors/command-learner.ts +0 -298
  47. package/src/memory/processors/memory-api-client.ts +0 -105
  48. package/src/memory/processors/message-flow-integration.ts +0 -168
  49. package/src/memory/processors/research-digester.ts +0 -204
  50. package/test-caitlin-access.md +0 -11
  51. /package/dist/{chunk-MLY4VFOO.js.map → chunk-BHCDOHSK.js.map} +0 -0
  52. /package/dist/{chunk-PFZO67E2.js.map → chunk-DPLCEMEC.js.map} +0 -0
  53. /package/dist/{chunk-HTLHMXAL.js.map → chunk-FBQBBAPZ.js.map} +0 -0
  54. /package/dist/{chunk-4Y7A25UG.js.map → chunk-IXBIAX76.js.map} +0 -0
package/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  Cognitive architecture for AI agents with multi-layered memory, context isolation, and multi-machine fleet distribution.
4
4
 
5
- _Updated by Caitlin 2026-03-01_
5
+ _Updated by Caitlin 2026-03-01_
6
+ _Verified access by daina 2026-03-01_
6
7
 
7
8
  ## Quick Start
8
9
 
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Watchdog
3
- } from "./chunk-4Y7A25UG.js";
3
+ } from "./chunk-IXBIAX76.js";
4
4
  import {
5
5
  defaultSentinelConfig,
6
6
  loadConfig
7
- } from "./chunk-ZM7RK5YV.js";
7
+ } from "./chunk-M3A2WRXM.js";
8
8
 
9
9
  // packages/cli/src/commands/watchdog.ts
10
10
  import { resolve } from "path";
@@ -76,4 +76,4 @@ Options:
76
76
  export {
77
77
  runWatchdogCommand
78
78
  };
79
- //# sourceMappingURL=chunk-MLY4VFOO.js.map
79
+ //# sourceMappingURL=chunk-BHCDOHSK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  startPipeline
3
- } from "./chunk-ZM7RK5YV.js";
3
+ } from "./chunk-M3A2WRXM.js";
4
4
 
5
5
  // packages/cli/src/commands/start.ts
6
6
  import { resolve } from "path";
@@ -66,4 +66,4 @@ Options:
66
66
  export {
67
67
  runStartCommand
68
68
  };
69
- //# sourceMappingURL=chunk-PFZO67E2.js.map
69
+ //# sourceMappingURL=chunk-DPLCEMEC.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  FleetManager
3
- } from "./chunk-4Y7A25UG.js";
3
+ } from "./chunk-IXBIAX76.js";
4
4
 
5
5
  // packages/cli/src/commands/fleet.ts
6
6
  function formatUptime(seconds) {
@@ -183,4 +183,4 @@ Commands:
183
183
  export {
184
184
  runFleetCommand
185
185
  };
186
- //# sourceMappingURL=chunk-HTLHMXAL.js.map
186
+ //# sourceMappingURL=chunk-FBQBBAPZ.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SesameClient,
3
3
  getClaudeCodeOAuthToken
4
- } from "./chunk-ZM7RK5YV.js";
4
+ } from "./chunk-M3A2WRXM.js";
5
5
 
6
6
  // packages/cli/src/commands/init.ts
7
7
  import { resolve, dirname } from "path";
@@ -242,6 +242,83 @@ api_key = "${sesameApiKey}"
242
242
  await installOllama();
243
243
  await pullEmbeddingModel();
244
244
  await downloadMemoryDaemon();
245
+ console.log("\n\u2192 Setting up Claude Code session logging...");
246
+ try {
247
+ const claudeDir = resolve(homedir(), ".claude");
248
+ const claudeMd = resolve(claudeDir, "CLAUDE.md");
249
+ mkdirSync(claudeDir, { recursive: true });
250
+ const sessionLoggingInstructions = `# Claude Code \u2014 Global Instructions
251
+
252
+ ## Session Logging
253
+
254
+ Before completing any session, write a \`.session-log.json\` file in the project root with the following structure:
255
+
256
+ \`\`\`json
257
+ {
258
+ "timestamp": "<ISO-8601>",
259
+ "summary": "One paragraph describing what was done and why",
260
+ "decisions": [
261
+ {
262
+ "topic": "Short label",
263
+ "choice": "What was chosen",
264
+ "rationale": "Why this over alternatives",
265
+ "alternatives_considered": ["alt1", "alt2"]
266
+ }
267
+ ],
268
+ "patterns": [
269
+ {
270
+ "pattern": "Description of a coding pattern or convention",
271
+ "scope": "project-wide | file-specific | language-general"
272
+ }
273
+ ],
274
+ "gotchas": [
275
+ {
276
+ "issue": "What went wrong or was tricky",
277
+ "resolution": "How it was fixed or worked around",
278
+ "prevention": "How to avoid it next time"
279
+ }
280
+ ],
281
+ "files_changed": [
282
+ {
283
+ "path": "relative/path/to/file",
284
+ "action": "created | modified | deleted",
285
+ "purpose": "Why this file was changed"
286
+ }
287
+ ]
288
+ }
289
+ \`\`\`
290
+
291
+ Rules:
292
+ - Always create this file, even for small changes
293
+ - Omit empty arrays (e.g. if no gotchas, leave out the key)
294
+ - Be specific in decisions and gotchas \u2014 these help future sessions
295
+ - The file is gitignored and consumed by tooling, not humans
296
+ `;
297
+ if (existsSync(claudeMd)) {
298
+ const existing = readFileSync(claudeMd, "utf-8");
299
+ if (!existing.includes("Session Logging")) {
300
+ writeFileSync(claudeMd, existing + "\n" + sessionLoggingInstructions);
301
+ console.log(" \u2713 Appended session logging to existing CLAUDE.md");
302
+ } else {
303
+ console.log(" \u2713 CLAUDE.md already has session logging");
304
+ }
305
+ } else {
306
+ writeFileSync(claudeMd, sessionLoggingInstructions);
307
+ console.log(` \u2713 Created ${claudeMd}`);
308
+ }
309
+ const globalGitignore = resolve(homedir(), ".gitignore_global");
310
+ const gitignoreContent = existsSync(globalGitignore) ? readFileSync(globalGitignore, "utf-8") : "";
311
+ if (!gitignoreContent.includes(".session-log.json")) {
312
+ writeFileSync(globalGitignore, gitignoreContent + "\n.session-log.json\n");
313
+ try {
314
+ execSync(`git config --global core.excludesfile "${globalGitignore}"`, { stdio: "ignore" });
315
+ } catch {
316
+ }
317
+ console.log(" \u2713 Added .session-log.json to global gitignore");
318
+ }
319
+ } catch (err) {
320
+ console.log(` ! Claude Code setup skipped: ${err.message}`);
321
+ }
245
322
  console.log(`
246
323
  \u2713 Hivemind initialized for ${config.agentName}!
247
324
 
@@ -359,4 +436,4 @@ Options:
359
436
  export {
360
437
  runInitCommand
361
438
  };
362
- //# sourceMappingURL=chunk-NSTTILSN.js.map
439
+ //# sourceMappingURL=chunk-FK6WYXRM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../packages/cli/src/commands/init.ts"],"sourcesContent":["import { resolve, dirname } from \"path\";\nimport { existsSync, writeFileSync, mkdirSync, readFileSync, copyFileSync, realpathSync, chmodSync } from \"fs\";\nimport { createInterface } from \"readline\";\nimport { fileURLToPath } from \"url\";\nimport { execSync } from \"child_process\";\nimport { SesameClient } from \"@sesamespace/sdk\";\nimport { getClaudeCodeOAuthToken } from \"@hivemind/runtime\";\nimport { homedir, arch, platform } from \"os\";\n\nconst HIVEMIND_DIR = resolve(process.env.HIVEMIND_HOME || resolve(homedir(), \"hivemind\"));\nconst CONFIG_DIR = resolve(HIVEMIND_DIR, \"config\");\nconst WORKSPACE_DIR = resolve(HIVEMIND_DIR, \"workspace\");\nconst BIN_DIR = resolve(HIVEMIND_DIR, \"bin\");\nconst DATA_DIR = resolve(HIVEMIND_DIR, \"data\");\nconst ENV_FILE = resolve(HIVEMIND_DIR, \".env\");\nconst LOCAL_TOML = resolve(CONFIG_DIR, \"local.toml\");\nconst MEMORY_BIN = resolve(BIN_DIR, \"hivemind-memory\");\n\nconst RELEASES_BASE_URL = \"https://sesame-hivemind-releases.s3.amazonaws.com\";\nconst EMBEDDING_MODEL = \"nomic-embed-text\";\n\nconst VAULT_CONFIG_NAME = \"hivemind-config\";\n\ninterface ProvisioningConfig {\n agentName: string;\n agentHandle: string;\n agentId: string;\n personality?: string;\n llmApiKey?: string;\n llmBaseUrl?: string;\n llmModel?: string;\n llmProvider?: 'openai' | 'anthropic';\n fleetRole?: string;\n channels: Array<{ id: string; name: string | null; kind: string }>;\n}\n\nasync function prompt(question: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nexport async function runInitCommand(args: string[]): Promise<void> {\n const nonInteractive = args.includes(\"--yes\") || args.includes(\"-y\") || args.includes(\"--non-interactive\");\n const filteredArgs = args.filter((a) => ![\"--yes\", \"-y\", \"--non-interactive\", \"--help\", \"-h\"].includes(a));\n let sesameApiKey = filteredArgs[0];\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n printHelp();\n return;\n }\n\n console.log(`\n ╦ ╦╦╦ ╦╔═╗╔╦╗╦╔╗╔╔╦╗\n ╠═╣║╚╗╔╝║╣ ║║║║║║║ ║║\n ╩ ╩╩ ╚╝ ╚═╝╩ ╩╩╝╚╝═╩╝\n Agent Initialization\n`);\n\n // --- Step 1: Get Sesame API key ---\n // Check existing config if no key provided\n if (!sesameApiKey) {\n // Try .env file\n if (existsSync(ENV_FILE)) {\n try {\n const envContent = readFileSync(ENV_FILE, \"utf-8\");\n const match = envContent.match(/^SESAME_API_KEY=(.+)$/m);\n if (match && match[1].trim()) {\n sesameApiKey = match[1].trim();\n console.log(\" ✓ Found existing API key in .env\");\n }\n } catch {}\n }\n // Try local.toml\n if (!sesameApiKey && existsSync(LOCAL_TOML)) {\n try {\n const tomlContent = readFileSync(LOCAL_TOML, \"utf-8\");\n const match = tomlContent.match(/api_key\\s*=\\s*\"([^\"]+)\"/);\n if (match && match[1].trim()) {\n sesameApiKey = match[1].trim();\n console.log(\" ✓ Found existing API key in local.toml\");\n }\n } catch {}\n }\n // Try environment variable\n if (!sesameApiKey && process.env.SESAME_API_KEY) {\n sesameApiKey = process.env.SESAME_API_KEY;\n console.log(\" ✓ Using API key from SESAME_API_KEY env var\");\n }\n }\n if (!sesameApiKey) {\n sesameApiKey = await prompt(\" Sesame API key: \");\n }\n if (!sesameApiKey) {\n console.error(\"Error: Sesame API key is required\");\n process.exit(1);\n }\n\n // --- Step 2: Connect to Sesame and fetch manifest ---\n console.log(\"\\n→ Connecting to Sesame...\");\n const sdk = new SesameClient({\n apiUrl: \"https://api.sesame.space\",\n wsUrl: \"wss://ws.sesame.space\",\n apiKey: sesameApiKey,\n });\n\n let config: ProvisioningConfig;\n try {\n const manifest = await sdk.getManifest();\n console.log(` ✓ Authenticated as ${manifest.agent.handle} (${manifest.agent.id})`);\n console.log(` ✓ Workspace: ${manifest.workspace.name}`);\n console.log(` ✓ Channels: ${manifest.channels.length}`);\n for (const ch of manifest.channels) {\n console.log(` - ${ch.name || ch.id} (${ch.kind})`);\n }\n\n config = {\n agentName: manifest.agent.handle,\n agentHandle: manifest.agent.handle,\n agentId: manifest.agent.id,\n channels: manifest.channels.map((ch) => ({\n id: ch.id,\n name: ch.name,\n kind: ch.kind,\n })),\n };\n\n // --- Step 3: Check vault for config ---\n console.log(\"\\n→ Checking vault for provisioning config...\");\n try {\n const vaultResp = await sdk.listVaultItems() as any;\n const items = vaultResp.items || vaultResp.data || [];\n const configItem = items.find((i: any) => i.name === VAULT_CONFIG_NAME);\n\n if (configItem) {\n console.log(` ✓ Found ${VAULT_CONFIG_NAME} vault item`);\n const revealResp = await sdk.revealItem(configItem.id) as any;\n const fields = revealResp.data?.fields || revealResp.fields || revealResp.data || {};\n\n config.llmApiKey = fields.llm_api_key || fields.openrouter_api_key;\n config.llmBaseUrl = fields.llm_base_url;\n config.llmModel = fields.llm_model;\n config.personality = fields.agent_personality || fields.personality;\n config.fleetRole = fields.fleet_role;\n\n // Detect Anthropic API key from vault — sets provider + base_url automatically\n if (!config.llmApiKey && fields.anthropic_api_key) {\n config.llmApiKey = fields.anthropic_api_key;\n config.llmProvider = 'anthropic';\n if (!config.llmBaseUrl) config.llmBaseUrl = 'https://api.anthropic.com';\n }\n\n if (config.llmApiKey) console.log(` ✓ LLM API key loaded from vault${config.llmProvider === 'anthropic' ? ' (Anthropic)' : ''}`);\n if (config.llmModel) console.log(` ✓ LLM model: ${config.llmModel}`);\n if (config.personality) console.log(` ✓ Personality: ${config.personality.slice(0, 60)}...`);\n if (config.fleetRole) console.log(` ✓ Fleet role: ${config.fleetRole}`);\n } else {\n console.log(\" ! No hivemind-config vault item found\");\n console.log(\" ! Will prompt for LLM API key instead\");\n }\n } catch (err) {\n console.log(` ! Could not read vault: ${(err as Error).message}`);\n }\n } catch (err) {\n console.error(`\\n ✗ Failed to connect to Sesame: ${(err as Error).message}`);\n console.error(\" Check your API key and try again.\");\n process.exit(1);\n } finally {\n sdk.disconnect();\n }\n\n // --- Step 3.5: Try Claude Code OAuth if no API key from vault ---\n if (!config.llmApiKey) {\n const oauthToken = getClaudeCodeOAuthToken();\n if (oauthToken) {\n // Don't store the token — it expires. Configure provider so it's read from keychain at runtime.\n config.llmProvider = 'anthropic';\n config.llmBaseUrl = 'https://api.anthropic.com';\n if (!config.llmModel) config.llmModel = 'claude-sonnet-4-20250514';\n console.log(' ✓ Claude Max subscription detected (via Claude Code OAuth)');\n console.log(' ✓ Configuring provider=anthropic — token read from keychain at runtime');\n }\n }\n\n // --- Step 4: Prompt for anything missing ---\n if (!config.llmApiKey && !config.llmProvider) {\n console.log(\" ! No LLM API key found in vault — set LLM_API_KEY in .env after init\");\n }\n\n // --- Step 5: Write config files ---\n console.log(\"\\n→ Writing configuration...\");\n\n mkdirSync(CONFIG_DIR, { recursive: true });\n mkdirSync(WORKSPACE_DIR, { recursive: true });\n\n // Copy default.toml from installed package if not present\n const defaultToml = resolve(CONFIG_DIR, \"default.toml\");\n if (!existsSync(defaultToml)) {\n // Resolve from the hivemind binary location\n // process.argv[1] may be a symlink, so resolve it first\n const realBin = realpathSync(process.argv[1]);\n // realBin is <pkg>/dist/main.js, so ../config/ gets us to <pkg>/config/\n const packageConfigDir = resolve(dirname(realBin), \"..\", \"config\");\n const packageDefault = resolve(packageConfigDir, \"default.toml\");\n if (existsSync(packageDefault)) {\n copyFileSync(packageDefault, defaultToml);\n console.log(` ✓ ${defaultToml}`);\n // Also copy team charter if available\n const packageCharter = resolve(packageConfigDir, \"TEAM-CHARTER.md\");\n const localCharter = resolve(CONFIG_DIR, \"TEAM-CHARTER.md\");\n if (existsSync(packageCharter) && !existsSync(localCharter)) {\n copyFileSync(packageCharter, localCharter);\n console.log(` ✓ ${localCharter}`);\n }\n } else {\n console.log(` ! default.toml not found in package — you may need to copy it manually`);\n }\n }\n\n // Write workspace identity files\n const soulPath = resolve(WORKSPACE_DIR, \"SOUL.md\");\n if (!existsSync(soulPath)) {\n const personality = config.personality || \"A helpful, capable agent.\";\n writeFileSync(soulPath, `# SOUL.md — Who You Are\n\n${personality}\n\n---\n\n_This file defines your personality and values. Edit it to evolve who you are._\n`);\n console.log(` ✓ ${soulPath}`);\n }\n\n const identityPath = resolve(WORKSPACE_DIR, \"IDENTITY.md\");\n if (!existsSync(identityPath)) {\n writeFileSync(identityPath, `# IDENTITY.md\n\n- **Name:** ${config.agentName}\n- **Handle:** ${config.agentHandle}\n- **Agent ID:** ${config.agentId}\n`);\n console.log(` ✓ ${identityPath}`);\n }\n\n // Write local.toml (overrides)\n const llmLines: string[] = [];\n if (config.llmModel || config.llmProvider || config.llmBaseUrl) {\n llmLines.push('[llm]');\n if (config.llmProvider) llmLines.push(`provider = \"${config.llmProvider}\"`);\n if (config.llmBaseUrl) llmLines.push(`base_url = \"${config.llmBaseUrl}\"`);\n if (config.llmModel) llmLines.push(`model = \"${config.llmModel}\"`);\n } else {\n llmLines.push('# [llm] using defaults');\n }\n\n const localToml = `# Generated by hivemind init — ${new Date().toISOString()}\n# Overrides config/default.toml with agent-specific settings\n\n[agent]\nname = \"${config.agentName}\"\n${config.personality ? `personality = \"${config.personality.replace(/\"/g, '\\\\\"')}\"` : \"# personality = (using default)\"}\nworkspace = \"workspace\"\n\n${llmLines.join('\\n')}\n\n[sesame]\napi_key = \"${sesameApiKey}\"\n`;\n\n writeFileSync(LOCAL_TOML, localToml);\n console.log(` ✓ ${LOCAL_TOML}`);\n\n // Write .env\n const envLines = [\n `# Hivemind Agent — ${config.agentName}`,\n `# Generated by hivemind init — ${new Date().toISOString()}`,\n `SESAME_API_KEY=${sesameApiKey}`,\n ];\n if (config.llmProvider === 'anthropic') {\n envLines.push(`ANTHROPIC_API_KEY=${config.llmApiKey || \"\"}`);\n } else {\n envLines.push(`LLM_API_KEY=${config.llmApiKey || \"\"}`);\n }\n envLines.push(`AGENT_NAME=${config.agentName}`, '');\n const envContent = envLines.join('\\n');\n\n writeFileSync(ENV_FILE, envContent, { mode: 0o600 });\n console.log(` ✓ ${ENV_FILE} (chmod 600)`);\n\n // --- Step 6: Install memory infrastructure ---\n console.log(\"\\n→ Setting up memory system...\");\n mkdirSync(BIN_DIR, { recursive: true });\n mkdirSync(DATA_DIR, { recursive: true });\n\n await installOllama();\n await pullEmbeddingModel();\n await downloadMemoryDaemon();\n\n // --- Step 7: Set up Claude Code session logging ---\n console.log(\"\\n→ Setting up Claude Code session logging...\");\n try {\n const claudeDir = resolve(homedir(), \".claude\");\n const claudeMd = resolve(claudeDir, \"CLAUDE.md\");\n mkdirSync(claudeDir, { recursive: true });\n\n const sessionLoggingInstructions = `# Claude Code — Global Instructions\n\n## Session Logging\n\nBefore completing any session, write a \\`.session-log.json\\` file in the project root with the following structure:\n\n\\`\\`\\`json\n{\n \"timestamp\": \"<ISO-8601>\",\n \"summary\": \"One paragraph describing what was done and why\",\n \"decisions\": [\n {\n \"topic\": \"Short label\",\n \"choice\": \"What was chosen\",\n \"rationale\": \"Why this over alternatives\",\n \"alternatives_considered\": [\"alt1\", \"alt2\"]\n }\n ],\n \"patterns\": [\n {\n \"pattern\": \"Description of a coding pattern or convention\",\n \"scope\": \"project-wide | file-specific | language-general\"\n }\n ],\n \"gotchas\": [\n {\n \"issue\": \"What went wrong or was tricky\",\n \"resolution\": \"How it was fixed or worked around\",\n \"prevention\": \"How to avoid it next time\"\n }\n ],\n \"files_changed\": [\n {\n \"path\": \"relative/path/to/file\",\n \"action\": \"created | modified | deleted\",\n \"purpose\": \"Why this file was changed\"\n }\n ]\n}\n\\`\\`\\`\n\nRules:\n- Always create this file, even for small changes\n- Omit empty arrays (e.g. if no gotchas, leave out the key)\n- Be specific in decisions and gotchas — these help future sessions\n- The file is gitignored and consumed by tooling, not humans\n`;\n\n if (existsSync(claudeMd)) {\n const existing = readFileSync(claudeMd, \"utf-8\");\n if (!existing.includes(\"Session Logging\")) {\n writeFileSync(claudeMd, existing + \"\\n\" + sessionLoggingInstructions);\n console.log(\" ✓ Appended session logging to existing CLAUDE.md\");\n } else {\n console.log(\" ✓ CLAUDE.md already has session logging\");\n }\n } else {\n writeFileSync(claudeMd, sessionLoggingInstructions);\n console.log(` ✓ Created ${claudeMd}`);\n }\n\n // Add .session-log.json to global gitignore\n const globalGitignore = resolve(homedir(), \".gitignore_global\");\n const gitignoreContent = existsSync(globalGitignore) ? readFileSync(globalGitignore, \"utf-8\") : \"\";\n if (!gitignoreContent.includes(\".session-log.json\")) {\n writeFileSync(globalGitignore, gitignoreContent + \"\\n.session-log.json\\n\");\n try {\n execSync(`git config --global core.excludesfile \"${globalGitignore}\"`, { stdio: \"ignore\" });\n } catch {}\n console.log(\" ✓ Added .session-log.json to global gitignore\");\n }\n } catch (err) {\n console.log(` ! Claude Code setup skipped: ${(err as Error).message}`);\n }\n\n // --- Done ---\n console.log(`\n ✓ Hivemind initialized for ${config.agentName}!\n\n To start the agent:\n hivemind start\n\n To install as a service:\n hivemind service install\n\n Agent ID: ${config.agentId}\n Channels: ${config.channels.map((c) => c.name || c.id).join(\", \")}\n Fleet role: ${config.fleetRole || \"standalone\"}\n`);\n}\n\n// --- Memory infrastructure helpers ---\n\nasync function installOllama(): Promise<void> {\n try {\n execSync(\"which ollama\", { stdio: \"ignore\" });\n const version = execSync(\"ollama --version\", { encoding: \"utf-8\" }).trim();\n console.log(` ✓ Ollama already installed (${version})`);\n return;\n } catch {}\n\n console.log(\" → Installing Ollama...\");\n try {\n // Try Homebrew first (macOS)\n execSync(\"which brew\", { stdio: \"ignore\" });\n execSync(\"brew install ollama\", { stdio: \"inherit\" });\n console.log(\" ✓ Ollama installed via Homebrew\");\n } catch {\n // Fall back to official installer\n try {\n execSync(\"curl -fsSL https://ollama.com/install.sh | sh\", { stdio: \"inherit\" });\n console.log(\" ✓ Ollama installed via installer script\");\n } catch (err) {\n console.error(` ✗ Failed to install Ollama: ${(err as Error).message}`);\n console.error(\" ! Install manually: https://ollama.com/download\");\n console.error(\" ! Memory system will not work without Ollama\");\n }\n }\n}\n\nasync function pullEmbeddingModel(): Promise<void> {\n console.log(` → Pulling embedding model (${EMBEDDING_MODEL})...`);\n try {\n // Ensure ollama is running\n try {\n execSync(\"curl -sf http://localhost:11434/api/tags > /dev/null\", { stdio: \"ignore\" });\n } catch {\n // Start ollama serve in background\n console.log(\" → Starting Ollama server...\");\n execSync(\"ollama serve &\", { stdio: \"ignore\", shell: \"/bin/sh\" });\n // Wait for it to be ready\n for (let i = 0; i < 15; i++) {\n try {\n execSync(\"curl -sf http://localhost:11434/api/tags > /dev/null\", { stdio: \"ignore\" });\n break;\n } catch {\n execSync(\"sleep 1\");\n }\n }\n }\n\n execSync(`ollama pull ${EMBEDDING_MODEL}`, { stdio: \"inherit\" });\n console.log(` ✓ ${EMBEDDING_MODEL} model ready`);\n } catch (err) {\n console.error(` ✗ Failed to pull model: ${(err as Error).message}`);\n console.error(` ! Run manually: ollama pull ${EMBEDDING_MODEL}`);\n }\n}\n\nasync function downloadMemoryDaemon(): Promise<void> {\n if (existsSync(MEMORY_BIN)) {\n console.log(` ✓ Memory daemon already installed at ${MEMORY_BIN}`);\n return;\n }\n\n const osArch = arch();\n const osPlatform = platform();\n\n if (osPlatform !== \"darwin\") {\n console.log(` ! Memory daemon pre-built binaries only available for macOS currently`);\n console.log(` ! Build from source: cd packages/memory && cargo build --release`);\n return;\n }\n\n const artifactName = osArch === \"arm64\"\n ? \"hivemind-memory-darwin-arm64\"\n : \"hivemind-memory-darwin-x64\";\n\n console.log(` → Downloading memory daemon (${artifactName})...`);\n try {\n // Get latest version from S3\n const latestJson = execSync(\n `curl -sf \"${RELEASES_BASE_URL}/latest.json\"`,\n { encoding: \"utf-8\" },\n );\n const { version } = JSON.parse(latestJson);\n const url = `${RELEASES_BASE_URL}/v${version}/${artifactName}`;\n\n execSync(\n `curl -fSL -o \"${MEMORY_BIN}\" \"${url}\"`,\n { stdio: \"inherit\" },\n );\n chmodSync(MEMORY_BIN, 0o755);\n console.log(` ✓ Memory daemon installed at ${MEMORY_BIN} (v${version})`);\n } catch (err) {\n console.error(` ✗ Failed to download memory daemon: ${(err as Error).message}`);\n console.error(\" ! Build from source: cd packages/memory && cargo build --release\");\n console.error(` ! Then copy to: ${MEMORY_BIN}`);\n }\n}\n\nfunction printHelp(): void {\n console.log(`hivemind init — Initialize a Hivemind agent from Sesame\n\nUsage: hivemind init [sesame-api-key]\n\nThe API key can also be passed as the first argument.\n\nWhat it does:\n 1. Connects to Sesame and fetches agent identity\n 2. Reads provisioning config from Sesame vault (if available)\n 3. Writes config/local.toml and .env\n 4. Installs Ollama + embedding model for memory\n 5. Downloads pre-built memory daemon binary\n\nOptions:\n -h, --help Show this help\n`);\n}\n"],"mappings":"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","names":["resolve","envContent"]}
@@ -1,7 +1,8 @@
1
1
  // packages/cli/src/commands/upgrade.ts
2
2
  import { execSync } from "child_process";
3
3
  import { resolve } from "path";
4
- import { existsSync, readFileSync, writeFileSync, unlinkSync } from "fs";
4
+ import { existsSync, readFileSync, writeFileSync, unlinkSync, mkdirSync } from "fs";
5
+ import { homedir } from "os";
5
6
  var PACKAGE_NAME = "@sesamespace/hivemind";
6
7
  var STOP_FLAG_FILE = "/tmp/hivemind-agent.stopped";
7
8
  function getCurrentVersion() {
@@ -106,10 +107,69 @@ async function runUpgradeCommand(args) {
106
107
  unlinkSync(STOP_FLAG_FILE);
107
108
  } catch {
108
109
  }
110
+ console.log("\n\u2192 Ensuring Claude Code session logging...");
111
+ try {
112
+ setupClaudeSessionLogging();
113
+ console.log(" \u2713 Claude Code session logging configured");
114
+ } catch (err) {
115
+ console.log(` ! Skipped: ${err.message}`);
116
+ }
109
117
  const newVersion = getCurrentVersion();
110
118
  console.log(`
111
119
  \u2713 Upgrade complete: ${info.current} \u2192 ${newVersion}`);
112
120
  }
121
+ function setupClaudeSessionLogging() {
122
+ const claudeDir = resolve(homedir(), ".claude");
123
+ const claudeMd = resolve(claudeDir, "CLAUDE.md");
124
+ mkdirSync(claudeDir, { recursive: true });
125
+ const marker = "## Session Logging";
126
+ const instructions = `# Claude Code \u2014 Global Instructions
127
+
128
+ ## Session Logging
129
+
130
+ Before completing any session, write a \`.session-log.json\` file in the project root with the following structure:
131
+
132
+ \`\`\`json
133
+ {
134
+ "timestamp": "<ISO-8601>",
135
+ "summary": "One paragraph describing what was done and why",
136
+ "decisions": [
137
+ { "topic": "Short label", "choice": "What was chosen", "rationale": "Why", "alternatives_considered": [] }
138
+ ],
139
+ "patterns": [
140
+ { "pattern": "Description of pattern or convention", "scope": "project-wide | file-specific | language-general" }
141
+ ],
142
+ "gotchas": [
143
+ { "issue": "What went wrong", "resolution": "How it was fixed", "prevention": "How to avoid next time" }
144
+ ],
145
+ "files_changed": [
146
+ { "path": "relative/path", "action": "created | modified | deleted", "purpose": "Why changed" }
147
+ ]
148
+ }
149
+ \`\`\`
150
+
151
+ Rules:
152
+ - Always create this file, even for small changes
153
+ - Omit empty arrays; be specific in decisions and gotchas
154
+ - The file is gitignored and consumed by tooling, not humans
155
+ `;
156
+ if (existsSync(claudeMd)) {
157
+ const existing = readFileSync(claudeMd, "utf-8");
158
+ if (existing.includes(marker)) return;
159
+ writeFileSync(claudeMd, existing + "\n" + instructions);
160
+ } else {
161
+ writeFileSync(claudeMd, instructions);
162
+ }
163
+ const globalGitignore = resolve(homedir(), ".gitignore_global");
164
+ const content = existsSync(globalGitignore) ? readFileSync(globalGitignore, "utf-8") : "";
165
+ if (!content.includes(".session-log.json")) {
166
+ writeFileSync(globalGitignore, content + "\n.session-log.json\n");
167
+ try {
168
+ execSync(`git config --global core.excludesfile "${globalGitignore}"`, { stdio: "ignore" });
169
+ } catch {
170
+ }
171
+ }
172
+ }
113
173
  function printHelp() {
114
174
  console.log(`hivemind upgrade \u2014 Upgrade the Hivemind agent runtime
115
175
 
@@ -134,4 +194,4 @@ Examples:
134
194
  export {
135
195
  runUpgradeCommand
136
196
  };
137
- //# sourceMappingURL=chunk-LJHJGDKY.js.map
197
+ //# sourceMappingURL=chunk-ICSJNKI6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../packages/cli/src/commands/upgrade.ts"],"sourcesContent":["import { execSync } from \"child_process\";\nimport { resolve } from \"path\";\nimport { existsSync, readFileSync, writeFileSync, unlinkSync, mkdirSync } from \"fs\";\nimport { homedir } from \"os\";\n\nconst PACKAGE_NAME = \"@sesamespace/hivemind\";\nconst STOP_FLAG_FILE = \"/tmp/hivemind-agent.stopped\";\n\ninterface VersionInfo {\n current: string;\n latest: string;\n updateAvailable: boolean;\n}\n\nfunction getCurrentVersion(): string {\n try {\n // Check the installed package version\n const output = execSync(`npm ls -g ${PACKAGE_NAME} --json 2>/dev/null`, { encoding: \"utf-8\" });\n const parsed = JSON.parse(output);\n const deps = parsed.dependencies?.[PACKAGE_NAME];\n if (deps?.version) return deps.version;\n } catch {\n // Fallback: read from the package.json in the hivemind dir\n }\n\n const hivemindHome = process.env.HIVEMIND_HOME || resolve(process.env.HOME || \"~\", \"hivemind\");\n const pkgPath = resolve(hivemindHome, \"node_modules\", PACKAGE_NAME, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n return JSON.parse(readFileSync(pkgPath, \"utf-8\")).version;\n } catch {\n // fall through\n }\n }\n\n return \"unknown\";\n}\n\nfunction getLatestVersion(target?: string): string {\n try {\n const tag = target || \"latest\";\n const output = execSync(`npm view ${PACKAGE_NAME}@${tag} version 2>/dev/null`, { encoding: \"utf-8\" });\n return output.trim();\n } catch {\n throw new Error(\"Failed to check npm registry for latest version\");\n }\n}\n\nasync function checkVersion(target?: string): Promise<VersionInfo> {\n const current = getCurrentVersion();\n const latest = target || getLatestVersion();\n return {\n current,\n latest,\n updateAvailable: current !== latest && current !== \"unknown\",\n };\n}\n\nexport async function runUpgradeCommand(args: string[]): Promise<void> {\n const checkOnly = args.includes(\"--check\") || args.includes(\"-c\");\n const force = args.includes(\"--force\") || args.includes(\"-f\");\n const dryRun = args.includes(\"--dry-run\") || args.includes(\"-n\");\n\n // Target version (optional positional arg)\n const targetVersion = args.find((a) => !a.startsWith(\"-\"));\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n printHelp();\n return;\n }\n\n console.log(`\n ╦ ╦╦╦ ╦╔═╗╔╦╗╦╔╗╔╔╦╗\n ╠═╣║╚╗╔╝║╣ ║║║║║║║ ║║\n ╩ ╩╩ ╚╝ ╚═╝╩ ╩╩╝╚╝═╩╝\n Agent Upgrade\n`);\n\n // --- Check versions ---\n console.log(\"→ Checking versions...\");\n const info = await checkVersion(targetVersion);\n console.log(` Current: ${info.current}`);\n console.log(` Latest: ${info.latest}`);\n\n if (!info.updateAvailable && !force) {\n console.log(\"\\n ✓ Already up to date!\");\n return;\n }\n\n if (info.updateAvailable) {\n console.log(`\\n ⬆ Update available: ${info.current} → ${info.latest}`);\n }\n\n if (checkOnly) {\n return;\n }\n\n // --- Perform upgrade ---\n const target = targetVersion ? `${PACKAGE_NAME}@${targetVersion}` : `${PACKAGE_NAME}@latest`;\n\n if (dryRun) {\n console.log(`\\n→ [dry-run] Would run: npm install -g ${target}`);\n console.log(\"→ [dry-run] Would restart the agent service\");\n return;\n }\n\n console.log(`\\n→ Installing ${target}...`);\n try {\n execSync(`npm install -g ${target}`, { stdio: \"inherit\" });\n console.log(\" ✓ Package updated\");\n } catch (err) {\n console.error(` ✗ npm install failed: ${(err as Error).message}`);\n process.exit(1);\n }\n\n // --- Restart agent ---\n // Write stop flag so the watchdog doesn't race us during restart\n writeFileSync(STOP_FLAG_FILE, String(Date.now()));\n\n console.log(\"\\n→ Restarting agent...\");\n try {\n // Try launchctl first (macOS service)\n const plistName = \"com.hivemind.agent\";\n execSync(`launchctl list ${plistName} 2>/dev/null`, { encoding: \"utf-8\" });\n // Service exists — restart it\n execSync(`launchctl kickstart -k gui/$(id -u)/${plistName}`, { stdio: \"inherit\" });\n console.log(\" ✓ Agent restarted via launchd\");\n } catch {\n // No launchd service — try finding and restarting the process\n try {\n execSync(\"pkill -f 'hivemind start'\", { stdio: \"inherit\" });\n console.log(\" ✓ Old process killed\");\n console.log(\" ! Start the agent manually: hivemind start\");\n } catch {\n console.log(\" ! No running agent found — start manually: hivemind start\");\n }\n }\n\n // Remove stop flag so watchdog resumes monitoring\n try { unlinkSync(STOP_FLAG_FILE); } catch {}\n\n // --- Post-upgrade: ensure Claude Code session logging is set up ---\n console.log(\"\\n→ Ensuring Claude Code session logging...\");\n try {\n setupClaudeSessionLogging();\n console.log(\" ✓ Claude Code session logging configured\");\n } catch (err) {\n console.log(` ! Skipped: ${(err as Error).message}`);\n }\n\n // --- Verify ---\n const newVersion = getCurrentVersion();\n console.log(`\\n ✓ Upgrade complete: ${info.current} → ${newVersion}`);\n}\n\nfunction setupClaudeSessionLogging(): void {\n const claudeDir = resolve(homedir(), \".claude\");\n const claudeMd = resolve(claudeDir, \"CLAUDE.md\");\n mkdirSync(claudeDir, { recursive: true });\n\n const marker = \"## Session Logging\";\n const instructions = `# Claude Code — Global Instructions\n\n## Session Logging\n\nBefore completing any session, write a \\`.session-log.json\\` file in the project root with the following structure:\n\n\\`\\`\\`json\n{\n \"timestamp\": \"<ISO-8601>\",\n \"summary\": \"One paragraph describing what was done and why\",\n \"decisions\": [\n { \"topic\": \"Short label\", \"choice\": \"What was chosen\", \"rationale\": \"Why\", \"alternatives_considered\": [] }\n ],\n \"patterns\": [\n { \"pattern\": \"Description of pattern or convention\", \"scope\": \"project-wide | file-specific | language-general\" }\n ],\n \"gotchas\": [\n { \"issue\": \"What went wrong\", \"resolution\": \"How it was fixed\", \"prevention\": \"How to avoid next time\" }\n ],\n \"files_changed\": [\n { \"path\": \"relative/path\", \"action\": \"created | modified | deleted\", \"purpose\": \"Why changed\" }\n ]\n}\n\\`\\`\\`\n\nRules:\n- Always create this file, even for small changes\n- Omit empty arrays; be specific in decisions and gotchas\n- The file is gitignored and consumed by tooling, not humans\n`;\n\n if (existsSync(claudeMd)) {\n const existing = readFileSync(claudeMd, \"utf-8\");\n if (existing.includes(marker)) return; // already set up\n writeFileSync(claudeMd, existing + \"\\n\" + instructions);\n } else {\n writeFileSync(claudeMd, instructions);\n }\n\n // Global gitignore\n const globalGitignore = resolve(homedir(), \".gitignore_global\");\n const content = existsSync(globalGitignore) ? readFileSync(globalGitignore, \"utf-8\") : \"\";\n if (!content.includes(\".session-log.json\")) {\n writeFileSync(globalGitignore, content + \"\\n.session-log.json\\n\");\n try { execSync(`git config --global core.excludesfile \"${globalGitignore}\"`, { stdio: \"ignore\" }); } catch {}\n }\n}\n\nfunction printHelp(): void {\n console.log(`hivemind upgrade — Upgrade the Hivemind agent runtime\n\nUsage: hivemind upgrade [version] [options]\n\nArguments:\n version Target version (default: latest)\n\nOptions:\n -c, --check Check for updates only (don't install)\n -f, --force Force reinstall even if up to date\n -n, --dry-run Show what would happen without doing it\n -h, --help Show this help\n\nExamples:\n hivemind upgrade # Upgrade to latest\n hivemind upgrade 0.3.0 # Upgrade to specific version\n hivemind upgrade --check # Just check if update available\n`);\n}\n"],"mappings":"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","names":[]}
@@ -7,7 +7,7 @@ import {
7
7
  SesameClient2 as SesameClient,
8
8
  WORKER_ROUTES,
9
9
  createLogger
10
- } from "./chunk-ZM7RK5YV.js";
10
+ } from "./chunk-M3A2WRXM.js";
11
11
 
12
12
  // packages/runtime/src/watchdog.ts
13
13
  import { execSync } from "child_process";
@@ -1095,4 +1095,4 @@ export {
1095
1095
  WorkerMemorySync,
1096
1096
  PrimaryMemorySync
1097
1097
  };
1098
- //# sourceMappingURL=chunk-4Y7A25UG.js.map
1098
+ //# sourceMappingURL=chunk-IXBIAX76.js.map