habi-agent 0.1.4 → 0.1.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/dist/cli.d.ts CHANGED
@@ -1,12 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * HABI Agent CLI
3
+ * HABI Agent CLI v0.1.5
4
+ *
4
5
  * Usage:
5
- * habi-agent start start the local identity daemon
6
- * habi-agent status — check if agent is running
7
- * habi-agent identity — print hardware identity
8
- * habi-agent init — generate a Project Context File
9
- * habi-agent verify — verify current session
6
+ * npx habi-agent@latest start --key <key> --name <name>
7
+ * Installs HABI as a persistent background service, registers the device,
8
+ * injects Claude Code MCP config, and exits. Terminal can be closed.
9
+ *
10
+ * habi-agent stop Stop the background service
11
+ * habi-agent restart Restart the background service
12
+ * habi-agent uninstall Remove the background service
13
+ * habi-agent status Show service + agent health
14
+ * habi-agent identity Print hardware fingerprint
15
+ * habi-agent logs Tail the agent log file
10
16
  */
11
17
  export {};
12
18
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG"}
package/dist/cli.js CHANGED
@@ -1,13 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
  /**
4
- * HABI Agent CLI
4
+ * HABI Agent CLI v0.1.5
5
+ *
5
6
  * Usage:
6
- * habi-agent start start the local identity daemon
7
- * habi-agent status — check if agent is running
8
- * habi-agent identity — print hardware identity
9
- * habi-agent init — generate a Project Context File
10
- * habi-agent verify — verify current session
7
+ * npx habi-agent@latest start --key <key> --name <name>
8
+ * Installs HABI as a persistent background service, registers the device,
9
+ * injects Claude Code MCP config, and exits. Terminal can be closed.
10
+ *
11
+ * habi-agent stop Stop the background service
12
+ * habi-agent restart Restart the background service
13
+ * habi-agent uninstall Remove the background service
14
+ * habi-agent status Show service + agent health
15
+ * habi-agent identity Print hardware fingerprint
16
+ * habi-agent logs Tail the agent log file
11
17
  */
12
18
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
19
  if (k2 === undefined) k2 = k;
@@ -43,17 +49,21 @@ var __importStar = (this && this.__importStar) || (function () {
43
49
  };
44
50
  })();
45
51
  Object.defineProperty(exports, "__esModule", { value: true });
46
- const server_1 = require("./server");
47
- const hardware_1 = require("./hardware");
48
- const context_1 = require("./context");
49
- const cloud_1 = require("./cloud");
50
52
  const fs = __importStar(require("fs"));
51
53
  const path = __importStar(require("path"));
52
54
  const http = __importStar(require("http"));
53
55
  const os = __importStar(require("os"));
56
+ const readline = __importStar(require("readline"));
57
+ const child_process_1 = require("child_process");
58
+ const hardware_1 = require("./hardware");
59
+ const cloud_1 = require("./cloud");
60
+ const service_1 = require("./service");
54
61
  const AGENT_PORT = 7432;
55
- const command = process.argv[2] || 'start';
56
- // Parse --key and --name arguments (works on all platforms)
62
+ const CONFIG_DIR = path.join(os.homedir(), '.habi');
63
+ const LOG_PATH = path.join(CONFIG_DIR, 'habi.log');
64
+ const HABI_VERSION = '0.1.5';
65
+ // ── Arg parsing ─────────────────────────────────────────────────────────────
66
+ const command = process.argv[2] || 'help';
57
67
  const keyArgIdx = process.argv.indexOf('--key');
