@sesamespace/hivemind 0.5.4 → 0.5.5
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/.github/workflows/memory-release.yml +89 -0
- package/config/default.toml +12 -0
- package/data/lancedb/contexts.lance/_transactions/0-c4755ab9-b604-4d90-851f-0491f3cbcbce.txn +2 -0
- package/data/lancedb/contexts.lance/_versions/1.manifest +0 -0
- package/data/lancedb/episode_access.lance/_transactions/0-407a6366-0dca-490a-868b-ea63bee3b40c.txn +2 -0
- package/data/lancedb/episode_access.lance/_versions/1.manifest +0 -0
- package/data/lancedb/episode_cooccurrence.lance/_transactions/0-0e103c7f-29d7-4f09-8100-505c076f01ae.txn +1 -0
- package/data/lancedb/episode_cooccurrence.lance/_versions/1.manifest +0 -0
- package/data/lancedb/episodes.lance/_transactions/0-e678cbac-792b-4a9d-a457-17b0d4d23607.txn +1 -0
- package/data/lancedb/episodes.lance/_versions/1.manifest +0 -0
- package/data/lancedb/l3_knowledge.lance/_transactions/0-cdb3561f-3a59-4e15-bded-e93c5f9a50e3.txn +1 -0
- package/data/lancedb/l3_knowledge.lance/_versions/1.manifest +0 -0
- package/data/lancedb/tasks.lance/_transactions/0-d1cf10ec-1eb8-48b4-bbbe-34b3a1083664.txn +4 -0
- package/data/lancedb/tasks.lance/_versions/1.manifest +0 -0
- package/dist/{chunk-MHDLSAJ3.js → chunk-2OIRJFI5.js} +14 -30
- package/dist/chunk-2OIRJFI5.js.map +1 -0
- package/dist/chunk-7D4SUZUM.js +38 -0
- package/dist/chunk-7D4SUZUM.js.map +1 -0
- package/dist/chunk-LRK64BAK.js +3601 -0
- package/dist/chunk-LRK64BAK.js.map +1 -0
- package/dist/chunk-MBS5A6BZ.js +132 -0
- package/dist/chunk-MBS5A6BZ.js.map +1 -0
- package/dist/{chunk-LNV373IF.js → chunk-OQ272HKA.js} +3 -28
- package/dist/chunk-OQ272HKA.js.map +1 -0
- package/dist/{chunk-CGSXJVSS.js → chunk-RXCV57H3.js} +2 -2
- package/dist/{chunk-S3RVZBPZ.js → chunk-YEOAEJ62.js} +2 -2
- package/dist/commands/fleet.js +4 -3
- package/dist/commands/init.js +2 -1
- package/dist/commands/service.js +2 -1
- package/dist/commands/start.js +4 -3
- package/dist/commands/upgrade.js +1 -0
- package/dist/index.js +3 -2
- package/dist/main.js +7 -6
- package/dist/main.js.map +1 -1
- package/dist/start.js +2 -1
- package/dist/start.js.map +1 -1
- package/package.json +1 -1
- package/PLANNING.md +0 -383
- package/TASKS.md +0 -60
- package/dist/chunk-LNV373IF.js.map +0 -1
- package/dist/chunk-MHDLSAJ3.js.map +0 -1
- package/dist/chunk-PPQGQHXJ.js +0 -151
- package/dist/chunk-PPQGQHXJ.js.map +0 -1
- package/dist/chunk-YHRGEWAZ.js +0 -2326
- package/dist/chunk-YHRGEWAZ.js.map +0 -1
- package/install.sh +0 -120
- package/npm-package.json +0 -26
- package/packages/cli/package.json +0 -23
- package/packages/cli/src/commands/fleet.ts +0 -206
- package/packages/cli/src/commands/init.ts +0 -252
- package/packages/cli/src/commands/service.ts +0 -159
- package/packages/cli/src/commands/start.ts +0 -78
- package/packages/cli/src/commands/upgrade.ts +0 -158
- package/packages/cli/src/main.ts +0 -64
- package/packages/cli/tsconfig.json +0 -8
- package/packages/memory/Cargo.lock +0 -6480
- package/packages/memory/Cargo.toml +0 -21
- package/packages/memory/src/context.rs +0 -179
- package/packages/memory/src/embeddings.rs +0 -51
- package/packages/memory/src/main.rs +0 -626
- package/packages/memory/src/promotion.rs +0 -637
- package/packages/memory/src/scoring.rs +0 -131
- package/packages/memory/src/store.rs +0 -460
- package/packages/memory/src/tasks.rs +0 -321
- package/packages/runtime/package.json +0 -24
- package/packages/runtime/src/__tests__/fleet-integration.test.ts +0 -235
- package/packages/runtime/src/__tests__/fleet.test.ts +0 -207
- package/packages/runtime/src/__tests__/integration.test.ts +0 -434
- package/packages/runtime/src/agent.ts +0 -255
- package/packages/runtime/src/config.ts +0 -130
- package/packages/runtime/src/context.ts +0 -192
- package/packages/runtime/src/fleet/fleet-manager.ts +0 -399
- package/packages/runtime/src/fleet/memory-sync.ts +0 -362
- package/packages/runtime/src/fleet/primary-client.ts +0 -285
- package/packages/runtime/src/fleet/worker-protocol.ts +0 -158
- package/packages/runtime/src/fleet/worker-server.ts +0 -246
- package/packages/runtime/src/index.ts +0 -57
- package/packages/runtime/src/llm-client.ts +0 -65
- package/packages/runtime/src/memory-client.ts +0 -309
- package/packages/runtime/src/pipeline.ts +0 -187
- package/packages/runtime/src/prompt.ts +0 -173
- package/packages/runtime/src/sesame.ts +0 -226
- package/packages/runtime/src/start.ts +0 -20
- package/packages/runtime/src/task-engine.ts +0 -113
- package/packages/runtime/src/worker.ts +0 -339
- package/packages/runtime/tsconfig.json +0 -8
- package/pnpm-workspace.yaml +0 -2
- package/run-aidan.sh +0 -23
- package/scripts/bootstrap.sh +0 -196
- package/scripts/build-npm.sh +0 -92
- package/scripts/com.hivemind.agent.plist +0 -44
- package/scripts/com.hivemind.memory.plist +0 -31
- package/tsconfig.json +0 -22
- package/tsup.config.ts +0 -27
- /package/dist/{chunk-CGSXJVSS.js.map → chunk-RXCV57H3.js.map} +0 -0
- /package/dist/{chunk-S3RVZBPZ.js.map → chunk-YEOAEJ62.js.map} +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
name: Build Memory Daemon
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
tag:
|
|
10
|
+
description: "Release tag (e.g. v0.5.5)"
|
|
11
|
+
required: false
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
build:
|
|
15
|
+
strategy:
|
|
16
|
+
matrix:
|
|
17
|
+
include:
|
|
18
|
+
- target: aarch64-apple-darwin
|
|
19
|
+
os: macos-14
|
|
20
|
+
artifact: hivemind-memory-darwin-arm64
|
|
21
|
+
- target: x86_64-apple-darwin
|
|
22
|
+
os: macos-13
|
|
23
|
+
artifact: hivemind-memory-darwin-x64
|
|
24
|
+
|
|
25
|
+
runs-on: ${{ matrix.os }}
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
|
+
|
|
30
|
+
- name: Install Rust
|
|
31
|
+
uses: dtolnay/rust-toolchain@stable
|
|
32
|
+
with:
|
|
33
|
+
targets: ${{ matrix.target }}
|
|
34
|
+
|
|
35
|
+
- name: Cache cargo
|
|
36
|
+
uses: actions/cache@v4
|
|
37
|
+
with:
|
|
38
|
+
path: |
|
|
39
|
+
~/.cargo/registry
|
|
40
|
+
~/.cargo/git
|
|
41
|
+
packages/memory/target
|
|
42
|
+
key: ${{ matrix.target }}-cargo-${{ hashFiles('packages/memory/Cargo.lock') }}
|
|
43
|
+
restore-keys: ${{ matrix.target }}-cargo-
|
|
44
|
+
|
|
45
|
+
- name: Build
|
|
46
|
+
working-directory: packages/memory
|
|
47
|
+
run: |
|
|
48
|
+
cargo build --release --target ${{ matrix.target }}
|
|
49
|
+
cp target/${{ matrix.target }}/release/hivemind-memory ${{ matrix.artifact }}
|
|
50
|
+
chmod +x ${{ matrix.artifact }}
|
|
51
|
+
|
|
52
|
+
- name: Upload artifact
|
|
53
|
+
uses: actions/upload-artifact@v4
|
|
54
|
+
with:
|
|
55
|
+
name: ${{ matrix.artifact }}
|
|
56
|
+
path: packages/memory/${{ matrix.artifact }}
|
|
57
|
+
|
|
58
|
+
release:
|
|
59
|
+
needs: build
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
permissions:
|
|
62
|
+
contents: write
|
|
63
|
+
|
|
64
|
+
steps:
|
|
65
|
+
- name: Download artifacts
|
|
66
|
+
uses: actions/download-artifact@v4
|
|
67
|
+
with:
|
|
68
|
+
path: artifacts
|
|
69
|
+
|
|
70
|
+
- name: Determine tag
|
|
71
|
+
id: tag
|
|
72
|
+
run: |
|
|
73
|
+
if [ "${{ github.event_name }}" = "push" ]; then
|
|
74
|
+
echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
|
|
75
|
+
elif [ -n "${{ github.event.inputs.tag }}" ]; then
|
|
76
|
+
echo "tag=${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT
|
|
77
|
+
else
|
|
78
|
+
echo "tag=dev-$(date +%Y%m%d-%H%M%S)" >> $GITHUB_OUTPUT
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
- name: Create release
|
|
82
|
+
uses: softprops/action-gh-release@v2
|
|
83
|
+
with:
|
|
84
|
+
tag_name: ${{ steps.tag.outputs.tag }}
|
|
85
|
+
name: "Hivemind ${{ steps.tag.outputs.tag }}"
|
|
86
|
+
files: |
|
|
87
|
+
artifacts/hivemind-memory-darwin-arm64/hivemind-memory-darwin-arm64
|
|
88
|
+
artifacts/hivemind-memory-darwin-x64/hivemind-memory-darwin-x64
|
|
89
|
+
generate_release_notes: true
|
package/config/default.toml
CHANGED
|
@@ -28,6 +28,18 @@ api_key = "" # Set via SESAME_API_KEY env var or hivemind setup
|
|
|
28
28
|
help = "hivemind-help" # Peer support and knowledge transfer
|
|
29
29
|
# Add more default channels here as needed
|
|
30
30
|
|
|
31
|
+
# Watchdog (sentinel) — monitors agent health and handles restarts/upgrades
|
|
32
|
+
[sentinel]
|
|
33
|
+
poll_interval_ms = 5000
|
|
34
|
+
health_timeout_ms = 3000
|
|
35
|
+
max_restart_attempts = 5
|
|
36
|
+
backoff_base_ms = 5000
|
|
37
|
+
backoff_max_ms = 300000
|
|
38
|
+
agent_startup_grace_ms = 15000
|
|
39
|
+
health_port = 9484
|
|
40
|
+
pid_file = "/tmp/hivemind-agent.pid"
|
|
41
|
+
stop_flag_file = "/tmp/hivemind-agent.stopped"
|
|
42
|
+
|
|
31
43
|
# Worker mode — set enabled = true to run as a fleet worker
|
|
32
44
|
[worker]
|
|
33
45
|
enabled = false
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$0e103c7f-29d7-4f09-8100-505c076f01ae��) episode_a ���������*string8Zdefault+ episode_b ���������*string8Zdefault'count ���������*uint648Zdefault
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$e678cbac-792b-4a9d-a457-17b0d4d23607��"id ���������*string8Zdefault+ timestamp ���������*string8Zdefault.context_name ���������*string8Zdefault&role ���������*string8Zdefault)content ���������*string8Zdefault'layer ���������*string8Zdefault> embedding ���������*fixed_size_list:float:7688Zdefault
|
|
Binary file
|
package/data/lancedb/l3_knowledge.lance/_transactions/0-cdb3561f-3a59-4e15-bded-e93c5f9a50e3.txn
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$cdb3561f-3a59-4e15-bded-e93c5f9a50e3��"id ���������*string8Zdefault3source_episode_id ���������*string8Zdefault.context_name ���������*string8Zdefault)content ���������*string8Zdefault-promoted_at ���������*string8Zdefault.access_count ���������*uint648Zdefault4connection_density ���������*uint648Zdefault
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
$d1cf10ec-1eb8-48b4-bbbe-34b3a1083664��"id ���������*string8Zdefault.context_name ���������*string8Zdefault'title ���������*string8Zdefault-description ���������*string8Zdefault(status ���������*string8Zdefault,
|
|
2
|
+
blocked_by ���������*string8Zdefault,
|
|
3
|
+
created_at ���������*string8Zdefault,
|
|
4
|
+
updated_at ���������*string8Zdefault
|
|
Binary file
|
|
@@ -3,11 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-GPI4RU7N.js";
|
|
4
4
|
|
|
5
5
|
// packages/cli/src/commands/init.ts
|
|
6
|
-
import { resolve
|
|
7
|
-
import { existsSync, writeFileSync, mkdirSync
|
|
6
|
+
import { resolve } from "path";
|
|
7
|
+
import { existsSync, writeFileSync, mkdirSync } from "fs";
|
|
8
8
|
import { createInterface } from "readline";
|
|
9
|
-
|
|
10
|
-
var HIVEMIND_DIR = resolve(process.env.HIVEMIND_HOME || resolve(homedir(), "hivemind"));
|
|
9
|
+
var HIVEMIND_DIR = resolve(process.env.HIVEMIND_HOME || ".");
|
|
11
10
|
var CONFIG_DIR = resolve(HIVEMIND_DIR, "config");
|
|
12
11
|
var WORKSPACE_DIR = resolve(HIVEMIND_DIR, "workspace");
|
|
13
12
|
var ENV_FILE = resolve(HIVEMIND_DIR, ".env");
|
|
@@ -100,30 +99,18 @@ async function runInitCommand(args) {
|
|
|
100
99
|
} finally {
|
|
101
100
|
sdk.disconnect();
|
|
102
101
|
}
|
|
103
|
-
if (!config.llmApiKey) {
|
|
102
|
+
if (!config.llmApiKey && !nonInteractive) {
|
|
103
|
+
config.llmApiKey = await prompt("\n OpenRouter API key: ");
|
|
104
|
+
} else if (!config.llmApiKey) {
|
|
104
105
|
console.log(" ! No LLM API key found in vault \u2014 set LLM_API_KEY in .env after init");
|
|
105
106
|
}
|
|
107
|
+
if (!nonInteractive) {
|
|
108
|
+
const nameOverride = await prompt(` Agent name [${config.agentName}]: `);
|
|
109
|
+
if (nameOverride) config.agentName = nameOverride;
|
|
110
|
+
}
|
|
106
111
|
console.log("\n\u2192 Writing configuration...");
|
|
107
112
|
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
108
113
|
mkdirSync(WORKSPACE_DIR, { recursive: true });
|
|
109
|
-
const defaultToml = resolve(CONFIG_DIR, "default.toml");
|
|
110
|
-
if (!existsSync(defaultToml)) {
|
|
111
|
-
const realBin = realpathSync(process.argv[1]);
|
|
112
|
-
const packageConfigDir = resolve(dirname(realBin), "..", "config");
|
|
113
|
-
const packageDefault = resolve(packageConfigDir, "default.toml");
|
|
114
|
-
if (existsSync(packageDefault)) {
|
|
115
|
-
copyFileSync(packageDefault, defaultToml);
|
|
116
|
-
console.log(` \u2713 ${defaultToml}`);
|
|
117
|
-
const packageCharter = resolve(packageConfigDir, "TEAM-CHARTER.md");
|
|
118
|
-
const localCharter = resolve(CONFIG_DIR, "TEAM-CHARTER.md");
|
|
119
|
-
if (existsSync(packageCharter) && !existsSync(localCharter)) {
|
|
120
|
-
copyFileSync(packageCharter, localCharter);
|
|
121
|
-
console.log(` \u2713 ${localCharter}`);
|
|
122
|
-
}
|
|
123
|
-
} else {
|
|
124
|
-
console.log(` ! default.toml not found in package \u2014 you may need to copy it manually`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
114
|
const soulPath = resolve(WORKSPACE_DIR, "SOUL.md");
|
|
128
115
|
if (!existsSync(soulPath)) {
|
|
129
116
|
const personality = config.personality || "A helpful, capable agent.";
|
|
@@ -158,9 +145,6 @@ workspace = "workspace"
|
|
|
158
145
|
${config.llmModel ? `[llm]
|
|
159
146
|
model = "${config.llmModel}"` : "# [llm] using defaults"}
|
|
160
147
|
${config.llmBaseUrl ? `# base_url = "${config.llmBaseUrl}"` : ""}
|
|
161
|
-
|
|
162
|
-
[sesame]
|
|
163
|
-
api_key = "${sesameApiKey}"
|
|
164
148
|
`;
|
|
165
149
|
writeFileSync(LOCAL_TOML, localToml);
|
|
166
150
|
console.log(` \u2713 ${LOCAL_TOML}`);
|
|
@@ -176,10 +160,10 @@ AGENT_NAME=${config.agentName}
|
|
|
176
160
|
\u2713 Hivemind initialized for ${config.agentName}!
|
|
177
161
|
|
|
178
162
|
To start the agent:
|
|
179
|
-
|
|
163
|
+
./start.sh
|
|
180
164
|
|
|
181
|
-
To
|
|
182
|
-
hivemind
|
|
165
|
+
To start in background:
|
|
166
|
+
nohup ./start.sh > /tmp/hivemind.log 2>&1 &
|
|
183
167
|
|
|
184
168
|
Agent ID: ${config.agentId}
|
|
185
169
|
Channels: ${config.channels.map((c) => c.name || c.id).join(", ")}
|
|
@@ -207,4 +191,4 @@ Options:
|
|
|
207
191
|
export {
|
|
208
192
|
runInitCommand
|
|
209
193
|
};
|
|
210
|
-
//# sourceMappingURL=chunk-
|
|
194
|
+
//# sourceMappingURL=chunk-2OIRJFI5.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 } from \"fs\";\nimport { createInterface } from \"readline\";\nimport { SesameClient } from \"@sesamespace/sdk\";\n\nconst HIVEMIND_DIR = resolve(process.env.HIVEMIND_HOME || \".\");\nconst CONFIG_DIR = resolve(HIVEMIND_DIR, \"config\");\nconst WORKSPACE_DIR = resolve(HIVEMIND_DIR, \"workspace\");\nconst ENV_FILE = resolve(HIVEMIND_DIR, \".env\");\nconst LOCAL_TOML = resolve(CONFIG_DIR, \"local.toml\");\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 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 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.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 if (config.llmApiKey) console.log(\" ✓ LLM API key loaded from vault\");\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 4: Prompt for anything missing (skip in non-interactive mode) ---\n if (!config.llmApiKey && !nonInteractive) {\n config.llmApiKey = await prompt(\"\\n OpenRouter API key: \");\n } else if (!config.llmApiKey) {\n console.log(\" ! No LLM API key found in vault — set LLM_API_KEY in .env after init\");\n }\n\n if (!nonInteractive) {\n const nameOverride = await prompt(` Agent name [${config.agentName}]: `);\n if (nameOverride) config.agentName = nameOverride;\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 // 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 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${config.llmModel ? `[llm]\\nmodel = \"${config.llmModel}\"` : \"# [llm] using defaults\"}\n${config.llmBaseUrl ? `# base_url = \"${config.llmBaseUrl}\"` : \"\"}\n`;\n\n writeFileSync(LOCAL_TOML, localToml);\n console.log(` ✓ ${LOCAL_TOML}`);\n\n // Write .env\n const envContent = `# Hivemind Agent — ${config.agentName}\n# Generated by hivemind init — ${new Date().toISOString()}\nSESAME_API_KEY=${sesameApiKey}\nLLM_API_KEY=${config.llmApiKey || \"\"}\nAGENT_NAME=${config.agentName}\n`;\n\n writeFileSync(ENV_FILE, envContent, { mode: 0o600 });\n console.log(` ✓ ${ENV_FILE} (chmod 600)`);\n\n // --- Done ---\n console.log(`\n ✓ Hivemind initialized for ${config.agentName}!\n\n To start the agent:\n ./start.sh\n\n To start in background:\n nohup ./start.sh > /tmp/hivemind.log 2>&1 &\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\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. Prompts for any missing configuration\n 4. Writes config/local.toml and .env\n\nOptions:\n -h, --help Show this help\n`);\n}\n"],"mappings":"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","names":["resolve"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
8
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
9
|
+
}) : x)(function(x) {
|
|
10
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
11
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
12
|
+
});
|
|
13
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
14
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
15
|
+
};
|
|
16
|
+
var __copyProps = (to, from, except, desc) => {
|
|
17
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
18
|
+
for (let key of __getOwnPropNames(from))
|
|
19
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
20
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
21
|
+
}
|
|
22
|
+
return to;
|
|
23
|
+
};
|
|
24
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
25
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
26
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
27
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
28
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
29
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
30
|
+
mod
|
|
31
|
+
));
|
|
32
|
+
|
|
33
|
+
export {
|
|
34
|
+
__require,
|
|
35
|
+
__commonJS,
|
|
36
|
+
__toESM
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=chunk-7D4SUZUM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|