@pellux/goodvibes-agent 1.8.2 → 1.9.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,19 @@
2
2
 
3
3
  Product-facing release notes for GoodVibes Agent.
4
4
 
5
+ ## 1.9.1 - 2026-07-11
6
+
7
+ - Every GitHub release now attaches the sqlite-vec native extension as a per-platform archive (`sqlite-vec-<os>-<arch>.tar.gz`) next to the compiled binaries, so a directly-downloaded standalone binary can restore the semantic memory vector index by co-locating the addon. The npm/Bun package channel is unchanged.
8
+ - Each addon archive carries the exact `lib/sqlite-vec-<os>-<arch>/vec0.<suffix>` layout the runtime resolves, so it extracts in place next to the binary with no renaming, and all four archives are checksummed in `SHA256SUMS.txt` under the same missing-entry-fatal rule as the platform binaries.
9
+ - The release build fetches each target platform's sqlite-vec addon from the npm registry during cross-target builds, so every platform's addon ships regardless of which host built the binaries.
10
+ - README and the release docs describe how to place the addon next to a downloaded binary and confirm it with `goodvibes-agent memory vector status`, which reports `available: yes` once the addon is co-located.
11
+ - On macOS the system SQLite refuses to load extensions, so the darwin addon archives ship for parity but the vector index stays unavailable there and memory search falls back to literal matching; this is a platform limitation, not a packaging defect.
12
+
13
+ ## 1.9.0 - 2026-07-11
14
+
15
+ - GoodVibes Agent now publishes self-contained compiled binaries for Linux and macOS (x64 and arm64) on every GitHub release, each verified against a SHA256SUMS manifest, so the public installer can set the agent up as a single binary with no separate Bun runtime step. The npm/Bun package channel is unchanged.
16
+ - Standalone binaries resolve plugins, hooks, and configuration from your filesystem exactly as the Bun runtime does; the semantic vector memory index additionally needs its native extension co-located with the binary and otherwise falls back to literal memory matching, reported plainly by the memory vector status command.
17
+
5
18
  ## 1.8.2 - 2026-07-11
6
19
 
