@pellux/goodvibes-agent 1.6.0 → 1.6.1

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/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  Product-facing release notes for GoodVibes Agent.
4
4
 
5
+ ## 1.6.1 - 2026-07-07
6
+
7
+ - Updated to SDK 1.3.2: a platform that cannot load SQLite extensions (macOS system SQLite in a compiled binary) now reports an honest capability limit instead of an error; semantic memory search states its literal fallback.
8
+
5
9
  ## 1.6.0 - 2026-07-07
6
10
 
7
11
  - Spoken output now uses the SDK's shared speech engine — the same sentence batching, bounded concurrency, retry, and drain behavior as every other GoodVibes surface, from one implementation.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # GoodVibes Agent
2
2
 
3
3
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
4
- [![Version: 1.5.3](https://img.shields.io/badge/version-1.6.0-blue.svg)](#install)
4
+ [![Version: 1.5.3](https://img.shields.io/badge/version-1.6.1-blue.svg)](#install)
5
5
 
6
6
  GoodVibes Agent is the installable autonomous operator assistant for GoodVibes. It keeps the existing terminal renderer and workspace bones, but the product goal is different from a vibecoding harness: the user should experience one assistant that can chat, plan, remember, research, schedule, send, generate, run visible agents, and operate the GoodVibes daemon contract with clear confirmation gates.
7
7
 
@@ -4463,7 +4463,7 @@ var init_mcp = __esm(() => {
4463
4463
  // node_modules/@pellux/goodvibes-sdk/dist/platform/version.js
4464
4464
  import { readFileSync as readFileSync3 } from "fs";
4465
4465
  import { join as join4 } from "path";
4466
- var version = "1.3.1", VERSION2;
4466
+ var version = "1.3.2", VERSION2;
4467
4467
  var init_version = __esm(() => {
4468
4468
  try {
4469
4469
  const pkg = JSON.parse(readFileSync3(join4(import.meta.dir, "..", "..", "package.json"), "utf-8"));
@@ -45975,16 +45975,35 @@ function resolveSqliteVecPath() {
45975
45975
  }
45976
45976
  return "";
45977
45977
  }
45978
+ function isExtensionLoadingRefusal(err2) {
45979
+ const message = err2 instanceof Error ? err2.message : String(err2);
45980
+ return /not authorized|omit.*load.*extension|extension loading is disabled/i.test(message);
45981
+ }
45978
45982
  function loadSqliteVecExtension(db) {
45979
45983
  const bundledPath = resolveSqliteVecPath();
45980
- if (bundledPath) {
45981
- db.loadExtension(bundledPath);
45982
- } else {
45983
- load(db);
45984
+ try {
45985
+ if (bundledPath) {
45986
+ db.loadExtension(bundledPath);
45987
+ } else {
45988
+ load(db);
45989
+ }
45990
+ } catch (err2) {
45991
+ if (isExtensionLoadingRefusal(err2)) {
45992
+ throw new SqliteVecPlatformUnsupportedError(err2 instanceof Error ? err2.message : String(err2));
45993
+ }
45994
+ throw err2;
45984
45995
  }
45985
45996
  }
45997
+ var SqliteVecPlatformUnsupportedError;
45986
45998
  var init_sqlite_vec_loader = __esm(() => {
45987
45999
  init_sqlite_vec();
46000
+ SqliteVecPlatformUnsupportedError = class SqliteVecPlatformUnsupportedError extends Error {
46001
+ platformLimit = true;
46002
+ constructor(cause) {
46003
+ super("this platform's SQLite does not allow loading extensions" + " (macOS system SQLite); the semantic vector index is unavailable" + ` and memory search uses literal matching. Underlying refusal: ${cause}`);
46004
+ this.name = "SqliteVecPlatformUnsupportedError";
46005
+ }
46006
+ };
45988
46007
  });
45989
46008
 
45990
46009
  // node_modules/@pellux/goodvibes-sdk/dist/platform/state/memory-vector-store.js
@@ -46040,6 +46059,7 @@ class SqliteVecMemoryIndex {
46040
46059
  enabled = false;
46041
46060
  available = false;
46042
46061
  error;
46062
+ platformLimitReason;
46043
46063
  static rebuildBatchSize = 25;
46044
46064
  constructor(dbPath, dimensions = MEMORY_VECTOR_DIMS, embeddingRegistry) {
46045
46065
  this.dbPath = dbPath;
@@ -46062,8 +46082,16 @@ class SqliteVecMemoryIndex {
46062
46082
  this.close();
46063
46083
  this.available = false;
46064
46084
  this.enabled = false;
46065
- this.error = summarizeError(err2);
46066
- logger.warn("Memory vector index unavailable", { backend: "sqlite-vec", error: this.error });
46085
+ if (err2 instanceof SqliteVecPlatformUnsupportedError) {
46086
+ this.platformLimitReason = err2.message;
46087
+ logger.warn("Memory vector index unavailable on this platform \u2014 memory search uses literal matching", {
46088
+ backend: "sqlite-vec",
46089
+ reason: err2.message
46090
+ });
46091
+ } else {
46092
+ this.error = summarizeError(err2);
46093
+ logger.warn("Memory vector index unavailable", { backend: "sqlite-vec", error: this.error });
46094
+ }
46067
46095
  }
46068
46096
  }
46069
46097
  stats() {
@@ -46077,7 +46105,8 @@ class SqliteVecMemoryIndex {
46077
46105
  indexedRecords: this.countIndexedRecords(),
46078
46106
  embeddingProviderId: provider?.id ?? this.embeddingRegistry.getDefaultProviderId(),
46079
46107
  embeddingProviderLabel: provider?.label ?? `Unregistered (${this.embeddingRegistry.getDefaultProviderId()})`,
46080
- ...this.error ?? !provider ? { error: this.error ?? `Active memory embedding provider '${this.embeddingRegistry.getDefaultProviderId()}' is not registered.` } : {}
46108
+ ...this.platformLimitReason ? { platformLimitReason: this.platformLimitReason } : {},
46109
+ ...this.error ?? (!provider && !this.platformLimitReason) ? { error: this.error ?? `Active memory embedding provider '${this.embeddingRegistry.getDefaultProviderId()}' is not registered.` } : {}
46081
46110
  };
46082
46111
  }
46083
46112
  upsert(record) {
@@ -53425,6 +53454,7 @@ class CodeIndexStore {
53425
53454
  db = null;
53426
53455
  available = false;
53427
53456
  error;
53457
+ platformLimitReason;
53428
53458
  building = false;
53429
53459
  buildStartedAtMs = null;
53430
53460
  buildPromise = null;
@@ -53456,8 +53486,15 @@ class CodeIndexStore {
53456
53486
  } catch (err2) {
53457
53487
  this.close();
53458
53488
  this.available = false;
53459
- this.error = summarizeError(err2);
53460
- logger.warn("Code index unavailable", { backend: "sqlite-vec", error: this.error });
53489
+ const limit2 = err2 instanceof SqliteVecPlatformUnsupportedError;
53490
+ if (limit2)
53491
+ this.platformLimitReason = err2.message;
53492
+ else
53493
+ this.error = summarizeError(err2);
53494
+ logger.warn(limit2 ? "Code index unavailable on this platform" : "Code index unavailable", {
53495
+ backend: "sqlite-vec",
53496
+ ...limit2 ? { reason: err2.message } : { error: this.error }
53497
+ });
53461
53498
  }
53462
53499
  }
53463
53500
  close() {
@@ -263967,7 +264004,7 @@ var FOUNDATION_METADATA;
263967
264004
  var init_foundation_metadata = __esm(() => {
263968
264005
  FOUNDATION_METADATA = {
263969
264006
  productId: "goodvibes",
263970
- productVersion: "1.3.1",
264007
+ productVersion: "1.3.2",
263971
264008
  operatorMethodCount: 327,
263972
264009
  operatorEventCount: 31,
263973
264010
  peerEndpointCount: 6
@@ -263982,7 +264019,7 @@ var init_operator_contract = __esm(() => {
263982
264019
  product: {
263983
264020
  id: "goodvibes",
263984
264021
  surface: "operator",
263985
- version: "1.3.1"
264022
+ version: "1.3.2"
263986
264023
  },
263987
264024
  auth: {
263988
264025
  modes: [
@@ -321121,6 +321158,9 @@ var init_operator_contract = __esm(() => {
321121
321158
  },
321122
321159
  error: {
321123
321160
  type: "string"
321161
+ },
321162
+ platformLimitReason: {
321163
+ type: "string"
321124
321164
  }
321125
321165
  },
321126
321166
  required: [
@@ -321318,6 +321358,9 @@ var init_operator_contract = __esm(() => {
321318
321358
  },
321319
321359
  error: {
321320
321360
  type: "string"
321361
+ },
321362
+ platformLimitReason: {
321363
+ type: "string"
321321
321364
  }
321322
321365
  },
321323
321366
  required: [
@@ -323750,6 +323793,9 @@ var init_operator_contract = __esm(() => {
323750
323793
  },
323751
323794
  error: {
323752
323795
  type: "string"
323796
+ },
323797
+ platformLimitReason: {
323798
+ type: "string"
323753
323799
  }
323754
323800
  },
323755
323801
  required: [
@@ -323830,6 +323876,9 @@ var init_operator_contract = __esm(() => {
323830
323876
  },
323831
323877
  error: {
323832
323878
  type: "string"
323879
+ },
323880
+ platformLimitReason: {
323881
+ type: "string"
323833
323882
  }
323834
323883
  },
323835
323884
  required: [
@@ -450930,7 +450979,8 @@ var init_operator_contract_schemas_runtime = __esm(() => {
450930
450979
  indexedRecords: NUMBER_SCHEMA,
450931
450980
  embeddingProviderId: STRING_SCHEMA,
450932
450981
  embeddingProviderLabel: STRING_SCHEMA,
450933
- error: STRING_SCHEMA
450982
+ error: STRING_SCHEMA,
450983
+ platformLimitReason: STRING_SCHEMA
450934
450984
  }, ["backend", "enabled", "available", "path", "dimensions", "indexedRecords", "embeddingProviderId", "embeddingProviderLabel"], { additionalProperties: true });
450935
450985
  MEMORY_DOCTOR_REPORT_SCHEMA = objectSchema({
450936
450986
  vector: MEMORY_VECTOR_STATS_SCHEMA,
@@ -464268,6 +464318,23 @@ function createSchema2(db) {
464268
464318
  )
464269
464319
  `);
464270
464320
  }
464321
+ function getKnowledgeSchemaStatements() {
464322
+ const statements = [];
464323
+ createSchema2({
464324
+ run(sql) {
464325
+ const normalized = sql.trim();
464326
+ if (normalized.length > 0)
464327
+ statements.push(normalized);
464328
+ }
464329
+ });
464330
+ return statements;
464331
+ }
464332
+ function renderKnowledgeSchemaSql() {
464333
+ return `${getKnowledgeSchemaStatements().map((statement) => statement.endsWith(";") ? statement : `${statement};`).join(`
464334
+
464335
+ `)}
464336
+ `;
464337
+ }
464271
464338
  function rowObject(columns, values2) {
464272
464339
  return Object.fromEntries(columns.map((column, index) => [column, values2[index]]));
464273
464340
  }
@@ -777640,6 +777707,9 @@ var init_ingest = __esm(() => {
777640
777707
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/browser-history/index.js
777641
777708
  var init_browser_history = __esm(() => {
777642
777709
  init_ingest();
777710
+ init_discover();
777711
+ init_readers();
777712
+ init_paths2();
777643
777713
  });
777644
777714
 
777645
777715
  // node_modules/graphql/jsutils/devAssert.mjs
@@ -795514,6 +795584,7 @@ var init_semantic = __esm(() => {
795514
795584
  init_llm();
795515
795585
  init_gap_repair();
795516
795586
  init_service5();
795587
+ init_self_improvement();
795517
795588
  });
795518
795589
 
795519
795590
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/helpers.js
@@ -799482,8 +799553,40 @@ var init_map_view = __esm(() => {
799482
799553
  });
799483
799554
 
799484
799555
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/types.js
799485
- var HOME_GRAPH_CAPABILITIES;
799556
+ var HOME_GRAPH_NODE_KINDS, HOME_GRAPH_RELATIONS, HOME_GRAPH_CAPABILITIES;
799486
799557
  var init_types15 = __esm(() => {
799558
+ HOME_GRAPH_NODE_KINDS = [
799559
+ "ha_home",
799560
+ "ha_entity",
799561
+ "ha_device",
799562
+ "ha_area",
799563
+ "ha_automation",
799564
+ "ha_script",
799565
+ "ha_scene",
799566
+ "ha_label",
799567
+ "ha_integration",
799568
+ "ha_room",
799569
+ "ha_device_passport",
799570
+ "ha_maintenance_item",
799571
+ "ha_troubleshooting_case",
799572
+ "ha_purchase",
799573
+ "ha_network_node"
799574
+ ];
799575
+ HOME_GRAPH_RELATIONS = [
799576
+ "controls",
799577
+ "located_in",
799578
+ "belongs_to_device",
799579
+ "has_manual",
799580
+ "has_receipt",
799581
+ "has_warranty",
799582
+ "has_issue",
799583
+ "fixed_by",
799584
+ "uses_battery",
799585
+ "connected_via",
799586
+ "part_of_network",
799587
+ "mentioned_by",
799588
+ "source_for"
799589
+ ];
799487
799590
  HOME_GRAPH_CAPABILITIES = [
799488
799591
  "knowledge-space-isolation",
799489
799592
  "snapshot-sync",
@@ -801274,6 +801377,7 @@ var init_service6 = __esm(() => {
801274
801377
  var init_home_graph = __esm(() => {
801275
801378
  init_service6();
801276
801379
  init_extension();
801380
+ init_types15();
801277
801381
  });
801278
801382
 
801279
801383
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/store-record-delete.js
@@ -803698,10 +803802,14 @@ var init_service7 = __esm(() => {
803698
803802
  var init_project_planning = __esm(() => {
803699
803803
  init_service7();
803700
803804
  init_helpers3();
803805
+ init_readiness();
803701
803806
  });
803702
803807
 
803703
803808
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/persistence.js
803704
- var init_persistence = () => {};
803809
+ var init_persistence = __esm(() => {
803810
+ init_store_schema();
803811
+ init_store_load();
803812
+ });
803705
803813
 
803706
803814
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/projections.js
803707
803815
  class KnowledgeProjectionService {
@@ -807255,21 +807363,21 @@ var init_service8 = __esm(() => {
807255
807363
  var exports_knowledge = {};
807256
807364
  __export(exports_knowledge, {
807257
807365
  withKnowledgeSpace: () => withKnowledgeSpace,
807258
- uniqKnowledgeValues: () => uniq3,
807259
- stabilizeKnowledgeText: () => stableText2,
807260
- runKnowledgeSemanticSelfImprovement: () => runKnowledgeSemanticSelfImprovement2,
807366
+ uniqKnowledgeValues: () => uniq2,
807367
+ stabilizeKnowledgeText: () => stableText,
807368
+ runKnowledgeSemanticSelfImprovement: () => runKnowledgeSemanticSelfImprovement,
807261
807369
  resolveProjectPlanningSpace: () => resolveProjectPlanningSpace,
807262
- resolveKnowledgeDbPathFromControlPlaneDir: () => resolveKnowledgeDbPathFromControlPlaneDir2,
807370
+ resolveKnowledgeDbPathFromControlPlaneDir: () => resolveKnowledgeDbPathFromControlPlaneDir,
807263
807371
  renderPacket: () => renderPacket,
807264
807372
  renderKnowledgeSchemaSql: () => renderKnowledgeSchemaSql,
807265
807373
  renderKnowledgeMap: () => renderKnowledgeMap,
807266
807374
  readKnowledgeSearchText: () => readKnowledgeSearchText,
807267
- readBrowserKnowledgeProfile: () => readBrowserKnowledgeProfile2,
807375
+ readBrowserKnowledgeProfile: () => readBrowserKnowledgeProfile,
807268
807376
  projectPlanningSourceId: () => projectPlanningSourceId,
807269
807377
  projectPlanningProjectIdFromPath: () => projectPlanningProjectIdFromPath,
807270
807378
  projectPlanningCanonicalUri: () => projectPlanningCanonicalUri,
807271
807379
  projectKnowledgeSpaceId: () => projectKnowledgeSpaceId,
807272
- parseKnowledgeJsonValue: () => parseJsonValue2,
807380
+ parseKnowledgeJsonValue: () => parseJsonValue,
807273
807381
  normalizeProjectId: () => normalizeProjectId,
807274
807382
  normalizeKnowledgeSpaceId: () => normalizeKnowledgeSpaceId,
807275
807383
  normalizeHomeAssistantInstallationId: () => normalizeHomeAssistantInstallationId,
@@ -807277,12 +807385,12 @@ __export(exports_knowledge, {
807277
807385
  materializeGeneratedKnowledgeProjection: () => materializeGeneratedKnowledgeProjection,
807278
807386
  looksLikeRawPdfPayload: () => looksLikeRawPdfPayload,
807279
807387
  looksBinaryLikeText: () => looksBinaryLikeText,
807280
- loadKnowledgeStoreSnapshot: () => loadKnowledgeStoreSnapshot2,
807388
+ loadKnowledgeStoreSnapshot: () => loadKnowledgeStoreSnapshot,
807281
807389
  listGeneratedKnowledgePages: () => listGeneratedKnowledgePages,
807282
- listBrowserKinds: () => listBrowserKinds2,
807390
+ listBrowserKinds: () => listBrowserKinds,
807283
807391
  knowledgeSpaceMetadata: () => knowledgeSpaceMetadata,
807284
807392
  knowledgePageSourceWeight: () => knowledgePageSourceWeight,
807285
- knowledgeNowMs: () => nowMs2,
807393
+ knowledgeNowMs: () => nowMs,
807286
807394
  knowledgeExtractionNeedsRefresh: () => knowledgeExtractionNeedsRefresh,
807287
807395
  isUsefulKnowledgePageSourceCandidate: () => isUsefulKnowledgePageSourceCandidate,
807288
807396
  isUsefulKnowledgePageSource: () => isUsefulKnowledgePageSource,
@@ -807302,12 +807410,12 @@ __export(exports_knowledge, {
807302
807410
  generatedKnowledgeSourceId: () => generatedKnowledgeSourceId,
807303
807411
  generatedKnowledgeCanonicalUri: () => generatedKnowledgeCanonicalUri,
807304
807412
  extractKnowledgeArtifact: () => extractKnowledgeArtifact,
807305
- evaluateProjectPlanningReadiness: () => evaluateProjectPlanningReadiness2,
807306
- discoverBrowserKnowledgeProfiles: () => discoverBrowserKnowledgeProfiles2,
807413
+ evaluateProjectPlanningReadiness: () => evaluateProjectPlanningReadiness,
807414
+ discoverBrowserKnowledgeProfiles: () => discoverBrowserKnowledgeProfiles,
807307
807415
  createWebKnowledgeGapRepairer: () => createWebKnowledgeGapRepairer,
807308
807416
  createProviderBackedKnowledgeSemanticLlm: () => createProviderBackedKnowledgeSemanticLlm,
807309
807417
  createMemoryApi: () => createMemoryApi,
807310
- createKnowledgeSchema: () => createSchema3,
807418
+ createKnowledgeSchema: () => createSchema2,
807311
807419
  createKnowledgeApi: () => createKnowledgeApi,
807312
807420
  createDefaultKnowledgeConnectorRegistry: () => createDefaultKnowledgeConnectorRegistry,
807313
807421
  compareKnowledgePageSources: () => compareKnowledgePageSources,
@@ -809780,7 +809888,7 @@ var init_delivery_manager = __esm(() => {
809780
809888
  });
809781
809889
 
809782
809890
  // node_modules/@pellux/goodvibes-sdk/dist/platform/automation/scheduler-capacity.js
809783
- function computeSchedulerCapacity(slotsTotal, runs, nowMs3 = Date.now()) {
809891
+ function computeSchedulerCapacity(slotsTotal, runs, nowMs2 = Date.now()) {
809784
809892
  let slotsInUse = 0;
809785
809893
  const queuedRuns = [];
809786
809894
  for (const run7 of runs) {
@@ -809790,7 +809898,7 @@ function computeSchedulerCapacity(slotsTotal, runs, nowMs3 = Date.now()) {
809790
809898
  queuedRuns.push(run7);
809791
809899
  }
809792
809900
  const queueDepth = queuedRuns.length;
809793
- const oldestQueuedAgeMs = queueDepth > 0 ? nowMs3 - Math.min(...queuedRuns.map((r6) => r6.queuedAt)) : null;
809901
+ const oldestQueuedAgeMs = queueDepth > 0 ? nowMs2 - Math.min(...queuedRuns.map((r6) => r6.queuedAt)) : null;
809794
809902
  return { slotsTotal, slotsInUse, queueDepth, oldestQueuedAgeMs };
809795
809903
  }
809796
809904
 
@@ -837016,7 +837124,7 @@ var createStyledCell = (char, overrides = {}) => ({
837016
837124
  // src/version.ts
837017
837125
  import { readFileSync } from "fs";
837018
837126
  import { join } from "path";
837019
- var _version = "1.6.0";
837127
+ var _version = "1.6.1";
837020
837128
  try {
837021
837129
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, "..", "package.json"), "utf-8"));
837022
837130
  _version = typeof pkg.version === "string" ? pkg.version : _version;
@@ -862173,7 +862281,7 @@ var WORK_PLAN_STATUSES = [
862173
862281
  "failed",
862174
862282
  "cancelled"
862175
862283
  ];
862176
- function nowMs3() {
862284
+ function nowMs2() {
862177
862285
  return Date.now();
862178
862286
  }
862179
862287
  function isObject4(value) {
@@ -862279,7 +862387,7 @@ class WorkPlanStore {
862279
862387
  if (!normalizedTitle)
862280
862388
  throw new Error("Work plan item title is required.");
862281
862389
  const plan = this.readPlan();
862282
- const time4 = nowMs3();
862390
+ const time4 = nowMs2();
862283
862391
  const item = {
862284
862392
  id: createItemId(),
862285
862393
  title: normalizedTitle,
@@ -862303,7 +862411,7 @@ class WorkPlanStore {
862303
862411
  updateItem(idOrPrefix, patch2) {
862304
862412
  const plan = this.readPlan();
862305
862413
  const item = this.resolveItem(plan, idOrPrefix);
862306
- const time4 = nowMs3();
862414
+ const time4 = nowMs2();
862307
862415
  const nextStatus = patch2.status ?? item.status;
862308
862416
  const next = this.pruneItem({
862309
862417
  ...item,
@@ -862336,7 +862444,7 @@ class WorkPlanStore {
862336
862444
  removeItem(idOrPrefix) {
862337
862445
  const plan = this.readPlan();
862338
862446
  const item = this.resolveItem(plan, idOrPrefix);
862339
- const time4 = nowMs3();
862447
+ const time4 = nowMs2();
862340
862448
  const remaining = plan.items.filter((candidate) => candidate.id !== item.id);
862341
862449
  this.writePlan({
862342
862450
  ...plan,
@@ -862356,7 +862464,7 @@ class WorkPlanStore {
862356
862464
  ...plan,
862357
862465
  items: remaining,
862358
862466
  activeItemId: remaining[0]?.id,
862359
- updatedAt: nowMs3()
862467
+ updatedAt: nowMs2()
862360
862468
  });
862361
862469
  return removed;
862362
862470
  }
@@ -862395,7 +862503,7 @@ class WorkPlanStore {
862395
862503
  const parsed = JSON.parse(raw);
862396
862504
  if (!isObject4(parsed))
862397
862505
  return this.createEmptyPlan();
862398
- const time4 = nowMs3();
862506
+ const time4 = nowMs2();
862399
862507
  const createdAt = typeof parsed.createdAt === "number" ? parsed.createdAt : time4;
862400
862508
  const updatedAt = typeof parsed.updatedAt === "number" ? parsed.updatedAt : createdAt;
862401
862509
  const items = Array.isArray(parsed.items) ? parsed.items.map((item) => normalizeItem(item, createdAt)).filter((item) => item !== null) : [];
@@ -862414,7 +862522,7 @@ class WorkPlanStore {
862414
862522
  };
862415
862523
  }
862416
862524
  createEmptyPlan() {
862417
- const time4 = nowMs3();
862525
+ const time4 = nowMs2();
862418
862526
  return {
862419
862527
  id: createPlanId(this.options.projectId, this.options.projectRoot),
862420
862528
  projectId: this.options.projectId,
@@ -974227,8 +974335,8 @@ function formatDigestTime(at, from = Date.now()) {
974227
974335
  return `yesterday ${time4}`;
974228
974336
  return `${d4.toLocaleDateString(undefined, { month: "short", day: "numeric" })} ${time4}`;
974229
974337
  }
974230
- function formatRelativeTime(targetMs, nowMs4 = Date.now()) {
974231
- const diffMs = targetMs - nowMs4;
974338
+ function formatRelativeTime(targetMs, nowMs3 = Date.now()) {
974339
+ const diffMs = targetMs - nowMs3;
974232
974340
  if (diffMs <= 0)
974233
974341
  return "soon";
974234
974342
  const diffMin = Math.round(diffMs / 60000);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-agent",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "private": false,
5
5
  "description": "GoodVibes personal operator assistant TUI with a proactive Agent product brain, isolated Agent Knowledge, local profiles, routines, skills, personas, and explicit build delegation.",
6
6
  "type": "module",
@@ -92,7 +92,7 @@
92
92
  },
93
93
  "dependencies": {},
94
94
  "devDependencies": {
95
- "@pellux/goodvibes-sdk": "1.3.1",
95
+ "@pellux/goodvibes-sdk": "1.3.2",
96
96
  "sql.js": "^1.14.1",
97
97
  "sqlite-vec": "^0.1.9",
98
98
  "zustand": "^5.0.12",
package/src/version.ts CHANGED
@@ -6,7 +6,7 @@ import { join } from 'node:path';
6
6
  // The prebuild script updates the fallback value before compilation.
7
7
  // Uses import.meta.dir (Bun) to locate package.json relative to this file,
8
8
  // which is correct regardless of the process working directory.
9
- let _version = '1.6.0';
9
+ let _version = '1.6.1';
10
10
  try {
11
11
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8')) as {
12
12
  readonly version?: unknown;