@pellux/goodvibes-agent 1.6.0 → 1.6.2

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,14 @@
2
2
 
3
3
  Product-facing release notes for GoodVibes Agent.
4
4
 
5
+ ## 1.6.2 - 2026-07-07
6
+
7
+ - Updated to SDK 1.3.3: the macOS capability-limit classification now matches Apple SQLite's exact refusal message, so compiled binaries report the honest limit instead of an error.
8
+
9
+ ## 1.6.1 - 2026-07-07
10
+
11
+ - 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.
12
+
5
13
  ## 1.6.0 - 2026-07-07
6
14
 
7
15
  - 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.2-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.3", 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|does not support dynamic extension loading/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.3",
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.3"
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,
@@ -837016,7 +837066,7 @@ var createStyledCell = (char, overrides = {}) => ({
837016
837066
  // src/version.ts
837017
837067
  import { readFileSync } from "fs";
837018
837068
  import { join } from "path";
837019
- var _version = "1.6.0";
837069
+ var _version = "1.6.2";
837020
837070
  try {
837021
837071
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, "..", "package.json"), "utf-8"));
837022
837072
  _version = typeof pkg.version === "string" ? pkg.version : _version;
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.2",
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.3",
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.2';
10
10
  try {
11
11
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8')) as {
12
12
  readonly version?: unknown;