58
68
  if (keyArgIdx !== -1 && process.argv[keyArgIdx + 1]) {
59
69
  process.env.HABI_KEY = process.argv[keyArgIdx + 1];
@@ -62,7 +72,7 @@ const nameArgIdx = process.argv.indexOf('--name');
62
72
  if (nameArgIdx !== -1 && process.argv[nameArgIdx + 1]) {
63
73
  process.env.HABI_DEVICE_NAME = process.argv[nameArgIdx + 1];
64
74
  }
65
- // ── Utility: ping the running agent ────────────────────────────────────────
75
+ // ── Utility ──────────────────────────────────────────────────────────────────
66
76
  function pingAgent(p = '/health') {
67
77
  return new Promise((resolve, reject) => {
68
78
  const req = http.get({ host: '127.0.0.1', port: AGENT_PORT, path: p }, (res) => {
@@ -73,7 +83,7 @@ function pingAgent(p = '/health') {
73
83
  resolve(JSON.parse(body));
74
84
  }
75
85
  catch {
76
- reject(new Error('Invalid JSON from agent'));
86
+ reject(new Error('Invalid JSON'));
77
87
  }
78
88
  });
79
89
  });
@@ -81,224 +91,309 @@ function pingAgent(p = '/health') {
81
91
  req.setTimeout(2000, () => { req.destroy(); reject(new Error('timeout')); });
82
92
  });
83
93
  }
