@legioncodeinc/honeycomb 0.1.5 → 0.1.6
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +3 -4
- package/bundle/cli.js +217 -36
- package/daemon/dashboard-app.js +10 -10
- package/daemon/index.js +3068 -547
- package/embeddings/embed-daemon.js +1 -1
- package/harnesses/claude-code/.claude-plugin/plugin.json +1 -1
- package/harnesses/claude-code/bundle/capture.js +97 -26
- package/harnesses/claude-code/bundle/index.js +97 -26
- package/harnesses/claude-code/bundle/pre-tool-use.js +97 -26
- package/harnesses/claude-code/bundle/session-end.js +97 -26
- package/harnesses/claude-code/bundle/session-start.js +97 -26
- package/harnesses/codex/bundle/capture.js +97 -26
- package/harnesses/codex/bundle/index.js +97 -26
- package/harnesses/codex/bundle/pre-tool-use.js +97 -26
- package/harnesses/codex/bundle/session-start.js +97 -26
- package/harnesses/codex/package.json +1 -1
- package/harnesses/cursor/bundle/capture.js +97 -26
- package/harnesses/cursor/bundle/index.js +97 -26
- package/harnesses/cursor/bundle/pre-tool-use.js +97 -26
- package/harnesses/cursor/bundle/session-end.js +97 -26
- package/harnesses/cursor/bundle/session-start.js +97 -26
- package/harnesses/openclaw/dist/index.js +1 -1
- package/harnesses/openclaw/openclaw.plugin.json +1 -1
- package/harnesses/openclaw/package.json +1 -1
- package/mcp/bundle/server.js +1 -1
- package/package.json +1 -1
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
},
|
|
6
6
|
"metadata": {
|
|
7
7
|
"description": "Honeycomb — persistent memory daemon and thin harness clients for AI coding assistants",
|
|
8
|
-
"version": "0.1.
|
|
8
|
+
"version": "0.1.6"
|
|
9
9
|
},
|
|
10
10
|
"plugins": [
|
|
11
11
|
{
|
|
12
12
|
"name": "honeycomb",
|
|
13
13
|
"description": "Honeycomb Claude Code plugin — captures session activity and provides cross-session memory through the local daemon",
|
|
14
|
-
"version": "0.1.
|
|
14
|
+
"version": "0.1.6",
|
|
15
15
|
"source": "./harnesses/claude-code"
|
|
16
16
|
}
|
|
17
17
|
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "honeycomb",
|
|
3
3
|
"description": "Honeycomb — a long-lived daemon plus thin clients for six coding harnesses, the unified honeycomb CLI, the MCP server, and the embed daemon",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.6",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Honeycomb"
|
|
7
7
|
},
|
package/README.md
CHANGED
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
15
|
<p align="center">
|
|
16
|
-
<a href="https://
|
|
17
|
-
<img src="https://img.shields.io/badge/version-0.1.0-F7A823?style=flat-square" alt="Version 0.1.0">
|
|
16
|
+
<a href="https://www.npmjs.com/package/@legioncodeinc/honeycomb"><img src="https://img.shields.io/npm/v/@legioncodeinc/honeycomb?style=flat-square&color=F7A823&label=version" alt="npm version"></a>
|
|
18
17
|
<img src="https://img.shields.io/badge/node-%E2%89%A522-339933?style=flat-square&logo=node.js&logoColor=white" alt="Node ≥ 22">
|
|
19
18
|
<a href="https://deeplake.ai"><img src="https://img.shields.io/badge/powered%20by-Deep%20Lake-ff5a1f?style=flat-square" alt="Powered by Deep Lake"></a>
|
|
20
19
|
<a href="#license"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue?style=flat-square" alt="AGPL-3.0"></a>
|
|
@@ -46,7 +45,7 @@ AI coding agents forget. They forget across sessions, and they forget across too
|
|
|
46
45
|
<tr>
|
|
47
46
|
<td width="50%" valign="top">
|
|
48
47
|
|
|
49
|
-
#### 🛹 For
|
|
48
|
+
#### 🛹 For AI augmented devs
|
|
50
49
|
Stop re-explaining your project to a fresh agent every morning. Honeycomb remembers your decisions, your conventions, and the fixes that worked, then primes your next session with them automatically. One install command, a friendly dashboard, no SQL, no config gauntlet.
|
|
51
50
|
|
|
52
51
|
</td>
|
|
@@ -213,7 +212,7 @@ Four ways to reach the same daemon and the same shared memory:
|
|
|
213
212
|
|
|
214
213
|
## 📍 Status & roadmap
|
|
215
214
|
|
|
216
|
-
Honeycomb is **v0.1.
|
|
215
|
+
Honeycomb is **pre-release (v0.1.x)**. We document what's real and flag what's opt-in.
|
|
217
216
|
|
|
218
217
|
**Working today**
|
|
219
218
|
- Capture-to-recall, proven end-to-end against live Deep Lake (`npm run smoke:golden-path` with credentials).
|
package/bundle/cli.js
CHANGED
|
@@ -17,6 +17,7 @@ var VERB_TABLE = Object.freeze([
|
|
|
17
17
|
{ verb: "maintenance", cls: "storage", summary: "run version-history compaction over version-bumped tables (030)" },
|
|
18
18
|
{ verb: "remember", cls: "storage", summary: "write a memory through the daemon (--type fact|convention|preference|decision|gotcha|reference)" },
|
|
19
19
|
{ verb: "recall", cls: "storage", summary: "recall memories through the daemon" },
|
|
20
|
+
{ verb: "memory", cls: "storage", summary: "lifecycle: conflicts (list/resolve), stale-refs (list), inspect <id> --lifecycle (058d)" },
|
|
20
21
|
{ verb: "agent", cls: "storage", summary: "run an agent turn through the daemon" },
|
|
21
22
|
{ verb: "ontology", cls: "storage", summary: "inspect/propose ontology changes through the daemon" },
|
|
22
23
|
{ verb: "secret", cls: "storage", summary: "manage named secrets through the daemon" },
|
|
@@ -268,21 +269,21 @@ function renderSummary(body, out) {
|
|
|
268
269
|
let totalReaped = 0;
|
|
269
270
|
let totalSkipped = 0;
|
|
270
271
|
let tablesCompacted = 0;
|
|
271
|
-
for (const
|
|
272
|
-
const reaped =
|
|
273
|
-
const skipped =
|
|
272
|
+
for (const s2 of summaries) {
|
|
273
|
+
const reaped = s2.rowsReaped ?? 0;
|
|
274
|
+
const skipped = s2.keysSkipped ?? 0;
|
|
274
275
|
totalReaped += reaped;
|
|
275
276
|
totalSkipped += skipped;
|
|
276
277
|
if (reaped > 0)
|
|
277
278
|
tablesCompacted += 1;
|
|
278
279
|
}
|
|
279
280
|
out(`maintenance compact: ${tablesCompacted}/${summaries.length} table(s) reaped, ${totalReaped} row(s) reaped, ${totalSkipped} key(s) skipped.`);
|
|
280
|
-
for (const
|
|
281
|
-
const table =
|
|
282
|
-
const reaped =
|
|
283
|
-
const scanned =
|
|
284
|
-
const skipped =
|
|
285
|
-
const errored =
|
|
281
|
+
for (const s2 of summaries) {
|
|
282
|
+
const table = s2.table ?? "(unknown)";
|
|
283
|
+
const reaped = s2.rowsReaped ?? 0;
|
|
284
|
+
const scanned = s2.keysScanned ?? 0;
|
|
285
|
+
const skipped = s2.keysSkipped ?? 0;
|
|
286
|
+
const errored = s2.errored ?? 0;
|
|
286
287
|
const flap = skipped > 0 ? ` \u2014 ${skipped} key(s) SKIPPED (survivor not durable; re-run converges)` : "";
|
|
287
288
|
const err = errored > 0 ? ` \u2014 ${errored} error(s) (fail-soft; re-run)` : "";
|
|
288
289
|
out(` ${table}: ${reaped} row(s) reaped over ${scanned} key(s)${flap}${err}.`);
|
|
@@ -316,6 +317,183 @@ async function runMaintenanceVerb(argv, deps) {
|
|
|
316
317
|
return { exitCode: 0 };
|
|
317
318
|
}
|
|
318
319
|
|
|
320
|
+
// dist/src/commands/memory.js
|
|
321
|
+
var MEMORY_CONFLICTS_LIST_ROUTE = "/api/memories/conflicts";
|
|
322
|
+
var MEMORY_CONFLICTS_RESOLVE_ROUTE = "/api/memories/conflicts";
|
|
323
|
+
var MEMORY_STALE_REFS_ROUTE = "/api/memories/stale-refs";
|
|
324
|
+
var MEMORY_DETAIL_ROUTE = "/api/memories";
|
|
325
|
+
var MEMORY_CONFLICT_VERDICTS = Object.freeze(["supersede", "review", "keep-both"]);
|
|
326
|
+
function flagValue2(argv, flag) {
|
|
327
|
+
const idx = argv.indexOf(flag);
|
|
328
|
+
if (idx < 0)
|
|
329
|
+
return void 0;
|
|
330
|
+
const v = argv[idx + 1];
|
|
331
|
+
return v !== void 0 && !v.startsWith("--") ? v : void 0;
|
|
332
|
+
}
|
|
333
|
+
var MEMORY_VALUE_FLAGS = /* @__PURE__ */ new Set(["--status", "--verdict", "--winner", "--reason"]);
|
|
334
|
+
function parseMemoryCliArgs(argv) {
|
|
335
|
+
const positionals = [];
|
|
336
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
337
|
+
const tok = argv[i];
|
|
338
|
+
if (tok === void 0)
|
|
339
|
+
continue;
|
|
340
|
+
if (MEMORY_VALUE_FLAGS.has(tok)) {
|
|
341
|
+
i += 1;
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
if (tok.startsWith("--"))
|
|
345
|
+
continue;
|
|
346
|
+
positionals.push(tok);
|
|
347
|
+
}
|
|
348
|
+
return {
|
|
349
|
+
sub: positionals[0] ?? "",
|
|
350
|
+
arg: positionals[1] ?? "",
|
|
351
|
+
id: positionals[2] ?? "",
|
|
352
|
+
status: flagValue2(argv, "--status") ?? "open",
|
|
353
|
+
verdict: flagValue2(argv, "--verdict") ?? "",
|
|
354
|
+
winner: flagValue2(argv, "--winner") ?? "",
|
|
355
|
+
reason: flagValue2(argv, "--reason") ?? "",
|
|
356
|
+
lifecycle: argv.includes("--lifecycle")
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
function rowsOf(body, key) {
|
|
360
|
+
if (typeof body !== "object" || body === null)
|
|
361
|
+
return [];
|
|
362
|
+
const arr = body[key];
|
|
363
|
+
return Array.isArray(arr) ? arr : [];
|
|
364
|
+
}
|
|
365
|
+
function s(v) {
|
|
366
|
+
return v === void 0 || v === null ? "" : String(v);
|
|
367
|
+
}
|
|
368
|
+
function renderConflicts(res, json2, out) {
|
|
369
|
+
if (json2) {
|
|
370
|
+
out(JSON.stringify(res.body ?? {}, null, 2));
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const rows = rowsOf(res.body, "conflicts");
|
|
374
|
+
if (rows.length === 0) {
|
|
375
|
+
out("no conflicts found in scope.");
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
for (const r of rows) {
|
|
379
|
+
const winner = s(r.winnerId) !== "" ? ` winner=${s(r.winnerId)}` : "";
|
|
380
|
+
out(`${s(r.id)} [${s(r.status) || "open"}] ${s(r.memoryAId)} \u21C4 ${s(r.memoryBId)} verdict=${s(r.verdict) || "review"}${winner}`);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
function renderStaleRefs(res, json2, out) {
|
|
384
|
+
if (json2) {
|
|
385
|
+
out(JSON.stringify(res.body ?? {}, null, 2));
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
const rows = rowsOf(res.body, "staleRefs");
|
|
389
|
+
if (rows.length === 0) {
|
|
390
|
+
out("no stale references found in scope.");
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
for (const r of rows) {
|
|
394
|
+
const refs = Array.isArray(r.staleRefs) ? r.staleRefs : [];
|
|
395
|
+
out(`${s(r.memoryId)} [${s(r.refStatus) || "stale"}] refs: ${refs.length > 0 ? refs.join(", ") : "(unrecorded)"}`);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
function buildConflictsRequest(inv, out) {
|
|
399
|
+
if (inv.arg === "resolve") {
|
|
400
|
+
if (inv.id === "") {
|
|
401
|
+
out("usage: honeycomb memory conflicts resolve <id> --verdict <supersede|review|keep-both> [--winner <memory-id>]");
|
|
402
|
+
return null;
|
|
403
|
+
}
|
|
404
|
+
if (!MEMORY_CONFLICT_VERDICTS.includes(inv.verdict)) {
|
|
405
|
+
out(`error: --verdict must be one of: ${MEMORY_CONFLICT_VERDICTS.join(", ")}`);
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
const body = { verdict: inv.verdict };
|
|
409
|
+
if (inv.winner !== "")
|
|
410
|
+
body.winnerId = inv.winner;
|
|
411
|
+
if (inv.reason !== "")
|
|
412
|
+
body.reason = inv.reason;
|
|
413
|
+
return { method: "POST", path: `${MEMORY_CONFLICTS_RESOLVE_ROUTE}/${encodeURIComponent(inv.id)}/resolve`, body };
|
|
414
|
+
}
|
|
415
|
+
return { method: "GET", path: MEMORY_CONFLICTS_LIST_ROUTE, query: { status: inv.status } };
|
|
416
|
+
}
|
|
417
|
+
async function runMemoryVerb(argv, deps, json2 = false) {
|
|
418
|
+
const out = deps.out ?? ((line) => console.log(line));
|
|
419
|
+
const inv = parseMemoryCliArgs(argv);
|
|
420
|
+
if (inv.sub === "conflicts") {
|
|
421
|
+
const req = buildConflictsRequest(inv, out);
|
|
422
|
+
if (req === null)
|
|
423
|
+
return { exitCode: 1 };
|
|
424
|
+
const res = await deps.daemon.send(req);
|
|
425
|
+
if (res.status >= 400) {
|
|
426
|
+
out(`error: memory conflicts failed (daemon ${res.status}).`);
|
|
427
|
+
return { exitCode: 1 };
|
|
428
|
+
}
|
|
429
|
+
if (inv.arg === "resolve") {
|
|
430
|
+
if (json2)
|
|
431
|
+
out(JSON.stringify(res.body ?? {}, null, 2));
|
|
432
|
+
else
|
|
433
|
+
out(`resolved conflict ${inv.id} (${inv.verdict}).`);
|
|
434
|
+
return { exitCode: 0 };
|
|
435
|
+
}
|
|
436
|
+
renderConflicts(res, json2, out);
|
|
437
|
+
return { exitCode: 0 };
|
|
438
|
+
}
|
|
439
|
+
if (inv.sub === "stale-refs") {
|
|
440
|
+
const res = await deps.daemon.send({ method: "GET", path: MEMORY_STALE_REFS_ROUTE });
|
|
441
|
+
if (res.status >= 400) {
|
|
442
|
+
out(`error: memory stale-refs failed (daemon ${res.status}).`);
|
|
443
|
+
return { exitCode: 1 };
|
|
444
|
+
}
|
|
445
|
+
renderStaleRefs(res, json2, out);
|
|
446
|
+
return { exitCode: 0 };
|
|
447
|
+
}
|
|
448
|
+
if (inv.sub === "inspect") {
|
|
449
|
+
return runInspect(inv, deps, json2, out);
|
|
450
|
+
}
|
|
451
|
+
out("usage: honeycomb memory <conflicts|stale-refs|inspect>");
|
|
452
|
+
out(" conflicts [--status open] list conflicts in scope");
|
|
453
|
+
out(" conflicts resolve <id> --verdict <v> [--winner <id>] resolve via the 058b endpoint");
|
|
454
|
+
out(" stale-refs list memories with stale references");
|
|
455
|
+
out(" inspect <id> --lifecycle show freshness, calibrated confidence, refStatus, conflict, H");
|
|
456
|
+
return { exitCode: inv.sub === "" ? 0 : 1 };
|
|
457
|
+
}
|
|
458
|
+
function n(v) {
|
|
459
|
+
const x = typeof v === "number" ? v : Number(v);
|
|
460
|
+
return Number.isFinite(x) ? x : void 0;
|
|
461
|
+
}
|
|
462
|
+
async function runInspect(inv, deps, json2, out) {
|
|
463
|
+
if (inv.arg === "") {
|
|
464
|
+
out("usage: honeycomb memory inspect <id> [--lifecycle]");
|
|
465
|
+
return { exitCode: 1 };
|
|
466
|
+
}
|
|
467
|
+
const res = await deps.daemon.send({ method: "GET", path: `${MEMORY_DETAIL_ROUTE}/${encodeURIComponent(inv.arg)}` });
|
|
468
|
+
if (res.status >= 400) {
|
|
469
|
+
out(`error: memory ${inv.arg} not found (daemon ${res.status}).`);
|
|
470
|
+
return { exitCode: 1 };
|
|
471
|
+
}
|
|
472
|
+
if (json2) {
|
|
473
|
+
out(JSON.stringify(res.body ?? {}, null, 2));
|
|
474
|
+
return { exitCode: 0 };
|
|
475
|
+
}
|
|
476
|
+
const body = typeof res.body === "object" && res.body !== null ? res.body : {};
|
|
477
|
+
const m = body.memory ?? {};
|
|
478
|
+
if (!inv.lifecycle) {
|
|
479
|
+
out(`memory ${s(m.id) || inv.arg}`);
|
|
480
|
+
return { exitCode: 0 };
|
|
481
|
+
}
|
|
482
|
+
const a = n(m.activation) ?? n(m.freshnessScore) ?? 1;
|
|
483
|
+
const cFactor = n(m.calibratedConfidence) ?? 1;
|
|
484
|
+
const sigma = n(m.staleness) ?? 0;
|
|
485
|
+
const kappa = n(m.kappa) ?? 1;
|
|
486
|
+
const clamp = (x) => Math.min(1, Math.max(0, x));
|
|
487
|
+
const health = clamp(a) * clamp(cFactor) * (1 - clamp(sigma)) * clamp(kappa);
|
|
488
|
+
out(`memory ${s(m.id) || inv.arg} \u2014 lifecycle`);
|
|
489
|
+
out(` freshnessScore ${n(m.freshnessScore) ?? n(m.activation) ?? "(none)"}`);
|
|
490
|
+
out(` calibratedConfidence ${n(m.calibratedConfidence) ?? "(none \u2014 calibration dormant)"}`);
|
|
491
|
+
out(` refStatus ${s(m.refStatus) || "unknown"}`);
|
|
492
|
+
out(` open-conflict ${m.openConflict === true ? "yes" : "no"}`);
|
|
493
|
+
out(` H (health) ${health.toFixed(3)}`);
|
|
494
|
+
return { exitCode: 0 };
|
|
495
|
+
}
|
|
496
|
+
|
|
319
497
|
// dist/src/daemon/runtime/vault/catalog.js
|
|
320
498
|
var PROVIDER_CATALOG = Object.freeze([
|
|
321
499
|
Object.freeze({
|
|
@@ -400,9 +578,9 @@ function coerceSettingValue(value) {
|
|
|
400
578
|
if (value === "false")
|
|
401
579
|
return false;
|
|
402
580
|
if (value.trim().length > 0) {
|
|
403
|
-
const
|
|
404
|
-
if (Number.isFinite(
|
|
405
|
-
return
|
|
581
|
+
const n2 = Number(value);
|
|
582
|
+
if (Number.isFinite(n2) && String(n2) === value.trim())
|
|
583
|
+
return n2;
|
|
406
584
|
}
|
|
407
585
|
return value;
|
|
408
586
|
}
|
|
@@ -13987,17 +14165,17 @@ var ZodArray = /* @__PURE__ */ $constructor("ZodArray", (inst, def) => {
|
|
|
13987
14165
|
inst._zod.processJSONSchema = (ctx, json2, params) => arrayProcessor(inst, ctx, json2, params);
|
|
13988
14166
|
inst.element = def.element;
|
|
13989
14167
|
_installLazyMethods(inst, "ZodArray", {
|
|
13990
|
-
min(
|
|
13991
|
-
return this.check(_minLength(
|
|
14168
|
+
min(n2, params) {
|
|
14169
|
+
return this.check(_minLength(n2, params));
|
|
13992
14170
|
},
|
|
13993
14171
|
nonempty(params) {
|
|
13994
14172
|
return this.check(_minLength(1, params));
|
|
13995
14173
|
},
|
|
13996
|
-
max(
|
|
13997
|
-
return this.check(_maxLength(
|
|
14174
|
+
max(n2, params) {
|
|
14175
|
+
return this.check(_maxLength(n2, params));
|
|
13998
14176
|
},
|
|
13999
|
-
length(
|
|
14000
|
-
return this.check(_length(
|
|
14177
|
+
length(n2, params) {
|
|
14178
|
+
return this.check(_length(n2, params));
|
|
14001
14179
|
},
|
|
14002
14180
|
unwrap() {
|
|
14003
14181
|
return this.element;
|
|
@@ -15068,12 +15246,12 @@ function convertSchema(schema, ctx) {
|
|
|
15068
15246
|
let baseSchema = convertBaseSchema(schema, ctx);
|
|
15069
15247
|
const hasExplicitType = schema.type || schema.enum !== void 0 || schema.const !== void 0;
|
|
15070
15248
|
if (schema.anyOf && Array.isArray(schema.anyOf)) {
|
|
15071
|
-
const options = schema.anyOf.map((
|
|
15249
|
+
const options = schema.anyOf.map((s2) => convertSchema(s2, ctx));
|
|
15072
15250
|
const anyOfUnion = z.union(options);
|
|
15073
15251
|
baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;
|
|
15074
15252
|
}
|
|
15075
15253
|
if (schema.oneOf && Array.isArray(schema.oneOf)) {
|
|
15076
|
-
const options = schema.oneOf.map((
|
|
15254
|
+
const options = schema.oneOf.map((s2) => convertSchema(s2, ctx));
|
|
15077
15255
|
const oneOfUnion = z.xor(options);
|
|
15078
15256
|
baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;
|
|
15079
15257
|
}
|
|
@@ -15786,10 +15964,10 @@ function resolveTenancy(creds, env = process.env) {
|
|
|
15786
15964
|
// dist/src/daemon/storage/config.js
|
|
15787
15965
|
var DEFAULT_QUERY_TIMEOUT_MS = 1e4;
|
|
15788
15966
|
var QueryTimeoutMs = external_exports.preprocess((raw) => {
|
|
15789
|
-
const
|
|
15790
|
-
if (!Number.isFinite(
|
|
15967
|
+
const n2 = typeof raw === "number" ? raw : Number(raw);
|
|
15968
|
+
if (!Number.isFinite(n2))
|
|
15791
15969
|
return DEFAULT_QUERY_TIMEOUT_MS;
|
|
15792
|
-
return Math.min(Math.max(0, Math.trunc(
|
|
15970
|
+
return Math.min(Math.max(0, Math.trunc(n2)), 6e5);
|
|
15793
15971
|
}, external_exports.number());
|
|
15794
15972
|
var StorageConfigSchema = external_exports.object({
|
|
15795
15973
|
/** DeepLake HTTP query endpoint, e.g. https://api.deeplake.ai. */
|
|
@@ -15877,8 +16055,8 @@ function pickString(value) {
|
|
|
15877
16055
|
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
15878
16056
|
}
|
|
15879
16057
|
function pickNumber(value) {
|
|
15880
|
-
const
|
|
15881
|
-
return Number.isFinite(
|
|
16058
|
+
const n2 = typeof value === "number" ? value : Number(value);
|
|
16059
|
+
return Number.isFinite(n2) ? n2 : void 0;
|
|
15882
16060
|
}
|
|
15883
16061
|
function pickBool(value) {
|
|
15884
16062
|
return typeof value === "boolean" ? value : void 0;
|
|
@@ -16292,7 +16470,7 @@ var STORAGE_VERB_ROUTES = Object.freeze({
|
|
|
16292
16470
|
function subcommandOf(argv) {
|
|
16293
16471
|
return argv.find((a) => !a.startsWith("--")) ?? "";
|
|
16294
16472
|
}
|
|
16295
|
-
function
|
|
16473
|
+
function flagValue3(argv, flag) {
|
|
16296
16474
|
const idx = argv.indexOf(flag);
|
|
16297
16475
|
if (idx < 0)
|
|
16298
16476
|
return void 0;
|
|
@@ -16315,7 +16493,7 @@ function buildSkillRequest(argv) {
|
|
|
16315
16493
|
}
|
|
16316
16494
|
if (sub === "scope") {
|
|
16317
16495
|
const scope = rest[1] ?? "";
|
|
16318
|
-
const users = (
|
|
16496
|
+
const users = (flagValue3(argv, "--users") ?? "").split(",").map((u) => u.trim()).filter((u) => u.length > 0);
|
|
16319
16497
|
const force = argv.includes("--force");
|
|
16320
16498
|
return { method: "POST", path: "/api/skills/scope", body: { scope, users, force } };
|
|
16321
16499
|
}
|
|
@@ -16344,14 +16522,14 @@ function stripFlagPair(argv, flag) {
|
|
|
16344
16522
|
}
|
|
16345
16523
|
function buildRememberRequest(argv) {
|
|
16346
16524
|
const content = stripFlagPair(argv, "--type").filter((a) => !a.startsWith("--")).join(" ");
|
|
16347
|
-
const type =
|
|
16525
|
+
const type = flagValue3(argv, "--type");
|
|
16348
16526
|
const body = { content };
|
|
16349
16527
|
if (type !== void 0 && isMemoryType(type))
|
|
16350
16528
|
body.type = type;
|
|
16351
16529
|
return { method: "POST", path: "/api/memories", body };
|
|
16352
16530
|
}
|
|
16353
16531
|
function rememberTypeError(argv) {
|
|
16354
|
-
const type =
|
|
16532
|
+
const type = flagValue3(argv, "--type");
|
|
16355
16533
|
if (type === void 0 || isMemoryType(type))
|
|
16356
16534
|
return null;
|
|
16357
16535
|
return [
|
|
@@ -16507,7 +16685,7 @@ function canonicalizeRemote(rawRemote) {
|
|
|
16507
16685
|
return "";
|
|
16508
16686
|
let path = pathPart.replace(/\/+$/, "");
|
|
16509
16687
|
path = path.replace(/\.git$/i, "");
|
|
16510
|
-
const segments = path.split("/").map((
|
|
16688
|
+
const segments = path.split("/").map((s2) => s2.trim().toLowerCase()).filter((s2) => s2.length > 0);
|
|
16511
16689
|
if (segments.length === 0)
|
|
16512
16690
|
return "";
|
|
16513
16691
|
return `${host}/${segments.join("/")}`;
|
|
@@ -17047,7 +17225,7 @@ function buildAllowedProperties(input) {
|
|
|
17047
17225
|
}
|
|
17048
17226
|
var systemTelemetryClock = () => (/* @__PURE__ */ new Date()).toISOString();
|
|
17049
17227
|
var DEFAULT_EMIT_TIMEOUT_MS = 2e3;
|
|
17050
|
-
var HONEYCOMB_VERSION = true ? "0.1.
|
|
17228
|
+
var HONEYCOMB_VERSION = true ? "0.1.6" : "0.0.0-dev";
|
|
17051
17229
|
async function emitTelemetry(event, opts, deps = {}) {
|
|
17052
17230
|
const env = deps.env ?? process.env;
|
|
17053
17231
|
const key = deps.posthogKey ?? POSTHOG_KEY;
|
|
@@ -17190,7 +17368,7 @@ function renderGlassBoxText(view) {
|
|
|
17190
17368
|
// dist/src/shared/constants.js
|
|
17191
17369
|
var DAEMON_PORT = 3850;
|
|
17192
17370
|
var DAEMON_HOST = "127.0.0.1";
|
|
17193
|
-
var HONEYCOMB_VERSION2 = true ? "0.1.
|
|
17371
|
+
var HONEYCOMB_VERSION2 = true ? "0.1.6" : "0.0.0-dev";
|
|
17194
17372
|
var PRODUCT_SLUG = "honeycomb";
|
|
17195
17373
|
|
|
17196
17374
|
// dist/src/commands/install.js
|
|
@@ -17399,6 +17577,9 @@ async function dispatchStorage(inv, deps) {
|
|
|
17399
17577
|
if (inv.verb === "maintenance") {
|
|
17400
17578
|
return runMaintenanceVerb(inv.argv, deps);
|
|
17401
17579
|
}
|
|
17580
|
+
if (inv.verb === "memory") {
|
|
17581
|
+
return runMemoryVerb(inv.argv, deps, inv.flags.json);
|
|
17582
|
+
}
|
|
17402
17583
|
if (inv.verb === "settings") {
|
|
17403
17584
|
return runSettingsVerb(inv.argv, deps);
|
|
17404
17585
|
}
|
|
@@ -19456,8 +19637,8 @@ function parsePluginEnabled(listOutput, name) {
|
|
|
19456
19637
|
}
|
|
19457
19638
|
return false;
|
|
19458
19639
|
}
|
|
19459
|
-
function escapeRegExp(
|
|
19460
|
-
return
|
|
19640
|
+
function escapeRegExp(s2) {
|
|
19641
|
+
return s2.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
19461
19642
|
}
|
|
19462
19643
|
function createClaudePluginRunner(binary = "claude") {
|
|
19463
19644
|
function invoke(args) {
|
|
@@ -19729,7 +19910,7 @@ function buildKpisView(view) {
|
|
|
19729
19910
|
return { kind: "metric", title: "KPIs", rows, data: view };
|
|
19730
19911
|
}
|
|
19731
19912
|
function buildSessionsView(view) {
|
|
19732
|
-
const rows = view.sessions.map((
|
|
19913
|
+
const rows = view.sessions.map((s2) => `${s2.sessionId} \xB7 ${s2.project} \xB7 ${s2.startedAt} \xB7 ${s2.eventCount} events \xB7 ${s2.status}`);
|
|
19733
19914
|
return { kind: "table", title: "Sessions", rows, data: view.sessions };
|
|
19734
19915
|
}
|
|
19735
19916
|
function buildSettingsView(view) {
|
|
@@ -19759,7 +19940,7 @@ function buildRulesView(view) {
|
|
|
19759
19940
|
return { kind: "table", title: "Rules", rows, data: view.rules };
|
|
19760
19941
|
}
|
|
19761
19942
|
function buildSkillSyncView(view) {
|
|
19762
|
-
const rows = view.skills.map((
|
|
19943
|
+
const rows = view.skills.map((s2) => `${s2.name} \xB7 ${s2.scope} \xB7 ${s2.syncState}`);
|
|
19763
19944
|
return { kind: "panel", title: "Skill-sync", rows, data: view.skills };
|
|
19764
19945
|
}
|
|
19765
19946
|
|