@pellux/goodvibes-agent 1.8.0 → 1.8.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 +4 -0
- package/README.md +1 -1
- package/dist/package/main.js +104 -38
- package/package.json +1 -1
- package/src/runtime/services.ts +16 -1
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Product-facing release notes for GoodVibes Agent.
|
|
4
4
|
|
|
5
|
+
## 1.8.1 - 2026-07-09
|
|
6
|
+
|
|
7
|
+
- Fixes every ws-only control-plane verb (fleet, checkpoints, session search, push) answering 501 'Gateway method is not invokable' on the vendored daemon — handlers are now attached at runtime construction, with a release gate that invokes them end-to-end.
|
|
8
|
+
|
|
5
9
|
## 1.8.0 - 2026-07-09
|
|
6
10
|
|
|
7
11
|
- Adopts platform SDK 1.6.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
|
|
package/dist/package/main.js
CHANGED
|
@@ -465260,6 +465260,23 @@ function createSchema2(db) {
|
|
|
465260
465260
|
)
|
|
465261
465261
|
`);
|
|
465262
465262
|
}
|
|
465263
|
+
function getKnowledgeSchemaStatements() {
|
|
465264
|
+
const statements = [];
|
|
465265
|
+
createSchema2({
|
|
465266
|
+
run(sql) {
|
|
465267
|
+
const normalized = sql.trim();
|
|
465268
|
+
if (normalized.length > 0)
|
|
465269
|
+
statements.push(normalized);
|
|
465270
|
+
}
|
|
465271
|
+
});
|
|
465272
|
+
return statements;
|
|
465273
|
+
}
|
|
465274
|
+
function renderKnowledgeSchemaSql() {
|
|
465275
|
+
return `${getKnowledgeSchemaStatements().map((statement) => statement.endsWith(";") ? statement : `${statement};`).join(`
|
|
465276
|
+
|
|
465277
|
+
`)}
|
|
465278
|
+
`;
|
|
465279
|
+
}
|
|
465263
465280
|
function rowObject(columns, values2) {
|
|
465264
465281
|
return Object.fromEntries(columns.map((column, index) => [column, values2[index]]));
|
|
465265
465282
|
}
|
|
@@ -778632,6 +778649,9 @@ var init_ingest = __esm(() => {
|
|
|
778632
778649
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/browser-history/index.js
|
|
778633
778650
|
var init_browser_history = __esm(() => {
|
|
778634
778651
|
init_ingest();
|
|
778652
|
+
init_discover();
|
|
778653
|
+
init_readers();
|
|
778654
|
+
init_paths2();
|
|
778635
778655
|
});
|
|
778636
778656
|
|
|
778637
778657
|
// node_modules/graphql/jsutils/devAssert.mjs
|
|
@@ -796506,6 +796526,7 @@ var init_semantic = __esm(() => {
|
|
|
796506
796526
|
init_llm();
|
|
796507
796527
|
init_gap_repair();
|
|
796508
796528
|
init_service5();
|
|
796529
|
+
init_self_improvement();
|
|
796509
796530
|
});
|
|
796510
796531
|
|
|
796511
796532
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/helpers.js
|
|
@@ -800474,8 +800495,40 @@ var init_map_view = __esm(() => {
|
|
|
800474
800495
|
});
|
|
800475
800496
|
|
|
800476
800497
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/types.js
|
|
800477
|
-
var HOME_GRAPH_CAPABILITIES;
|
|
800498
|
+
var HOME_GRAPH_NODE_KINDS, HOME_GRAPH_RELATIONS, HOME_GRAPH_CAPABILITIES;
|
|
800478
800499
|
var init_types15 = __esm(() => {
|
|
800500
|
+
HOME_GRAPH_NODE_KINDS = [
|
|
800501
|
+
"ha_home",
|
|
800502
|
+
"ha_entity",
|
|
800503
|
+
"ha_device",
|
|
800504
|
+
"ha_area",
|
|
800505
|
+
"ha_automation",
|
|
800506
|
+
"ha_script",
|
|
800507
|
+
"ha_scene",
|
|
800508
|
+
"ha_label",
|
|
800509
|
+
"ha_integration",
|
|
800510
|
+
"ha_room",
|
|
800511
|
+
"ha_device_passport",
|
|
800512
|
+
"ha_maintenance_item",
|
|
800513
|
+
"ha_troubleshooting_case",
|
|
800514
|
+
"ha_purchase",
|
|
800515
|
+
"ha_network_node"
|
|
800516
|
+
];
|
|
800517
|
+
HOME_GRAPH_RELATIONS = [
|
|
800518
|
+
"controls",
|
|
800519
|
+
"located_in",
|
|
800520
|
+
"belongs_to_device",
|
|
800521
|
+
"has_manual",
|
|
800522
|
+
"has_receipt",
|
|
800523
|
+
"has_warranty",
|
|
800524
|
+
"has_issue",
|
|
800525
|
+
"fixed_by",
|
|
800526
|
+
"uses_battery",
|
|
800527
|
+
"connected_via",
|
|
800528
|
+
"part_of_network",
|
|
800529
|
+
"mentioned_by",
|
|
800530
|
+
"source_for"
|
|
800531
|
+
];
|
|
800479
800532
|
HOME_GRAPH_CAPABILITIES = [
|
|
800480
800533
|
"knowledge-space-isolation",
|
|
800481
800534
|
"snapshot-sync",
|
|
@@ -802266,6 +802319,7 @@ var init_service6 = __esm(() => {
|
|
|
802266
802319
|
var init_home_graph = __esm(() => {
|
|
802267
802320
|
init_service6();
|
|
802268
802321
|
init_extension();
|
|
802322
|
+
init_types15();
|
|
802269
802323
|
});
|
|
802270
802324
|
|
|
802271
802325
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/store-record-delete.js
|
|
@@ -804690,10 +804744,14 @@ var init_service7 = __esm(() => {
|
|
|
804690
804744
|
var init_project_planning = __esm(() => {
|
|
804691
804745
|
init_service7();
|
|
804692
804746
|
init_helpers3();
|
|
804747
|
+
init_readiness();
|
|
804693
804748
|
});
|
|
804694
804749
|
|
|
804695
804750
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/persistence.js
|
|
804696
|
-
var init_persistence = () => {
|
|
804751
|
+
var init_persistence = __esm(() => {
|
|
804752
|
+
init_store_schema();
|
|
804753
|
+
init_store_load();
|
|
804754
|
+
});
|
|
804697
804755
|
|
|
804698
804756
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/projections.js
|
|
804699
804757
|
class KnowledgeProjectionService {
|
|
@@ -808247,21 +808305,21 @@ var init_service8 = __esm(() => {
|
|
|
808247
808305
|
var exports_knowledge = {};
|
|
808248
808306
|
__export(exports_knowledge, {
|
|
808249
808307
|
withKnowledgeSpace: () => withKnowledgeSpace,
|
|
808250
|
-
uniqKnowledgeValues: () =>
|
|
808251
|
-
stabilizeKnowledgeText: () =>
|
|
808252
|
-
runKnowledgeSemanticSelfImprovement: () =>
|
|
808308
|
+
uniqKnowledgeValues: () => uniq2,
|
|
808309
|
+
stabilizeKnowledgeText: () => stableText,
|
|
808310
|
+
runKnowledgeSemanticSelfImprovement: () => runKnowledgeSemanticSelfImprovement,
|
|
808253
808311
|
resolveProjectPlanningSpace: () => resolveProjectPlanningSpace,
|
|
808254
|
-
resolveKnowledgeDbPathFromControlPlaneDir: () =>
|
|
808312
|
+
resolveKnowledgeDbPathFromControlPlaneDir: () => resolveKnowledgeDbPathFromControlPlaneDir,
|
|
808255
808313
|
renderPacket: () => renderPacket,
|
|
808256
808314
|
renderKnowledgeSchemaSql: () => renderKnowledgeSchemaSql,
|
|
808257
808315
|
renderKnowledgeMap: () => renderKnowledgeMap,
|
|
808258
808316
|
readKnowledgeSearchText: () => readKnowledgeSearchText,
|
|
808259
|
-
readBrowserKnowledgeProfile: () =>
|
|
808317
|
+
readBrowserKnowledgeProfile: () => readBrowserKnowledgeProfile,
|
|
808260
808318
|
projectPlanningSourceId: () => projectPlanningSourceId,
|
|
808261
808319
|
projectPlanningProjectIdFromPath: () => projectPlanningProjectIdFromPath,
|
|
808262
808320
|
projectPlanningCanonicalUri: () => projectPlanningCanonicalUri,
|
|
808263
808321
|
projectKnowledgeSpaceId: () => projectKnowledgeSpaceId,
|
|
808264
|
-
parseKnowledgeJsonValue: () =>
|
|
808322
|
+
parseKnowledgeJsonValue: () => parseJsonValue,
|
|
808265
808323
|
normalizeProjectId: () => normalizeProjectId,
|
|
808266
808324
|
normalizeKnowledgeSpaceId: () => normalizeKnowledgeSpaceId,
|
|
808267
808325
|
normalizeHomeAssistantInstallationId: () => normalizeHomeAssistantInstallationId,
|
|
@@ -808269,12 +808327,12 @@ __export(exports_knowledge, {
|
|
|
808269
808327
|
materializeGeneratedKnowledgeProjection: () => materializeGeneratedKnowledgeProjection,
|
|
808270
808328
|
looksLikeRawPdfPayload: () => looksLikeRawPdfPayload,
|
|
808271
808329
|
looksBinaryLikeText: () => looksBinaryLikeText,
|
|
808272
|
-
loadKnowledgeStoreSnapshot: () =>
|
|
808330
|
+
loadKnowledgeStoreSnapshot: () => loadKnowledgeStoreSnapshot,
|
|
808273
808331
|
listGeneratedKnowledgePages: () => listGeneratedKnowledgePages,
|
|
808274
|
-
listBrowserKinds: () =>
|
|
808332
|
+
listBrowserKinds: () => listBrowserKinds,
|
|
808275
808333
|
knowledgeSpaceMetadata: () => knowledgeSpaceMetadata,
|
|
808276
808334
|
knowledgePageSourceWeight: () => knowledgePageSourceWeight,
|
|
808277
|
-
knowledgeNowMs: () =>
|
|
808335
|
+
knowledgeNowMs: () => nowMs,
|
|
808278
808336
|
knowledgeExtractionNeedsRefresh: () => knowledgeExtractionNeedsRefresh,
|
|
808279
808337
|
isUsefulKnowledgePageSourceCandidate: () => isUsefulKnowledgePageSourceCandidate,
|
|
808280
808338
|
isUsefulKnowledgePageSource: () => isUsefulKnowledgePageSource,
|
|
@@ -808294,12 +808352,12 @@ __export(exports_knowledge, {
|
|
|
808294
808352
|
generatedKnowledgeSourceId: () => generatedKnowledgeSourceId,
|
|
808295
808353
|
generatedKnowledgeCanonicalUri: () => generatedKnowledgeCanonicalUri,
|
|
808296
808354
|
extractKnowledgeArtifact: () => extractKnowledgeArtifact,
|
|
808297
|
-
evaluateProjectPlanningReadiness: () =>
|
|
808298
|
-
discoverBrowserKnowledgeProfiles: () =>
|
|
808355
|
+
evaluateProjectPlanningReadiness: () => evaluateProjectPlanningReadiness,
|
|
808356
|
+
discoverBrowserKnowledgeProfiles: () => discoverBrowserKnowledgeProfiles,
|
|
808299
808357
|
createWebKnowledgeGapRepairer: () => createWebKnowledgeGapRepairer,
|
|
808300
808358
|
createProviderBackedKnowledgeSemanticLlm: () => createProviderBackedKnowledgeSemanticLlm,
|
|
808301
808359
|
createMemoryApi: () => createMemoryApi,
|
|
808302
|
-
createKnowledgeSchema: () =>
|
|
808360
|
+
createKnowledgeSchema: () => createSchema2,
|
|
808303
808361
|
createKnowledgeApi: () => createKnowledgeApi,
|
|
808304
808362
|
createDefaultKnowledgeConnectorRegistry: () => createDefaultKnowledgeConnectorRegistry,
|
|
808305
808363
|
compareKnowledgePageSources: () => compareKnowledgePageSources,
|
|
@@ -810772,7 +810830,7 @@ var init_delivery_manager = __esm(() => {
|
|
|
810772
810830
|
});
|
|
810773
810831
|
|
|
810774
810832
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/automation/scheduler-capacity.js
|
|
810775
|
-
function computeSchedulerCapacity(slotsTotal, runs,
|
|
810833
|
+
function computeSchedulerCapacity(slotsTotal, runs, nowMs2 = Date.now()) {
|
|
810776
810834
|
let slotsInUse = 0;
|
|
810777
810835
|
const queuedRuns = [];
|
|
810778
810836
|
for (const run7 of runs) {
|
|
@@ -810782,7 +810840,7 @@ function computeSchedulerCapacity(slotsTotal, runs, nowMs3 = Date.now()) {
|
|
|
810782
810840
|
queuedRuns.push(run7);
|
|
810783
810841
|
}
|
|
810784
810842
|
const queueDepth = queuedRuns.length;
|
|
810785
|
-
const oldestQueuedAgeMs = queueDepth > 0 ?
|
|
810843
|
+
const oldestQueuedAgeMs = queueDepth > 0 ? nowMs2 - Math.min(...queuedRuns.map((r6) => r6.queuedAt)) : null;
|
|
810786
810844
|
return { slotsTotal, slotsInUse, queueDepth, oldestQueuedAgeMs };
|
|
810787
810845
|
}
|
|
810788
810846
|
|
|
@@ -838414,7 +838472,7 @@ var createStyledCell = (char, overrides = {}) => ({
|
|
|
838414
838472
|
// src/version.ts
|
|
838415
838473
|
import { readFileSync } from "fs";
|
|
838416
838474
|
import { join } from "path";
|
|
838417
|
-
var _version = "1.8.
|
|
838475
|
+
var _version = "1.8.1";
|
|
838418
838476
|
try {
|
|
838419
838477
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, "..", "package.json"), "utf-8"));
|
|
838420
838478
|
_version = typeof pkg.version === "string" ? pkg.version : _version;
|
|
@@ -863622,7 +863680,7 @@ var WORK_PLAN_STATUSES = [
|
|
|
863622
863680
|
"failed",
|
|
863623
863681
|
"cancelled"
|
|
863624
863682
|
];
|
|
863625
|
-
function
|
|
863683
|
+
function nowMs2() {
|
|
863626
863684
|
return Date.now();
|
|
863627
863685
|
}
|
|
863628
863686
|
function isObject4(value) {
|
|
@@ -863728,7 +863786,7 @@ class WorkPlanStore {
|
|
|
863728
863786
|
if (!normalizedTitle)
|
|
863729
863787
|
throw new Error("Work plan item title is required.");
|
|
863730
863788
|
const plan = this.readPlan();
|
|
863731
|
-
const time4 =
|
|
863789
|
+
const time4 = nowMs2();
|
|
863732
863790
|
const item = {
|
|
863733
863791
|
id: createItemId(),
|
|
863734
863792
|
title: normalizedTitle,
|
|
@@ -863752,7 +863810,7 @@ class WorkPlanStore {
|
|
|
863752
863810
|
updateItem(idOrPrefix, patch2) {
|
|
863753
863811
|
const plan = this.readPlan();
|
|
863754
863812
|
const item = this.resolveItem(plan, idOrPrefix);
|
|
863755
|
-
const time4 =
|
|
863813
|
+
const time4 = nowMs2();
|
|
863756
863814
|
const nextStatus = patch2.status ?? item.status;
|
|
863757
863815
|
const next = this.pruneItem({
|
|
863758
863816
|
...item,
|
|
@@ -863785,7 +863843,7 @@ class WorkPlanStore {
|
|
|
863785
863843
|
removeItem(idOrPrefix) {
|
|
863786
863844
|
const plan = this.readPlan();
|
|
863787
863845
|
const item = this.resolveItem(plan, idOrPrefix);
|
|
863788
|
-
const time4 =
|
|
863846
|
+
const time4 = nowMs2();
|
|
863789
863847
|
const remaining = plan.items.filter((candidate) => candidate.id !== item.id);
|
|
863790
863848
|
this.writePlan({
|
|
863791
863849
|
...plan,
|
|
@@ -863805,7 +863863,7 @@ class WorkPlanStore {
|
|
|
863805
863863
|
...plan,
|
|
863806
863864
|
items: remaining,
|
|
863807
863865
|
activeItemId: remaining[0]?.id,
|
|
863808
|
-
updatedAt:
|
|
863866
|
+
updatedAt: nowMs2()
|
|
863809
863867
|
});
|
|
863810
863868
|
return removed;
|
|
863811
863869
|
}
|
|
@@ -863844,7 +863902,7 @@ class WorkPlanStore {
|
|
|
863844
863902
|
const parsed = JSON.parse(raw);
|
|
863845
863903
|
if (!isObject4(parsed))
|
|
863846
863904
|
return this.createEmptyPlan();
|
|
863847
|
-
const time4 =
|
|
863905
|
+
const time4 = nowMs2();
|
|
863848
863906
|
const createdAt = typeof parsed.createdAt === "number" ? parsed.createdAt : time4;
|
|
863849
863907
|
const updatedAt = typeof parsed.updatedAt === "number" ? parsed.updatedAt : createdAt;
|
|
863850
863908
|
const items = Array.isArray(parsed.items) ? parsed.items.map((item) => normalizeItem(item, createdAt)).filter((item) => item !== null) : [];
|
|
@@ -863863,7 +863921,7 @@ class WorkPlanStore {
|
|
|
863863
863921
|
};
|
|
863864
863922
|
}
|
|
863865
863923
|
createEmptyPlan() {
|
|
863866
|
-
const time4 =
|
|
863924
|
+
const time4 = nowMs2();
|
|
863867
863925
|
return {
|
|
863868
863926
|
id: createPlanId(this.options.projectId, this.options.projectRoot),
|
|
863869
863927
|
projectId: this.options.projectId,
|
|
@@ -864683,6 +864741,14 @@ function createRuntimeServices2(options) {
|
|
|
864683
864741
|
const workspaceCheckpointManager = new WorkspaceCheckpointManager({
|
|
864684
864742
|
workspaceRoot: workingDirectory
|
|
864685
864743
|
});
|
|
864744
|
+
registerGatewayVerbGroups(gatewayMethods, {
|
|
864745
|
+
processRegistry,
|
|
864746
|
+
workspaceCheckpointManager,
|
|
864747
|
+
sessionBroker,
|
|
864748
|
+
secretsManager,
|
|
864749
|
+
approvalBroker,
|
|
864750
|
+
shellPaths
|
|
864751
|
+
});
|
|
864686
864752
|
return {
|
|
864687
864753
|
workingDirectory,
|
|
864688
864754
|
homeDirectory,
|
|
@@ -895677,13 +895743,13 @@ init_state();
|
|
|
895677
895743
|
|
|
895678
895744
|
// src/input/commands/recall-shared.ts
|
|
895679
895745
|
var VALID_CLASSES = ["decision", "constraint", "incident", "pattern", "fact", "risk", "runbook", "architecture", "ownership"];
|
|
895680
|
-
var
|
|
895746
|
+
var VALID_SCOPES = ["session", "project", "team"];
|
|
895681
895747
|
var VALID_REVIEW_STATES = ["fresh", "reviewed", "stale", "contradicted"];
|
|
895682
895748
|
function isValidClass(s4) {
|
|
895683
895749
|
return VALID_CLASSES.includes(s4);
|
|
895684
895750
|
}
|
|
895685
895751
|
function isValidScope(s4) {
|
|
895686
|
-
return
|
|
895752
|
+
return VALID_SCOPES.includes(s4);
|
|
895687
895753
|
}
|
|
895688
895754
|
function isValidReviewState(s4) {
|
|
895689
895755
|
return VALID_REVIEW_STATES.includes(s4);
|
|
@@ -895726,7 +895792,7 @@ function handleRecallSearch(args2, context) {
|
|
|
895726
895792
|
if (isValidScope(scope))
|
|
895727
895793
|
filter.scope = scope;
|
|
895728
895794
|
else {
|
|
895729
|
-
context.print(`[memory] Unknown scope "${scope}". Valid values ${
|
|
895795
|
+
context.print(`[memory] Unknown scope "${scope}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
895730
895796
|
return;
|
|
895731
895797
|
}
|
|
895732
895798
|
}
|
|
@@ -895901,7 +895967,7 @@ function handleRecallList(args2, context) {
|
|
|
895901
895967
|
if (scopeIdx !== -1 && args2[scopeIdx + 1]) {
|
|
895902
895968
|
const scope = args2[scopeIdx + 1];
|
|
895903
895969
|
if (!isValidScope(scope)) {
|
|
895904
|
-
context.print(`[memory] Unknown scope "${scope}". Valid values ${
|
|
895970
|
+
context.print(`[memory] Unknown scope "${scope}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
895905
895971
|
return;
|
|
895906
895972
|
}
|
|
895907
895973
|
filter.scope = scope;
|
|
@@ -895951,7 +896017,7 @@ async function handleRecallAdd(args2, context) {
|
|
|
895951
896017
|
const tags = tagsRaw ? tagsRaw.split(",").map((token) => token.trim()).filter(Boolean) : [];
|
|
895952
896018
|
const scope = scopeRaw && isValidScope(scopeRaw) ? scopeRaw : "project";
|
|
895953
896019
|
if (scopeRaw && !isValidScope(scopeRaw)) {
|
|
895954
|
-
context.print(`[memory] Invalid scope "${scopeRaw}". Valid values ${
|
|
896020
|
+
context.print(`[memory] Invalid scope "${scopeRaw}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
895955
896021
|
return;
|
|
895956
896022
|
}
|
|
895957
896023
|
const provenance = [];
|
|
@@ -896086,7 +896152,7 @@ function handleRecallExport(args2, context) {
|
|
|
896086
896152
|
if (scopeIdx !== -1 && commandArgs[scopeIdx + 1]) {
|
|
896087
896153
|
const scope = commandArgs[scopeIdx + 1];
|
|
896088
896154
|
if (!isValidScope(scope)) {
|
|
896089
|
-
context.print(`[memory] Unknown scope "${scope}". Valid values ${
|
|
896155
|
+
context.print(`[memory] Unknown scope "${scope}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
896090
896156
|
return;
|
|
896091
896157
|
}
|
|
896092
896158
|
filter.scope = scope;
|
|
@@ -896165,7 +896231,7 @@ function handleRecallHandoffExport(args2, context) {
|
|
|
896165
896231
|
const scopeIdx = commandArgs.indexOf("--scope");
|
|
896166
896232
|
const scopeRaw = scopeIdx !== -1 ? commandArgs[scopeIdx + 1] : "team";
|
|
896167
896233
|
if (!scopeRaw || !isValidScope(scopeRaw)) {
|
|
896168
|
-
context.print(`[memory] Unknown scope "${scopeRaw ?? ""}". Valid values ${
|
|
896234
|
+
context.print(`[memory] Unknown scope "${scopeRaw ?? ""}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
896169
896235
|
return;
|
|
896170
896236
|
}
|
|
896171
896237
|
const bundle = memory.exportBundle({ scope: scopeRaw });
|
|
@@ -896281,7 +896347,7 @@ function handleRecallPromote(args2, context) {
|
|
|
896281
896347
|
const id = parsed.rest[0];
|
|
896282
896348
|
const scope = parsed.rest[1];
|
|
896283
896349
|
if (!id || !scope || !isValidScope(scope)) {
|
|
896284
|
-
context.print(`[memory] Usage: /memory promote <id> <${
|
|
896350
|
+
context.print(`[memory] Usage: /memory promote <id> <${VALID_SCOPES.join("|")}> --yes`);
|
|
896285
896351
|
return;
|
|
896286
896352
|
}
|
|
896287
896353
|
if (!parsed.yes) {
|
|
@@ -909871,7 +909937,7 @@ async function tryWireMemoryCommand(runtime2, normalized, rest) {
|
|
|
909871
909937
|
|
|
909872
909938
|
// src/cli/memory-command.ts
|
|
909873
909939
|
var VALID_CLASSES2 = ["decision", "constraint", "incident", "pattern", "fact", "risk", "runbook", "architecture", "ownership"];
|
|
909874
|
-
var
|
|
909940
|
+
var VALID_SCOPES3 = ["session", "project", "team"];
|
|
909875
909941
|
var VALID_REVIEW_STATES3 = ["fresh", "reviewed", "stale", "contradicted"];
|
|
909876
909942
|
var VALID_PROVENANCE_KINDS = ["session", "turn", "task", "event", "file"];
|
|
909877
909943
|
var VALUE_OPTIONS = new Set([
|
|
@@ -909971,7 +910037,7 @@ function isMemoryClass2(value) {
|
|
|
909971
910037
|
return VALID_CLASSES2.includes(value);
|
|
909972
910038
|
}
|
|
909973
910039
|
function isMemoryScope2(value) {
|
|
909974
|
-
return
|
|
910040
|
+
return VALID_SCOPES3.includes(value);
|
|
909975
910041
|
}
|
|
909976
910042
|
function isReviewState(value) {
|
|
909977
910043
|
return VALID_REVIEW_STATES3.includes(value);
|
|
@@ -909986,7 +910052,7 @@ function requireClass(value) {
|
|
|
909986
910052
|
}
|
|
909987
910053
|
function requireScope(value) {
|
|
909988
910054
|
if (!value || !isMemoryScope2(value))
|
|
909989
|
-
throw new Error(`Invalid memory scope "${value ?? ""}". Valid values ${
|
|
910055
|
+
throw new Error(`Invalid memory scope "${value ?? ""}". Valid values ${VALID_SCOPES3.join(", ")}`);
|
|
909990
910056
|
return value;
|
|
909991
910057
|
}
|
|
909992
910058
|
function optionalScope(value) {
|
|
@@ -964004,7 +964070,7 @@ var invokeContractRoute2 = exports_transport.invokeContractRoute;
|
|
|
964004
964070
|
var openContractRouteStream2 = exports_transport.openContractRouteStream;
|
|
964005
964071
|
var requireContractRoute2 = exports_transport.requireContractRoute;
|
|
964006
964072
|
var isAbortError6 = exports_transport.isAbortError;
|
|
964007
|
-
var
|
|
964073
|
+
var openServerSentEventStream3 = exports_transport.openServerSentEventStream;
|
|
964008
964074
|
var createOperatorRemoteClient2 = exports_transport.createOperatorRemoteClient;
|
|
964009
964075
|
var createPeerRemoteClient2 = exports_transport.createPeerRemoteClient;
|
|
964010
964076
|
var buildEventSourceUrl2 = exports_transport.buildEventSourceUrl;
|
|
@@ -975678,8 +975744,8 @@ function formatDigestTime(at, from = Date.now()) {
|
|
|
975678
975744
|
return `yesterday ${time4}`;
|
|
975679
975745
|
return `${d4.toLocaleDateString(undefined, { month: "short", day: "numeric" })} ${time4}`;
|
|
975680
975746
|
}
|
|
975681
|
-
function formatRelativeTime(targetMs,
|
|
975682
|
-
const diffMs = targetMs -
|
|
975747
|
+
function formatRelativeTime(targetMs, nowMs3 = Date.now()) {
|
|
975748
|
+
const diffMs = targetMs - nowMs3;
|
|
975683
975749
|
if (diffMs <= 0)
|
|
975684
975750
|
return "soon";
|
|
975685
975751
|
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.8.
|
|
3
|
+
"version": "1.8.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",
|
package/src/runtime/services.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { SubscriptionManager } from '@pellux/goodvibes-sdk/platform/config';
|
|
|
9
9
|
import { AutomationDeliveryManager, AutomationManager, AutomationRouteStore } from '@pellux/goodvibes-sdk/platform/automation';
|
|
10
10
|
import { ChannelPluginRegistry, ChannelPolicyManager, RouteBindingManager, SurfaceRegistry } from '@pellux/goodvibes-sdk/platform/channels';
|
|
11
11
|
import { ChannelDeliveryRouter } from '@pellux/goodvibes-sdk/platform/channels';
|
|
12
|
-
import { ApprovalBroker, GatewayMethodCatalog, SharedSessionBroker } from '@pellux/goodvibes-sdk/platform/control-plane';
|
|
12
|
+
import { ApprovalBroker, GatewayMethodCatalog, SharedSessionBroker, registerGatewayVerbGroups } from '@pellux/goodvibes-sdk/platform/control-plane';
|
|
13
13
|
import type { SharedSessionRoutingIntent } from '@pellux/goodvibes-sdk/platform/control-plane';
|
|
14
14
|
import { logger } from '@pellux/goodvibes-sdk/platform/utils';
|
|
15
15
|
import { AGENT_SPINE_PARTICIPANT, SessionSpineClient } from '@pellux/goodvibes-sdk/platform/runtime/session-spine';
|
|
@@ -952,6 +952,21 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
952
952
|
workspaceRoot: workingDirectory,
|
|
953
953
|
});
|
|
954
954
|
|
|
955
|
+
// Attach handlers for every ws-only gateway verb group (fleet.* including
|
|
956
|
+
// the archive verbs, checkpoints.*, sessions.search, push.*). Without this
|
|
957
|
+
// call the catalog carries descriptors but no handlers, and every one of
|
|
958
|
+
// those verbs answers 501 "Gateway method is not invokable" — the same gap
|
|
959
|
+
// the companion app found on the TUI-vendored daemon. Mirrors the SDK
|
|
960
|
+
// runtime's composition root (goodvibes-sdk platform/runtime/services.ts).
|
|
961
|
+
registerGatewayVerbGroups(gatewayMethods, {
|
|
962
|
+
processRegistry,
|
|
963
|
+
workspaceCheckpointManager,
|
|
964
|
+
sessionBroker,
|
|
965
|
+
secretsManager,
|
|
966
|
+
approvalBroker,
|
|
967
|
+
shellPaths,
|
|
968
|
+
});
|
|
969
|
+
|
|
955
970
|
return {
|
|
956
971
|
workingDirectory,
|
|
957
972
|
homeDirectory,
|
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.
|
|
9
|
+
let _version = '1.8.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;
|