@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 +13 -0
- package/README.md +17 -1
- package/dist/package/main.js +26 -84
- package/docs/README.md +1 -1
- package/docs/release-and-publishing.md +5 -1
- package/package.json +3 -2
- package/src/version.ts +1 -1
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
|
[](https://opensource.org/licenses/MIT)
|
|
4
|
-
[](#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
|
package/dist/package/main.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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: () =>
|
|
820224
|
-
stabilizeKnowledgeText: () =>
|
|
820225
|
-
runKnowledgeSemanticSelfImprovement: () =>
|
|
820165
|
+
uniqKnowledgeValues: () => uniq3,
|
|
820166
|
+
stabilizeKnowledgeText: () => stableText2,
|
|
820167
|
+
runKnowledgeSemanticSelfImprovement: () => runKnowledgeSemanticSelfImprovement2,
|
|
820226
820168
|
resolveProjectPlanningSpace: () => resolveProjectPlanningSpace,
|
|
820227
|
-
resolveKnowledgeDbPathFromControlPlaneDir: () =>
|
|
820169
|
+
resolveKnowledgeDbPathFromControlPlaneDir: () => resolveKnowledgeDbPathFromControlPlaneDir2,
|
|
820228
820170
|
renderPacket: () => renderPacket,
|
|
820229
820171
|
renderKnowledgeSchemaSql: () => renderKnowledgeSchemaSql,
|
|
820230
820172
|
renderKnowledgeMap: () => renderKnowledgeMap,
|
|
820231
820173
|
readKnowledgeSearchText: () => readKnowledgeSearchText,
|
|
820232
|
-
readBrowserKnowledgeProfile: () =>
|
|
820174
|
+
readBrowserKnowledgeProfile: () => readBrowserKnowledgeProfile2,
|
|
820233
820175
|
projectPlanningSourceId: () => projectPlanningSourceId,
|
|
820234
820176
|
projectPlanningProjectIdFromPath: () => projectPlanningProjectIdFromPath,
|
|
820235
820177
|
projectPlanningCanonicalUri: () => projectPlanningCanonicalUri,
|
|
820236
820178
|
projectKnowledgeSpaceId: () => projectKnowledgeSpaceId,
|
|
820237
|
-
parseKnowledgeJsonValue: () =>
|
|
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: () =>
|
|
820187
|
+
loadKnowledgeStoreSnapshot: () => loadKnowledgeStoreSnapshot2,
|
|
820246
820188
|
listGeneratedKnowledgePages: () => listGeneratedKnowledgePages,
|
|
820247
|
-
listBrowserKinds: () =>
|
|
820189
|
+
listBrowserKinds: () => listBrowserKinds2,
|
|
820248
820190
|
knowledgeSpaceMetadata: () => knowledgeSpaceMetadata,
|
|
820249
820191
|
knowledgePageSourceWeight: () => knowledgePageSourceWeight,
|
|
820250
|
-
knowledgeNowMs: () =>
|
|
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: () =>
|
|
820271
|
-
discoverBrowserKnowledgeProfiles: () =>
|
|
820212
|
+
evaluateProjectPlanningReadiness: () => evaluateProjectPlanningReadiness2,
|
|
820213
|
+
discoverBrowserKnowledgeProfiles: () => discoverBrowserKnowledgeProfiles2,
|
|
820272
820214
|
createWebKnowledgeGapRepairer: () => createWebKnowledgeGapRepairer,
|
|
820273
820215
|
createProviderBackedKnowledgeSemanticLlm: () => createProviderBackedKnowledgeSemanticLlm,
|
|
820274
820216
|
createMemoryApi: () => createMemoryApi,
|
|
820275
|
-
createKnowledgeSchema: () =>
|
|
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,
|
|
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 ?
|
|
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.
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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:
|
|
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 =
|
|
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 =
|
|
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,
|
|
992360
|
-
const diffMs = targetMs -
|
|
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
|
@@ -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
|
|
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.
|
|
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.
|
|
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;
|