@pellux/goodvibes-agent 1.0.42 → 1.0.44
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 +10 -0
- package/dist/package/main.js +139 -299
- package/package.json +1 -1
- package/src/renderer/agent-workspace.ts +164 -326
- package/src/version.ts +1 -1
package/dist/package/main.js
CHANGED
|
@@ -450372,23 +450372,6 @@ function createSchema2(db) {
|
|
|
450372
450372
|
`);
|
|
450373
450373
|
db.run(`CREATE INDEX IF NOT EXISTS idx_knowledge_schedules_job_id ON knowledge_schedules(job_id)`);
|
|
450374
450374
|
}
|
|
450375
|
-
function getKnowledgeSchemaStatements() {
|
|
450376
|
-
const statements = [];
|
|
450377
|
-
createSchema2({
|
|
450378
|
-
run(sql) {
|
|
450379
|
-
const normalized = sql.trim();
|
|
450380
|
-
if (normalized.length > 0)
|
|
450381
|
-
statements.push(normalized);
|
|
450382
|
-
}
|
|
450383
|
-
});
|
|
450384
|
-
return statements;
|
|
450385
|
-
}
|
|
450386
|
-
function renderKnowledgeSchemaSql() {
|
|
450387
|
-
return `${getKnowledgeSchemaStatements().map((statement) => statement.endsWith(";") ? statement : `${statement};`).join(`
|
|
450388
|
-
|
|
450389
|
-
`)}
|
|
450390
|
-
`;
|
|
450391
|
-
}
|
|
450392
450375
|
function rowObject(columns, values2) {
|
|
450393
450376
|
return Object.fromEntries(columns.map((column, index) => [column, values2[index]]));
|
|
450394
450377
|
}
|
|
@@ -763671,9 +763654,6 @@ var init_ingest = __esm(() => {
|
|
|
763671
763654
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/browser-history/index.js
|
|
763672
763655
|
var init_browser_history = __esm(() => {
|
|
763673
763656
|
init_ingest();
|
|
763674
|
-
init_discover();
|
|
763675
|
-
init_readers();
|
|
763676
|
-
init_paths2();
|
|
763677
763657
|
});
|
|
763678
763658
|
|
|
763679
763659
|
// node_modules/graphql/jsutils/devAssert.mjs
|
|
@@ -781313,7 +781293,6 @@ var init_semantic = __esm(() => {
|
|
|
781313
781293
|
init_llm();
|
|
781314
781294
|
init_gap_repair();
|
|
781315
781295
|
init_service4();
|
|
781316
|
-
init_self_improvement();
|
|
781317
781296
|
});
|
|
781318
781297
|
|
|
781319
781298
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/helpers.js
|
|
@@ -785282,40 +785261,8 @@ var init_map_view = __esm(() => {
|
|
|
785282
785261
|
});
|
|
785283
785262
|
|
|
785284
785263
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/types.js
|
|
785285
|
-
var
|
|
785264
|
+
var HOME_GRAPH_CAPABILITIES;
|
|
785286
785265
|
var init_types15 = __esm(() => {
|
|
785287
|
-
HOME_GRAPH_NODE_KINDS = [
|
|
785288
|
-
"ha_home",
|
|
785289
|
-
"ha_entity",
|
|
785290
|
-
"ha_device",
|
|
785291
|
-
"ha_area",
|
|
785292
|
-
"ha_automation",
|
|
785293
|
-
"ha_script",
|
|
785294
|
-
"ha_scene",
|
|
785295
|
-
"ha_label",
|
|
785296
|
-
"ha_integration",
|
|
785297
|
-
"ha_room",
|
|
785298
|
-
"ha_device_passport",
|
|
785299
|
-
"ha_maintenance_item",
|
|
785300
|
-
"ha_troubleshooting_case",
|
|
785301
|
-
"ha_purchase",
|
|
785302
|
-
"ha_network_node"
|
|
785303
|
-
];
|
|
785304
|
-
HOME_GRAPH_RELATIONS = [
|
|
785305
|
-
"controls",
|
|
785306
|
-
"located_in",
|
|
785307
|
-
"belongs_to_device",
|
|
785308
|
-
"has_manual",
|
|
785309
|
-
"has_receipt",
|
|
785310
|
-
"has_warranty",
|
|
785311
|
-
"has_issue",
|
|
785312
|
-
"fixed_by",
|
|
785313
|
-
"uses_battery",
|
|
785314
|
-
"connected_via",
|
|
785315
|
-
"part_of_network",
|
|
785316
|
-
"mentioned_by",
|
|
785317
|
-
"source_for"
|
|
785318
|
-
];
|
|
785319
785266
|
HOME_GRAPH_CAPABILITIES = [
|
|
785320
785267
|
"knowledge-space-isolation",
|
|
785321
785268
|
"snapshot-sync",
|
|
@@ -786722,7 +786669,6 @@ var init_service5 = __esm(() => {
|
|
|
786722
786669
|
var init_home_graph = __esm(() => {
|
|
786723
786670
|
init_service5();
|
|
786724
786671
|
init_extension();
|
|
786725
|
-
init_types15();
|
|
786726
786672
|
});
|
|
786727
786673
|
|
|
786728
786674
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/store-refinement.js
|
|
@@ -789050,14 +788996,10 @@ var init_service6 = __esm(() => {
|
|
|
789050
788996
|
var init_project_planning = __esm(() => {
|
|
789051
788997
|
init_service6();
|
|
789052
788998
|
init_helpers3();
|
|
789053
|
-
init_readiness();
|
|
789054
788999
|
});
|
|
789055
789000
|
|
|
789056
789001
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/persistence.js
|
|
789057
|
-
var init_persistence =
|
|
789058
|
-
init_store_schema();
|
|
789059
|
-
init_store_load();
|
|
789060
|
-
});
|
|
789002
|
+
var init_persistence = () => {};
|
|
789061
789003
|
|
|
789062
789004
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/projections.js
|
|
789063
789005
|
class KnowledgeProjectionService {
|
|
@@ -792565,21 +792507,21 @@ var init_service7 = __esm(() => {
|
|
|
792565
792507
|
var exports_knowledge = {};
|
|
792566
792508
|
__export(exports_knowledge, {
|
|
792567
792509
|
withKnowledgeSpace: () => withKnowledgeSpace,
|
|
792568
|
-
uniqKnowledgeValues: () =>
|
|
792569
|
-
stabilizeKnowledgeText: () =>
|
|
792570
|
-
runKnowledgeSemanticSelfImprovement: () =>
|
|
792510
|
+
uniqKnowledgeValues: () => uniq3,
|
|
792511
|
+
stabilizeKnowledgeText: () => stableText2,
|
|
792512
|
+
runKnowledgeSemanticSelfImprovement: () => runKnowledgeSemanticSelfImprovement2,
|
|
792571
792513
|
resolveProjectPlanningSpace: () => resolveProjectPlanningSpace,
|
|
792572
|
-
resolveKnowledgeDbPathFromControlPlaneDir: () =>
|
|
792514
|
+
resolveKnowledgeDbPathFromControlPlaneDir: () => resolveKnowledgeDbPathFromControlPlaneDir2,
|
|
792573
792515
|
renderPacket: () => renderPacket,
|
|
792574
792516
|
renderKnowledgeSchemaSql: () => renderKnowledgeSchemaSql,
|
|
792575
792517
|
renderKnowledgeMap: () => renderKnowledgeMap,
|
|
792576
792518
|
readKnowledgeSearchText: () => readKnowledgeSearchText,
|
|
792577
|
-
readBrowserKnowledgeProfile: () =>
|
|
792519
|
+
readBrowserKnowledgeProfile: () => readBrowserKnowledgeProfile2,
|
|
792578
792520
|
projectPlanningSourceId: () => projectPlanningSourceId,
|
|
792579
792521
|
projectPlanningProjectIdFromPath: () => projectPlanningProjectIdFromPath,
|
|
792580
792522
|
projectPlanningCanonicalUri: () => projectPlanningCanonicalUri,
|
|
792581
792523
|
projectKnowledgeSpaceId: () => projectKnowledgeSpaceId,
|
|
792582
|
-
parseKnowledgeJsonValue: () =>
|
|
792524
|
+
parseKnowledgeJsonValue: () => parseJsonValue2,
|
|
792583
792525
|
normalizeProjectId: () => normalizeProjectId,
|
|
792584
792526
|
normalizeKnowledgeSpaceId: () => normalizeKnowledgeSpaceId,
|
|
792585
792527
|
normalizeHomeAssistantInstallationId: () => normalizeHomeAssistantInstallationId,
|
|
@@ -792587,12 +792529,12 @@ __export(exports_knowledge, {
|
|
|
792587
792529
|
materializeGeneratedKnowledgeProjection: () => materializeGeneratedKnowledgeProjection,
|
|
792588
792530
|
looksLikeRawPdfPayload: () => looksLikeRawPdfPayload,
|
|
792589
792531
|
looksBinaryLikeText: () => looksBinaryLikeText,
|
|
792590
|
-
loadKnowledgeStoreSnapshot: () =>
|
|
792532
|
+
loadKnowledgeStoreSnapshot: () => loadKnowledgeStoreSnapshot2,
|
|
792591
792533
|
listGeneratedKnowledgePages: () => listGeneratedKnowledgePages,
|
|
792592
|
-
listBrowserKinds: () =>
|
|
792534
|
+
listBrowserKinds: () => listBrowserKinds2,
|
|
792593
792535
|
knowledgeSpaceMetadata: () => knowledgeSpaceMetadata,
|
|
792594
792536
|
knowledgePageSourceWeight: () => knowledgePageSourceWeight,
|
|
792595
|
-
knowledgeNowMs: () =>
|
|
792537
|
+
knowledgeNowMs: () => nowMs2,
|
|
792596
792538
|
knowledgeExtractionNeedsRefresh: () => knowledgeExtractionNeedsRefresh,
|
|
792597
792539
|
isUsefulKnowledgePageSourceCandidate: () => isUsefulKnowledgePageSourceCandidate,
|
|
792598
792540
|
isUsefulKnowledgePageSource: () => isUsefulKnowledgePageSource,
|
|
@@ -792612,12 +792554,12 @@ __export(exports_knowledge, {
|
|
|
792612
792554
|
generatedKnowledgeSourceId: () => generatedKnowledgeSourceId,
|
|
792613
792555
|
generatedKnowledgeCanonicalUri: () => generatedKnowledgeCanonicalUri,
|
|
792614
792556
|
extractKnowledgeArtifact: () => extractKnowledgeArtifact,
|
|
792615
|
-
evaluateProjectPlanningReadiness: () =>
|
|
792616
|
-
discoverBrowserKnowledgeProfiles: () =>
|
|
792557
|
+
evaluateProjectPlanningReadiness: () => evaluateProjectPlanningReadiness2,
|
|
792558
|
+
discoverBrowserKnowledgeProfiles: () => discoverBrowserKnowledgeProfiles2,
|
|
792617
792559
|
createWebKnowledgeGapRepairer: () => createWebKnowledgeGapRepairer,
|
|
792618
792560
|
createProviderBackedKnowledgeSemanticLlm: () => createProviderBackedKnowledgeSemanticLlm,
|
|
792619
792561
|
createMemoryApi: () => createMemoryApi,
|
|
792620
|
-
createKnowledgeSchema: () =>
|
|
792562
|
+
createKnowledgeSchema: () => createSchema3,
|
|
792621
792563
|
createKnowledgeApi: () => createKnowledgeApi,
|
|
792622
792564
|
createDefaultKnowledgeConnectorRegistry: () => createDefaultKnowledgeConnectorRegistry,
|
|
792623
792565
|
compareKnowledgePageSources: () => compareKnowledgePageSources,
|
|
@@ -795056,7 +794998,7 @@ var init_delivery_manager = __esm(() => {
|
|
|
795056
794998
|
});
|
|
795057
794999
|
|
|
795058
795000
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/automation/scheduler-capacity.js
|
|
795059
|
-
function computeSchedulerCapacity(slotsTotal, runs,
|
|
795001
|
+
function computeSchedulerCapacity(slotsTotal, runs, nowMs3 = Date.now()) {
|
|
795060
795002
|
let slotsInUse = 0;
|
|
795061
795003
|
const queuedRuns = [];
|
|
795062
795004
|
for (const run7 of runs) {
|
|
@@ -795066,7 +795008,7 @@ function computeSchedulerCapacity(slotsTotal, runs, nowMs2 = Date.now()) {
|
|
|
795066
795008
|
queuedRuns.push(run7);
|
|
795067
795009
|
}
|
|
795068
795010
|
const queueDepth = queuedRuns.length;
|
|
795069
|
-
const oldestQueuedAgeMs = queueDepth > 0 ?
|
|
795011
|
+
const oldestQueuedAgeMs = queueDepth > 0 ? nowMs3 - Math.min(...queuedRuns.map((r6) => r6.queuedAt)) : null;
|
|
795070
795012
|
return { slotsTotal, slotsInUse, queueDepth, oldestQueuedAgeMs };
|
|
795071
795013
|
}
|
|
795072
795014
|
|
|
@@ -817145,7 +817087,7 @@ var createStyledCell = (char, overrides = {}) => ({
|
|
|
817145
817087
|
// src/version.ts
|
|
817146
817088
|
import { readFileSync } from "fs";
|
|
817147
817089
|
import { join } from "path";
|
|
817148
|
-
var _version = "1.0.
|
|
817090
|
+
var _version = "1.0.44";
|
|
817149
817091
|
try {
|
|
817150
817092
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, "..", "package.json"), "utf-8"));
|
|
817151
817093
|
_version = typeof pkg.version === "string" ? pkg.version : _version;
|
|
@@ -839658,7 +839600,7 @@ var WORK_PLAN_STATUSES = [
|
|
|
839658
839600
|
"failed",
|
|
839659
839601
|
"cancelled"
|
|
839660
839602
|
];
|
|
839661
|
-
function
|
|
839603
|
+
function nowMs3() {
|
|
839662
839604
|
return Date.now();
|
|
839663
839605
|
}
|
|
839664
839606
|
function isObject4(value) {
|
|
@@ -839764,7 +839706,7 @@ class WorkPlanStore {
|
|
|
839764
839706
|
if (!normalizedTitle)
|
|
839765
839707
|
throw new Error("Work plan item title is required.");
|
|
839766
839708
|
const plan = this.readPlan();
|
|
839767
|
-
const time4 =
|
|
839709
|
+
const time4 = nowMs3();
|
|
839768
839710
|
const item = {
|
|
839769
839711
|
id: createItemId(),
|
|
839770
839712
|
title: normalizedTitle,
|
|
@@ -839788,7 +839730,7 @@ class WorkPlanStore {
|
|
|
839788
839730
|
updateItem(idOrPrefix, patch2) {
|
|
839789
839731
|
const plan = this.readPlan();
|
|
839790
839732
|
const item = this.resolveItem(plan, idOrPrefix);
|
|
839791
|
-
const time4 =
|
|
839733
|
+
const time4 = nowMs3();
|
|
839792
839734
|
const nextStatus = patch2.status ?? item.status;
|
|
839793
839735
|
const next = this.pruneItem({
|
|
839794
839736
|
...item,
|
|
@@ -839821,7 +839763,7 @@ class WorkPlanStore {
|
|
|
839821
839763
|
removeItem(idOrPrefix) {
|
|
839822
839764
|
const plan = this.readPlan();
|
|
839823
839765
|
const item = this.resolveItem(plan, idOrPrefix);
|
|
839824
|
-
const time4 =
|
|
839766
|
+
const time4 = nowMs3();
|
|
839825
839767
|
const remaining = plan.items.filter((candidate) => candidate.id !== item.id);
|
|
839826
839768
|
this.writePlan({
|
|
839827
839769
|
...plan,
|
|
@@ -839841,7 +839783,7 @@ class WorkPlanStore {
|
|
|
839841
839783
|
...plan,
|
|
839842
839784
|
items: remaining,
|
|
839843
839785
|
activeItemId: remaining[0]?.id,
|
|
839844
|
-
updatedAt:
|
|
839786
|
+
updatedAt: nowMs3()
|
|
839845
839787
|
});
|
|
839846
839788
|
return removed;
|
|
839847
839789
|
}
|
|
@@ -839880,7 +839822,7 @@ class WorkPlanStore {
|
|
|
839880
839822
|
const parsed = JSON.parse(raw);
|
|
839881
839823
|
if (!isObject4(parsed))
|
|
839882
839824
|
return this.createEmptyPlan();
|
|
839883
|
-
const time4 =
|
|
839825
|
+
const time4 = nowMs3();
|
|
839884
839826
|
const createdAt = typeof parsed.createdAt === "number" ? parsed.createdAt : time4;
|
|
839885
839827
|
const updatedAt = typeof parsed.updatedAt === "number" ? parsed.updatedAt : createdAt;
|
|
839886
839828
|
const items = Array.isArray(parsed.items) ? parsed.items.map((item) => normalizeItem(item, createdAt)).filter((item) => item !== null) : [];
|
|
@@ -839899,7 +839841,7 @@ class WorkPlanStore {
|
|
|
839899
839841
|
};
|
|
839900
839842
|
}
|
|
839901
839843
|
createEmptyPlan() {
|
|
839902
|
-
const time4 =
|
|
839844
|
+
const time4 = nowMs3();
|
|
839903
839845
|
return {
|
|
839904
839846
|
id: createPlanId(this.options.projectId, this.options.projectRoot),
|
|
839905
839847
|
projectId: this.options.projectId,
|
|
@@ -902271,30 +902213,66 @@ function actionCommand(action2) {
|
|
|
902271
902213
|
return action2.localOperation ?? "(local action)";
|
|
902272
902214
|
return action2.command ?? "(guidance)";
|
|
902273
902215
|
}
|
|
902274
|
-
function
|
|
902275
|
-
|
|
902276
|
-
|
|
902277
|
-
|
|
902216
|
+
function setupCounts(snapshot2) {
|
|
902217
|
+
return {
|
|
902218
|
+
ready: snapshot2.setupChecklist.filter((item) => item.status === "ready").length,
|
|
902219
|
+
recommended: snapshot2.setupChecklist.filter((item) => item.status === "recommended").length,
|
|
902220
|
+
optional: snapshot2.setupChecklist.filter((item) => item.status === "optional").length,
|
|
902221
|
+
blocked: snapshot2.setupChecklist.filter((item) => item.status === "blocked").length
|
|
902222
|
+
};
|
|
902223
|
+
}
|
|
902224
|
+
function setupStatusLabel(status) {
|
|
902225
|
+
return status === "ready" ? "Ready" : status === "recommended" ? "Recommended" : status === "blocked" ? "Blocked" : "Optional";
|
|
902226
|
+
}
|
|
902227
|
+
function compactText3(text, maxWidth = 104) {
|
|
902228
|
+
const normalized3 = text.replace(/\s+/g, " ").trim();
|
|
902229
|
+
if (normalized3.length === 0)
|
|
902230
|
+
return "";
|
|
902231
|
+
const firstSentence = normalized3.match(/^.*?[.!?](?:\s|$)/)?.[0]?.trim();
|
|
902232
|
+
const source = firstSentence && firstSentence.length <= maxWidth ? firstSentence : normalized3;
|
|
902233
|
+
return truncateDisplay(source, maxWidth, "...");
|
|
902234
|
+
}
|
|
902235
|
+
function actionMetaLine(action2) {
|
|
902236
|
+
return {
|
|
902237
|
+
text: `${actionCommand(action2)}; ${action2.safety}`,
|
|
902238
|
+
fg: action2.kind === "command" ? FULLSCREEN_PALETTE.info : safetyColor(action2)
|
|
902239
|
+
};
|
|
902240
|
+
}
|
|
902241
|
+
function setupAttentionItems(snapshot2, limit3) {
|
|
902242
|
+
return [
|
|
902243
|
+
...snapshot2.setupChecklist.filter((item) => item.status === "blocked"),
|
|
902244
|
+
...snapshot2.setupChecklist.filter((item) => item.status === "recommended"),
|
|
902245
|
+
...snapshot2.setupChecklist.filter((item) => item.status === "optional")
|
|
902246
|
+
].slice(0, limit3);
|
|
902247
|
+
}
|
|
902248
|
+
function conciseSetupLine(snapshot2) {
|
|
902249
|
+
const counts = setupCounts(snapshot2);
|
|
902250
|
+
return {
|
|
902251
|
+
text: `Setup: ${counts.ready}/${snapshot2.setupChecklist.length} ready; ${counts.recommended} recommended; ${counts.blocked} blocked.`,
|
|
902252
|
+
fg: counts.blocked > 0 ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.info
|
|
902253
|
+
};
|
|
902254
|
+
}
|
|
902255
|
+
function setupOverviewLines(snapshot2) {
|
|
902256
|
+
const counts = setupCounts(snapshot2);
|
|
902257
|
+
const nextItems = setupAttentionItems(snapshot2, 3);
|
|
902278
902258
|
const lines = [
|
|
902279
|
-
{ text: "Setup
|
|
902280
|
-
{ text: `${
|
|
902259
|
+
{ text: "Setup Overview", fg: FULLSCREEN_PALETTE.title, bold: true },
|
|
902260
|
+
{ text: `${counts.ready}/${snapshot2.setupChecklist.length} ready; ${counts.recommended} recommended; ${counts.optional} optional; ${counts.blocked} blocked.`, fg: counts.blocked > 0 ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.info },
|
|
902261
|
+
{ text: `Chat: ${snapshot2.provider} / ${snapshot2.modelDisplayName}.`, fg: FULLSCREEN_PALETTE.info },
|
|
902262
|
+
{ text: `Local: ${snapshot2.localPersonaCount} personas, ${snapshot2.localSkillCount} skills, ${snapshot2.localRoutineCount} routines, ${snapshot2.localMemoryCount} memories.`, fg: FULLSCREEN_PALETTE.info }
|
|
902281
902263
|
];
|
|
902282
|
-
|
|
902283
|
-
const
|
|
902264
|
+
if (nextItems.length > 0) {
|
|
902265
|
+
const item = nextItems[0];
|
|
902284
902266
|
lines.push({
|
|
902285
|
-
text:
|
|
902267
|
+
text: `Next: ${item.label} (${setupStatusLabel(item.status).toLowerCase()})`,
|
|
902286
902268
|
fg: setupStatusColor(item.status),
|
|
902287
902269
|
bold: item.status === "blocked"
|
|
902288
902270
|
});
|
|
902289
|
-
lines.push({ text: ` ${item.detail}`, fg: FULLSCREEN_PALETTE.muted });
|
|
902290
902271
|
}
|
|
902291
902272
|
return lines;
|
|
902292
902273
|
}
|
|
902293
902274
|
function homeNextActionLines(snapshot2) {
|
|
902294
|
-
const
|
|
902295
|
-
const recommended = snapshot2.setupChecklist.filter((item) => item.status === "recommended");
|
|
902296
|
-
const optional2 = snapshot2.setupChecklist.filter((item) => item.status === "optional");
|
|
902297
|
-
const candidates = [...blocked, ...recommended, ...optional2].slice(0, 5);
|
|
902275
|
+
const candidates = setupAttentionItems(snapshot2, 3);
|
|
902298
902276
|
if (candidates.length === 0) {
|
|
902299
902277
|
return [
|
|
902300
902278
|
{ text: "Next Actions", fg: FULLSCREEN_PALETTE.title, bold: true },
|
|
@@ -902303,13 +902281,11 @@ function homeNextActionLines(snapshot2) {
|
|
|
902303
902281
|
}
|
|
902304
902282
|
const lines = [{ text: "Next Actions", fg: FULLSCREEN_PALETTE.title, bold: true }];
|
|
902305
902283
|
for (const item of candidates) {
|
|
902306
|
-
const command8 = item.command ? ` -> ${item.command}` : "";
|
|
902307
902284
|
lines.push({
|
|
902308
|
-
text: `${item.status
|
|
902285
|
+
text: `${setupStatusLabel(item.status)}: ${item.label}`,
|
|
902309
902286
|
fg: setupStatusColor(item.status),
|
|
902310
902287
|
bold: item.status === "blocked"
|
|
902311
902288
|
});
|
|
902312
|
-
lines.push({ text: ` ${item.detail}`, fg: FULLSCREEN_PALETTE.muted });
|
|
902313
902289
|
}
|
|
902314
902290
|
return lines;
|
|
902315
902291
|
}
|
|
@@ -902318,69 +902294,33 @@ function companionAccessLine(snapshot2) {
|
|
|
902318
902294
|
const tokenState = access3.tokenReadable ? `ready sha256:${access3.tokenFingerprint ?? "unknown"}` : access3.tokenPresent ? "present but unreadable" : "missing";
|
|
902319
902295
|
const error53 = access3.tokenError ? `; token read error ${access3.tokenError}` : "";
|
|
902320
902296
|
return {
|
|
902321
|
-
text: `Companion: ${access3.surface}; token ${tokenState}; QR ${access3.qrCommand}
|
|
902297
|
+
text: `Companion: ${access3.surface}; token ${tokenState}; QR ${access3.qrCommand}${error53}.`,
|
|
902322
902298
|
fg: access3.pairingReady ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.warn
|
|
902323
902299
|
};
|
|
902324
902300
|
}
|
|
902325
|
-
function
|
|
902326
|
-
|
|
902327
|
-
return [];
|
|
902328
|
-
const names2 = summary.names.length > 0 ? ` ${summary.names.join(", ")}${summary.count > summary.names.length ? `, +${summary.count - summary.names.length} more` : ""}.` : "";
|
|
902329
|
-
return [
|
|
902330
|
-
{ text: `${label}: ${summary.count} discovered; project ${summary.projectLocalCount}; global ${summary.globalCount}.`, fg: FULLSCREEN_PALETTE.info, bold: true },
|
|
902331
|
-
{ text: ` Choose ${actionLabel} to preview, then use the import form after review.${names2}`, fg: FULLSCREEN_PALETTE.muted }
|
|
902332
|
-
];
|
|
902333
|
-
}
|
|
902334
|
-
function behaviorDiscoveryLines(snapshot2) {
|
|
902335
|
-
const lines = [
|
|
902336
|
-
...discoverySummaryLine("Discovered personas", snapshot2.discoveredBehavior.personas, "Personas -> Discover persona files"),
|
|
902337
|
-
...discoverySummaryLine("Discovered skills", snapshot2.discoveredBehavior.skills, "Skills -> Discover skill files"),
|
|
902338
|
-
...discoverySummaryLine("Discovered routines", snapshot2.discoveredBehavior.routines, "Routines -> Discover routine files")
|
|
902339
|
-
];
|
|
902340
|
-
if (lines.length === 0)
|
|
902341
|
-
return [];
|
|
902342
|
-
return [
|
|
902343
|
-
{ text: "" },
|
|
902344
|
-
{ text: "Discovered Behavior Files", fg: FULLSCREEN_PALETTE.title, bold: true },
|
|
902345
|
-
...lines
|
|
902346
|
-
];
|
|
902347
|
-
}
|
|
902348
|
-
function localLibraryLines(title, items, emptyText, selectedId) {
|
|
902349
|
-
const lines = [
|
|
902350
|
-
{ text: title, fg: FULLSCREEN_PALETTE.title, bold: true }
|
|
902351
|
-
];
|
|
902301
|
+
function compactLocalLibraryLines(title, items, emptyText, selectedId) {
|
|
902302
|
+
const lines = [];
|
|
902352
902303
|
if (items.length === 0) {
|
|
902353
|
-
lines.push({ text: emptyText
|
|
902304
|
+
lines.push({ text: `${title}: 0. ${emptyText}`, fg: FULLSCREEN_PALETTE.warn });
|
|
902354
902305
|
return lines;
|
|
902355
902306
|
}
|
|
902356
|
-
|
|
902357
|
-
|
|
902358
|
-
|
|
902359
|
-
|
|
902360
|
-
|
|
902361
|
-
|
|
902362
|
-
|
|
902363
|
-
|
|
902364
|
-
|
|
902365
|
-
|
|
902366
|
-
|
|
902367
|
-
|
|
902368
|
-
|
|
902369
|
-
|
|
902370
|
-
|
|
902371
|
-
|
|
902372
|
-
lines.push({
|
|
902373
|
-
text: `${marker}${item.id}: ${item.name} (${status})`,
|
|
902374
|
-
fg: item.reviewState === "stale" ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.info,
|
|
902375
|
-
bold: selected || item.active === true
|
|
902376
|
-
});
|
|
902377
|
-
lines.push({ text: ` ${item.description}${tags}${triggers}`, fg: FULLSCREEN_PALETTE.muted });
|
|
902378
|
-
if (item.missingRequirements && item.missingRequirements.length > 0) {
|
|
902379
|
-
lines.push({ text: ` missing setup: ${item.missingRequirements.join(", ")}`, fg: FULLSCREEN_PALETTE.warn });
|
|
902380
|
-
}
|
|
902381
|
-
}
|
|
902382
|
-
if (items.length > 8) {
|
|
902383
|
-
lines.push({ text: `${items.length - 8} more item(s). Open the library command for the full list.`, fg: FULLSCREEN_PALETTE.dim });
|
|
902307
|
+
const selected = items.find((item) => item.id === selectedId) ?? items[0];
|
|
902308
|
+
const status = [
|
|
902309
|
+
selected.active ? "active" : "",
|
|
902310
|
+
selected.enabled === true ? "enabled" : selected.enabled === false ? "disabled" : "",
|
|
902311
|
+
selected.scope && selected.cls ? `${selected.scope}/${selected.cls}` : "",
|
|
902312
|
+
selected.confidence !== undefined ? `${selected.confidence}%` : "",
|
|
902313
|
+
selected.requirementCount !== undefined && selected.requirementCount > 0 ? selected.missingRequirementCount && selected.missingRequirementCount > 0 ? `needs ${selected.missingRequirementCount}/${selected.requirementCount}` : `ready ${selected.requirementCount}/${selected.requirementCount}` : "",
|
|
902314
|
+
formatAgentRecordReviewState(selected.reviewState),
|
|
902315
|
+
selected.startCount !== undefined ? `starts ${selected.startCount}` : ""
|
|
902316
|
+
].filter(Boolean).join(", ");
|
|
902317
|
+
lines.push({
|
|
902318
|
+
text: `${title}: ${items.length}; selected ${selected.name}${status ? ` (${status})` : ""}.`,
|
|
902319
|
+
fg: selected.reviewState === "stale" ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.info,
|
|
902320
|
+
bold: selected.active === true
|
|
902321
|
+
});
|
|
902322
|
+
if (selected.missingRequirements && selected.missingRequirements.length > 0) {
|
|
902323
|
+
lines.push({ text: `Missing setup: ${selected.missingRequirements.join(", ")}`, fg: FULLSCREEN_PALETTE.warn });
|
|
902384
902324
|
}
|
|
902385
902325
|
return lines;
|
|
902386
902326
|
}
|
|
@@ -902415,23 +902355,18 @@ function routineNextActionLine(snapshot2) {
|
|
|
902415
902355
|
}
|
|
902416
902356
|
return { text: "Next routine action: Start selected in the main conversation, inspect receipts, or reconcile connected schedules.", fg: FULLSCREEN_PALETTE.info, bold: true };
|
|
902417
902357
|
}
|
|
902418
|
-
function
|
|
902358
|
+
function compactRoutineReceiptLine(snapshot2) {
|
|
902419
902359
|
const latest = snapshot2.latestRoutineScheduleReceipt;
|
|
902420
|
-
|
|
902421
|
-
{
|
|
902422
|
-
text: `Promotion receipts: ${snapshot2.routineScheduleReceiptCount}; created
|
|
902423
|
-
fg:
|
|
902424
|
-
}
|
|
902425
|
-
];
|
|
902426
|
-
if (latest) {
|
|
902427
|
-
lines.push({
|
|
902428
|
-
text: `Latest receipt: ${latest.id} ${latest.status} routine=${latest.routineId} schedule="${latest.scheduleName}" ${latest.scheduleKind} ${latest.scheduleValue}`,
|
|
902429
|
-
fg: latest.status === "failed" ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.good
|
|
902430
|
-
});
|
|
902431
|
-
} else {
|
|
902432
|
-
lines.push({ text: "No schedule promotion receipts yet. Confirm a routine promotion from Automation when ready.", fg: FULLSCREEN_PALETTE.muted });
|
|
902360
|
+
if (!latest) {
|
|
902361
|
+
return {
|
|
902362
|
+
text: `Promotion receipts: ${snapshot2.routineScheduleReceiptCount}; none created yet.`,
|
|
902363
|
+
fg: FULLSCREEN_PALETTE.muted
|
|
902364
|
+
};
|
|
902433
902365
|
}
|
|
902434
|
-
return
|
|
902366
|
+
return {
|
|
902367
|
+
text: `Promotion receipts: ${snapshot2.routineScheduleReceiptCount}; latest ${latest.status} ${latest.routineId}.`,
|
|
902368
|
+
fg: latest.status === "failed" ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.good
|
|
902369
|
+
};
|
|
902435
902370
|
}
|
|
902436
902371
|
function automationNextActionLine(snapshot2) {
|
|
902437
902372
|
const ready = readyRoutineItems(snapshot2);
|
|
@@ -902451,151 +902386,60 @@ function automationNextActionLine(snapshot2) {
|
|
|
902451
902386
|
}
|
|
902452
902387
|
return { text: "Next automation action: Create a reminder, or create/import a routine before recurring workflow promotion.", fg: FULLSCREEN_PALETTE.warn, bold: true };
|
|
902453
902388
|
}
|
|
902454
|
-
function profileLines(snapshot2) {
|
|
902455
|
-
const lines = [
|
|
902456
|
-
{ text: "Agent Profiles", fg: FULLSCREEN_PALETTE.title, bold: true }
|
|
902457
|
-
];
|
|
902458
|
-
if (snapshot2.runtimeProfiles.length === 0) {
|
|
902459
|
-
lines.push({ text: "No isolated Agent profiles yet. Use Create Agent profile in this workspace.", fg: FULLSCREEN_PALETTE.warn });
|
|
902460
|
-
return lines;
|
|
902461
|
-
}
|
|
902462
|
-
for (const profile5 of snapshot2.runtimeProfiles.slice(0, 6)) {
|
|
902463
|
-
const starter = profile5.starterTemplateId ? ` starter=${profile5.starterTemplateId}` : " starter=none";
|
|
902464
|
-
const created = profile5.createdAt ? ` created ${profile5.createdAt.slice(0, 10)}` : "";
|
|
902465
|
-
const states = [
|
|
902466
|
-
profile5.id === snapshot2.activeRuntimeProfile ? "active" : "",
|
|
902467
|
-
profile5.id === snapshot2.selectedRuntimeProfile ? "default" : ""
|
|
902468
|
-
].filter(Boolean).join(", ");
|
|
902469
|
-
const stateText = states ? ` [${states}]` : "";
|
|
902470
|
-
lines.push({
|
|
902471
|
-
text: `${profile5.id}${stateText}${starter}${created}`,
|
|
902472
|
-
fg: profile5.id === snapshot2.selectedRuntimeProfile ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.info,
|
|
902473
|
-
bold: profile5.id === snapshot2.activeRuntimeProfile || profile5.id === snapshot2.selectedRuntimeProfile
|
|
902474
|
-
});
|
|
902475
|
-
lines.push({ text: ` home: ${profile5.homeDirectory}`, fg: FULLSCREEN_PALETTE.muted });
|
|
902476
|
-
}
|
|
902477
|
-
if (snapshot2.runtimeProfiles.length > 6) {
|
|
902478
|
-
lines.push({ text: `${snapshot2.runtimeProfiles.length - 6} more profile(s).`, fg: FULLSCREEN_PALETTE.dim });
|
|
902479
|
-
}
|
|
902480
|
-
return lines;
|
|
902481
|
-
}
|
|
902482
|
-
function starterTemplateLines(snapshot2) {
|
|
902483
|
-
const lines = [
|
|
902484
|
-
{ text: "Starter Templates", fg: FULLSCREEN_PALETTE.title, bold: true }
|
|
902485
|
-
];
|
|
902486
|
-
for (const template of snapshot2.runtimeStarterTemplates.slice(0, 6)) {
|
|
902487
|
-
const origin = template.source === "local" ? "Local" : formatAgentRecordSource(template.source);
|
|
902488
|
-
lines.push({
|
|
902489
|
-
text: `${template.id}: ${template.name} [${origin}]`,
|
|
902490
|
-
fg: template.source === "local" ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.info,
|
|
902491
|
-
bold: template.id === "research"
|
|
902492
|
-
});
|
|
902493
|
-
lines.push({
|
|
902494
|
-
text: ` ${template.description} Persona ${template.personaName}; skills ${template.skillNames.join(", ")}; routines ${template.routineNames.join(", ")}.`,
|
|
902495
|
-
fg: FULLSCREEN_PALETTE.muted
|
|
902496
|
-
});
|
|
902497
|
-
}
|
|
902498
|
-
if (snapshot2.runtimeStarterTemplates.length > 6) {
|
|
902499
|
-
lines.push({ text: `${snapshot2.runtimeStarterTemplates.length - 6} more starter template(s).`, fg: FULLSCREEN_PALETTE.dim });
|
|
902500
|
-
}
|
|
902501
|
-
return lines;
|
|
902502
|
-
}
|
|
902503
902389
|
function snapshotLines(workspace, category, snapshot2) {
|
|
902504
902390
|
if (!snapshot2)
|
|
902505
902391
|
return [{ text: "Runtime context is not loaded yet.", fg: FULLSCREEN_PALETTE.warn }];
|
|
902506
|
-
const base2 = [
|
|
902392
|
+
const base2 = [];
|
|
902507
902393
|
if (category.id === "home") {
|
|
902508
|
-
base2.push({ text: `Chat route: ${snapshot2.provider} / ${snapshot2.modelDisplayName}`, fg: FULLSCREEN_PALETTE.info }, { text: `Session: ${snapshot2.sessionId}`, fg: FULLSCREEN_PALETTE.muted }, { text: `Policy: ${snapshot2.executionPolicy}; delegated review ${snapshot2.delegatedReviewPolicy}`, fg: FULLSCREEN_PALETTE.good },
|
|
902394
|
+
base2.push({ text: `Chat route: ${snapshot2.provider} / ${snapshot2.modelDisplayName}`, fg: FULLSCREEN_PALETTE.info }, { text: `Session: ${snapshot2.sessionId}`, fg: FULLSCREEN_PALETTE.muted }, { text: `Policy: ${snapshot2.executionPolicy}; delegated review ${snapshot2.delegatedReviewPolicy}`, fg: FULLSCREEN_PALETTE.good }, conciseSetupLine(snapshot2), ...homeNextActionLines(snapshot2));
|
|
902509
902395
|
} else if (category.id === "setup") {
|
|
902510
|
-
base2.push(
|
|
902396
|
+
base2.push(...setupOverviewLines(snapshot2));
|
|
902511
902397
|
} else if (category.id === "artifacts") {
|
|
902512
902398
|
const mediaReady = snapshot2.voiceMediaReadiness.readyMediaProviderCount;
|
|
902513
|
-
base2.push({ text: `Chat
|
|
902399
|
+
base2.push({ text: `Chat: ${snapshot2.provider} / ${snapshot2.modelDisplayName}; Knowledge: ${snapshot2.knowledgeRoute}`, fg: FULLSCREEN_PALETTE.info }, { text: `Media: ${mediaReady}/${snapshot2.mediaProviderCount} ready; generation ${snapshot2.mediaGenerationProviderCount}.`, fg: mediaReady > 0 ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.warn }, { text: "Files: attach, export, inspect, ingest reviewed sources, or generate media.", fg: FULLSCREEN_PALETTE.good }, { text: "Knowledge ingest and media generation require explicit actions.", fg: FULLSCREEN_PALETTE.warn });
|
|
902514
902400
|
} else if (category.id === "channels") {
|
|
902515
902401
|
const enabledCount = snapshot2.channels.filter((channel) => channel.enabled).length;
|
|
902516
902402
|
const readyCount = snapshot2.channels.filter((channel) => channel.ready).length;
|
|
902517
902403
|
const configuredDefaults = snapshot2.channels.filter((channel) => channel.defaultTarget === "configured").length;
|
|
902518
|
-
const readyChannels = snapshot2.channels.filter((channel) => channel.ready).map((channel) => channel.label);
|
|
902519
902404
|
const needsTarget = snapshot2.channels.filter((channel) => channel.setupState === "needs-target");
|
|
902520
902405
|
const needsConfig = snapshot2.channels.filter((channel) => channel.setupState === "needs-config");
|
|
902521
902406
|
const nextAttentionChannel = needsConfig[0] ?? needsTarget[0] ?? snapshot2.channels.find((channel) => !channel.enabled);
|
|
902522
|
-
|
|
902523
|
-
const disabledPreview = disabledChannels.slice(0, 6).join(", ");
|
|
902524
|
-
const disabledSuffix = disabledChannels.length > 6 ? `, +${disabledChannels.length - 6} more` : "";
|
|
902525
|
-
const orderedChannels = [
|
|
902526
|
-
...snapshot2.channels.filter((channel) => channel.enabled),
|
|
902527
|
-
...snapshot2.channels.filter((channel) => !channel.enabled)
|
|
902528
|
-
].slice(0, 3);
|
|
902529
|
-
base2.push({ text: `GoodVibes API: ${snapshot2.runtimeBaseUrl}`, fg: FULLSCREEN_PALETTE.info }, companionAccessLine(snapshot2), { text: `Readiness: ${readyCount}/${snapshot2.channels.length} ready; ${enabledCount} enabled; ${configuredDefaults} default target(s) configured.`, fg: FULLSCREEN_PALETTE.info }, { text: "Setup path: pair companion -> inspect readiness -> review accounts/policies/status -> fix one channel -> add explicit notification target if needed.", fg: FULLSCREEN_PALETTE.good }, { text: `Next channel action: ${nextAttentionChannel ? `${nextAttentionChannel.label} - ${nextAttentionChannel.nextStep}` : "All enabled channels are ready; keep delivery explicit and review policies before sending."}`, fg: nextAttentionChannel ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.good }, { text: `Ready channels: ${readyChannels.join(", ") || "none"}.`, fg: readyChannels.length > 0 ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.warn }, { text: `Needs default target: ${needsTarget.map((channel) => `${channel.label} -> ${channel.defaultTargetKeys.join("|")}`).join(", ") || "none"}.`, fg: needsTarget.length > 0 ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.muted }, { text: `Needs config: ${needsConfig.map((channel) => `${channel.label} -> ${channel.missingRequiredKeys.join("|")}`).join(", ") || "none"}.`, fg: needsConfig.length > 0 ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.muted }, { text: `Disabled channels: ${disabledPreview || "none"}${disabledSuffix}.`, fg: FULLSCREEN_PALETTE.dim }, { text: "Safety: no secret values; sends and public exposure require explicit user action and Agent policy.", fg: FULLSCREEN_PALETTE.warn });
|
|
902530
|
-
for (const channel of orderedChannels) {
|
|
902531
|
-
const ready = channel.ready ? "ready" : `${channel.missingConfigCount} missing`;
|
|
902532
|
-
base2.push({
|
|
902533
|
-
text: `${channel.label}: ${channel.setupState}; ${ready}; target ${channel.defaultTarget}; delivery ${channel.delivery}; risk ${channel.risk}.`,
|
|
902534
|
-
fg: channel.ready ? FULLSCREEN_PALETTE.good : channel.enabled ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.dim
|
|
902535
|
-
});
|
|
902536
|
-
}
|
|
902407
|
+
base2.push({ text: `API: ${snapshot2.runtimeBaseUrl}`, fg: FULLSCREEN_PALETTE.info }, companionAccessLine(snapshot2), { text: `Channels: ${readyCount}/${snapshot2.channels.length} ready; ${enabledCount} enabled; ${configuredDefaults} target(s).`, fg: FULLSCREEN_PALETTE.info }, { text: `Next: ${nextAttentionChannel ? `${nextAttentionChannel.label} - ${compactText3(nextAttentionChannel.nextStep)}` : "All enabled channels ready."}`, fg: nextAttentionChannel ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.good }, { text: "Safety: secrets hidden; sends require explicit action.", fg: FULLSCREEN_PALETTE.warn });
|
|
902537
902408
|
} else if (category.id === "knowledge") {
|
|
902538
|
-
base2.push({ text: `Route
|
|
902409
|
+
base2.push({ text: `Route: ${snapshot2.knowledgeRoute}; isolation ${snapshot2.knowledgeIsolation}.`, fg: FULLSCREEN_PALETTE.info }, { text: "Ask/search, ingest, review, reindex, and reports stay Agent-owned.", fg: FULLSCREEN_PALETTE.good }, { text: "Ingest requires explicit confirmation.", fg: FULLSCREEN_PALETTE.warn });
|
|
902539
902410
|
} else if (category.id === "research") {
|
|
902540
|
-
base2.push({ text: `Chat
|
|
902411
|
+
base2.push({ text: `Chat: ${snapshot2.provider} / ${snapshot2.modelDisplayName}; Knowledge: ${snapshot2.knowledgeRoute}`, fg: FULLSCREEN_PALETTE.info }, { text: `Browser: ${snapshot2.voiceMediaReadiness.browserToolState}; public URL ${snapshot2.browserToolPublicBaseUrl}.`, fg: snapshot2.browserToolExposureEnabled ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.muted }, { text: "Research is read-only. Knowledge ingest is a separate confirmed action.", fg: FULLSCREEN_PALETTE.good }, { text: compactText3(snapshot2.voiceMediaReadiness.browserToolNextStep), fg: FULLSCREEN_PALETTE.muted });
|
|
902541
902412
|
} else if (category.id === "tools") {
|
|
902542
|
-
base2.push({ text: `MCP servers: ${snapshot2.mcpConnectedServerCount}/${snapshot2.mcpServerCount} connected; quarantined ${snapshot2.mcpQuarantinedServerCount}; allow-all ${snapshot2.mcpAllowAllServerCount}.`, fg: snapshot2.mcpQuarantinedServerCount > 0 || snapshot2.mcpAllowAllServerCount > 0 ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.info }, { text: "
|
|
902413
|
+
base2.push({ text: `MCP servers: ${snapshot2.mcpConnectedServerCount}/${snapshot2.mcpServerCount} connected; quarantined ${snapshot2.mcpQuarantinedServerCount}; allow-all ${snapshot2.mcpAllowAllServerCount}.`, fg: snapshot2.mcpQuarantinedServerCount > 0 || snapshot2.mcpAllowAllServerCount > 0 ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.info }, { text: "Add/update/reload and trust changes require confirmation.", fg: FULLSCREEN_PALETTE.good }, { text: "Start: /mcp review, /mcp tools, /mcp config, Add MCP server.", fg: FULLSCREEN_PALETTE.muted });
|
|
902543
902414
|
} else if (category.id === "voice-media") {
|
|
902544
902415
|
const readiness = snapshot2.voiceMediaReadiness;
|
|
902545
|
-
|
|
902546
|
-
const mediaRows = readiness.mediaProviders.slice(0, 6);
|
|
902547
|
-
base2.push({ text: `Voice providers: ${snapshot2.voiceProviderCount}; streaming TTS: ${snapshot2.voiceStreamingProviderCount}; STT: ${snapshot2.voiceSttProviderCount}; realtime: ${snapshot2.voiceRealtimeProviderCount}.`, fg: FULLSCREEN_PALETTE.info }, { text: `Voice interaction: ${snapshot2.voiceSurfaceEnabled ? "enabled" : "disabled"}; ready providers ${readiness.readyVoiceProviderCount}/${snapshot2.voiceProviderCount}.`, fg: snapshot2.voiceSurfaceEnabled ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.muted }, { text: `TTS config: provider ${snapshot2.ttsProvider}; voice ${snapshot2.ttsVoice}; response model ${snapshot2.ttsResponseModel}.`, fg: FULLSCREEN_PALETTE.info }, { text: `Selected TTS readiness: ${readiness.selectedTtsProviderLabel} -> ${readiness.selectedTtsProviderStatus}; voice ${readiness.ttsVoiceConfigured ? "configured" : "default"}; response route ${readiness.ttsResponseRouteConfigured ? "configured" : "chat route"}.`, fg: readiness.selectedTtsProviderStatus === "ready" ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.warn }, { text: `Media providers: ${snapshot2.mediaProviderCount}; understanding: ${snapshot2.mediaUnderstandingProviderCount}; generation: ${snapshot2.mediaGenerationProviderCount}.`, fg: FULLSCREEN_PALETTE.info }, { text: `Ready media providers: ${readiness.readyMediaProviderCount}/${snapshot2.mediaProviderCount}.`, fg: readiness.readyMediaProviderCount > 0 ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.warn }, { text: `Browser tools: ${readiness.browserToolState}; public base URL ${snapshot2.browserToolPublicBaseUrl}.`, fg: snapshot2.browserToolExposureEnabled ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.muted }, { text: readiness.browserToolNextStep, fg: FULLSCREEN_PALETTE.muted }, { text: "Voice provider readiness", fg: FULLSCREEN_PALETTE.title, bold: true });
|
|
902548
|
-
for (const provider5 of voiceRows) {
|
|
902549
|
-
const selected = provider5.selected ? "selected; " : "";
|
|
902550
|
-
const missing = provider5.missingSecretKeyOptions.length > 0 ? `; needs ${provider5.missingSecretKeyOptions.join("|")}` : "";
|
|
902551
|
-
base2.push({
|
|
902552
|
-
text: `${provider5.label}: ${selected}${provider5.setupState}; ${provider5.features.join(", ") || "registered"}${missing}.`,
|
|
902553
|
-
fg: provider5.setupState === "ready" ? FULLSCREEN_PALETTE.good : provider5.setupState === "needs-secret" ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.muted
|
|
902554
|
-
});
|
|
902555
|
-
}
|
|
902556
|
-
if (snapshot2.voiceProviderCount > voiceRows.length)
|
|
902557
|
-
base2.push({ text: `${snapshot2.voiceProviderCount - voiceRows.length} more voice provider(s).`, fg: FULLSCREEN_PALETTE.dim });
|
|
902558
|
-
base2.push({ text: "Media provider readiness", fg: FULLSCREEN_PALETTE.title, bold: true });
|
|
902559
|
-
for (const provider5 of mediaRows) {
|
|
902560
|
-
const missing = provider5.missingSecretKeyOptions.length > 0 ? `; needs ${provider5.missingSecretKeyOptions.join("|")}` : "";
|
|
902561
|
-
base2.push({
|
|
902562
|
-
text: `${provider5.label}: ${provider5.setupState}; ${provider5.features.join(", ") || "registered"}${missing}.`,
|
|
902563
|
-
fg: provider5.setupState === "ready" ? FULLSCREEN_PALETTE.good : provider5.setupState === "needs-secret" ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.muted
|
|
902564
|
-
});
|
|
902565
|
-
}
|
|
902566
|
-
if (snapshot2.mediaProviderCount > mediaRows.length)
|
|
902567
|
-
base2.push({ text: `${snapshot2.mediaProviderCount - mediaRows.length} more media provider(s).`, fg: FULLSCREEN_PALETTE.dim });
|
|
902568
|
-
for (const step of readiness.nextSteps.slice(0, 4))
|
|
902569
|
-
base2.push({ text: `Next: ${step}`, fg: FULLSCREEN_PALETTE.info });
|
|
902570
|
-
base2.push({ text: "No secret values are rendered. Voice, browser, and generated media side effects require explicit user action.", fg: FULLSCREEN_PALETTE.warn }, { text: "Image input uses prompt attachments; media generation/provider setup stays behind explicit commands and configured providers.", fg: FULLSCREEN_PALETTE.muted });
|
|
902416
|
+
base2.push({ text: `Voice: ${readiness.readyVoiceProviderCount}/${snapshot2.voiceProviderCount} ready; TTS ${snapshot2.ttsProvider}; voice ${snapshot2.ttsVoice}.`, fg: readiness.readyVoiceProviderCount > 0 ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.warn }, { text: `Media: ${readiness.readyMediaProviderCount}/${snapshot2.mediaProviderCount} ready; generation ${snapshot2.mediaGenerationProviderCount}.`, fg: readiness.readyMediaProviderCount > 0 ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.warn }, { text: `Browser: ${readiness.browserToolState}; public URL ${snapshot2.browserToolPublicBaseUrl}.`, fg: snapshot2.browserToolExposureEnabled ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.muted }, { text: readiness.nextSteps[0] ? `Next: ${compactText3(readiness.nextSteps[0])}` : "Next: voice/media setup is ready.", fg: readiness.nextSteps.length > 0 ? FULLSCREEN_PALETTE.info : FULLSCREEN_PALETTE.good }, { text: "Secrets hidden; voice, browser, and media side effects require explicit action.", fg: FULLSCREEN_PALETTE.warn });
|
|
902571
902417
|
} else if (category.id === "profiles") {
|
|
902572
902418
|
const defaultProfile = snapshot2.selectedRuntimeProfile ? `${snapshot2.selectedRuntimeProfile}${snapshot2.selectedRuntimeProfileExists ? "" : " (missing)"}` : "(base Agent home)";
|
|
902573
|
-
base2.push({ text: `
|
|
902419
|
+
base2.push({ text: `Profiles: active ${snapshot2.activeRuntimeProfile}; default ${defaultProfile}.`, fg: snapshot2.selectedRuntimeProfileExists || !snapshot2.selectedRuntimeProfile ? FULLSCREEN_PALETTE.info : FULLSCREEN_PALETTE.warn }, { text: `Local profiles: ${snapshot2.runtimeProfileCount}; starters ${snapshot2.runtimeStarterTemplateCount}; custom ${snapshot2.localStarterTemplateCount}.`, fg: FULLSCREEN_PALETTE.info }, { text: `Starter ids: ${truncateDisplay(snapshot2.runtimeStarterTemplates.map((template) => template.id).join(", ") || "none", 96, "...")}`, fg: FULLSCREEN_PALETTE.muted }, { text: "Profiles isolate local Agent config, sessions, memory, personas, skills, routines, setup, and bundles.", fg: FULLSCREEN_PALETTE.good });
|
|
902574
902420
|
} else if (category.id === "memory") {
|
|
902575
|
-
base2.push({ text: `
|
|
902421
|
+
base2.push({ text: `Memory: ${snapshot2.localMemoryCount}; prompt ${snapshot2.localMemoryPromptActiveCount}; queue ${snapshot2.localMemoryReviewQueueCount}; session ${snapshot2.sessionMemoryCount}.`, fg: FULLSCREEN_PALETTE.info }, { text: `Notes: ${snapshot2.localNoteCount}; skills ${snapshot2.localSkillCount}/${snapshot2.enabledSkillCount}; routines ${snapshot2.localRoutineCount}/${snapshot2.enabledRoutineCount}; personas ${snapshot2.localPersonaCount}.`, fg: FULLSCREEN_PALETTE.info }, { text: `Active persona: ${snapshot2.activePersonaName}.`, fg: FULLSCREEN_PALETTE.info }, ...compactLocalLibraryLines("Agent Memory", snapshot2.localMemories, "Create one with Create memory.", workspace.selectedLocalLibraryItem("memory")?.id ?? null), { text: "Secrets are rejected or redacted; use secret references.", fg: FULLSCREEN_PALETTE.warn });
|
|
902576
902422
|
} else if (category.id === "notes") {
|
|
902577
|
-
base2.push({ text: `Scratchpad notes: ${snapshot2.localNoteCount}; review queue: ${snapshot2.localNoteReviewQueueCount}`, fg: FULLSCREEN_PALETTE.info },
|
|
902423
|
+
base2.push({ text: `Scratchpad notes: ${snapshot2.localNoteCount}; review queue: ${snapshot2.localNoteReviewQueueCount}`, fg: FULLSCREEN_PALETTE.info }, ...compactLocalLibraryLines("Scratchpad Notes", snapshot2.localNotes, "Create one with Create note.", workspace.selectedLocalLibraryItem("note")?.id ?? null), { text: "Notes stay local unless promoted by explicit action.", fg: FULLSCREEN_PALETTE.warn });
|
|
902578
902424
|
} else if (category.id === "personas") {
|
|
902579
|
-
base2.push({ text: `Personas: ${snapshot2.localPersonaCount}; active: ${snapshot2.activePersonaName}`, fg: FULLSCREEN_PALETTE.info },
|
|
902425
|
+
base2.push({ text: `Personas: ${snapshot2.localPersonaCount}; active: ${snapshot2.activePersonaName}`, fg: FULLSCREEN_PALETTE.info }, ...compactLocalLibraryLines("Persona Library", snapshot2.localPersonas, "Create one with Create persona.", workspace.selectedLocalLibraryItem("persona")?.id ?? null), { text: "Personas shape the serial main-conversation assistant.", fg: FULLSCREEN_PALETTE.good });
|
|
902580
902426
|
} else if (category.id === "skills") {
|
|
902581
|
-
base2.push({ text: `Skills: ${snapshot2.localSkillCount}; enabled: ${snapshot2.enabledSkillCount}; bundles: ${snapshot2.localSkillBundleCount}; enabled bundles: ${snapshot2.enabledSkillBundleCount}; active skills: ${snapshot2.activeSkillCount}`, fg: FULLSCREEN_PALETTE.info },
|
|
902427
|
+
base2.push({ text: `Skills: ${snapshot2.localSkillCount}; enabled: ${snapshot2.enabledSkillCount}; bundles: ${snapshot2.localSkillBundleCount}; enabled bundles: ${snapshot2.enabledSkillBundleCount}; active skills: ${snapshot2.activeSkillCount}`, fg: FULLSCREEN_PALETTE.info }, ...compactLocalLibraryLines("Skill Library", snapshot2.localSkills, "Create one with Create skill.", workspace.selectedLocalLibraryItem("skill")?.id ?? null), ...compactLocalLibraryLines("Skill Bundles", snapshot2.localSkillBundles, "Create one after adding skills.", null), { text: "Enabled skills/bundles become operating guidance; secrets are rejected.", fg: FULLSCREEN_PALETTE.warn });
|
|
902582
902428
|
} else if (category.id === "routines") {
|
|
902583
902429
|
const ready = readyRoutineItems(snapshot2);
|
|
902584
902430
|
const needsSetup = routinesNeedingSetup(snapshot2);
|
|
902585
902431
|
const needsReview = routinesNeedingReview(snapshot2);
|
|
902586
|
-
base2.push({ text: `Routines: ${snapshot2.localRoutineCount}; enabled: ${snapshot2.enabledRoutineCount}`, fg: FULLSCREEN_PALETTE.info }, { text: `Schedule-ready routines: ${ready.length}; setup gaps: ${needsSetup.length}; review needed: ${needsReview.length}`, fg: needsSetup.length > 0 || needsReview.length > 0 ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.good },
|
|
902432
|
+
base2.push({ text: `Routines: ${snapshot2.localRoutineCount}; enabled: ${snapshot2.enabledRoutineCount}`, fg: FULLSCREEN_PALETTE.info }, { text: `Schedule-ready routines: ${ready.length}; setup gaps: ${needsSetup.length}; review needed: ${needsReview.length}`, fg: needsSetup.length > 0 || needsReview.length > 0 ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.good }, routineNextActionLine(snapshot2), compactRoutineReceiptLine(snapshot2), ...compactLocalLibraryLines("Routine Library", snapshot2.localRoutines, "Create one with Create routine.", workspace.selectedLocalLibraryItem("routine")?.id ?? null), { text: "Scheduling requires a confirmed action.", fg: FULLSCREEN_PALETTE.warn });
|
|
902587
902433
|
} else if (category.id === "work") {
|
|
902588
|
-
base2.push({ text: "Work
|
|
902434
|
+
base2.push({ text: "Work plans and approvals are read or explicitly confirmed.", fg: FULLSCREEN_PALETTE.info }, { text: "Selection alone does not approve, deny, cancel, or mutate requests.", fg: FULLSCREEN_PALETTE.good }, { text: "Approval actions require id plus typed confirmation.", fg: FULLSCREEN_PALETTE.warn });
|
|
902589
902435
|
} else if (category.id === "automation") {
|
|
902590
902436
|
const ready = readyRoutineItems(snapshot2);
|
|
902591
|
-
base2.push({ text:
|
|
902437
|
+
base2.push({ text: `Automation: ${ready.length} schedule-ready routine(s); receipts ${snapshot2.routineScheduleReceiptCount}.`, fg: ready.length > 0 ? FULLSCREEN_PALETTE.good : FULLSCREEN_PALETTE.warn }, automationNextActionLine(snapshot2), compactRoutineReceiptLine(snapshot2), { text: "Reminders and routine promotion require confirmation.", fg: FULLSCREEN_PALETTE.warn });
|
|
902592
902438
|
} else if (category.id === "delegate") {
|
|
902593
|
-
base2.push({ text: "Build/fix/review work is handed to GoodVibes TUI
|
|
902439
|
+
base2.push({ text: "Build/fix/review work is handed to GoodVibes TUI.", fg: FULLSCREEN_PALETTE.info }, { text: `Delegated review policy: ${snapshot2.delegatedReviewPolicy}`, fg: FULLSCREEN_PALETTE.warn }, { text: "No coding-role Agent jobs are created here.", fg: FULLSCREEN_PALETTE.good });
|
|
902594
902440
|
}
|
|
902595
902441
|
if (snapshot2.warnings.length > 0) {
|
|
902596
|
-
base2.push({ text:
|
|
902597
|
-
for (const warning of snapshot2.warnings)
|
|
902598
|
-
base2.push({ text: warning, fg: FULLSCREEN_PALETTE.warn });
|
|
902442
|
+
base2.push({ text: `Warnings: ${snapshot2.warnings.map((warning) => compactText3(warning, 60)).join("; ")}`, fg: FULLSCREEN_PALETTE.warn });
|
|
902599
902443
|
}
|
|
902600
902444
|
return base2;
|
|
902601
902445
|
}
|
|
@@ -902603,11 +902447,11 @@ function editorContextLines(editor) {
|
|
|
902603
902447
|
const selected = editor.fields[editor.selectedFieldIndex];
|
|
902604
902448
|
const lines = [
|
|
902605
902449
|
{ text: editor.title, fg: FULLSCREEN_PALETTE.title, bold: true },
|
|
902606
|
-
{ text: editor.message, fg: editor.message.includes("required") || editor.message.includes("cannot") || editor.message.includes("Cannot") ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.info },
|
|
902607
|
-
{ text: "Enter
|
|
902450
|
+
{ text: compactText3(editor.message), fg: editor.message.includes("required") || editor.message.includes("cannot") || editor.message.includes("Cannot") ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.info },
|
|
902451
|
+
{ text: "Enter next/save; Ctrl-J newline; Esc cancel.", fg: FULLSCREEN_PALETTE.muted }
|
|
902608
902452
|
];
|
|
902609
902453
|
if (selected) {
|
|
902610
|
-
lines.push({ text:
|
|
902454
|
+
lines.push({ text: `Editing: ${selected.label}${selected.required ? " (required)" : ""}`, fg: FULLSCREEN_PALETTE.title, bold: true }, { text: compactText3(selected.hint), fg: FULLSCREEN_PALETTE.muted });
|
|
902611
902455
|
}
|
|
902612
902456
|
return lines;
|
|
902613
902457
|
}
|
|
@@ -902615,27 +902459,24 @@ function buildContextRows(workspace, category, action2, width) {
|
|
|
902615
902459
|
const lines = [
|
|
902616
902460
|
{ text: category.label, fg: FULLSCREEN_PALETTE.title, bold: true },
|
|
902617
902461
|
{ text: category.summary, fg: FULLSCREEN_PALETTE.subtitle },
|
|
902618
|
-
{ text: "" },
|
|
902619
|
-
{ text: category.detail, fg: FULLSCREEN_PALETTE.text },
|
|
902620
|
-
{ text: "" },
|
|
902621
902462
|
...workspace.actionSearchActive ? [
|
|
902622
902463
|
{ text: "Action Search", fg: FULLSCREEN_PALETTE.title, bold: true },
|
|
902623
902464
|
{
|
|
902624
902465
|
text: workspace.actionSearchQuery.length > 0 ? `Query: ${workspace.actionSearchQuery} (${workspace.actionSearchResults.length} result${workspace.actionSearchResults.length === 1 ? "" : "s"})` : "Type to search every Agent workspace action.",
|
|
902625
902466
|
fg: workspace.actionSearchQuery.length > 0 && workspace.actionSearchResults.length === 0 ? FULLSCREEN_PALETTE.warn : FULLSCREEN_PALETTE.info
|
|
902626
902467
|
},
|
|
902627
|
-
{ text: "Enter opens
|
|
902628
|
-
{ text: "" }
|
|
902468
|
+
{ text: "Enter opens; Esc clears.", fg: FULLSCREEN_PALETTE.muted }
|
|
902629
902469
|
] : [],
|
|
902630
|
-
...workspace.localEditor ? editorContextLines(workspace.localEditor) : []
|
|
902631
|
-
...workspace.localEditor ? [{ text: "" }] : [],
|
|
902632
|
-
...snapshotLines(workspace, category, workspace.runtimeSnapshot)
|
|
902470
|
+
...workspace.localEditor ? editorContextLines(workspace.localEditor) : []
|
|
902633
902471
|
];
|
|
902634
|
-
|
|
902635
|
-
|
|
902636
|
-
|
|
902472
|
+
const selectedActionLines = action2 ? [
|
|
902473
|
+
{ text: `Selected: ${action2.label}`, fg: FULLSCREEN_PALETTE.title, bold: true },
|
|
902474
|
+
actionMetaLine(action2)
|
|
902475
|
+
] : [];
|
|
902476
|
+
const snapshotContextLines = snapshotLines(workspace, category, workspace.runtimeSnapshot);
|
|
902477
|
+
lines.push(...selectedActionLines, ...snapshotContextLines);
|
|
902637
902478
|
if (workspace.lastActionResult) {
|
|
902638
|
-
lines.push({ text: "
|
|
902479
|
+
lines.push({ text: "Action Result", fg: FULLSCREEN_PALETTE.title, bold: true }, { text: workspace.lastActionResult.title, fg: actionResultColor(workspace.lastActionResult), bold: true }, { text: compactText3(workspace.lastActionResult.detail), fg: FULLSCREEN_PALETTE.text });
|
|
902639
902480
|
if (workspace.lastActionResult.command) {
|
|
902640
902481
|
lines.push({ text: `Command: ${workspace.lastActionResult.command}`, fg: FULLSCREEN_PALETTE.muted });
|
|
902641
902482
|
}
|
|
@@ -902768,13 +902609,12 @@ function footerText3(workspace) {
|
|
|
902768
902609
|
function renderAgentWorkspace(workspace, width, height) {
|
|
902769
902610
|
const category = workspace.selectedActionCategory;
|
|
902770
902611
|
const action2 = workspace.selectedAction;
|
|
902771
|
-
const setupCategory = category.id === "setup";
|
|
902772
902612
|
const layoutOptions = {
|
|
902773
902613
|
width,
|
|
902774
902614
|
height,
|
|
902775
902615
|
leftWidth: width < 90 ? undefined : 30,
|
|
902776
|
-
contextRatio:
|
|
902777
|
-
minContextRows:
|
|
902616
|
+
contextRatio: 0.4,
|
|
902617
|
+
minContextRows: 10
|
|
902778
902618
|
};
|
|
902779
902619
|
const metrics = getFullscreenWorkspaceMetrics(layoutOptions);
|
|
902780
902620
|
return renderFullscreenWorkspace({
|