7
20
  - Adopts platform SDK 1.7.1.
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.8.2-blue.svg)](#install)
4
+ [![Version: 1.5.3](https://img.shields.io/badge/version-1.9.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
 
@@ -24,6 +24,22 @@ goodvibes-agent --help
24
24
 
25
25
  On a fresh Agent home, `goodvibes-agent` opens setup first. After setup is applied, it opens directly into the Agent workspace.
26
26
 
27
+ ### Standalone binary and the semantic vector index
28
+
29
+ Each GitHub release also attaches standalone compiled binaries (`goodvibes-agent-linux-x64`, `goodvibes-agent-linux-arm64`, `goodvibes-agent-macos-x64`, `goodvibes-agent-macos-arm64`) plus a `SHA256SUMS.txt` manifest. The supported install path remains the Bun global command above; the standalone binary is for environments that download it directly.
30
+
31
+ The semantic (embedding-backed) memory vector index depends on the sqlite-vec native addon, which Bun cannot embed inside the compiled binary. Each release therefore attaches the addon as a separate per-platform archive named `sqlite-vec-<os>-<arch>.tar.gz` (for example `sqlite-vec-linux-x64.tar.gz`), also checksummed in `SHA256SUMS.txt`. A binary with no co-located addon still runs and reports `available: no` for the vector index; memory search falls back to literal matching.
32
+
33
+ To restore the vector index for a directly-downloaded binary, place the matching addon archive in the same directory as the binary and extract it there. The archive already carries the exact layout the runtime resolves — `lib/sqlite-vec-<os>-<arch>/vec0.<suffix>` relative to the binary — so no renaming is needed:
34
+
35
+ ```sh
36
+ # In the directory that holds the downloaded goodvibes-agent binary:
37
+ tar -xzf sqlite-vec-linux-x64.tar.gz # creates ./lib/sqlite-vec-linux-x64/vec0.so
38
+ ./goodvibes-agent memory vector status # available: yes
39
+ ```
40
+
41
+ macOS note: the system SQLite that the runtime links on macOS refuses to load extensions, so the darwin archives are shipped for parity but the vector index stays unavailable on macOS regardless of co-location. This is a macOS platform limitation, not a packaging defect, and memory search there uses literal matching.
42
+
27
43
  ## Source Usage
28
44
 
29
45
  ```sh
@@ -476422,23 +476422,6 @@ function createSchema2(db) {
476422
476422
  )
476423
476423
  `);
476424
476424
  }
476425
- function getKnowledgeSchemaStatements() {
476426
- const statements = [];
476427
- createSchema2({
476428
- run(sql) {
476429
- const normalized = sql.trim();
476430
- if (normalized.length > 0)
476431
- statements.push(normalized);
476432
- }
476433
- });
476434
- return statements;
476435
- }
476436
- function renderKnowledgeSchemaSql() {
476437
- return `${getKnowledgeSchemaStatements().map((statement) => statement.endsWith(";") ? statement : `${statement};`).join(`
476438
-
476439
- `)}
476440
- `;
476441
- }
476442
476425
  function rowObject(columns, values2) {
476443
476426
  return Object.fromEntries(columns.map((column, index) => [column, values2[index]]));
476444
476427
  }
@@ -790460,9 +790443,6 @@ var init_ingest = __esm(() => {
790460
790443
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/browser-history/index.js
790461
790444
  var init_browser_history = __esm(() => {
790462
790445
  init_ingest();
790463
- init_discover();
790464
- init_readers();
790465
- init_paths2();
790466
790446
  });
790467
790447
 
790468
790448
  // node_modules/graphql/jsutils/devAssert.mjs
@@ -808441,7 +808421,6 @@ var init_semantic = __esm(() => {
808441
808421
  init_llm();
808442
808422
  init_gap_repair();
808443
808423
  init_service9();
808444
- init_self_improvement();
808445
808424
  });
808446
808425
 
808447
808426
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/helpers.js
@@ -812410,40 +812389,8 @@ var init_map_view = __esm(() => {
812410
812389
  });
812411
812390
 
812412
812391
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/types.js
812413
- var HOME_GRAPH_NODE_KINDS, HOME_GRAPH_RELATIONS, HOME_GRAPH_CAPABILITIES;
812392
+ var HOME_GRAPH_CAPABILITIES;
812414
812393
  var init_types12 = __esm(() => {
812415
- HOME_GRAPH_NODE_KINDS = [
812416
- "ha_home",
812417
- "ha_entity",
812418
- "ha_device",
812419
- "ha_area",
812420
- "ha_automation",
812421
- "ha_script",
812422
- "ha_scene",
812423
- "ha_label",
812424
- "ha_integration",
812425
- "ha_room",
812426
- "ha_device_passport",
812427
- "ha_maintenance_item",
812428
- "ha_troubleshooting_case",
812429
- "ha_purchase",
812430
- "ha_network_node"
812431
- ];
812432
- HOME_GRAPH_RELATIONS = [
812433
- "controls",
812434
- "located_in",
812435
- "belongs_to_device",
812436
- "has_manual",
812437
- "has_receipt",
812438
- "has_warranty",
812439
- "has_issue",
812440
- "fixed_by",
812441
- "uses_battery",
812442
- "connected_via",
812443
- "part_of_network",
812444
- "mentioned_by",
812445
- "source_for"
812446
- ];
812447
812394
  HOME_GRAPH_CAPABILITIES = [
812448
812395
  "knowledge-space-isolation",
812449
812396
  "snapshot-sync",
@@ -814234,7 +814181,6 @@ var init_service10 = __esm(() => {
814234
814181
  var init_home_graph = __esm(() => {
814235
814182
  init_service10();
814236
814183
  init_extension();
814237
- init_types12();
814238
814184
  });
814239
814185
 
814240
814186
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/store-record-delete.js
@@ -816659,14 +816605,10 @@ var init_service11 = __esm(() => {
816659
816605
  var init_project_planning = __esm(() => {
816660
816606
  init_service11();
816661
816607
  init_helpers3();
816662
- init_readiness();
816663
816608
  });
816664
816609
 
816665
816610
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/persistence.js
816666
- var init_persistence = __esm(() => {
816667
- init_store_schema();
816668
- init_store_load();
816669
- });
816611
+ var init_persistence = () => {};
816670
816612
 
816671
816613
  // node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/projections.js
816672
816614
  class KnowledgeProjectionService {
@@ -820220,21 +820162,21 @@ var init_service12 = __esm(() => {
820220
820162
  var exports_knowledge = {};
820221
820163
  __export(exports_knowledge, {
820222
820164
  withKnowledgeSpace: () => withKnowledgeSpace,
820223
- uniqKnowledgeValues: () => uniq2,
820224
- stabilizeKnowledgeText: () => stableText,
820225
- runKnowledgeSemanticSelfImprovement: () => runKnowledgeSemanticSelfImprovement,
820165
+ uniqKnowledgeValues: () => uniq3,
820166
+ stabilizeKnowledgeText: () => stableText2,
820167
+ runKnowledgeSemanticSelfImprovement: () => runKnowledgeSemanticSelfImprovement2,
820226
820168
  resolveProjectPlanningSpace: () => resolveProjectPlanningSpace,
820227
- resolveKnowledgeDbPathFromControlPlaneDir: () => resolveKnowledgeDbPathFromControlPlaneDir,
820169
+ resolveKnowledgeDbPathFromControlPlaneDir: () => resolveKnowledgeDbPathFromControlPlaneDir2,
820228
820170
  renderPacket: () => renderPacket,
820229
820171
  renderKnowledgeSchemaSql: () => renderKnowledgeSchemaSql,
820230
820172
  renderKnowledgeMap: () => renderKnowledgeMap,
820231
820173
  readKnowledgeSearchText: () => readKnowledgeSearchText,
820232
- readBrowserKnowledgeProfile: () => readBrowserKnowledgeProfile,
820174
+ readBrowserKnowledgeProfile: () => readBrowserKnowledgeProfile2,
820233
820175
  projectPlanningSourceId: () => projectPlanningSourceId,
820234
820176
  projectPlanningProjectIdFromPath: () => projectPlanningProjectIdFromPath,
820235
820177
  projectPlanningCanonicalUri: () => projectPlanningCanonicalUri,
820236
820178
  projectKnowledgeSpaceId: () => projectKnowledgeSpaceId,
820237
- parseKnowledgeJsonValue: () => parseJsonValue,
820179
+ parseKnowledgeJsonValue: () => parseJsonValue2,
820238
820180
  normalizeProjectId: () => normalizeProjectId,
820239
820181
  normalizeKnowledgeSpaceId: () => normalizeKnowledgeSpaceId,
820240
820182
  normalizeHomeAssistantInstallationId: () => normalizeHomeAssistantInstallationId,
@@ -820242,12 +820184,12 @@ __export(exports_knowledge, {
820242
820184
  materializeGeneratedKnowledgeProjection: () => materializeGeneratedKnowledgeProjection,
820243
820185
  looksLikeRawPdfPayload: () => looksLikeRawPdfPayload,
820244
820186
  looksBinaryLikeText: () => looksBinaryLikeText,
820245
- loadKnowledgeStoreSnapshot: () => loadKnowledgeStoreSnapshot,
820187
+ loadKnowledgeStoreSnapshot: () => loadKnowledgeStoreSnapshot2,
820246
820188
  listGeneratedKnowledgePages: () => listGeneratedKnowledgePages,
820247
- listBrowserKinds: () => listBrowserKinds,
820189
+ listBrowserKinds: () => listBrowserKinds2,
820248
820190
  knowledgeSpaceMetadata: () => knowledgeSpaceMetadata,
820249
820191
  knowledgePageSourceWeight: () => knowledgePageSourceWeight,
820250
- knowledgeNowMs: () => nowMs,
820192
+ knowledgeNowMs: () => nowMs2,
820251
820193
  knowledgeExtractionNeedsRefresh: () => knowledgeExtractionNeedsRefresh,
820252
820194
  isUsefulKnowledgePageSourceCandidate: () => isUsefulKnowledgePageSourceCandidate,
820253
820195
  isUsefulKnowledgePageSource: () => isUsefulKnowledgePageSource,
@@ -820267,12 +820209,12 @@ __export(exports_knowledge, {
820267
820209
  generatedKnowledgeSourceId: () => generatedKnowledgeSourceId,
820268
820210
  generatedKnowledgeCanonicalUri: () => generatedKnowledgeCanonicalUri,
820269
820211
  extractKnowledgeArtifact: () => extractKnowledgeArtifact,
820270
- evaluateProjectPlanningReadiness: () => evaluateProjectPlanningReadiness,
820271
- discoverBrowserKnowledgeProfiles: () => discoverBrowserKnowledgeProfiles,
820212
+ evaluateProjectPlanningReadiness: () => evaluateProjectPlanningReadiness2,
820213
+ discoverBrowserKnowledgeProfiles: () => discoverBrowserKnowledgeProfiles2,
820272
820214
  createWebKnowledgeGapRepairer: () => createWebKnowledgeGapRepairer,
820273
820215
  createProviderBackedKnowledgeSemanticLlm: () => createProviderBackedKnowledgeSemanticLlm,
820274
820216
  createMemoryApi: () => createMemoryApi,
820275
- createKnowledgeSchema: () => createSchema2,
820217
+ createKnowledgeSchema: () => createSchema3,
820276
820218
  createKnowledgeApi: () => createKnowledgeApi,
820277
820219
  createDefaultKnowledgeConnectorRegistry: () => createDefaultKnowledgeConnectorRegistry,
820278
820220
  compareKnowledgePageSources: () => compareKnowledgePageSources,
@@ -822776,7 +822718,7 @@ var init_delivery_manager = __esm(() => {
822776
822718
  });
822777
822719
 
822778
822720
  // node_modules/@pellux/goodvibes-sdk/dist/platform/automation/scheduler-capacity.js
822779
- function computeSchedulerCapacity(slotsTotal, runs, nowMs2 = Date.now()) {
822721
+ function computeSchedulerCapacity(slotsTotal, runs, nowMs3 = Date.now()) {
822780
822722
  let slotsInUse = 0;
822781
822723
  const queuedRuns = [];
822782
822724
  for (const run7 of runs) {
@@ -822786,7 +822728,7 @@ function computeSchedulerCapacity(slotsTotal, runs, nowMs2 = Date.now()) {
822786
822728
  queuedRuns.push(run7);
822787
822729
  }
822788
822730
  const queueDepth = queuedRuns.length;
822789
- const oldestQueuedAgeMs = queueDepth > 0 ? nowMs2 - Math.min(...queuedRuns.map((r9) => r9.queuedAt)) : null;
822731
+ const oldestQueuedAgeMs = queueDepth > 0 ? nowMs3 - Math.min(...queuedRuns.map((r9) => r9.queuedAt)) : null;
822790
822732
  return { slotsTotal, slotsInUse, queueDepth, oldestQueuedAgeMs };
822791
822733
  }
822792
822734
 
@@ -851899,7 +851841,7 @@ var createStyledCell = (char, overrides = {}) => ({
851899
851841
  // src/version.ts
851900
851842
  import { readFileSync } from "fs";
851901
851843
  import { join } from "path";
851902
- var _version = "1.8.2";
851844
+ var _version = "1.9.1";
851903
851845
  try {
851904
851846
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, "..", "package.json"), "utf-8"));
851905
851847
  _version = typeof pkg.version === "string" ? pkg.version : _version;
@@ -877577,7 +877519,7 @@ var WORK_PLAN_STATUSES = [
877577
877519
  "failed",
877578
877520
  "cancelled"
877579
877521
  ];
877580
- function nowMs2() {
877522
+ function nowMs3() {
877581
877523
  return Date.now();
877582
877524
  }
877583
877525
  function isObject4(value) {
@@ -877683,7 +877625,7 @@ class WorkPlanStore {
877683
877625
  if (!normalizedTitle)
877684
877626
  throw new Error("Work plan item title is required.");
877685
877627
  const plan = this.readPlan();
877686
- const time4 = nowMs2();
877628
+ const time4 = nowMs3();
877687
877629
  const item = {
877688
877630
  id: createItemId(),
877689
877631
  title: normalizedTitle,
@@ -877707,7 +877649,7 @@ class WorkPlanStore {
877707
877649
  updateItem(idOrPrefix, patch2) {
877708
877650
  const plan = this.readPlan();
877709
877651
  const item = this.resolveItem(plan, idOrPrefix);
877710
- const time4 = nowMs2();
877652
+ const time4 = nowMs3();
877711
877653
  const nextStatus = patch2.status ?? item.status;
877712
877654
  const next = this.pruneItem({
877713
877655
  ...item,
@@ -877740,7 +877682,7 @@ class WorkPlanStore {
877740
877682
  removeItem(idOrPrefix) {
877741
877683
  const plan = this.readPlan();
877742
877684
  const item = this.resolveItem(plan, idOrPrefix);
877743
- const time4 = nowMs2();
877685
+ const time4 = nowMs3();
877744
877686
  const remaining = plan.items.filter((candidate) => candidate.id !== item.id);
877745
877687
  this.writePlan({
877746
877688
  ...plan,
@@ -877760,7 +877702,7 @@ class WorkPlanStore {
877760
877702
  ...plan,
877761
877703
  items: remaining,
877762
877704
  activeItemId: remaining[0]?.id,
877763
- updatedAt: nowMs2()
877705
+ updatedAt: nowMs3()
877764
877706
  });
877765
877707
  return removed;
877766
877708
  }
@@ -877799,7 +877741,7 @@ class WorkPlanStore {
877799
877741
  const parsed = JSON.parse(raw);
877800
877742
  if (!isObject4(parsed))
877801
877743
  return this.createEmptyPlan();
877802
- const time4 = nowMs2();
877744
+ const time4 = nowMs3();
877803
877745
  const createdAt = typeof parsed.createdAt === "number" ? parsed.createdAt : time4;
877804
877746
  const updatedAt = typeof parsed.updatedAt === "number" ? parsed.updatedAt : createdAt;
877805
877747
  const items = Array.isArray(parsed.items) ? parsed.items.map((item) => normalizeItem(item, createdAt)).filter((item) => item !== null) : [];
@@ -877818,7 +877760,7 @@ class WorkPlanStore {
877818
877760
  };
877819
877761
  }
877820
877762
  createEmptyPlan() {
877821
- const time4 = nowMs2();
877763
+ const time4 = nowMs3();
877822
877764
  return {
877823
877765
  id: createPlanId(this.options.projectId, this.options.projectRoot),
877824
877766
  projectId: this.options.projectId,
@@ -992356,8 +992298,8 @@ function formatDigestTime(at, from = Date.now()) {
992356
992298
  return `yesterday ${time4}`;
992357
992299
  return `${d5.toLocaleDateString(undefined, { month: "short", day: "numeric" })} ${time4}`;
992358
992300
  }
992359
- function formatRelativeTime(targetMs, nowMs3 = Date.now()) {
992360
- const diffMs = targetMs - nowMs3;
992301
+ function formatRelativeTime(targetMs, nowMs4 = Date.now()) {
992302
+ const diffMs = targetMs - nowMs4;
992361
992303
  if (diffMs <= 0)
992362
992304
  return "soon";
992363
992305
  const diffMin = Math.round(diffMs / 60000);
package/docs/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # GoodVibes Agent Docs
2
2
 
3
- These are the package-facing docs for the GoodVibes Agent `1.8.x` release line.
3
+ These are the package-facing docs for the GoodVibes Agent `1.9.x` release line.
4
4
 
5
5
  ## Current Docs
6
6
 
@@ -62,7 +62,11 @@ The GitHub release workflow publishes to npm only when the repository variable `
62
62
 
63
63
  Branch CI is the only workflow that runs the full test suite and release gates. It runs `bun run test` once for the release SHA, along with typecheck, architecture, performance, build, publish, packed install, and verification ledger checks. The release workflow must not run tests or duplicate those gates; shared release metadata verification rejects duplicated release-workflow gates and requires the workflow to verify that branch CI and its test job passed for the exact checked-out SHA before package packing, GitHub Release creation, and optional npm publish. It also requires the release workflow to preserve tag/package version matching, single-tarball packing, changelog excerpt extraction, and GitHub Release tarball attachment markers.
64
64
 
65
- Shared release metadata verification requires the package build scripts to keep exact TypeScript and Bun compile commands for the Agent entrypoint and platform binary names. It also requires `scripts/build.ts` to keep the prebuild/compatibility patch, multi-target matrix, sqlite-vec native addon externalization/copy policy, same-platform hard failure, cross-target warning, and build summary/failure exit behavior.
65
+ Shared release metadata verification requires the package build scripts to keep exact TypeScript and Bun compile commands for the Agent entrypoint and platform binary names. It also requires `scripts/build.ts` to keep the prebuild/compatibility patch, multi-target matrix, sqlite-vec native addon externalization/copy policy, same-platform hard failure, cross-target registry fetch of the target-platform addon, and build summary/failure exit behavior. On a cross-target build the runner does not have the target platform's optional sqlite-vec package installed, so `scripts/build.ts` fetches that platform's addon from the npm registry (pinned to the resolved `sqlite-vec` version) and copies it into `dist/lib/sqlite-vec-<os>-<arch>/`; a failed fetch or a missing addon in the fetched package is a hard build failure, never a silent skip.
66
+
67
+ ### sqlite-vec native addon release assets
68
+
69
+ A compiled Agent binary loads the sqlite-vec native addon from `<binary-dir>/lib/sqlite-vec-<os>-<arch>/vec0.<suffix>` (`vec0.so` on Linux, `vec0.dylib` on macOS). Bun cannot embed a native addon inside the compiled binary, so the release lane ships the addon as a separate per-platform asset. Each build matrix leg contributes its target's addon tree, and the GitHub Release job packages one archive per platform — `sqlite-vec-<os>-<arch>.tar.gz` — whose interior layout is exactly `lib/sqlite-vec-<os>-<arch>/vec0.<suffix>`, so it extracts in place next to the binary with no renaming. All four archives are checksummed in `SHA256SUMS.txt` alongside the binaries under the missing-entry-fatal convention: a directly-downloaded binary can restore the semantic vector index by co-locating the matching addon (see the README "Standalone binary and the semantic vector index" section). On macOS the system SQLite that `bun:sqlite` links refuses to load extensions, so the darwin archives ship for parity but the vector index stays unavailable there and memory search degrades to literal matching; this is a platform capability limit, not a packaging defect.
66
70
 
67
71
  Shared release metadata verification requires branch CI to run the compiled binary smoke after `bun run build`, and `scripts/post-build-smoke.ts` must keep the default `dist/goodvibes-agent` binary path, optional `--binary` override, isolated temp cwd, `--version` launch, sqlite-vec/`$bunfs` module-resolution leak guards, Agent version-prefix assertion, failure diagnostics, and cleanup.
68
72
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-agent",
3
- "version": "1.8.2",
3
+ "version": "1.9.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",
@@ -53,7 +53,7 @@
53
53
  "publish:dry-run": "bun run scripts/publish-package.ts --dry-run",
54
54
  "publish:check": "bun run scripts/publish-check.ts",
55
55
  "package:install-check": "bun run scripts/package-install-check.ts",
56
- "ci:gate": "bun run typecheck && bun run typecheck:test && bun run test && bun run coverage:gate && bun run architecture:check && bun run perf:check && bun run build && bun run publish:check && bun run package:install-check && bun run verification:ledger",
56
+ "ci:gate": "bun run typecheck && bun run typecheck:test && bun run test && bun run coverage:gate && bun run architecture:check && bun run workflows:check && bun run perf:check && bun run build && bun run publish:check && bun run package:install-check && bun run verification:ledger",
57
57
  "coverage:gate": "bun run scripts/coverage-gate.ts",
58
58
  "sdk:gate": "bun run scripts/sdk-release-gates.ts",
59
59
  "sdk:dev": "bun run scripts/sdk-dev.ts",
@@ -61,6 +61,7 @@
61
61
  "build:all": "bun run scripts/build.ts --all",
62
62
  "perf:check": "bun run scripts/perf-check.ts",
63
63
  "architecture:check": "bun run scripts/check-architecture.ts",
64
+ "workflows:check": "bun run scripts/check-workflows.ts",
64
65
  "verification:ledger": "bun run scripts/verification-ledger.ts",
65
66
  "verification:live": "bun run scripts/verify-live.ts",
66
67
  "ux:inventory": "bun run scripts/competitive-ux-inventory.ts"
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.8.2';
9
+ let _version = '1.9.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;