84
- async function cmdStart() {
85
- console.log('\n┌─────────────────────────────────────────────┐');
86
- console.log('│ HABI Local Identity Agent v0.1.0 │');
87
- console.log('│ On Spot Solutions LLC hardware-first AI │');
88
- console.log('└─────────────────────────────────────────────┘\n');
89
- // Check if already running
94
+ function ask(question) {
95
+ return new Promise((resolve) => {
96
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
97
+ rl.question(question, (ans) => { rl.close(); resolve(ans.trim()); });
98
+ });
99
+ }
100
+ function banner() {
101
+ console.log(`
102
+ ┌─────────────────────────────────────────────────┐
103
+ │ HABI Local Identity Agent v${HABI_VERSION} │
104
+ │ On Spot Solutions LLC — hardware-first AI │
105
+ │ imhabi.com │
106
+ └─────────────────────────────────────────────────┘`);
107
+ }
108
+ // ── Claude Code detection & MCP injection ───────────────────────────────────
109
+ function claudeCodePaths() {
110
+ const home = os.homedir();
111
+ return [
112
+ path.join(home, '.claude', 'settings.json'),
113
+ path.join(home, 'AppData', 'Roaming', 'Claude', 'settings.json'), // Windows
114
+ path.join(home, 'Library', 'Application Support', 'Claude', 'settings.json'), // macOS alt
115
+ ];
116
+ }
117
+ function findClaudeSettings() {
118
+ return claudeCodePaths().find(p => fs.existsSync(p)) || null;
119
+ }
120
+ function isClaudeCodeInstalled() {
90
121
  try {
91
- await pingAgent();
92
- console.log('⚠ HABI agent is already running on port 7432.');
93
- console.log(' Run: habi-agent status to check it.');
94
- process.exit(0);
122
+ const r = (0, child_process_1.spawnSync)(os.platform() === 'win32' ? 'where' : 'which', ['claude'], { encoding: 'utf8' });
123
+ return r.status === 0 && r.stdout.trim().length > 0;
95
124
  }
96
125
  catch {
97
- // Not running — proceed
126
+ return false;
98
127
  }
99
- const server = new server_1.HabiLocalServer();
100
- // Graceful shutdown
101
- const shutdown = () => {
102
- console.log('\n[HABI] Shutting down agent...');
103
- server.stop();
104
- process.exit(0);
128
+ }
129
+ function injectMcpConfig(habiKey) {
130
+ const settingsPath = findClaudeSettings() || claudeCodePaths()[0];
131
+ const settingsDir = path.dirname(settingsPath);
132
+ if (!fs.existsSync(settingsDir))
133
+ fs.mkdirSync(settingsDir, { recursive: true });
134
+ let existing = {};
135
+ if (fs.existsSync(settingsPath)) {
136
+ try {
137
+ existing = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
138
+ }
139
+ catch {
140
+ existing = {};
141
+ }
142
+ }
143
+ const mcpServers = (existing.mcpServers || {});
144
+ // Inject or update HABI entry
145
+ mcpServers['habi'] = {
146
+ type: 'url',
147
+ url: 'https://dokcixjitwihtbdlkbdb.supabase.co/functions/v1/habi-mcp',
148
+ headers: { 'x-habi-key': habiKey },
105
149
  };
106
- process.on('SIGINT', shutdown);
107
- process.on('SIGTERM', shutdown);
150
+ existing.mcpServers = mcpServers;
151
+ fs.writeFileSync(settingsPath, JSON.stringify(existing, null, 2));
152
+ return { injected: true, path: settingsPath };
153
+ }
154
+ // ── COMMANDS ─────────────────────────────────────────────────────────────────
155
+ async function cmdStart() {
156
+ banner();
157
+ const habiKey = process.env.HABI_KEY || '';
158
+ const deviceName = process.env.HABI_DEVICE_NAME || os.hostname();
159
+ if (!habiKey) {
160
+ console.error('\n✗ --key is required. Get your key from imhabi.com\n');
161
+ process.exit(1);
162
+ }
163
+ console.log('\n[HABI] Reading hardware identity...');
164
+ const hw = (0, hardware_1.readHardwareIdentity)();
165
+ console.log(`[HABI] Hardware: ${hw.fingerprint} (${hw.type}) on ${hw.iface}`);
166
+ // ── 1. Register device ───────────────────────────────────────────────────
167
+ console.log(`[HABI] Registering "${deviceName}" with imhabi.com...`);
168
+ process.env.HABI_KEY = habiKey;
169
+ process.env.HABI_DEVICE_NAME = deviceName;
170
+ const cloudState = await (0, cloud_1.registerDevice)({
171
+ friendlyName: deviceName,
172
+ hardwareFingerprint: hw.fingerprint,
173
+ fingerprintType: hw.type,
174
+ agentVersion: HABI_VERSION,
175
+ osPlatform: os.platform(),
176
+ });
177
+ if (cloudState) {
178
+ console.log(`[HABI] ✓ "${deviceName}" registered — visible on imhabi.com`);
179
+ }
180
+ else {
181
+ console.error('[HABI] ✗ Registration failed — check your key and internet connection');
182
+ process.exit(1);
183
+ }
184
+ // ── 2. Save config for daemon ────────────────────────────────────────────
185
+ (0, service_1.saveConfig)(habiKey, deviceName);
186
+ console.log(`[HABI] ✓ Config saved to ~/.habi/config.json`);
187
+ // ── 3. Install background service ───────────────────────────────────────
188
+ console.log(`[HABI] Installing background service...`);
108
189
  try {
109
- await server.start();
110
- // ── Cloud registration ──────────────────────────────────────────────
111
- const hw = (0, hardware_1.readHardwareIdentity)();
112
- const habiKey = process.env.HABI_KEY || process.env.HABI_OWNER_EMAIL || "";
113
- const friendlyName = process.env.HABI_DEVICE_NAME || os.hostname();
114
- if (!habiKey) {
115
- console.log('[HABI Cloud] HABI_OWNER_EMAIL not set running in local-only mode.');
116
- console.log('[HABI Cloud] Set export HABI_OWNER_EMAIL=you@example.com to enable cloud registration.\n');
190
+ await (0, service_1.installService)();
191
+ console.log(`[HABI] Background service installed — runs at every login`);
192
+ console.log(`[HABI] You can close this terminal. HABI keeps running.`);
193
+ }
194
+ catch (err) {
195
+ console.error(`[HABI] ✗ Service install failed: ${err}`);
196
+ console.log(`[HABI] You can still run manually: npx habi-agent@latest daemon`);
197
+ }
198
+ // ── 4. Claude Code detection ─────────────────────────────────────────────
199
+ console.log('\n[HABI] Checking for Claude Code...');
200
+ const claudeInstalled = isClaudeCodeInstalled();
201
+ if (!claudeInstalled) {
202
+ console.log('[HABI] Claude Code not detected.');
203
+ const answer = await ask('[HABI] Install Claude Code now to enable MCP enforcement? (Y/n) ');
204
+ if (answer.toLowerCase() !== 'n') {
205
+ console.log('[HABI] Installing Claude Code (npm install -g @anthropic-ai/claude-code)...');
206
+ try {
207
+ (0, child_process_1.execSync)('npm install -g @anthropic-ai/claude-code', { stdio: 'inherit' });
208
+ console.log('[HABI] ✓ Claude Code installed');
209
+ const mcp = injectMcpConfig(habiKey);
210
+ console.log(`[HABI] ✓ HABI MCP server configured → ${mcp.path}`);
211
+ }
212
+ catch (err) {
213
+ console.error(`[HABI] ✗ Claude Code install failed: ${err}`);
214
+ console.log('[HABI] Install manually: npm install -g @anthropic-ai/claude-code');
215
+ }
117
216
  }
118
217
  else {
119
- console.log(`[HABI Cloud] Registering "${friendlyName}" via HABI key...`);
120
- const cloudState = await (0, cloud_1.registerDevice)({
121
- friendlyName,
122
- hardwareFingerprint: hw.fingerprint,
123
- fingerprintType: hw.type,
124
- agentVersion: '0.1.0',
125
- osPlatform: os.platform(),
126
- });
127
- if (cloudState) {
128
- console.log(`[HABI Cloud] ✓ Device registered — ID: ${cloudState.deviceId.slice(0, 8)}...`);
129
- console.log(`[HABI Cloud] ✓ Session token active until ${new Date(cloudState.sessionTokenExpiresAt).toLocaleTimeString()}\n`);
130
- // ── Heartbeat loop every 30s ──────────────────────────────────
131
- let currentToken = cloudState.sessionToken;
132
- setInterval(async () => {
133
- const hb = await (0, cloud_1.sendHeartbeat)({
134
- deviceId: cloudState.deviceId,
135
- sessionToken: currentToken,
136
- hardwareFingerprint: hw.fingerprint,
137
- });
138
- if (hb) {
139
- currentToken = hb.sessionToken;
140
- if (hb.pendingJobs && hb.pendingJobs.length > 0) {
141
- console.log(`[HABI Cloud] ${hb.pendingJobs.length} pending job(s) received from dispatch queue.`);
142
- // Job execution handled in Phase 2 — log for now
143
- for (const job of hb.pendingJobs) {
144
- console.log(`[HABI Cloud] Job ${job.id.slice(0, 8)}: ${JSON.stringify(job.payload).slice(0, 80)}`);
145
- }
146
- }
147
- }
148
- }, 30000);
149
- }
218
+ console.log('[HABI] Skipping Claude Code install. MCP enforcement disabled.');
150
219
  }
151
- // Keep alive
152
- await new Promise(() => { });
153
220
  }
154
- catch (err) {
155
- console.error(`\n✗ HABI agent failed to start:\n ${err}\n`);
156
- process.exit(1);
221
+ else {
222
+ console.log('[HABI] Claude Code detected');
223
+ const mcp = injectMcpConfig(habiKey);
224
+ console.log(`[HABI] ✓ HABI MCP server configured → ${mcp.path}`);
157
225
  }
226
+ // ── 5. Done ──────────────────────────────────────────────────────────────
227
+ console.log(`
228
+ ┌─────────────────────────────────────────────────────────────┐
229
+ │ ✓ HABI is running as a background service │
230
+ │ │
231
+ │ Machine: ${(deviceName + ' ').padEnd(44)} │
232
+ │ Hardware: ${(hw.fingerprint + ' ').padEnd(44)} │
233
+ │ Dashboard: https://imhabi.com │
234
+ │ Logs: ~/.habi/habi.log │
235
+ │ │
236
+ │ Commands: │
237
+ │ habi-agent status — check service health │
238
+ │ habi-agent stop — stop the service │
239
+ │ habi-agent restart — restart the service │
240
+ │ habi-agent uninstall — remove the service │
241
+ └─────────────────────────────────────────────────────────────┘
242
+ `);
243
+ process.exit(0);
158
244
  }
159
245
  async function cmdStatus() {
246
+ banner();
247
+ console.log('');
248
+ const installed = (0, service_1.isServiceInstalled)();
249
+ console.log(` Service: ${installed ? '✓ INSTALLED (runs at login)' : '✗ Not installed'}`);
250
+ // Check if agent is responding
160
251
  try {
161
252
  const health = await pingAgent('/health');
162
- console.log('\n✓ HABI agent is RUNNING');
163
- console.log(` Port: ${AGENT_PORT}`);
164
- console.log(` Version: ${health.version || 'unknown'}`);
165
253
  const identity = await pingAgent('/identity');
166
254
  const hw = identity.hardware;
167
- const sess = identity.session;
255
+ console.log(` Agent: ✓ RUNNING on port ${AGENT_PORT}`);
256
+ console.log(` Version: ${health.version || HABI_VERSION}`);
168
257
  if (hw) {
169
- console.log(` Hardware: ${hw.fingerprint} (${hw.type})`);
170
- console.log(` Platform: ${hw.platform} / ${hw.hostname}`);
171
- }
172
- if (sess) {
173
- const expiresAt = new Date(sess.expiresAt);
174
- const active = sess.active ? '✓ ACTIVE' : '✗ EXPIRED';
175
- console.log(` Session: ${sess.fingerprint?.slice(0, 16)}...`);
176
- console.log(` Status: ${active} (expires ${expiresAt.toLocaleTimeString()})`);
258
+ console.log(` Hardware: ${hw.fingerprint} (${hw.type})`);
259
+ console.log(` Platform: ${hw.platform} / ${hw.hostname}`);
177
260
  }
178
- console.log();
179
261
  }
180
262
  catch {
181
- console.log('\nHABI agent is NOT RUNNING');
182
- console.log(' Start it with: npx ts-node src/cli.ts start\n');
183
- process.exit(1);
263
+ console.log(` Agent: NOT RESPONDING on port ${AGENT_PORT}`);
264
+ if (installed)
265
+ console.log(` (may still be starting — check ~/.habi/habi.log)`);
184
266
  }
267
+ // Claude Code MCP check
268
+ const claudeSettings = findClaudeSettings();
269
+ if (claudeSettings) {
270
+ try {
271
+ const s = JSON.parse(fs.readFileSync(claudeSettings, 'utf8'));
272
+ const habiMcp = s.mcpServers?.habi;
273
+ console.log(` Claude MCP: ${habiMcp ? '✓ CONFIGURED' : '✗ Not configured'}`);
274
+ }
275
+ catch {
276
+ console.log(` Claude MCP: ✗ Could not read settings`);
277
+ }
278
+ }
279
+ else {
280
+ console.log(` Claude MCP: — Claude Code not detected`);
281
+ }
282
+ if (fs.existsSync(LOG_PATH)) {
283
+ console.log(`\n Log file: ${LOG_PATH}`);
284
+ const lines = fs.readFileSync(LOG_PATH, 'utf8').split('\n').filter(Boolean).slice(-5);
285
+ console.log(' Last 5 log entries:');
286
+ lines.forEach(l => console.log(` ${l}`));
287
+ }
288
+ console.log('');
289
+ }
290
+ function cmdStop() {
291
+ console.log('[HABI] Stopping service...');
292
+ (0, service_1.stopService)();
293
+ console.log('[HABI] ✓ Service stopped. Run: habi-agent restart to start again.');
294
+ }
295
+ async function cmdRestart() {
296
+ console.log('[HABI] Restarting service...');
297
+ (0, service_1.restartService)();
298
+ console.log('[HABI] ✓ Service restarted.');
299
+ }
300
+ async function cmdUninstall() {
301
+ console.log('[HABI] Uninstalling HABI background service...');
302
+ const answer = await ask('[HABI] This will stop HABI and remove it from startup. Continue? (y/N) ');
303
+ if (answer.toLowerCase() !== 'y') {
304
+ console.log('[HABI] Cancelled.');
305
+ return;
306
+ }
307
+ await (0, service_1.uninstallService)();
308
+ // Also remove MCP config from Claude Code if present
309
+ const claudeSettings = findClaudeSettings();
310
+ if (claudeSettings && fs.existsSync(claudeSettings)) {
311
+ try {
312
+ const s = JSON.parse(fs.readFileSync(claudeSettings, 'utf8'));
313
+ if (s.mcpServers?.habi) {
314
+ delete s.mcpServers.habi;
315
+ fs.writeFileSync(claudeSettings, JSON.stringify(s, null, 2));
316
+ console.log('[HABI] ✓ Removed HABI from Claude Code MCP config');
317
+ }
318
+ }
319
+ catch { /* ignore */ }
320
+ }
321
+ console.log('[HABI] ✓ Service uninstalled');
322
+ console.log('[HABI] Config and logs remain at ~/.habi/ — delete manually if desired');
185
323
  }
186
- async function cmdIdentity() {
324
+ function cmdLogs() {
325
+ if (!fs.existsSync(LOG_PATH)) {
326
+ console.log('[HABI] No log file found at ' + LOG_PATH);
327
+ return;
328
+ }
329
+ const lines = fs.readFileSync(LOG_PATH, 'utf8').split('\n').filter(Boolean);
330
+ const last50 = lines.slice(-50);
331
+ console.log(`\n── HABI Log (last ${last50.length} lines) ──────────────────────\n`);
332
+ last50.forEach(l => console.log(l));
333
+ console.log('\n── End of log ──────────────────────────────────────────────\n');
334
+ }
335
+ function cmdIdentity() {
187
336
  try {
188
337
  const hw = (0, hardware_1.readHardwareIdentity)();
189
- const ctx = (() => {
190
- try {
191
- const p = (0, context_1.findContextFile)();
192
- return p ? (0, context_1.loadContext)(p) : null;
193
- }
194
- catch {
195
- return null;
196
- }
197
- })();
198
- const contextHash = ctx?.contextHash ?? (0, hardware_1.sha256)('no-context');
199
- const fingerprint = (0, hardware_1.generateSessionFingerprint)(hw.fingerprint, contextHash, Date.now());
200
- console.log('\n┌─ HABI Hardware Identity ──────────────────────────────────┐');
338
+ console.log('\n┌─ HABI Hardware Identity ───────────────────────────────────┐');
201
339
  console.log(`│ Hardware ID: ${hw.fingerprint}`);
202
340
  console.log(`│ Type: ${hw.type}`);
203
341
  console.log(`│ Interface: ${hw.iface}`);
204
342
  console.log(`│ Platform: ${hw.platform}`);
205
343
  console.log(`│ Hostname: ${hw.hostname}`);
206
- console.log(`│ Context: ${ctx ? ctx.context.project : 'none loaded'}`);
207
- console.log(`│ Context Hash: ${ctx ? ctx.contextHash.slice(0, 24) + '...' : 'n/a'}`);
208
- console.log(`│ Session FP: ${fingerprint.slice(0, 24)}...`);
209
344
  console.log('└────────────────────────────────────────────────────────────┘\n');
210
345
  }
211
346
  catch (err) {
212
- console.error(`\n✗ Could not read hardware identity:\n ${err}\n`);
213
- process.exit(1);
214
- }
215
- }
216
- async function cmdInit() {
217
- const hw = (0, hardware_1.readHardwareIdentity)();
218
- const projectName = process.argv[3] || path.basename(process.cwd());
219
- const contextContent = {
220
- project: projectName,
221
- version: '1.0.0',
222
- owner: process.env.HABI_OWNER_EMAIL || process.env.USER || process.env.USERNAME || 'owner',
223
- allowedMachines: [hw.fingerprint],
224
- allowedOperations: {
225
- paths: [`${process.cwd()}/**`],
226
- cloudAccounts: [],
227
- databases: [],
228
- repos: [],
229
- },
230
- deniedOperations: [
231
- 'DROP TABLE',
232
- 'DROP DATABASE',
233
- 'rm -rf /',
234
- 'DELETE FROM audit_log',
235
- 'truncate audit_log',
236
- ],
237
- };
238
- const contextHash = (0, hardware_1.sha256)(JSON.stringify(contextContent, null, 2));
239
- const fullContext = { ...contextContent, contextHash };
240
- const outPath = path.join(process.cwd(), 'habi-context.json');
241
- if (fs.existsSync(outPath)) {
242
- console.log(`\n⚠ Context file already exists: ${outPath}`);
243
- console.log(' Delete it first if you want to regenerate.\n');
347
+ console.error(`\n✗ Could not read hardware identity: ${err}\n`);
244
348
  process.exit(1);
245
349
  }
246
- fs.writeFileSync(outPath, JSON.stringify(fullContext, null, 2), 'utf8');
247
- console.log('\n✓ HABI Project Context File created');
248
- console.log(` File: ${outPath}`);
249
- console.log(` Project: ${projectName}`);
250
- console.log(` Machine: ${hw.fingerprint} (${hw.type})`);
251
- console.log(` Hash: ${contextHash.slice(0, 24)}...`);
252
- console.log('\n⚠ IMPORTANT: Add habi-context.json to your .gitignore');
253
- console.log(' This file contains your machine identity — do not commit it.\n');
254
350
  }
255
- async function cmdVerify() {
256
- try {
257
- const data = await pingAgent('/verify');
258
- if (data.verified) {
259
- console.log('\n✓ Session VERIFIED');
260
- console.log(` Hardware ID: ${data.hardwareId}`);
261
- console.log(` Fingerprint: ${data.fingerprint?.slice(0, 24)}...`);
262
- console.log(` Expires in: ${data.expiresIn}s\n`);
263
- }
264
- else {
265
- console.log('\n✗ Session NOT VERIFIED');
266
- console.log(` Reason: ${data.reason || data.error}\n`);
267
- process.exit(1);
268
- }
269
- }
270
- catch {
271
- console.log('\n✗ HABI agent not running. Start with: npx ts-node src/cli.ts start\n');
272
- process.exit(1);
273
- }
351
+ function cmdHelp() {
352
+ console.log(`
353
+ HABI Agent v${HABI_VERSION} On Spot Solutions LLC
354
+ Hardware-Anchored Binding Infrastructure
355
+
356
+ Usage:
357
+ npx habi-agent@latest start --key <key> --name <name>
358
+ Register device, install background service, configure Claude Code
359
+
360
+ habi-agent status Show service status and agent health
361
+ habi-agent stop Stop the background service
362
+ habi-agent restart Restart the background service
363
+ habi-agent uninstall Remove the background service and MCP config
364
+ habi-agent logs Show the last 50 log entries
365
+ habi-agent identity Print hardware fingerprint
366
+
367
+ Dashboard: https://imhabi.com
368
+ `);
274
369
  }
275
- // ── Dispatch ────────────────────────────────────────────────────────────────
370
+ // ── Dispatch ──────────────────────────────────────────────────────────────────
276
371
  (async () => {
277
372
  switch (command) {
278
373
  case 'start':
279
374
  await cmdStart();
280
375
  break;
376
+ case 'stop':
377
+ cmdStop();
378
+ break;
379
+ case 'restart':
380
+ await cmdRestart();
381
+ break;
382
+ case 'uninstall':
383
+ await cmdUninstall();
384
+ break;
281
385
  case 'status':
282
386
  await cmdStatus();
283
387
  break;
284
- case 'identity':
285
- await cmdIdentity();
286
- break;
287
- case 'init':
288
- await cmdInit();
388
+ case 'logs':
389
+ cmdLogs();
289
390
  break;
290
- case 'verify':
291
- await cmdVerify();
391
+ case 'identity':
392
+ cmdIdentity();
292
393
  break;
293
394
  default:
294
- console.log(`\nHABI Agent v0.1.0 — On Spot Solutions LLC`);
295
- console.log(`Usage: npx ts-node src/cli.ts <command>`);
296
- console.log(`\nCommands:`);
297
- console.log(` start Start the local identity daemon on port 7432`);
298
- console.log(` status Show agent status and hardware identity`);
299
- console.log(` identity Print hardware fingerprint`);
300
- console.log(` init Generate a Project Context File for this directory`);
301
- console.log(` verify Verify the current session\n`);
395
+ cmdHelp();
396
+ break;
302
397
  }
303
398
  })();
304
399
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * HABI Daemon — long-running background process
4
+ * Reads config from ~/.habi/config.json
5
+ * Managed by OS service layer (Windows Service / macOS LaunchAgent / Linux systemd)
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";AACA;;;;GAIG"}