@pellux/goodvibes-agent 1.0.33 → 1.0.34
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 +22 -0
- package/README.md +71 -59
- package/dist/package/main.js +565 -420
- package/docs/README.md +25 -21
- package/docs/channels-remote-and-api.md +2 -2
- package/docs/connected-host.md +3 -3
- package/docs/getting-started.md +87 -86
- package/docs/providers-and-routing.md +3 -3
- package/docs/release-and-publishing.md +3 -3
- package/docs/tools-and-commands.md +149 -139
- package/docs/voice-and-live-tts.md +1 -1
- package/package.json +1 -1
- package/release/live-verification/live-verification.json +2 -2
- package/release/live-verification/live-verification.md +2 -2
- package/release/release-notes.md +6 -15
- package/release/release-readiness.json +4 -4
- package/src/agent/harness-control.ts +42 -3
- package/src/runtime/bootstrap.ts +10 -18
- package/src/tools/agent-analysis-registry-policy.ts +2 -9
- package/src/tools/agent-channel-send-tool.ts +1 -5
- package/src/tools/agent-context-policy.ts +1 -5
- package/src/tools/agent-find-policy.ts +1 -4
- package/src/tools/agent-harness-channel-metadata.ts +23 -23
- package/src/tools/agent-harness-cli-metadata.ts +4 -1
- package/src/tools/agent-harness-command-catalog.ts +10 -3
- package/src/tools/agent-harness-connected-host-status.ts +8 -2
- package/src/tools/agent-harness-delegation-posture.ts +5 -5
- package/src/tools/agent-harness-mcp-metadata.ts +30 -28
- package/src/tools/agent-harness-media-posture.ts +9 -9
- package/src/tools/agent-harness-metadata.ts +25 -7
- package/src/tools/agent-harness-model-routing.ts +14 -14
- package/src/tools/agent-harness-model-tool-catalog.ts +7 -2
- package/src/tools/agent-harness-notification-metadata.ts +17 -17
- package/src/tools/agent-harness-pairing-posture.ts +7 -7
- package/src/tools/agent-harness-panel-metadata.ts +26 -12
- package/src/tools/agent-harness-provider-account-metadata.ts +33 -31
- package/src/tools/agent-harness-security-posture.ts +9 -7
- package/src/tools/agent-harness-service-posture.ts +22 -16
- package/src/tools/agent-harness-session-metadata.ts +9 -7
- package/src/tools/agent-harness-setup-posture.ts +6 -6
- package/src/tools/agent-harness-tool-schema.ts +1 -0
- package/src/tools/agent-harness-tool.ts +79 -36
- package/src/tools/agent-harness-ui-surface-metadata.ts +19 -11
- package/src/tools/agent-harness-workspace-actions.ts +29 -1
- package/src/tools/agent-knowledge-ingest-tool.ts +1 -5
- package/src/tools/agent-knowledge-tool.ts +1 -5
- package/src/tools/agent-local-registry-tool.ts +1 -4
- package/src/tools/agent-media-generate-tool.ts +1 -5
- package/src/tools/agent-notify-tool.ts +1 -5
- package/src/tools/agent-operator-action-tool.ts +1 -5
- package/src/tools/agent-operator-briefing-tool.ts +1 -5
- package/src/tools/agent-read-policy.ts +1 -4
- package/src/tools/agent-reminder-schedule-tool.ts +1 -5
- package/src/tools/agent-tool-policy-guard.ts +7 -34
- package/src/tools/agent-web-search-policy.ts +1 -4
- package/src/tools/agent-work-plan-tool.ts +1 -5
- package/src/version.ts +1 -1
package/dist/package/main.js
CHANGED
|
@@ -389782,6 +389782,23 @@ function createSchema2(db) {
|
|
|
389782
389782
|
`);
|
|
389783
389783
|
db.run(`CREATE INDEX IF NOT EXISTS idx_knowledge_schedules_job_id ON knowledge_schedules(job_id)`);
|
|
389784
389784
|
}
|
|
389785
|
+
function getKnowledgeSchemaStatements() {
|
|
389786
|
+
const statements = [];
|
|
389787
|
+
createSchema2({
|
|
389788
|
+
run(sql) {
|
|
389789
|
+
const normalized = sql.trim();
|
|
389790
|
+
if (normalized.length > 0)
|
|
389791
|
+
statements.push(normalized);
|
|
389792
|
+
}
|
|
389793
|
+
});
|
|
389794
|
+
return statements;
|
|
389795
|
+
}
|
|
389796
|
+
function renderKnowledgeSchemaSql() {
|
|
389797
|
+
return `${getKnowledgeSchemaStatements().map((statement) => statement.endsWith(";") ? statement : `${statement};`).join(`
|
|
389798
|
+
|
|
389799
|
+
`)}
|
|
389800
|
+
`;
|
|
389801
|
+
}
|
|
389785
389802
|
function rowObject(columns, values2) {
|
|
389786
389803
|
return Object.fromEntries(columns.map((column, index) => [column, values2[index]]));
|
|
389787
389804
|
}
|
|
@@ -703119,6 +703136,9 @@ var init_ingest = __esm(() => {
|
|
|
703119
703136
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/browser-history/index.js
|
|
703120
703137
|
var init_browser_history = __esm(() => {
|
|
703121
703138
|
init_ingest();
|
|
703139
|
+
init_discover();
|
|
703140
|
+
init_readers();
|
|
703141
|
+
init_paths2();
|
|
703122
703142
|
});
|
|
703123
703143
|
|
|
703124
703144
|
// node_modules/graphql/jsutils/devAssert.mjs
|
|
@@ -720758,6 +720778,7 @@ var init_semantic = __esm(() => {
|
|
|
720758
720778
|
init_llm();
|
|
720759
720779
|
init_gap_repair();
|
|
720760
720780
|
init_service4();
|
|
720781
|
+
init_self_improvement();
|
|
720761
720782
|
});
|
|
720762
720783
|
|
|
720763
720784
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/helpers.js
|
|
@@ -724726,8 +724747,40 @@ var init_map_view = __esm(() => {
|
|
|
724726
724747
|
});
|
|
724727
724748
|
|
|
724728
724749
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/home-graph/types.js
|
|
724729
|
-
var HOME_GRAPH_CAPABILITIES;
|
|
724750
|
+
var HOME_GRAPH_NODE_KINDS, HOME_GRAPH_RELATIONS, HOME_GRAPH_CAPABILITIES;
|
|
724730
724751
|
var init_types6 = __esm(() => {
|
|
724752
|
+
HOME_GRAPH_NODE_KINDS = [
|
|
724753
|
+
"ha_home",
|
|
724754
|
+
"ha_entity",
|
|
724755
|
+
"ha_device",
|
|
724756
|
+
"ha_area",
|
|
724757
|
+
"ha_automation",
|
|
724758
|
+
"ha_script",
|
|
724759
|
+
"ha_scene",
|
|
724760
|
+
"ha_label",
|
|
724761
|
+
"ha_integration",
|
|
724762
|
+
"ha_room",
|
|
724763
|
+
"ha_device_passport",
|
|
724764
|
+
"ha_maintenance_item",
|
|
724765
|
+
"ha_troubleshooting_case",
|
|
724766
|
+
"ha_purchase",
|
|
724767
|
+
"ha_network_node"
|
|
724768
|
+
];
|
|
724769
|
+
HOME_GRAPH_RELATIONS = [
|
|
724770
|
+
"controls",
|
|
724771
|
+
"located_in",
|
|
724772
|
+
"belongs_to_device",
|
|
724773
|
+
"has_manual",
|
|
724774
|
+
"has_receipt",
|
|
724775
|
+
"has_warranty",
|
|
724776
|
+
"has_issue",
|
|
724777
|
+
"fixed_by",
|
|
724778
|
+
"uses_battery",
|
|
724779
|
+
"connected_via",
|
|
724780
|
+
"part_of_network",
|
|
724781
|
+
"mentioned_by",
|
|
724782
|
+
"source_for"
|
|
724783
|
+
];
|
|
724731
724784
|
HOME_GRAPH_CAPABILITIES = [
|
|
724732
724785
|
"knowledge-space-isolation",
|
|
724733
724786
|
"snapshot-sync",
|
|
@@ -726134,6 +726187,7 @@ var init_service5 = __esm(() => {
|
|
|
726134
726187
|
var init_home_graph = __esm(() => {
|
|
726135
726188
|
init_service5();
|
|
726136
726189
|
init_extension();
|
|
726190
|
+
init_types6();
|
|
726137
726191
|
});
|
|
726138
726192
|
|
|
726139
726193
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/store-refinement.js
|
|
@@ -728461,10 +728515,14 @@ var init_service6 = __esm(() => {
|
|
|
728461
728515
|
var init_project_planning = __esm(() => {
|
|
728462
728516
|
init_service6();
|
|
728463
728517
|
init_helpers3();
|
|
728518
|
+
init_readiness();
|
|
728464
728519
|
});
|
|
728465
728520
|
|
|
728466
728521
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/persistence.js
|
|
728467
|
-
var init_persistence = () => {
|
|
728522
|
+
var init_persistence = __esm(() => {
|
|
728523
|
+
init_store_schema();
|
|
728524
|
+
init_store_load();
|
|
728525
|
+
});
|
|
728468
728526
|
|
|
728469
728527
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/knowledge/projections.js
|
|
728470
728528
|
class KnowledgeProjectionService {
|
|
@@ -731972,21 +732030,21 @@ var init_service7 = __esm(() => {
|
|
|
731972
732030
|
var exports_knowledge = {};
|
|
731973
732031
|
__export(exports_knowledge, {
|
|
731974
732032
|
withKnowledgeSpace: () => withKnowledgeSpace,
|
|
731975
|
-
uniqKnowledgeValues: () =>
|
|
731976
|
-
stabilizeKnowledgeText: () =>
|
|
731977
|
-
runKnowledgeSemanticSelfImprovement: () =>
|
|
732033
|
+
uniqKnowledgeValues: () => uniq2,
|
|
732034
|
+
stabilizeKnowledgeText: () => stableText,
|
|
732035
|
+
runKnowledgeSemanticSelfImprovement: () => runKnowledgeSemanticSelfImprovement,
|
|
731978
732036
|
resolveProjectPlanningSpace: () => resolveProjectPlanningSpace,
|
|
731979
|
-
resolveKnowledgeDbPathFromControlPlaneDir: () =>
|
|
732037
|
+
resolveKnowledgeDbPathFromControlPlaneDir: () => resolveKnowledgeDbPathFromControlPlaneDir,
|
|
731980
732038
|
renderPacket: () => renderPacket,
|
|
731981
732039
|
renderKnowledgeSchemaSql: () => renderKnowledgeSchemaSql,
|
|
731982
732040
|
renderKnowledgeMap: () => renderKnowledgeMap,
|
|
731983
732041
|
readKnowledgeSearchText: () => readKnowledgeSearchText,
|
|
731984
|
-
readBrowserKnowledgeProfile: () =>
|
|
732042
|
+
readBrowserKnowledgeProfile: () => readBrowserKnowledgeProfile,
|
|
731985
732043
|
projectPlanningSourceId: () => projectPlanningSourceId,
|
|
731986
732044
|
projectPlanningProjectIdFromPath: () => projectPlanningProjectIdFromPath,
|
|
731987
732045
|
projectPlanningCanonicalUri: () => projectPlanningCanonicalUri,
|
|
731988
732046
|
projectKnowledgeSpaceId: () => projectKnowledgeSpaceId,
|
|
731989
|
-
parseKnowledgeJsonValue: () =>
|
|
732047
|
+
parseKnowledgeJsonValue: () => parseJsonValue,
|
|
731990
732048
|
normalizeProjectId: () => normalizeProjectId,
|
|
731991
732049
|
normalizeKnowledgeSpaceId: () => normalizeKnowledgeSpaceId,
|
|
731992
732050
|
normalizeHomeAssistantInstallationId: () => normalizeHomeAssistantInstallationId,
|
|
@@ -731994,12 +732052,12 @@ __export(exports_knowledge, {
|
|
|
731994
732052
|
materializeGeneratedKnowledgeProjection: () => materializeGeneratedKnowledgeProjection,
|
|
731995
732053
|
looksLikeRawPdfPayload: () => looksLikeRawPdfPayload,
|
|
731996
732054
|
looksBinaryLikeText: () => looksBinaryLikeText,
|
|
731997
|
-
loadKnowledgeStoreSnapshot: () =>
|
|
732055
|
+
loadKnowledgeStoreSnapshot: () => loadKnowledgeStoreSnapshot,
|
|
731998
732056
|
listGeneratedKnowledgePages: () => listGeneratedKnowledgePages,
|
|
731999
|
-
listBrowserKinds: () =>
|
|
732057
|
+
listBrowserKinds: () => listBrowserKinds,
|
|
732000
732058
|
knowledgeSpaceMetadata: () => knowledgeSpaceMetadata,
|
|
732001
732059
|
knowledgePageSourceWeight: () => knowledgePageSourceWeight,
|
|
732002
|
-
knowledgeNowMs: () =>
|
|
732060
|
+
knowledgeNowMs: () => nowMs,
|
|
732003
732061
|
knowledgeExtractionNeedsRefresh: () => knowledgeExtractionNeedsRefresh,
|
|
732004
732062
|
isUsefulKnowledgePageSourceCandidate: () => isUsefulKnowledgePageSourceCandidate,
|
|
732005
732063
|
isUsefulKnowledgePageSource: () => isUsefulKnowledgePageSource,
|
|
@@ -732019,12 +732077,12 @@ __export(exports_knowledge, {
|
|
|
732019
732077
|
generatedKnowledgeSourceId: () => generatedKnowledgeSourceId,
|
|
732020
732078
|
generatedKnowledgeCanonicalUri: () => generatedKnowledgeCanonicalUri,
|
|
732021
732079
|
extractKnowledgeArtifact: () => extractKnowledgeArtifact,
|
|
732022
|
-
evaluateProjectPlanningReadiness: () =>
|
|
732023
|
-
discoverBrowserKnowledgeProfiles: () =>
|
|
732080
|
+
evaluateProjectPlanningReadiness: () => evaluateProjectPlanningReadiness,
|
|
732081
|
+
discoverBrowserKnowledgeProfiles: () => discoverBrowserKnowledgeProfiles,
|
|
732024
732082
|
createWebKnowledgeGapRepairer: () => createWebKnowledgeGapRepairer,
|
|
732025
732083
|
createProviderBackedKnowledgeSemanticLlm: () => createProviderBackedKnowledgeSemanticLlm,
|
|
732026
732084
|
createMemoryApi: () => createMemoryApi,
|
|
732027
|
-
createKnowledgeSchema: () =>
|
|
732085
|
+
createKnowledgeSchema: () => createSchema2,
|
|
732028
732086
|
createKnowledgeApi: () => createKnowledgeApi,
|
|
732029
732087
|
createDefaultKnowledgeConnectorRegistry: () => createDefaultKnowledgeConnectorRegistry,
|
|
732030
732088
|
compareKnowledgePageSources: () => compareKnowledgePageSources,
|
|
@@ -734463,7 +734521,7 @@ var init_delivery_manager = __esm(() => {
|
|
|
734463
734521
|
});
|
|
734464
734522
|
|
|
734465
734523
|
// node_modules/@pellux/goodvibes-sdk/dist/platform/automation/scheduler-capacity.js
|
|
734466
|
-
function computeSchedulerCapacity(slotsTotal, runs,
|
|
734524
|
+
function computeSchedulerCapacity(slotsTotal, runs, nowMs2 = Date.now()) {
|
|
734467
734525
|
let slotsInUse = 0;
|
|
734468
734526
|
const queuedRuns = [];
|
|
734469
734527
|
for (const run7 of runs) {
|
|
@@ -734473,7 +734531,7 @@ function computeSchedulerCapacity(slotsTotal, runs, nowMs3 = Date.now()) {
|
|
|
734473
734531
|
queuedRuns.push(run7);
|
|
734474
734532
|
}
|
|
734475
734533
|
const queueDepth = queuedRuns.length;
|
|
734476
|
-
const oldestQueuedAgeMs = queueDepth > 0 ?
|
|
734534
|
+
const oldestQueuedAgeMs = queueDepth > 0 ? nowMs2 - Math.min(...queuedRuns.map((r5) => r5.queuedAt)) : null;
|
|
734477
734535
|
return { slotsTotal, slotsInUse, queueDepth, oldestQueuedAgeMs };
|
|
734478
734536
|
}
|
|
734479
734537
|
|
|
@@ -817087,7 +817145,7 @@ var createStyledCell = (char, overrides = {}) => ({
|
|
|
817087
817145
|
// src/version.ts
|
|
817088
817146
|
import { readFileSync } from "fs";
|
|
817089
817147
|
import { join } from "path";
|
|
817090
|
-
var _version = "1.0.
|
|
817148
|
+
var _version = "1.0.34";
|
|
817091
817149
|
var _sdkVersion = "0.33.36";
|
|
817092
817150
|
try {
|
|
817093
817151
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, "..", "package.json"), "utf-8"));
|
|
@@ -840168,7 +840226,7 @@ var WORK_PLAN_STATUSES = [
|
|
|
840168
840226
|
"failed",
|
|
840169
840227
|
"cancelled"
|
|
840170
840228
|
];
|
|
840171
|
-
function
|
|
840229
|
+
function nowMs2() {
|
|
840172
840230
|
return Date.now();
|
|
840173
840231
|
}
|
|
840174
840232
|
function isObject5(value) {
|
|
@@ -840274,7 +840332,7 @@ class WorkPlanStore {
|
|
|
840274
840332
|
if (!normalizedTitle)
|
|
840275
840333
|
throw new Error("Work plan item title is required.");
|
|
840276
840334
|
const plan = this.readPlan();
|
|
840277
|
-
const time4 =
|
|
840335
|
+
const time4 = nowMs2();
|
|
840278
840336
|
const item = {
|
|
840279
840337
|
id: createItemId(),
|
|
840280
840338
|
title: normalizedTitle,
|
|
@@ -840298,7 +840356,7 @@ class WorkPlanStore {
|
|
|
840298
840356
|
updateItem(idOrPrefix, patch2) {
|
|
840299
840357
|
const plan = this.readPlan();
|
|
840300
840358
|
const item = this.resolveItem(plan, idOrPrefix);
|
|
840301
|
-
const time4 =
|
|
840359
|
+
const time4 = nowMs2();
|
|
840302
840360
|
const nextStatus = patch2.status ?? item.status;
|
|
840303
840361
|
const next = this.pruneItem({
|
|
840304
840362
|
...item,
|
|
@@ -840331,7 +840389,7 @@ class WorkPlanStore {
|
|
|
840331
840389
|
removeItem(idOrPrefix) {
|
|
840332
840390
|
const plan = this.readPlan();
|
|
840333
840391
|
const item = this.resolveItem(plan, idOrPrefix);
|
|
840334
|
-
const time4 =
|
|
840392
|
+
const time4 = nowMs2();
|
|
840335
840393
|
const remaining = plan.items.filter((candidate) => candidate.id !== item.id);
|
|
840336
840394
|
this.writePlan({
|
|
840337
840395
|
...plan,
|
|
@@ -840351,7 +840409,7 @@ class WorkPlanStore {
|
|
|
840351
840409
|
...plan,
|
|
840352
840410
|
items: remaining,
|
|
840353
840411
|
activeItemId: remaining[0]?.id,
|
|
840354
|
-
updatedAt:
|
|
840412
|
+
updatedAt: nowMs2()
|
|
840355
840413
|
});
|
|
840356
840414
|
return removed;
|
|
840357
840415
|
}
|
|
@@ -840390,7 +840448,7 @@ class WorkPlanStore {
|
|
|
840390
840448
|
const parsed = JSON.parse(raw);
|
|
840391
840449
|
if (!isObject5(parsed))
|
|
840392
840450
|
return this.createEmptyPlan();
|
|
840393
|
-
const time4 =
|
|
840451
|
+
const time4 = nowMs2();
|
|
840394
840452
|
const createdAt = typeof parsed.createdAt === "number" ? parsed.createdAt : time4;
|
|
840395
840453
|
const updatedAt = typeof parsed.updatedAt === "number" ? parsed.updatedAt : createdAt;
|
|
840396
840454
|
const items = Array.isArray(parsed.items) ? parsed.items.map((item) => normalizeItem(item, createdAt)).filter((item) => item !== null) : [];
|
|
@@ -840409,7 +840467,7 @@ class WorkPlanStore {
|
|
|
840409
840467
|
};
|
|
840410
840468
|
}
|
|
840411
840469
|
createEmptyPlan() {
|
|
840412
|
-
const time4 =
|
|
840470
|
+
const time4 = nowMs2();
|
|
840413
840471
|
return {
|
|
840414
840472
|
id: createPlanId(this.options.projectId, this.options.projectRoot),
|
|
840415
840473
|
projectId: this.options.projectId,
|
|
@@ -841161,11 +841219,7 @@ function validateRegistryToolInvocationForAgentPolicy(args2) {
|
|
|
841161
841219
|
return null;
|
|
841162
841220
|
}
|
|
841163
841221
|
function narrowAnalyzeToolDefinitionForAgentPolicy(tool2) {
|
|
841164
|
-
tool2.definition.description =
|
|
841165
|
-
"Run local, static project analysis for GoodVibes Agent.",
|
|
841166
|
-
"npm registry upgrade checks and hidden secondary LLM diff analysis are disabled in the main conversation.",
|
|
841167
|
-
"Delegate package-upgrade and review workflows to GoodVibes TUI when they become build/fix/review work."
|
|
841168
|
-
].join(" ");
|
|
841222
|
+
tool2.definition.description = "Run local, static project analysis for GoodVibes Agent.";
|
|
841169
841223
|
tool2.definition.sideEffects = ["read_fs"];
|
|
841170
841224
|
const properties2 = tool2.definition.parameters.properties;
|
|
841171
841225
|
if (!isRecord22(properties2))
|
|
@@ -841178,10 +841232,7 @@ function narrowAnalyzeToolDefinitionForAgentPolicy(tool2) {
|
|
|
841178
841232
|
delete properties2.packages;
|
|
841179
841233
|
}
|
|
841180
841234
|
function narrowRegistryToolDefinitionForAgentPolicy(tool2) {
|
|
841181
|
-
tool2.definition.description =
|
|
841182
|
-
"Discover and preview GoodVibes Agent skills, agents, and tools.",
|
|
841183
|
-
"Full content materialization and arbitrary .goodvibes file reads are disabled in the main conversation."
|
|
841184
|
-
].join(" ");
|
|
841235
|
+
tool2.definition.description = "Discover and preview GoodVibes Agent registry entries.";
|
|
841185
841236
|
tool2.definition.sideEffects = ["read_fs"];
|
|
841186
841237
|
const properties2 = tool2.definition.parameters.properties;
|
|
841187
841238
|
if (!isRecord22(properties2))
|
|
@@ -841207,11 +841258,7 @@ var CONTEXT_TOOL_DENIAL = [
|
|
|
841207
841258
|
"Use explicit Agent CLI/slash commands such as status, compat, setup, and isolated Agent Knowledge instead."
|
|
841208
841259
|
].join(" ");
|
|
841209
841260
|
function wrapBlockedContextToolForAgentPolicy(tool2) {
|
|
841210
|
-
tool2.definition.description =
|
|
841211
|
-
"Blocked in GoodVibes Agent main conversation: non-Agent runtime context.",
|
|
841212
|
-
"Use explicit Agent CLI/slash status, compat, setup, and Agent Knowledge commands for product-scoped context.",
|
|
841213
|
-
"Default knowledge, non-Agent knowledge segments, and non-Agent runtime assumptions are not Agent fallbacks."
|
|
841214
|
-
].join(" ");
|
|
841261
|
+
tool2.definition.description = "Blocked in GoodVibes Agent: non-Agent runtime context.";
|
|
841215
841262
|
tool2.definition.sideEffects = [];
|
|
841216
841263
|
tool2.definition.parameters = {
|
|
841217
841264
|
type: "object",
|
|
@@ -841279,10 +841326,7 @@ function normalizeFindToolInvocationForAgentPolicy(args2) {
|
|
|
841279
841326
|
};
|
|
841280
841327
|
}
|
|
841281
841328
|
function narrowFindToolDefinitionForAgentPolicy(tool2) {
|
|
841282
|
-
tool2.definition.description =
|
|
841283
|
-
"Search the project for GoodVibes Agent using serial, gitignore-respecting read-only queries.",
|
|
841284
|
-
"Hidden-file scans, symlink traversal, gitignore bypass, broad previews, full symbol dumps, and parallel search are disabled in the main conversation."
|
|
841285
|
-
].join(" ");
|
|
841329
|
+
tool2.definition.description = "Search project files with serial, gitignore-respecting read-only queries.";
|
|
841286
841330
|
tool2.definition.sideEffects = ["read_fs"];
|
|
841287
841331
|
tool2.definition.concurrency = "serial";
|
|
841288
841332
|
const properties2 = tool2.definition.parameters.properties;
|
|
@@ -841429,10 +841473,7 @@ function isBlockedReadPath(path7) {
|
|
|
841429
841473
|
return SECRET_EXACT_SEGMENTS.has(stem) && SECRET_FILE_EXTENSIONS.has(extension);
|
|
841430
841474
|
}
|
|
841431
841475
|
function narrowReadToolDefinitionForAgentPolicy(tool2) {
|
|
841432
|
-
tool2.definition.description =
|
|
841433
|
-
"Read ordinary project files for GoodVibes Agent with bounded, non-secret, main-conversation policy.",
|
|
841434
|
-
"Hidden paths, secret-looking files, broad batches, unoptimized image extraction, and oversized image reads are disabled."
|
|
841435
|
-
].join(" ");
|
|
841476
|
+
tool2.definition.description = "Read ordinary non-secret project files for GoodVibes Agent.";
|
|
841436
841477
|
tool2.definition.sideEffects = ["read_fs"];
|
|
841437
841478
|
tool2.definition.concurrency = "serial";
|
|
841438
841479
|
const properties2 = tool2.definition.parameters.properties;
|
|
@@ -841530,10 +841571,7 @@ function normalizeWebSearchToolInvocationForAgentPolicy(args2) {
|
|
|
841530
841571
|
};
|
|
841531
841572
|
}
|
|
841532
841573
|
function narrowWebSearchToolDefinitionForAgentPolicy(tool2) {
|
|
841533
|
-
tool2.definition.description =
|
|
841534
|
-
"Run bounded, read-only web research for GoodVibes Agent.",
|
|
841535
|
-
"Full-page/raw/summary extraction, safe-search off, and high-fanout searches are disabled in the main conversation."
|
|
841536
|
-
].join(" ");
|
|
841574
|
+
tool2.definition.description = "Run bounded, read-only web research for GoodVibes Agent.";
|
|
841537
841575
|
tool2.definition.sideEffects = ["network"];
|
|
841538
841576
|
const properties2 = tool2.definition.parameters.properties;
|
|
841539
841577
|
if (!isRecord25(properties2))
|
|
@@ -841782,11 +841820,7 @@ function normalizeAgentToolInvocationForAgentPolicy(args2) {
|
|
|
841782
841820
|
return args2;
|
|
841783
841821
|
}
|
|
841784
841822
|
function wrapBlockedMainConversationToolForAgentPolicy(tool2) {
|
|
841785
|
-
tool2.definition.description =
|
|
841786
|
-
`Blocked in GoodVibes Agent main conversation: ${tool2.definition.name}.`,
|
|
841787
|
-
"Use explicit GoodVibes TUI build delegation for build/fix/review/code execution work.",
|
|
841788
|
-
"Use Agent-owned local registries and isolated Agent Knowledge routes for Agent memory and knowledge work."
|
|
841789
|
-
].join(" ");
|
|
841823
|
+
tool2.definition.description = `Blocked in GoodVibes Agent: ${tool2.definition.name}.`;
|
|
841790
841824
|
tool2.definition.sideEffects = [];
|
|
841791
841825
|
tool2.execute = async () => ({ success: false, error: LOCAL_CODING_TOOL_DENIAL });
|
|
841792
841826
|
}
|
|
@@ -841821,11 +841855,7 @@ function wrapStateToolForAgentPolicy(tool2) {
|
|
|
841821
841855
|
};
|
|
841822
841856
|
}
|
|
841823
841857
|
function wrapBlockedSettingsToolForAgentPolicy(tool2) {
|
|
841824
|
-
tool2.definition.description =
|
|
841825
|
-
"Blocked in GoodVibes Agent main conversation: configuration mutation.",
|
|
841826
|
-
"Use explicit Agent CLI/slash settings commands for intentional config changes.",
|
|
841827
|
-
"Connected-host lifecycle and service exposure remain externally managed outside GoodVibes Agent."
|
|
841828
|
-
].join(" ");
|
|
841858
|
+
tool2.definition.description = "Blocked in GoodVibes Agent: configuration mutation.";
|
|
841829
841859
|
tool2.definition.sideEffects = [];
|
|
841830
841860
|
tool2.definition.parameters = {
|
|
841831
841861
|
type: "object",
|
|
@@ -841988,11 +842018,7 @@ function isPresent(value) {
|
|
|
841988
842018
|
return true;
|
|
841989
842019
|
}
|
|
841990
842020
|
function narrowAgentToolDefinitionForAgentPolicy(tool2) {
|
|
841991
|
-
tool2.definition.description =
|
|
841992
|
-
"Read-only local Agent inspection for GoodVibes Agent.",
|
|
841993
|
-
"This product does not create separate Agent jobs or run local delegated review chains.",
|
|
841994
|
-
"For build/fix/review work, delegate to GoodVibes TUI through the explicit build-delegation path instead."
|
|
841995
|
-
].join(" ");
|
|
842021
|
+
tool2.definition.description = "Read-only local Agent inspection for GoodVibes Agent.";
|
|
841996
842022
|
tool2.definition.sideEffects = [];
|
|
841997
842023
|
const properties2 = tool2.definition.parameters.properties;
|
|
841998
842024
|
if (!isRecord26(properties2))
|
|
@@ -842004,11 +842030,7 @@ function narrowAgentToolDefinitionForAgentPolicy(tool2) {
|
|
|
842004
842030
|
modeProperty.description = "Read-only Agent inspection mode. Separate Agent job creation, batch creation, cancel, message, wait, and plan modes are disabled in GoodVibes Agent.";
|
|
842005
842031
|
}
|
|
842006
842032
|
function narrowExecToolDefinitionForAgentPolicy(tool2) {
|
|
842007
|
-
tool2.definition.description =
|
|
842008
|
-
"Execute foreground shell commands serially for GoodVibes Agent main-conversation work.",
|
|
842009
|
-
"Background processes, parallel batches, background process controls, and exec file_ops are disabled by Agent policy.",
|
|
842010
|
-
"Delegate long-running build/fix/review execution to GoodVibes TUI instead."
|
|
842011
|
-
].join(" ");
|
|
842033
|
+
tool2.definition.description = "Execute foreground shell commands serially for GoodVibes Agent.";
|
|
842012
842034
|
const properties2 = tool2.definition.parameters.properties;
|
|
842013
842035
|
if (!isRecord26(properties2))
|
|
842014
842036
|
return;
|
|
@@ -842033,11 +842055,7 @@ function narrowExecToolDefinitionForAgentPolicy(tool2) {
|
|
|
842033
842055
|
}
|
|
842034
842056
|
}
|
|
842035
842057
|
function narrowFetchToolDefinitionForAgentPolicy(tool2) {
|
|
842036
|
-
tool2.definition.description =
|
|
842037
|
-
"Fetch public URLs for GoodVibes Agent with serial, read-only HTTP requests.",
|
|
842038
|
-
"Only GET, HEAD, and OPTIONS are available in the main conversation.",
|
|
842039
|
-
"Credentialed requests, request bodies, trust overrides, raw unsanitized responses, and parallel batches are disabled by Agent policy."
|
|
842040
|
-
].join(" ");
|
|
842058
|
+
tool2.definition.description = "Fetch public URLs with serial, read-only HTTP requests.";
|
|
842041
842059
|
const properties2 = tool2.definition.parameters.properties;
|
|
842042
842060
|
if (!isRecord26(properties2))
|
|
842043
842061
|
return;
|
|
@@ -842072,11 +842090,7 @@ function narrowFetchToolDefinitionForAgentPolicy(tool2) {
|
|
|
842072
842090
|
delete urlProperties.auth;
|
|
842073
842091
|
}
|
|
842074
842092
|
function narrowStateToolDefinitionForAgentPolicy(tool2) {
|
|
842075
|
-
tool2.definition.description =
|
|
842076
|
-
"Inspect runtime-owned state for GoodVibes Agent.",
|
|
842077
|
-
"State mutation, runtime-owned memory writes, hook changes, output-mode changes, and analytics writes are disabled in the main conversation.",
|
|
842078
|
-
"Use Agent-owned commands for intentional memory, skill, persona, and routine changes."
|
|
842079
|
-
].join(" ");
|
|
842093
|
+
tool2.definition.description = "Inspect runtime-owned state for GoodVibes Agent.";
|
|
842080
842094
|
const properties2 = tool2.definition.parameters.properties;
|
|
842081
842095
|
if (!isRecord26(properties2))
|
|
842082
842096
|
return;
|
|
@@ -842103,10 +842117,7 @@ function narrowStateToolDefinitionForAgentPolicy(tool2) {
|
|
|
842103
842117
|
narrowStringEnumProperty(properties2, "analyticsAction", READ_ONLY_STATE_ANALYTICS_ACTIONS, "Read-only analytics actions allowed by GoodVibes Agent.");
|
|
842104
842118
|
}
|
|
842105
842119
|
function narrowInspectToolDefinitionForAgentPolicy(tool2) {
|
|
842106
|
-
tool2.definition.description =
|
|
842107
|
-
"Inspect and analyze project structure for GoodVibes Agent.",
|
|
842108
|
-
"Scaffold mode is dry-run-only in the main conversation; code creation must be delegated to GoodVibes TUI."
|
|
842109
|
-
].join(" ");
|
|
842120
|
+
tool2.definition.description = "Inspect and analyze project structure for GoodVibes Agent.";
|
|
842110
842121
|
const properties2 = tool2.definition.parameters.properties;
|
|
842111
842122
|
if (!isRecord26(properties2))
|
|
842112
842123
|
return;
|
|
@@ -842313,11 +842324,7 @@ function createAgentChannelSendTool(channelDeliveryRouter) {
|
|
|
842313
842324
|
return {
|
|
842314
842325
|
definition: {
|
|
842315
842326
|
name: "agent_channel_send",
|
|
842316
|
-
description:
|
|
842317
|
-
"Send one confirmed message through a configured Agent target.",
|
|
842318
|
-
"Use only for explicit send/message/alert requests.",
|
|
842319
|
-
"Provide exactly one target."
|
|
842320
|
-
].join(" "),
|
|
842327
|
+
description: "Send one confirmed message through one configured Agent target.",
|
|
842321
842328
|
parameters: {
|
|
842322
842329
|
type: "object",
|
|
842323
842330
|
properties: {
|
|
@@ -844523,11 +844530,7 @@ function createAgentKnowledgeIngestTool(shellPaths, configManager) {
|
|
|
844523
844530
|
return {
|
|
844524
844531
|
definition: {
|
|
844525
844532
|
name: "agent_knowledge_ingest",
|
|
844526
|
-
description:
|
|
844527
|
-
"Ingest one confirmed source into isolated Agent Knowledge.",
|
|
844528
|
-
"Use only for explicit ingest/import requests.",
|
|
844529
|
-
"Supports URL, file, bookmark, history, and connector sources."
|
|
844530
|
-
].join(" "),
|
|
844533
|
+
description: "Ingest one confirmed source into isolated Agent Knowledge.",
|
|
844531
844534
|
parameters: {
|
|
844532
844535
|
type: "object",
|
|
844533
844536
|
properties: {
|
|
@@ -844706,11 +844709,7 @@ function createAgentKnowledgeTool(shellPaths, configManager) {
|
|
|
844706
844709
|
return {
|
|
844707
844710
|
definition: {
|
|
844708
844711
|
name: "agent_knowledge",
|
|
844709
|
-
description:
|
|
844710
|
-
"Read isolated Agent Knowledge.",
|
|
844711
|
-
"Use for status, ask/search, source/node/issue lists, item lookup, map summary, and connector inspection.",
|
|
844712
|
-
"Read-only."
|
|
844713
|
-
].join(" "),
|
|
844712
|
+
description: "Read isolated Agent Knowledge.",
|
|
844714
844713
|
parameters: {
|
|
844715
844714
|
type: "object",
|
|
844716
844715
|
properties: {
|
|
@@ -845611,10 +845610,7 @@ function createAgentLocalRegistryTool(shellPaths, memoryRegistry) {
|
|
|
845611
845610
|
return {
|
|
845612
845611
|
definition: {
|
|
845613
845612
|
name: "agent_local_registry",
|
|
845614
|
-
description:
|
|
845615
|
-
"Inspect or update Agent-local records: memory, notes, personas, skills, bundles, and routines.",
|
|
845616
|
-
"Deletion requires confirm:true plus explicitUserRequest."
|
|
845617
|
-
].join(" "),
|
|
845613
|
+
description: "Inspect or update Agent-local records.",
|
|
845618
845614
|
parameters: {
|
|
845619
845615
|
type: "object",
|
|
845620
845616
|
properties: {
|
|
@@ -845827,11 +845823,7 @@ function createAgentMediaGenerateTool(mediaProviderRegistry, artifactStore) {
|
|
|
845827
845823
|
return {
|
|
845828
845824
|
definition: {
|
|
845829
845825
|
name: "agent_media_generate",
|
|
845830
|
-
description:
|
|
845831
|
-
"Generate one confirmed image or video artifact.",
|
|
845832
|
-
"Use only for explicit media generation requests.",
|
|
845833
|
-
"Returns artifact ids, not inline base64."
|
|
845834
|
-
].join(" "),
|
|
845826
|
+
description: "Generate one confirmed image or video artifact.",
|
|
845835
845827
|
parameters: {
|
|
845836
845828
|
type: "object",
|
|
845837
845829
|
properties: {
|
|
@@ -845951,11 +845943,7 @@ function createAgentNotifyTool(configManager, notifier) {
|
|
|
845951
845943
|
return {
|
|
845952
845944
|
definition: {
|
|
845953
845945
|
name: "agent_notify",
|
|
845954
|
-
description:
|
|
845955
|
-
"Send one confirmed plain-text notification.",
|
|
845956
|
-
"Use only for explicit notify/message/alert requests.",
|
|
845957
|
-
"Uses existing targets only."
|
|
845958
|
-
].join(" "),
|
|
845946
|
+
description: "Send one confirmed plain-text notification.",
|
|
845959
845947
|
parameters: {
|
|
845960
845948
|
type: "object",
|
|
845961
845949
|
properties: {
|
|
@@ -846277,11 +846265,7 @@ function createAgentOperatorActionTool(shellPaths, configManager) {
|
|
|
846277
846265
|
return {
|
|
846278
846266
|
definition: {
|
|
846279
846267
|
name: "agent_operator_action",
|
|
846280
|
-
description:
|
|
846281
|
-
"Run one confirmed allowlisted operator action.",
|
|
846282
|
-
"Use only for explicit approval, automation, or schedule requests.",
|
|
846283
|
-
"No automation definition edits or host lifecycle."
|
|
846284
|
-
].join(" "),
|
|
846268
|
+
description: "Run one confirmed allowlisted operator action.",
|
|
846285
846269
|
parameters: {
|
|
846286
846270
|
type: "object",
|
|
846287
846271
|
properties: {
|
|
@@ -846495,11 +846479,7 @@ function createAgentOperatorBriefingTool(shellPaths, configManager) {
|
|
|
846495
846479
|
return {
|
|
846496
846480
|
definition: {
|
|
846497
846481
|
name: "agent_operator_briefing",
|
|
846498
|
-
description:
|
|
846499
|
-
"Read connected Agent operator state for a concise briefing.",
|
|
846500
|
-
"Use for pending attention, approvals, automation, schedules, or status.",
|
|
846501
|
-
"Read-only."
|
|
846502
|
-
].join(" "),
|
|
846482
|
+
description: "Read connected Agent operator state for a concise briefing.",
|
|
846503
846483
|
parameters: {
|
|
846504
846484
|
type: "object",
|
|
846505
846485
|
properties: {},
|
|
@@ -847095,11 +847075,7 @@ function createAgentReminderScheduleTool(shellPaths, configManager) {
|
|
|
847095
847075
|
return {
|
|
847096
847076
|
definition: {
|
|
847097
847077
|
name: "agent_reminder_schedule",
|
|
847098
|
-
description:
|
|
847099
|
-
"Schedule one confirmed GoodVibes Agent reminder.",
|
|
847100
|
-
"Use only for an explicit reminder request.",
|
|
847101
|
-
"No host lifecycle, background job, or Knowledge write."
|
|
847102
|
-
].join(" "),
|
|
847078
|
+
description: "Schedule one confirmed GoodVibes Agent reminder.",
|
|
847103
847079
|
parameters: {
|
|
847104
847080
|
type: "object",
|
|
847105
847081
|
properties: {
|
|
@@ -847339,11 +847315,7 @@ function createAgentWorkPlanTool(store) {
|
|
|
847339
847315
|
return {
|
|
847340
847316
|
definition: {
|
|
847341
847317
|
name: "agent_work_plan",
|
|
847342
|
-
description:
|
|
847343
|
-
"Inspect or update the visible Agent-local work plan.",
|
|
847344
|
-
"Use for task/status tracking.",
|
|
847345
|
-
"Destructive actions require confirm:true plus explicitUserRequest."
|
|
847346
|
-
].join(" "),
|
|
847318
|
+
description: "Inspect or update the visible Agent-local work plan.",
|
|
847347
847319
|
parameters: {
|
|
847348
847320
|
type: "object",
|
|
847349
847321
|
properties: {
|
|
@@ -848685,13 +848657,13 @@ init_state3();
|
|
|
848685
848657
|
|
|
848686
848658
|
// src/input/commands/recall-shared.ts
|
|
848687
848659
|
var VALID_CLASSES = ["decision", "constraint", "incident", "pattern", "fact", "risk", "runbook", "architecture", "ownership"];
|
|
848688
|
-
var
|
|
848660
|
+
var VALID_SCOPES = ["session", "project", "team"];
|
|
848689
848661
|
var VALID_REVIEW_STATES = ["fresh", "reviewed", "stale", "contradicted"];
|
|
848690
848662
|
function isValidClass(s4) {
|
|
848691
848663
|
return VALID_CLASSES.includes(s4);
|
|
848692
848664
|
}
|
|
848693
848665
|
function isValidScope(s4) {
|
|
848694
|
-
return
|
|
848666
|
+
return VALID_SCOPES.includes(s4);
|
|
848695
848667
|
}
|
|
848696
848668
|
function isValidReviewState(s4) {
|
|
848697
848669
|
return VALID_REVIEW_STATES.includes(s4);
|
|
@@ -848734,7 +848706,7 @@ function handleRecallSearch(args2, context) {
|
|
|
848734
848706
|
if (isValidScope(scope))
|
|
848735
848707
|
filter.scope = scope;
|
|
848736
848708
|
else {
|
|
848737
|
-
context.print(`[memory] Unknown scope "${scope}". Valid values ${
|
|
848709
|
+
context.print(`[memory] Unknown scope "${scope}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
848738
848710
|
return;
|
|
848739
848711
|
}
|
|
848740
848712
|
}
|
|
@@ -848909,7 +848881,7 @@ function handleRecallList(args2, context) {
|
|
|
848909
848881
|
if (scopeIdx !== -1 && args2[scopeIdx + 1]) {
|
|
848910
848882
|
const scope = args2[scopeIdx + 1];
|
|
848911
848883
|
if (!isValidScope(scope)) {
|
|
848912
|
-
context.print(`[memory] Unknown scope "${scope}". Valid values ${
|
|
848884
|
+
context.print(`[memory] Unknown scope "${scope}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
848913
848885
|
return;
|
|
848914
848886
|
}
|
|
848915
848887
|
filter.scope = scope;
|
|
@@ -848959,7 +848931,7 @@ async function handleRecallAdd(args2, context) {
|
|
|
848959
848931
|
const tags = tagsRaw ? tagsRaw.split(",").map((token) => token.trim()).filter(Boolean) : [];
|
|
848960
848932
|
const scope = scopeRaw && isValidScope(scopeRaw) ? scopeRaw : "project";
|
|
848961
848933
|
if (scopeRaw && !isValidScope(scopeRaw)) {
|
|
848962
|
-
context.print(`[memory] Invalid scope "${scopeRaw}". Valid values ${
|
|
848934
|
+
context.print(`[memory] Invalid scope "${scopeRaw}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
848963
848935
|
return;
|
|
848964
848936
|
}
|
|
848965
848937
|
const provenance = [];
|
|
@@ -849093,7 +849065,7 @@ function handleRecallExport(args2, context) {
|
|
|
849093
849065
|
if (scopeIdx !== -1 && commandArgs[scopeIdx + 1]) {
|
|
849094
849066
|
const scope = commandArgs[scopeIdx + 1];
|
|
849095
849067
|
if (!isValidScope(scope)) {
|
|
849096
|
-
context.print(`[memory] Unknown scope "${scope}". Valid values ${
|
|
849068
|
+
context.print(`[memory] Unknown scope "${scope}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
849097
849069
|
return;
|
|
849098
849070
|
}
|
|
849099
849071
|
filter.scope = scope;
|
|
@@ -849172,7 +849144,7 @@ function handleRecallHandoffExport(args2, context) {
|
|
|
849172
849144
|
const scopeIdx = commandArgs.indexOf("--scope");
|
|
849173
849145
|
const scopeRaw = scopeIdx !== -1 ? commandArgs[scopeIdx + 1] : "team";
|
|
849174
849146
|
if (!scopeRaw || !isValidScope(scopeRaw)) {
|
|
849175
|
-
context.print(`[memory] Unknown scope "${scopeRaw ?? ""}". Valid values ${
|
|
849147
|
+
context.print(`[memory] Unknown scope "${scopeRaw ?? ""}". Valid values ${VALID_SCOPES.join(", ")}.`);
|
|
849176
849148
|
return;
|
|
849177
849149
|
}
|
|
849178
849150
|
const bundle = memory.exportBundle({ scope: scopeRaw });
|
|
@@ -849288,7 +849260,7 @@ function handleRecallPromote(args2, context) {
|
|
|
849288
849260
|
const id = parsed.rest[0];
|
|
849289
849261
|
const scope = parsed.rest[1];
|
|
849290
849262
|
if (!id || !scope || !isValidScope(scope)) {
|
|
849291
|
-
context.print(`[memory] Usage: /memory promote <id> <${
|
|
849263
|
+
context.print(`[memory] Usage: /memory promote <id> <${VALID_SCOPES.join("|")}> --yes`);
|
|
849292
849264
|
return;
|
|
849293
849265
|
}
|
|
849294
849266
|
if (!parsed.yes) {
|
|
@@ -851969,6 +851941,10 @@ var SENSITIVE_KEY_PATTERN2 = /(?:secret|token|password|api[-_.]?key|signing)/i;
|
|
|
851969
851941
|
function valuesEqual2(left, right) {
|
|
851970
851942
|
return JSON.stringify(left) === JSON.stringify(right);
|
|
851971
851943
|
}
|
|
851944
|
+
function previewText2(value, maxLength = 120) {
|
|
851945
|
+
const normalized = value.replace(/\s+/g, " ").trim();
|
|
851946
|
+
return normalized.length <= maxLength ? normalized : `${normalized.slice(0, maxLength - 1).trimEnd()}...`;
|
|
851947
|
+
}
|
|
851972
851948
|
function clampLimit4(value, fallback = DEFAULT_SETTING_LIMIT) {
|
|
851973
851949
|
if (typeof value !== "number" || !Number.isFinite(value))
|
|
851974
851950
|
return fallback;
|
|
@@ -852039,7 +852015,22 @@ function describeHarnessSetting(configManager, setting, options = {}) {
|
|
|
852039
852015
|
...options.lookup ? { lookup: options.lookup } : {}
|
|
852040
852016
|
};
|
|
852041
852017
|
}
|
|
852042
|
-
function
|
|
852018
|
+
function describeHarnessSettingSummary(configManager, setting) {
|
|
852019
|
+
const value = configManager.get(setting.key);
|
|
852020
|
+
const hostOwned = isExternalHostOwnedSettingKey(setting.key);
|
|
852021
|
+
return {
|
|
852022
|
+
key: setting.key,
|
|
852023
|
+
category: setting.key.split(".")[0] ?? "",
|
|
852024
|
+
type: setting.type,
|
|
852025
|
+
value: redactHarnessSettingValue(setting.key, value),
|
|
852026
|
+
configured: !valuesEqual2(value, setting.default),
|
|
852027
|
+
writable: !hostOwned,
|
|
852028
|
+
visibleInWorkspace: !isAgentHiddenSettingKey(setting.key),
|
|
852029
|
+
summary: previewText2(setting.description),
|
|
852030
|
+
...setting.enumValues ? { enumValues: setting.enumValues } : {}
|
|
852031
|
+
};
|
|
852032
|
+
}
|
|
852033
|
+
function listHarnessSettings(configManager, filters = {}, options = {}) {
|
|
852043
852034
|
const key = filters.key?.trim();
|
|
852044
852035
|
const category = filters.category?.trim();
|
|
852045
852036
|
const prefix = filters.prefix?.trim();
|
|
@@ -852059,7 +852050,7 @@ function listHarnessSettings(configManager, filters = {}) {
|
|
|
852059
852050
|
return false;
|
|
852060
852051
|
}
|
|
852061
852052
|
return true;
|
|
852062
|
-
}).map((setting) => describeHarnessSetting(configManager, setting)).slice(0, limit3);
|
|
852053
|
+
}).map((setting) => options.includeParameters ? describeHarnessSetting(configManager, setting) : describeHarnessSettingSummary(configManager, setting)).slice(0, limit3);
|
|
852063
852054
|
}
|
|
852064
852055
|
function getHarnessSetting(configManager, key, lookup) {
|
|
852065
852056
|
const setting = findSetting(configManager, key);
|
|
@@ -863185,7 +863176,7 @@ import { mkdirSync as mkdirSync64, readFileSync as readFileSync85, writeFileSync
|
|
|
863185
863176
|
import { dirname as dirname63, resolve as resolve39 } from "path";
|
|
863186
863177
|
init_state3();
|
|
863187
863178
|
var VALID_CLASSES2 = ["decision", "constraint", "incident", "pattern", "fact", "risk", "runbook", "architecture", "ownership"];
|
|
863188
|
-
var
|
|
863179
|
+
var VALID_SCOPES3 = ["session", "project", "team"];
|
|
863189
863180
|
var VALID_REVIEW_STATES3 = ["fresh", "reviewed", "stale", "contradicted"];
|
|
863190
863181
|
var VALID_PROVENANCE_KINDS = ["session", "turn", "task", "event", "file"];
|
|
863191
863182
|
var VALUE_OPTIONS = new Set([
|
|
@@ -863285,7 +863276,7 @@ function isMemoryClass2(value) {
|
|
|
863285
863276
|
return VALID_CLASSES2.includes(value);
|
|
863286
863277
|
}
|
|
863287
863278
|
function isMemoryScope2(value) {
|
|
863288
|
-
return
|
|
863279
|
+
return VALID_SCOPES3.includes(value);
|
|
863289
863280
|
}
|
|
863290
863281
|
function isReviewState(value) {
|
|
863291
863282
|
return VALID_REVIEW_STATES3.includes(value);
|
|
@@ -863300,7 +863291,7 @@ function requireClass(value) {
|
|
|
863300
863291
|
}
|
|
863301
863292
|
function requireScope(value) {
|
|
863302
863293
|
if (!value || !isMemoryScope2(value))
|
|
863303
|
-
throw new Error(`Invalid memory scope "${value ?? ""}". Valid values ${
|
|
863294
|
+
throw new Error(`Invalid memory scope "${value ?? ""}". Valid values ${VALID_SCOPES3.join(", ")}`);
|
|
863304
863295
|
return value;
|
|
863305
863296
|
}
|
|
863306
863297
|
function optionalScope(value) {
|
|
@@ -879405,31 +879396,31 @@ function describeChannel(channel, options = {}) {
|
|
|
879405
879396
|
defaultTargetKeys: channel.defaultTargetKeys,
|
|
879406
879397
|
configuredDefaultTargetKeys: channel.configuredDefaultTargetKeys,
|
|
879407
879398
|
...options.lookup ? { lookup: options.lookup } : {},
|
|
879408
|
-
|
|
879409
|
-
|
|
879410
|
-
|
|
879411
|
-
|
|
879412
|
-
|
|
879413
|
-
|
|
879414
|
-
|
|
879415
|
-
|
|
879416
|
-
|
|
879417
|
-
|
|
879418
|
-
|
|
879419
|
-
|
|
879420
|
-
|
|
879421
|
-
|
|
879422
|
-
|
|
879423
|
-
|
|
879424
|
-
|
|
879425
|
-
|
|
879426
|
-
|
|
879427
|
-
|
|
879428
|
-
|
|
879399
|
+
...options.includeParameters ? {
|
|
879400
|
+
policy: {
|
|
879401
|
+
effect: "read-only",
|
|
879402
|
+
values: "Config key names and target key names are shown; secret values and stored target values are never returned.",
|
|
879403
|
+
delivery: "Use agent_channel_send only for one explicit, confirmed delivery target requested by the user.",
|
|
879404
|
+
setup: "Use connected-host setup/account/policy routes only as read-only diagnostics unless another confirmed first-class tool owns the mutation."
|
|
879405
|
+
},
|
|
879406
|
+
modelAccess: {
|
|
879407
|
+
sendTool: "agent_channel_send",
|
|
879408
|
+
notificationTool: "agent_notify",
|
|
879409
|
+
reminderTool: "agent_reminder_schedule",
|
|
879410
|
+
slashCommandDetail: `/channels show ${channel.id}`,
|
|
879411
|
+
readOnlyConnectedRoutes: [
|
|
879412
|
+
"/channels accounts",
|
|
879413
|
+
"/channels policies",
|
|
879414
|
+
"/channels status",
|
|
879415
|
+
`/channels doctor ${channel.id}`,
|
|
879416
|
+
`/channels setup ${channel.id}`
|
|
879417
|
+
],
|
|
879418
|
+
settingsFilter: `agent_harness mode:"settings" prefix:"surfaces.${channel.id}" includeHidden:true`,
|
|
879419
|
+
connectedHostBoundary: 'agent_harness mode:"connected_host_capability" query:"delivery"',
|
|
879429
879420
|
deliveryTargetShape: "surface[:route[:label]]",
|
|
879430
879421
|
exampleTarget: `${channel.id}:route:Label`
|
|
879431
|
-
}
|
|
879432
|
-
}
|
|
879422
|
+
}
|
|
879423
|
+
} : {}
|
|
879433
879424
|
};
|
|
879434
879425
|
}
|
|
879435
879426
|
function channelReadinessCatalogStatus(context) {
|
|
@@ -880057,22 +880048,36 @@ function describeConnectedHostCapability(toolRegistry, rawQuery) {
|
|
|
880057
880048
|
return { status: "ambiguous", input: rawQuery, candidates: describeConnectedHostCapabilityCandidates(searched) };
|
|
880058
880049
|
return null;
|
|
880059
880050
|
}
|
|
880060
|
-
function connectedHostSummary(context, toolRegistry) {
|
|
880051
|
+
function connectedHostSummary(context, toolRegistry, options = {}) {
|
|
880061
880052
|
const shellPaths3 = context.workspace.shellPaths;
|
|
880062
880053
|
const homeDirectory = shellPaths3?.homeDirectory ?? context.platform.configManager.getHomeDirectory() ?? "";
|
|
880063
880054
|
const connection5 = resolveAgentConnectedHostConnection(context.platform.configManager, homeDirectory);
|
|
880055
|
+
const routeFamilies = connectedHostRouteFamilies();
|
|
880056
|
+
const capabilities = connectedHostCapabilityMap(toolRegistry);
|
|
880057
|
+
const blockedCapabilities = blockedConnectedHostCapabilities();
|
|
880064
880058
|
return {
|
|
880065
880059
|
baseUrl: connection5.baseUrl,
|
|
880066
880060
|
operatorToken: connection5.token ? "configured" : "missing",
|
|
880067
880061
|
tokenPath: connection5.tokenPath,
|
|
880068
880062
|
ownership: "external-connected-host",
|
|
880069
880063
|
lifecycle: "GoodVibes Agent can use public connected-host operator routes, but does not start, stop, restart, install, expose, or mutate the host listener.",
|
|
880070
|
-
|
|
880071
|
-
|
|
880072
|
-
|
|
880073
|
-
|
|
880074
|
-
|
|
880075
|
-
|
|
880064
|
+
modes: {
|
|
880065
|
+
servicePosture: "service_posture/service_endpoint",
|
|
880066
|
+
operatorMethods: "operator_methods/operator_method",
|
|
880067
|
+
liveStatus: "connected_host_status",
|
|
880068
|
+
capabilityDetail: "connected_host_capability"
|
|
880069
|
+
},
|
|
880070
|
+
counts: {
|
|
880071
|
+
routeFamilies: routeFamilies.length,
|
|
880072
|
+
allowedCapabilities: capabilities.length,
|
|
880073
|
+
availableCapabilities: capabilities.filter((capability) => capability.available === true).length,
|
|
880074
|
+
blockedCapabilities: blockedCapabilities.length
|
|
880075
|
+
},
|
|
880076
|
+
...options.includeParameters === true ? {
|
|
880077
|
+
routeFamilies,
|
|
880078
|
+
capabilities,
|
|
880079
|
+
blockedCapabilities
|
|
880080
|
+
} : {}
|
|
880076
880081
|
};
|
|
880077
880082
|
}
|
|
880078
880083
|
function blockedConnectedHostCapabilities() {
|
|
@@ -880187,7 +880192,8 @@ function blockedHarnessCliCommandTokens() {
|
|
|
880187
880192
|
function listHarnessCliCommands(args2) {
|
|
880188
880193
|
const query2 = readString52(args2.query);
|
|
880189
880194
|
const limit3 = readLimit6(args2.limit, 200);
|
|
880190
|
-
|
|
880195
|
+
const includeParameters = args2.includeParameters === true;
|
|
880196
|
+
return listGoodVibesCliCommands().filter((command8) => command8 !== "unknown").map((command8) => describeCliCommand(command8)).filter((command8) => cliCommandMatches(command8, query2)).sort((a4, b3) => String(a4.name).localeCompare(String(b3.name))).slice(0, limit3).map((command8) => includeParameters ? command8 : cliCommandCandidate(command8));
|
|
880191
880197
|
}
|
|
880192
880198
|
function cliInputFromArgs(args2) {
|
|
880193
880199
|
const cliCommand = readString52(args2.cliCommand);
|
|
@@ -880303,6 +880309,10 @@ function readStringArray12(value) {
|
|
|
880303
880309
|
return [];
|
|
880304
880310
|
return value.map((entry) => typeof entry === "string" ? entry : String(entry));
|
|
880305
880311
|
}
|
|
880312
|
+
function previewText3(value, maxLength = 120) {
|
|
880313
|
+
const normalized = value.replace(/\s+/g, " ").trim();
|
|
880314
|
+
return normalized.length <= maxLength ? normalized : `${normalized.slice(0, maxLength - 1).trimEnd()}...`;
|
|
880315
|
+
}
|
|
880306
880316
|
function commandMatches(command8, query2) {
|
|
880307
880317
|
if (!query2)
|
|
880308
880318
|
return true;
|
|
@@ -880341,8 +880351,8 @@ function describeCommandCandidate(command8) {
|
|
|
880341
880351
|
name: command8.name,
|
|
880342
880352
|
slash: `/${command8.name}`,
|
|
880343
880353
|
aliases: command8.aliases ?? [],
|
|
880344
|
-
|
|
880345
|
-
|
|
880354
|
+
summary: previewText3(command8.description),
|
|
880355
|
+
...command8.argsHint ? { argsHint: command8.argsHint } : {}
|
|
880346
880356
|
};
|
|
880347
880357
|
}
|
|
880348
880358
|
function commandDetailLookupFromArgs(args2) {
|
|
@@ -880425,7 +880435,8 @@ function resolveHarnessCommandDetail(commandRegistry, args2) {
|
|
|
880425
880435
|
function listHarnessCommands(commandRegistry, args2) {
|
|
880426
880436
|
const query2 = readString53(args2.query);
|
|
880427
880437
|
const limit3 = readLimit7(args2.limit, 200);
|
|
880428
|
-
|
|
880438
|
+
const includeParameters = args2.includeParameters === true;
|
|
880439
|
+
return commandRegistry.list().filter((command8) => commandMatches(command8, query2)).sort((a4, b3) => a4.name.localeCompare(b3.name)).slice(0, limit3).map((command8) => includeParameters ? describeCommand(command8) : describeCommandCandidate(command8));
|
|
880429
880440
|
}
|
|
880430
880441
|
function describeHarnessCommand(commandRegistry, args2) {
|
|
880431
880442
|
const detail = resolveHarnessCommandDetail(commandRegistry, args2);
|
|
@@ -880540,12 +880551,12 @@ function describeRoute(context, route, options = {}) {
|
|
|
880540
880551
|
operatorClientAttached: Boolean(context.clients?.operator)
|
|
880541
880552
|
},
|
|
880542
880553
|
...options.lookup ? { lookup: options.lookup } : {},
|
|
880543
|
-
policy: {
|
|
880544
|
-
effect: route.effect,
|
|
880545
|
-
values: "Delegation posture returns policy, route, confirmation, and runtime availability metadata only; it does not submit delegated work.",
|
|
880546
|
-
mutation: "Delegated work submission stays a visible confirmed workspace or slash-command flow and must preserve the full original user ask."
|
|
880547
|
-
},
|
|
880548
880554
|
...options.includeParameters ? {
|
|
880555
|
+
policy: {
|
|
880556
|
+
effect: route.effect,
|
|
880557
|
+
values: "Delegation posture returns policy, route, confirmation, and runtime availability metadata only; it does not submit delegated work.",
|
|
880558
|
+
mutation: "Delegated work submission stays a visible confirmed workspace or slash-command flow and must preserve the full original user ask."
|
|
880559
|
+
},
|
|
880549
880560
|
modelAccess: {
|
|
880550
880561
|
inspectDelegation: 'agent_harness mode:"delegation_posture"',
|
|
880551
880562
|
inspectRoute: 'agent_harness mode:"delegation_route"',
|
|
@@ -881310,13 +881321,13 @@ function describeProvider(provider5, runtimeStatus, options = {}) {
|
|
|
881310
881321
|
inspectProvider: 'agent_harness mode:"media_provider"',
|
|
881311
881322
|
generateMedia: "agent_media_generate with confirm:true and explicitUserRequest",
|
|
881312
881323
|
ttsSettings: "agent_harness settings/get_setting/set_setting for tts.provider, tts.voice, tts.llmProvider, and tts.llmModel"
|
|
881324
|
+
},
|
|
881325
|
+
policy: {
|
|
881326
|
+
effect: "read-only",
|
|
881327
|
+
values: "Provider posture returns capability, setup, selected, health, and safe environment key names only; secret values and media payloads are never returned.",
|
|
881328
|
+
mutation: "Media generation, voice enable/disable, TTS setting changes, and bundle export stay explicit confirmation-gated tool, setting, workspace, or slash-command flows."
|
|
881313
881329
|
}
|
|
881314
|
-
} : {}
|
|
881315
|
-
policy: {
|
|
881316
|
-
effect: "read-only",
|
|
881317
|
-
values: "Provider posture returns capability, setup, selected, health, and safe environment key names only; secret values and media payloads are never returned.",
|
|
881318
|
-
mutation: "Media generation, voice enable/disable, TTS setting changes, and bundle export stay explicit confirmation-gated tool, setting, workspace, or slash-command flows."
|
|
881319
|
-
}
|
|
881330
|
+
} : {}
|
|
881320
881331
|
};
|
|
881321
881332
|
}
|
|
881322
881333
|
async function readRuntimeStatuses(context) {
|
|
@@ -881399,14 +881410,14 @@ async function mediaPostureSummary(context, args2) {
|
|
|
881399
881410
|
returned: filtered.length,
|
|
881400
881411
|
total: providers2.length,
|
|
881401
881412
|
policy: "Read-only voice/media posture. Media generation, voice enable/disable, TTS setting changes, and bundle export stay confirmation-gated through first-class tools, settings modes, workspace actions, or slash-command mirrors.",
|
|
881402
|
-
modelAccess: {
|
|
881413
|
+
...args2.includeParameters === true ? { modelAccess: {
|
|
881403
881414
|
mediaGenerateTool: "agent_media_generate",
|
|
881404
881415
|
providerCatalogMode: "media_posture",
|
|
881405
881416
|
singleProviderMode: "media_provider",
|
|
881406
|
-
ttsProviderPicker: 'open_ui_surface surfaceId:"tts-provider-picker"',
|
|
881407
|
-
ttsVoicePicker: 'open_ui_surface surfaceId:"tts-voice-picker"',
|
|
881417
|
+
ttsProviderPicker: 'agent_harness mode:"open_ui_surface" surfaceId:"tts-provider-picker" confirm:true explicitUserRequest:"..."',
|
|
881418
|
+
ttsVoicePicker: 'agent_harness mode:"open_ui_surface" surfaceId:"tts-voice-picker" confirm:true explicitUserRequest:"..."',
|
|
881408
881419
|
commands: ["/media providers", "/voice review", "/tts <prompt>", "/image <path>"]
|
|
881409
|
-
}
|
|
881420
|
+
} } : {}
|
|
881410
881421
|
};
|
|
881411
881422
|
}
|
|
881412
881423
|
async function describeHarnessMediaProvider(context, args2) {
|
|
@@ -881555,25 +881566,25 @@ function describeTarget(target, options = {}) {
|
|
|
881555
881566
|
...target.hasQuery !== undefined ? { hasQuery: target.hasQuery } : {},
|
|
881556
881567
|
value: "<redacted>",
|
|
881557
881568
|
...options.lookup ? { lookup: options.lookup } : {},
|
|
881558
|
-
|
|
881559
|
-
|
|
881560
|
-
|
|
881561
|
-
|
|
881562
|
-
|
|
881563
|
-
|
|
881564
|
-
|
|
881565
|
-
|
|
881566
|
-
|
|
881567
|
-
|
|
881568
|
-
|
|
881569
|
-
|
|
881570
|
-
|
|
881571
|
-
|
|
881572
|
-
|
|
881569
|
+
...options.includeParameters ? {
|
|
881570
|
+
policy: {
|
|
881571
|
+
effect: "read-only",
|
|
881572
|
+
values: "Full webhook URLs are not returned because they can contain bearer tokens or secret path/query values.",
|
|
881573
|
+
delivery: "Use agent_notify only for one explicit, confirmed notification requested by the user.",
|
|
881574
|
+
management: "Use confirmed /notify mirrors only when the user explicitly asks to add, remove, clear, test, or send notification targets."
|
|
881575
|
+
},
|
|
881576
|
+
modelAccess: {
|
|
881577
|
+
sendTool: "agent_notify",
|
|
881578
|
+
listCommand: "/notify list",
|
|
881579
|
+
addCommand: "/notify add <url> --yes",
|
|
881580
|
+
removeCommand: "/notify remove <url> --yes",
|
|
881581
|
+
clearCommand: "/notify clear --yes",
|
|
881582
|
+
testCommand: "/notify test --yes",
|
|
881583
|
+
settingsCategory: "notifications.webhookUrls",
|
|
881573
881584
|
targetValueRequiredForRemove: true,
|
|
881574
881585
|
targetValuePolicy: "Ask the user for the exact webhook URL before removing one target; do not infer it from redacted metadata."
|
|
881575
|
-
}
|
|
881576
|
-
}
|
|
881586
|
+
}
|
|
881587
|
+
} : {}
|
|
881577
881588
|
};
|
|
881578
881589
|
}
|
|
881579
881590
|
function notificationTargetCatalogStatus(context) {
|
|
@@ -881642,6 +881653,10 @@ function readLimit12(value, fallback) {
|
|
|
881642
881653
|
return fallback;
|
|
881643
881654
|
return Math.max(1, Math.min(500, Math.trunc(parsed)));
|
|
881644
881655
|
}
|
|
881656
|
+
function previewText4(value, maxLength = 120) {
|
|
881657
|
+
const normalized = value.replace(/\s+/g, " ").trim();
|
|
881658
|
+
return normalized.length <= maxLength ? normalized : `${normalized.slice(0, maxLength - 1).trimEnd()}...`;
|
|
881659
|
+
}
|
|
881645
881660
|
function panelManager(context) {
|
|
881646
881661
|
return context.workspace.panelManager ?? null;
|
|
881647
881662
|
}
|
|
@@ -881653,6 +881668,7 @@ function panelMatches(panel, query2) {
|
|
|
881653
881668
|
panel.name,
|
|
881654
881669
|
panel.category,
|
|
881655
881670
|
panel.description,
|
|
881671
|
+
panel.summary,
|
|
881656
881672
|
panel.workspaceRoute
|
|
881657
881673
|
].map((value) => typeof value === "object" ? JSON.stringify(value) : String(value ?? "")).join(`
|
|
881658
881674
|
`).toLowerCase().includes(query2.toLowerCase());
|
|
@@ -881674,7 +881690,7 @@ function panelCandidate(registration) {
|
|
|
881674
881690
|
id: registration.id,
|
|
881675
881691
|
name: registration.name,
|
|
881676
881692
|
category: registration.category,
|
|
881677
|
-
|
|
881693
|
+
summary: previewText4(registration.description),
|
|
881678
881694
|
workspaceRoute: {
|
|
881679
881695
|
categoryId: agentWorkspaceCategoryForPanel(registration.id),
|
|
881680
881696
|
command: agentWorkspaceCommandForPanel(registration.id)
|
|
@@ -881716,7 +881732,7 @@ function resolveHarnessPanel(context, args2) {
|
|
|
881716
881732
|
return { status: "ambiguous", input: lookup.input, candidates: search2.map(panelCandidate).slice(0, 8) };
|
|
881717
881733
|
return null;
|
|
881718
881734
|
}
|
|
881719
|
-
function describePanelRegistration(context, registration,
|
|
881735
|
+
function describePanelRegistration(context, registration, options = {}) {
|
|
881720
881736
|
const manager5 = panelManager(context);
|
|
881721
881737
|
const openPanel = manager5?.getPanel(registration.id) ?? null;
|
|
881722
881738
|
const pane = manager5?.getPaneOf(registration.id) ?? null;
|
|
@@ -881726,8 +881742,8 @@ function describePanelRegistration(context, registration, lookup) {
|
|
|
881726
881742
|
name: registration.name,
|
|
881727
881743
|
icon: registration.icon,
|
|
881728
881744
|
category: registration.category,
|
|
881729
|
-
description: registration.description,
|
|
881730
|
-
...lookup ? { lookup } : {},
|
|
881745
|
+
...options.includeParameters ? { description: registration.description } : { summary: previewText4(registration.description) },
|
|
881746
|
+
...options.lookup ? { lookup: options.lookup } : {},
|
|
881731
881747
|
preload: registration.preload === true,
|
|
881732
881748
|
open: openPanel !== null,
|
|
881733
881749
|
pane,
|
|
@@ -881737,11 +881753,13 @@ function describePanelRegistration(context, registration, lookup) {
|
|
|
881737
881753
|
categoryId: agentWorkspaceCategoryForPanel(registration.id),
|
|
881738
881754
|
command: agentWorkspaceCommandForPanel(registration.id)
|
|
881739
881755
|
},
|
|
881740
|
-
|
|
881741
|
-
|
|
881742
|
-
|
|
881743
|
-
|
|
881744
|
-
|
|
881756
|
+
...options.includeParameters ? {
|
|
881757
|
+
policy: {
|
|
881758
|
+
effect: "ui-navigation",
|
|
881759
|
+
confirmation: 'agent_harness mode:"open_panel" requires confirm:true and explicitUserRequest.',
|
|
881760
|
+
boundary: "Panels are Agent/TUI operator views. The model can inspect panel catalog/open state; panel routing uses the existing Agent workspace bridge and does not mutate connected-host lifecycle."
|
|
881761
|
+
}
|
|
881762
|
+
} : {}
|
|
881745
881763
|
};
|
|
881746
881764
|
}
|
|
881747
881765
|
function totalHarnessPanels(context) {
|
|
@@ -881754,12 +881772,13 @@ function listHarnessPanels(context, args2) {
|
|
|
881754
881772
|
const query2 = readString58(args2.query);
|
|
881755
881773
|
const category = readString58(args2.category);
|
|
881756
881774
|
const limit3 = readLimit12(args2.limit, 200);
|
|
881757
|
-
|
|
881775
|
+
const includeParameters = args2.includeParameters === true;
|
|
881776
|
+
return manager5.getRegisteredTypes().map((registration) => describePanelRegistration(context, registration, { includeParameters })).filter((panel) => !category || panel.category === category).filter((panel) => panelMatches(panel, query2)).sort((a4, b3) => String(a4.id).localeCompare(String(b3.id))).slice(0, limit3);
|
|
881758
881777
|
}
|
|
881759
881778
|
function describeHarnessPanel(context, args2) {
|
|
881760
881779
|
const resolved = resolveHarnessPanel(context, args2);
|
|
881761
881780
|
if (resolved?.status === "found")
|
|
881762
|
-
return describePanelRegistration(context, resolved.registration, resolved.lookup);
|
|
881781
|
+
return describePanelRegistration(context, resolved.registration, { includeParameters: true, lookup: resolved.lookup });
|
|
881763
881782
|
if (resolved?.status === "ambiguous") {
|
|
881764
881783
|
return { status: "ambiguous", input: resolved.input, candidates: resolved.candidates };
|
|
881765
881784
|
}
|
|
@@ -881777,7 +881796,7 @@ function openHarnessPanel(context, args2) {
|
|
|
881777
881796
|
availablePanels: listHarnessPanels(context, { limit: 50 }).map((entry) => entry.id)
|
|
881778
881797
|
};
|
|
881779
881798
|
}
|
|
881780
|
-
const panel = describePanelRegistration(context, resolved.registration, resolved.lookup);
|
|
881799
|
+
const panel = describePanelRegistration(context, resolved.registration, { includeParameters: true, lookup: resolved.lookup });
|
|
881781
881800
|
const requestedPane = readString58(args2.pane);
|
|
881782
881801
|
const pane = requestedPane === "bottom" || requestedPane === "top" ? requestedPane : undefined;
|
|
881783
881802
|
if (!context.showPanel) {
|
|
@@ -881979,7 +881998,7 @@ function connectedHostFindings(runtime3, tokenUsable) {
|
|
|
881979
881998
|
}
|
|
881980
881999
|
return findings;
|
|
881981
882000
|
}
|
|
881982
|
-
async function connectedHostStatusSummary(context, toolRegistry) {
|
|
882001
|
+
async function connectedHostStatusSummary(context, toolRegistry, options = {}) {
|
|
881983
882002
|
const homeDirectory = resolveHomeDirectory(context);
|
|
881984
882003
|
const workingDirectory = resolveWorkingDirectory(context);
|
|
881985
882004
|
const token = readConnectedHostOperatorToken(homeDirectory);
|
|
@@ -882039,14 +882058,21 @@ async function connectedHostStatusSummary(context, toolRegistry) {
|
|
|
882039
882058
|
}
|
|
882040
882059
|
],
|
|
882041
882060
|
findings: connectedHostFindings(runtime3, tokenUsable),
|
|
882042
|
-
|
|
882043
|
-
|
|
882044
|
-
|
|
882045
|
-
|
|
882061
|
+
capabilitySummary: {
|
|
882062
|
+
routeFamilies: connectedHostRouteFamilies().length,
|
|
882063
|
+
availableCapabilities: connectedHostCapabilityMap(toolRegistry).filter((capability) => capability.available === true).length,
|
|
882064
|
+
blockedCapabilities: blockedConnectedHostCapabilities().length
|
|
882046
882065
|
},
|
|
882047
|
-
|
|
882048
|
-
|
|
882049
|
-
|
|
882066
|
+
...options.includeParameters ? {
|
|
882067
|
+
modelAccess: {
|
|
882068
|
+
diagnostics: 'Use mode:"connected_host_status" for live read-only host readiness, mode:"service_posture" for endpoint posture, mode:"service_endpoint" for one endpoint, and mode:"connected_host" for capability and boundary inventory.',
|
|
882069
|
+
cliMirrors: ["goodvibes-agent status --json", "goodvibes-agent doctor", "goodvibes-agent compat"],
|
|
882070
|
+
tuiMirrors: ["Agent Workspace -> Home -> Host compatibility", "Agent Workspace -> Home -> Doctor diagnostics", "Agent Workspace -> Home -> Review health"]
|
|
882071
|
+
},
|
|
882072
|
+
routeFamilies: connectedHostRouteFamilies(),
|
|
882073
|
+
capabilities: connectedHostCapabilityMap(toolRegistry),
|
|
882074
|
+
blockedCapabilities: blockedConnectedHostCapabilities()
|
|
882075
|
+
} : {}
|
|
882050
882076
|
};
|
|
882051
882077
|
}
|
|
882052
882078
|
|
|
@@ -882369,34 +882395,36 @@ function describeServer(server2, options = {}) {
|
|
|
882369
882395
|
})),
|
|
882370
882396
|
toolCount: tools3.length
|
|
882371
882397
|
} : { toolCount: tools3.length },
|
|
882372
|
-
|
|
882373
|
-
|
|
882374
|
-
|
|
882375
|
-
|
|
882376
|
-
|
|
882377
|
-
|
|
882378
|
-
|
|
882379
|
-
|
|
882380
|
-
|
|
882381
|
-
|
|
882382
|
-
|
|
882383
|
-
|
|
882384
|
-
|
|
882385
|
-
|
|
882386
|
-
|
|
882387
|
-
|
|
882388
|
-
|
|
882389
|
-
|
|
882390
|
-
|
|
882391
|
-
|
|
882392
|
-
|
|
882393
|
-
|
|
882394
|
-
|
|
882395
|
-
|
|
882396
|
-
|
|
882397
|
-
|
|
882398
|
-
|
|
882399
|
-
|
|
882398
|
+
...options.includeParameters ? {
|
|
882399
|
+
policy: {
|
|
882400
|
+
effect: "read-only",
|
|
882401
|
+
values: "Server posture returns trust, role, connection, quarantine, and tool metadata; env values and secret config values are never returned.",
|
|
882402
|
+
mutation: "MCP add/remove/reload/trust/role/quarantine operations stay explicit confirmation-gated workspace or slash-command flows.",
|
|
882403
|
+
allowAll: "allow-all trust decisions remain routed through Settings -> MCP, not direct command escalation."
|
|
882404
|
+
},
|
|
882405
|
+
modelAccess: {
|
|
882406
|
+
reviewCommand: "/mcp review",
|
|
882407
|
+
serversCommand: "/mcp servers",
|
|
882408
|
+
toolsCommand: `/mcp tools ${server2.name}`,
|
|
882409
|
+
repairCommand: `/mcp repair ${server2.name}`,
|
|
882410
|
+
authReviewCommand: "/mcp auth-review",
|
|
882411
|
+
configCommand: "/mcp config",
|
|
882412
|
+
workspaceActionIds: [
|
|
882413
|
+
"mcp-review",
|
|
882414
|
+
"mcp-tools-server",
|
|
882415
|
+
"mcp-repair",
|
|
882416
|
+
"mcp-config",
|
|
882417
|
+
"mcp-add-server",
|
|
882418
|
+
"mcp-settings"
|
|
882419
|
+
],
|
|
882420
|
+
confirmationGatedCommands: [
|
|
882421
|
+
`/mcp trust ${server2.name} <constrained|ask-on-risk|blocked> --yes`,
|
|
882422
|
+
`/mcp role ${server2.name} <role> --yes`,
|
|
882423
|
+
`/mcp quarantine ${server2.name} approve <operatorId> --yes`,
|
|
882424
|
+
`/mcp remove ${server2.name} --yes`
|
|
882425
|
+
]
|
|
882426
|
+
}
|
|
882427
|
+
} : {}
|
|
882400
882428
|
};
|
|
882401
882429
|
}
|
|
882402
882430
|
async function readMcpTools(api2, includeParameters) {
|
|
@@ -882754,19 +882782,19 @@ function describeRoute2(route, options = {}) {
|
|
|
882754
882782
|
commands: route.commands,
|
|
882755
882783
|
uiSurfaces: route.uiSurfaces,
|
|
882756
882784
|
...options.lookup ? { lookup: options.lookup } : {},
|
|
882757
|
-
policy: {
|
|
882758
|
-
effect: "read-only",
|
|
882759
|
-
values: "Model routing posture returns model ids, provider ids, route state, capabilities, and safe setting keys only; provider credentials are never returned.",
|
|
882760
|
-
mutation: "Model/provider selection, catalog refresh, favorites, custom provider edits, and route setting changes stay explicit user-facing picker, settings, workspace, or slash-command flows."
|
|
882761
|
-
},
|
|
882762
882785
|
...options.includeParameters ? {
|
|
882786
|
+
policy: {
|
|
882787
|
+
effect: "read-only",
|
|
882788
|
+
values: "Model routing posture returns model ids, provider ids, route state, capabilities, and safe setting keys only; provider credentials are never returned.",
|
|
882789
|
+
mutation: "Model/provider selection, catalog refresh, favorites, custom provider edits, and route setting changes stay explicit user-facing picker, settings, workspace, or slash-command flows."
|
|
882790
|
+
},
|
|
882763
882791
|
modelAccess: {
|
|
882764
882792
|
inspectRouting: 'agent_harness mode:"model_routing"',
|
|
882765
882793
|
inspectRoute: 'agent_harness mode:"model_route"',
|
|
882766
882794
|
settingRead: 'agent_harness mode:"get_setting"',
|
|
882767
882795
|
settingMutation: 'agent_harness mode:"set_setting" confirm:true explicitUserRequest:"..."',
|
|
882768
|
-
openModelPicker: 'agent_harness mode:"open_ui_surface" surfaceId:"model-picker" confirm:true',
|
|
882769
|
-
openProviderPicker: 'agent_harness mode:"open_ui_surface" surfaceId:"provider-picker" confirm:true'
|
|
882796
|
+
openModelPicker: 'agent_harness mode:"open_ui_surface" surfaceId:"model-picker" confirm:true explicitUserRequest:"..."',
|
|
882797
|
+
openProviderPicker: 'agent_harness mode:"open_ui_surface" surfaceId:"provider-picker" confirm:true explicitUserRequest:"..."'
|
|
882770
882798
|
}
|
|
882771
882799
|
} : {}
|
|
882772
882800
|
};
|
|
@@ -882783,19 +882811,19 @@ function describeModel(model, options = {}) {
|
|
|
882783
882811
|
pinned: model.pinned,
|
|
882784
882812
|
contextWindow: model.contextWindow,
|
|
882785
882813
|
reasoningEffort: model.reasoningEffort,
|
|
882786
|
-
capabilities: model.capabilities,
|
|
882787
882814
|
...options.lookup ? { lookup: options.lookup } : {},
|
|
882788
|
-
policy: {
|
|
882789
|
-
effect: "read-only",
|
|
882790
|
-
mutation: "Selecting this model stays a visible picker, settings, workspace, or slash-command flow with explicit user request."
|
|
882791
|
-
},
|
|
882792
882815
|
...options.includeParameters ? {
|
|
882816
|
+
capabilities: model.capabilities,
|
|
882817
|
+
policy: {
|
|
882818
|
+
effect: "read-only",
|
|
882819
|
+
mutation: "Selecting this model stays a visible picker, settings, workspace, or slash-command flow with explicit user request."
|
|
882820
|
+
},
|
|
882793
882821
|
modelAccess: {
|
|
882794
882822
|
selectModelCommand: `/model ${model.registryKey}`,
|
|
882795
882823
|
selectProviderCommand: `/provider ${model.providerId}`,
|
|
882796
882824
|
pinCommand: `/pin ${model.registryKey}`,
|
|
882797
882825
|
unpinCommand: `/unpin ${model.registryKey}`,
|
|
882798
|
-
setMainModel: `agent_harness mode:"set_setting" key:"provider.model" value:"${model.registryKey}" confirm:true`
|
|
882826
|
+
setMainModel: `agent_harness mode:"set_setting" key:"provider.model" value:"${model.registryKey}" confirm:true explicitUserRequest:"..."`
|
|
882799
882827
|
}
|
|
882800
882828
|
} : {}
|
|
882801
882829
|
};
|
|
@@ -882863,7 +882891,7 @@ async function modelRoutingSummary(context, args2) {
|
|
|
882863
882891
|
reasoningEffort: modelReasoning(currentModel),
|
|
882864
882892
|
capabilities: modelCapabilities(currentModel),
|
|
882865
882893
|
pinned: false
|
|
882866
|
-
}) : null
|
|
882894
|
+
}, { includeParameters }) : null
|
|
882867
882895
|
},
|
|
882868
882896
|
providers: providerIds,
|
|
882869
882897
|
routes: filteredRoutes.slice(0, limit3).map((route) => describeRoute2(route, { includeParameters })),
|
|
@@ -882941,6 +882969,10 @@ function readLimit15(value, fallback) {
|
|
|
882941
882969
|
return fallback;
|
|
882942
882970
|
return Math.max(1, Math.min(500, Math.trunc(parsed)));
|
|
882943
882971
|
}
|
|
882972
|
+
function previewText5(value, maxLength = 120) {
|
|
882973
|
+
const normalized = value.replace(/\s+/g, " ").trim();
|
|
882974
|
+
return normalized.length <= maxLength ? normalized : `${normalized.slice(0, maxLength - 1).trimEnd()}...`;
|
|
882975
|
+
}
|
|
882944
882976
|
function modelToolSearchText(tool2) {
|
|
882945
882977
|
return [
|
|
882946
882978
|
tool2.name,
|
|
@@ -882962,7 +882994,7 @@ function modelToolLookupFromArgs(args2) {
|
|
|
882962
882994
|
function describeModelTool(tool2, options = {}) {
|
|
882963
882995
|
return {
|
|
882964
882996
|
name: tool2.name,
|
|
882965
|
-
description: tool2.description,
|
|
882997
|
+
...options.includeParameters ? { description: tool2.description } : { summary: previewText5(tool2.description) },
|
|
882966
882998
|
sideEffects: tool2.sideEffects ?? [],
|
|
882967
882999
|
concurrency: tool2.concurrency ?? "parallel",
|
|
882968
883000
|
supportsProgress: tool2.supportsProgress ?? false,
|
|
@@ -882974,7 +883006,7 @@ function describeModelTool(tool2, options = {}) {
|
|
|
882974
883006
|
function describeModelToolCandidates(tools3) {
|
|
882975
883007
|
return tools3.slice(0, 8).map((tool2) => ({
|
|
882976
883008
|
toolName: tool2.name,
|
|
882977
|
-
|
|
883009
|
+
summary: previewText5(tool2.description),
|
|
882978
883010
|
sideEffects: tool2.sideEffects ?? []
|
|
882979
883011
|
}));
|
|
882980
883012
|
}
|
|
@@ -883300,7 +883332,7 @@ function pairingRoutes() {
|
|
|
883300
883332
|
detail: "Visible companion pairing route that prints QR setup details in the Agent TUI without printing the raw token.",
|
|
883301
883333
|
effect: "external-network",
|
|
883302
883334
|
command: "/pair",
|
|
883303
|
-
harnessRoute: 'agent_harness mode:"run_command" command:"/pair" confirm:true',
|
|
883335
|
+
harnessRoute: 'agent_harness mode:"run_command" command:"/pair" confirm:true explicitUserRequest:"..."',
|
|
883304
883336
|
requiresConfirmation: true
|
|
883305
883337
|
},
|
|
883306
883338
|
{
|
|
@@ -883309,7 +883341,7 @@ function pairingRoutes() {
|
|
|
883309
883341
|
detail: "Explicitly confirmed fallback route that prints the raw companion token only when the user asks for manual setup.",
|
|
883310
883342
|
effect: "confirmation-gated-secret-display",
|
|
883311
883343
|
command: "/pair --show-token --yes",
|
|
883312
|
-
harnessRoute: 'agent_harness mode:"run_command" command:"/pair --show-token --yes" confirm:true',
|
|
883344
|
+
harnessRoute: 'agent_harness mode:"run_command" command:"/pair --show-token --yes" confirm:true explicitUserRequest:"..."',
|
|
883313
883345
|
requiresConfirmation: true
|
|
883314
883346
|
},
|
|
883315
883347
|
{
|
|
@@ -883387,12 +883419,12 @@ function describeRoute3(route, options = {}) {
|
|
|
883387
883419
|
...route.capabilityIds ? { capabilityIds: route.capabilityIds } : {},
|
|
883388
883420
|
requiresConfirmation: route.requiresConfirmation === true,
|
|
883389
883421
|
...options.lookup ? { lookup: options.lookup } : {},
|
|
883390
|
-
policy: {
|
|
883391
|
-
effect: route.effect,
|
|
883392
|
-
values: "Pairing posture returns endpoint binding and token fingerprint only; raw companion tokens and QR payloads are never returned by this read-only mode.",
|
|
883393
|
-
mutation: "Pairing display, manual token display, companion connection, channel sends, provider/model changes, approval actions, and attachment flows stay explicit visible user flows."
|
|
883394
|
-
},
|
|
883395
883422
|
...options.includeParameters ? {
|
|
883423
|
+
policy: {
|
|
883424
|
+
effect: route.effect,
|
|
883425
|
+
values: "Pairing posture returns endpoint binding and token fingerprint only; raw companion tokens and QR payloads are never returned by this read-only mode.",
|
|
883426
|
+
mutation: "Pairing display, manual token display, companion connection, channel sends, provider/model changes, approval actions, and attachment flows stay explicit visible user flows."
|
|
883427
|
+
},
|
|
883396
883428
|
modelAccess: {
|
|
883397
883429
|
inspectPairing: 'agent_harness mode:"pairing_posture"',
|
|
883398
883430
|
inspectRoute: 'agent_harness mode:"pairing_route"',
|
|
@@ -883557,42 +883589,44 @@ function describeAccount(account, options = {}) {
|
|
|
883557
883589
|
...account.fallbackRisk ? { fallbackRisk: account.fallbackRisk } : {},
|
|
883558
883590
|
...account.expiresAt ? { expiresAt: new Date(account.expiresAt).toISOString() } : {},
|
|
883559
883591
|
...account.tokenType ? { tokenType: account.tokenType } : {},
|
|
883560
|
-
|
|
883561
|
-
|
|
883562
|
-
usable: route.usable,
|
|
883563
|
-
freshness: route.freshness,
|
|
883564
|
-
detail: route.detail,
|
|
883565
|
-
issues: route.issues
|
|
883566
|
-
})),
|
|
883567
|
-
usageWindows: account.usageWindows,
|
|
883568
|
-
issues: account.issues,
|
|
883569
|
-
notes: account.notes,
|
|
883570
|
-
recommendedActions: account.recommendedActions,
|
|
883592
|
+
issueCount: account.issues.length,
|
|
883593
|
+
recommendedActionCount: account.recommendedActions.length,
|
|
883571
883594
|
...options.lookup ? { lookup: options.lookup } : {},
|
|
883572
|
-
|
|
883573
|
-
|
|
883574
|
-
|
|
883575
|
-
|
|
883576
|
-
|
|
883577
|
-
|
|
883578
|
-
|
|
883579
|
-
|
|
883580
|
-
|
|
883581
|
-
|
|
883582
|
-
|
|
883583
|
-
|
|
883584
|
-
|
|
883585
|
-
"
|
|
883586
|
-
"
|
|
883587
|
-
"subscription-
|
|
883588
|
-
|
|
883589
|
-
|
|
883595
|
+
...options.includeParameters ? {
|
|
883596
|
+
routeRecords: account.routeRecords.map((route) => ({
|
|
883597
|
+
route: route.route,
|
|
883598
|
+
usable: route.usable,
|
|
883599
|
+
freshness: route.freshness,
|
|
883600
|
+
detail: route.detail,
|
|
883601
|
+
issues: route.issues
|
|
883602
|
+
})),
|
|
883603
|
+
usageWindows: account.usageWindows,
|
|
883604
|
+
issues: account.issues,
|
|
883605
|
+
notes: account.notes,
|
|
883606
|
+
recommendedActions: account.recommendedActions,
|
|
883607
|
+
policy: {
|
|
883608
|
+
effect: "read-only",
|
|
883609
|
+
values: "Provider account posture reports route and freshness metadata only; raw tokens, authorization codes, and secret values are never returned.",
|
|
883610
|
+
mutation: "Provider login, logout, subscription bundle export, and account repair actions stay explicit confirmation-gated workspace or slash-command flows."
|
|
883611
|
+
},
|
|
883612
|
+
modelAccess: {
|
|
883613
|
+
reviewCommand: "/accounts review",
|
|
883614
|
+
showCommand: `/accounts show ${account.providerId}`,
|
|
883615
|
+
routesCommand: `/accounts routes ${account.providerId}`,
|
|
883616
|
+
repairCommand: `/accounts repair ${account.providerId}`,
|
|
883617
|
+
subscriptionInspectCommand: `/subscription inspect ${account.providerId}`,
|
|
883618
|
+
workspaceActions: [
|
|
883619
|
+
"provider-accounts",
|
|
883620
|
+
"provider-account-repair",
|
|
883621
|
+
"subscription-review",
|
|
883622
|
+
"subscription-inspect"
|
|
883623
|
+
],
|
|
883590
883624
|
loginStartCommand: `/subscription login ${account.providerId} start --yes`,
|
|
883591
883625
|
loginFinishCommand: `/subscription login ${account.providerId} finish <code-or-url> --yes`,
|
|
883592
883626
|
logoutCommand: `/subscription logout ${account.providerId} --yes`,
|
|
883593
883627
|
confirmationRequired: true
|
|
883594
|
-
}
|
|
883595
|
-
}
|
|
883628
|
+
}
|
|
883629
|
+
} : {}
|
|
883596
883630
|
};
|
|
883597
883631
|
}
|
|
883598
883632
|
async function providerAccountCatalogStatus(context) {
|
|
@@ -884297,11 +884331,13 @@ function describeFinding(finding, includeParameters, lookup) {
|
|
|
884297
884331
|
route: finding.route,
|
|
884298
884332
|
...lookup ? { lookup } : {},
|
|
884299
884333
|
...includeParameters && finding.detail ? { detail: finding.detail } : {},
|
|
884300
|
-
|
|
884301
|
-
|
|
884302
|
-
|
|
884303
|
-
|
|
884304
|
-
|
|
884334
|
+
...includeParameters ? {
|
|
884335
|
+
policy: {
|
|
884336
|
+
effect: "read-only",
|
|
884337
|
+
values: "Security posture returns counts, labels, policy ids, route names, and redacted bundle summaries only; token values, secret values, and raw config values are never returned.",
|
|
884338
|
+
mutation: "Token rotation, policy changes, MCP trust changes, bundle export/import, auth repair, and voice enable/disable stay explicit confirmation-gated workspace or slash-command flows."
|
|
884339
|
+
}
|
|
884340
|
+
} : {}
|
|
884305
884341
|
};
|
|
884306
884342
|
}
|
|
884307
884343
|
function buildTokenFindings(securitySnapshot) {
|
|
@@ -884579,7 +884615,7 @@ async function securityPostureSummary(context, args2) {
|
|
|
884579
884615
|
returned: filtered.length,
|
|
884580
884616
|
total: findings.length,
|
|
884581
884617
|
policy: "Read-only security posture. Token rotation, policy changes, MCP trust changes, bundle export/import, auth repair, and voice enable/disable remain confirmation-gated workspace or slash-command flows.",
|
|
884582
|
-
modelAccess: {
|
|
884618
|
+
...args2.includeParameters === true ? { modelAccess: {
|
|
884583
884619
|
reviewCommand: "/security review",
|
|
884584
884620
|
tokensCommand: "/security tokens",
|
|
884585
884621
|
attackPathsCommand: "/security attack-paths",
|
|
@@ -884587,7 +884623,7 @@ async function securityPostureSummary(context, args2) {
|
|
|
884587
884623
|
authReviewCommand: "/auth review",
|
|
884588
884624
|
bundleCatalogMode: "support_bundles",
|
|
884589
884625
|
singleFindingMode: "security_finding"
|
|
884590
|
-
}
|
|
884626
|
+
} } : {}
|
|
884591
884627
|
};
|
|
884592
884628
|
}
|
|
884593
884629
|
function describeHarnessSecurityFinding(context, args2) {
|
|
@@ -884842,11 +884878,13 @@ function describeSession(session2, options) {
|
|
|
884842
884878
|
}
|
|
884843
884879
|
} : {},
|
|
884844
884880
|
...options.lookup ? { lookup: options.lookup } : {},
|
|
884845
|
-
|
|
884846
|
-
|
|
884847
|
-
|
|
884848
|
-
|
|
884849
|
-
|
|
884881
|
+
...options.includeParameters ? {
|
|
884882
|
+
policy: {
|
|
884883
|
+
effect: "read-only",
|
|
884884
|
+
values: "Session posture returns saved-session metadata, search counts, optional snippets, return-context counts, bookmark counts, and saved bookmark file counts.",
|
|
884885
|
+
mutation: "Session save, rename, fork, resume, export, delete, bookmark toggles, and bookmark file writes remain visible workspace or slash-command flows with confirmation where mutating."
|
|
884886
|
+
}
|
|
884887
|
+
} : {}
|
|
884850
884888
|
};
|
|
884851
884889
|
}
|
|
884852
884890
|
function currentSession(context) {
|
|
@@ -884887,9 +884925,9 @@ function bookmarkSummary(context) {
|
|
|
884887
884925
|
bookmarks: manager5.list().length,
|
|
884888
884926
|
savedFiles: manager5.listSavedFiles().length,
|
|
884889
884927
|
modelRoutes: {
|
|
884890
|
-
visibleBookmarkPicker: 'agent_harness open_ui_surface surfaceId:"bookmarks"',
|
|
884928
|
+
visibleBookmarkPicker: 'agent_harness mode:"open_ui_surface" surfaceId:"bookmarks" confirm:true explicitUserRequest:"..."',
|
|
884891
884929
|
command: "/bookmarks",
|
|
884892
|
-
importIntoKnowledge: 'agent_knowledge_ingest sourceKind:"bookmarks_file"
|
|
884930
|
+
importIntoKnowledge: 'agent_knowledge_ingest sourceKind:"bookmarks_file" confirm:true explicitUserRequest:"..."'
|
|
884893
884931
|
}
|
|
884894
884932
|
};
|
|
884895
884933
|
}
|
|
@@ -885026,7 +885064,7 @@ function summarizeLog(posture, includeTail) {
|
|
|
885026
885064
|
...includeTail && posture.log.tail !== undefined ? { tail: posture.log.tail } : {}
|
|
885027
885065
|
};
|
|
885028
885066
|
}
|
|
885029
|
-
function describeEndpoint(endpoint5,
|
|
885067
|
+
function describeEndpoint(endpoint5, options = {}) {
|
|
885030
885068
|
return {
|
|
885031
885069
|
id: endpoint5.id,
|
|
885032
885070
|
label: endpoint5.label,
|
|
@@ -885035,13 +885073,15 @@ function describeEndpoint(endpoint5, lookup) {
|
|
|
885035
885073
|
bindPosture: endpoint5.bindPosture,
|
|
885036
885074
|
networkFacing: endpoint5.networkFacing,
|
|
885037
885075
|
...endpoint5.reachable !== undefined ? { reachable: endpoint5.reachable } : {},
|
|
885038
|
-
...lookup ? { lookup } : {},
|
|
885039
|
-
|
|
885040
|
-
|
|
885041
|
-
|
|
885042
|
-
|
|
885043
|
-
|
|
885044
|
-
|
|
885076
|
+
...options.lookup ? { lookup: options.lookup } : {},
|
|
885077
|
+
...options.includeParameters ? {
|
|
885078
|
+
policy: {
|
|
885079
|
+
effect: "read-only",
|
|
885080
|
+
modelOperation: "Inspect endpoint binding, network-facing posture, and optional reachability only.",
|
|
885081
|
+
lifecycle: "GoodVibes Agent does not start, stop, restart, install, expose, or mutate connected-host listeners.",
|
|
885082
|
+
settings: "Use agent_harness settings/get_setting for read-only inspection of endpoint settings; connected-host lifecycle/listener settings stay locked in Agent."
|
|
885083
|
+
}
|
|
885084
|
+
} : {}
|
|
885045
885085
|
};
|
|
885046
885086
|
}
|
|
885047
885087
|
function describeEndpointCandidate(endpoint5) {
|
|
@@ -885075,7 +885115,7 @@ function endpointSearchText(endpoint5) {
|
|
|
885075
885115
|
].join(`
|
|
885076
885116
|
`).toLowerCase();
|
|
885077
885117
|
}
|
|
885078
|
-
function resolveEndpoint2(posture, args2) {
|
|
885118
|
+
function resolveEndpoint2(posture, args2, options = {}) {
|
|
885079
885119
|
const lookup = endpointLookupFromArgs(args2);
|
|
885080
885120
|
if (!lookup) {
|
|
885081
885121
|
return {
|
|
@@ -885087,19 +885127,19 @@ function resolveEndpoint2(posture, args2) {
|
|
|
885087
885127
|
const normalized3 = lookup.input.toLowerCase();
|
|
885088
885128
|
const exact = endpoints5.find((endpoint5) => endpoint5.id === lookup.input);
|
|
885089
885129
|
if (exact) {
|
|
885090
|
-
return { status: "found", endpoint: describeEndpoint(exact, { ...lookup, resolvedBy: "id" }) };
|
|
885130
|
+
return { status: "found", endpoint: describeEndpoint(exact, { includeParameters: options.includeParameters, lookup: { ...lookup, resolvedBy: "id" } }) };
|
|
885091
885131
|
}
|
|
885092
885132
|
const insensitive = endpoints5.find((endpoint5) => endpoint5.id.toLowerCase() === normalized3);
|
|
885093
885133
|
if (insensitive) {
|
|
885094
|
-
return { status: "found", endpoint: describeEndpoint(insensitive, { ...lookup, resolvedBy: "case-insensitive-id" }) };
|
|
885134
|
+
return { status: "found", endpoint: describeEndpoint(insensitive, { includeParameters: options.includeParameters, lookup: { ...lookup, resolvedBy: "case-insensitive-id" } }) };
|
|
885095
885135
|
}
|
|
885096
885136
|
const label = endpoints5.find((endpoint5) => endpoint5.label.toLowerCase() === normalized3);
|
|
885097
885137
|
if (label) {
|
|
885098
|
-
return { status: "found", endpoint: describeEndpoint(label, { ...lookup, resolvedBy: "label" }) };
|
|
885138
|
+
return { status: "found", endpoint: describeEndpoint(label, { includeParameters: options.includeParameters, lookup: { ...lookup, resolvedBy: "label" } }) };
|
|
885099
885139
|
}
|
|
885100
885140
|
const searched = endpoints5.filter((endpoint5) => endpointSearchText(endpoint5).includes(normalized3));
|
|
885101
885141
|
if (searched.length === 1) {
|
|
885102
|
-
return { status: "found", endpoint: describeEndpoint(searched[0], { ...lookup, resolvedBy: "search" }) };
|
|
885142
|
+
return { status: "found", endpoint: describeEndpoint(searched[0], { includeParameters: options.includeParameters, lookup: { ...lookup, resolvedBy: "search" } }) };
|
|
885103
885143
|
}
|
|
885104
885144
|
if (searched.length > 1) {
|
|
885105
885145
|
return {
|
|
@@ -885130,14 +885170,14 @@ async function servicePostureSummary(context, args2) {
|
|
|
885130
885170
|
lifecycle: "GoodVibes Agent reports connected-host/service posture but does not start, stop, restart, install, expose, or mutate host listeners.",
|
|
885131
885171
|
config: posture.config,
|
|
885132
885172
|
managed: posture.managed,
|
|
885133
|
-
endpoints: posture.endpoints.map((endpoint5) => describeEndpoint(endpoint5)),
|
|
885173
|
+
endpoints: posture.endpoints.map((endpoint5) => describeEndpoint(endpoint5, { includeParameters: includeDetails })),
|
|
885134
885174
|
log: summarizeLog(posture, includeDetails),
|
|
885135
885175
|
issues: posture.issues,
|
|
885136
|
-
modelAccess: {
|
|
885176
|
+
...includeDetails ? { modelAccess: {
|
|
885137
885177
|
endpointLookup: 'Use mode:"service_endpoint" with endpointId, target, or query to inspect one endpoint.',
|
|
885138
885178
|
settings: 'Use mode:"settings" with includeHidden:true for endpoint setting descriptors. Host-owned listener settings remain read-only.',
|
|
885139
885179
|
liveHostStatus: 'Use mode:"connected_host_status" for SDK compatibility, token posture, and Agent Knowledge route readiness.'
|
|
885140
|
-
}
|
|
885180
|
+
} } : {}
|
|
885141
885181
|
};
|
|
885142
885182
|
}
|
|
885143
885183
|
async function describeHarnessServiceEndpoint(context, args2) {
|
|
@@ -885145,7 +885185,7 @@ async function describeHarnessServiceEndpoint(context, args2) {
|
|
|
885145
885185
|
...servicePostureOptions(args2),
|
|
885146
885186
|
probe: true
|
|
885147
885187
|
});
|
|
885148
|
-
return resolveEndpoint2(posture, args2);
|
|
885188
|
+
return resolveEndpoint2(posture, args2, { includeParameters: true });
|
|
885149
885189
|
}
|
|
885150
885190
|
|
|
885151
885191
|
// src/tools/agent-harness-setup-posture.ts
|
|
@@ -885290,16 +885330,16 @@ function describeItem(item, snapshot, options = {}) {
|
|
|
885290
885330
|
detail: item.detail,
|
|
885291
885331
|
signals: signalsForItem(item, snapshot),
|
|
885292
885332
|
...options.lookup ? { lookup: options.lookup } : {},
|
|
885293
|
-
policy: {
|
|
885294
|
-
effect: "read-only",
|
|
885295
|
-
values: "Setup posture returns onboarding readiness, counts, safe setting keys, and route metadata only; secret values and raw provider tokens are never returned.",
|
|
885296
|
-
mutation: "Setup apply, provider auth, local behavior import/create, channel delivery, and starter profile changes stay visible workspace, settings, slash-command, or first-class tool flows."
|
|
885297
|
-
},
|
|
885298
885333
|
...options.includeParameters ? {
|
|
885334
|
+
policy: {
|
|
885335
|
+
effect: "read-only",
|
|
885336
|
+
values: "Setup posture returns onboarding readiness, counts, safe setting keys, and route metadata only; secret values and raw provider tokens are never returned.",
|
|
885337
|
+
mutation: "Setup apply, provider auth, local behavior import/create, channel delivery, and starter profile changes stay visible workspace, settings, slash-command, or first-class tool flows."
|
|
885338
|
+
},
|
|
885299
885339
|
modelAccess: {
|
|
885300
885340
|
inspectSetup: 'agent_harness mode:"setup_posture"',
|
|
885301
885341
|
inspectSetupItem: 'agent_harness mode:"setup_item"',
|
|
885302
|
-
openOnboarding: 'agent_harness mode:"open_ui_surface" surfaceId:"onboarding" confirm:true',
|
|
885342
|
+
openOnboarding: 'agent_harness mode:"open_ui_surface" surfaceId:"onboarding" confirm:true explicitUserRequest:"..."',
|
|
885303
885343
|
setupWorkspace: 'agent_harness mode:"workspace_action" target:"setup"',
|
|
885304
885344
|
settings: "agent_harness modes settings/get_setting/set_setting/reset_setting",
|
|
885305
885345
|
providerRouting: 'agent_harness mode:"model_routing"',
|
|
@@ -885468,7 +885508,9 @@ var AGENT_HARNESS_MODES = [
|
|
|
885468
885508
|
"service_endpoint",
|
|
885469
885509
|
"connected_host",
|
|
885470
885510
|
"connected_host_status",
|
|
885471
|
-
"connected_host_capability"
|
|
885511
|
+
"connected_host_capability",
|
|
885512
|
+
"daemon",
|
|
885513
|
+
"daemon_status"
|
|
885472
885514
|
];
|
|
885473
885515
|
var KEY_COMBO_PARAMETER_SCHEMA = {
|
|
885474
885516
|
type: "object",
|
|
@@ -886415,22 +886457,24 @@ function resolveHarnessUiSurface(args2) {
|
|
|
886415
886457
|
return { status: "ambiguous", input: lookup.input, candidates: search2.map(surfaceCandidate).slice(0, 8) };
|
|
886416
886458
|
return null;
|
|
886417
886459
|
}
|
|
886418
|
-
function describeSurface(context, surface,
|
|
886460
|
+
function describeSurface(context, surface, options = {}) {
|
|
886419
886461
|
return {
|
|
886420
886462
|
id: surface.id,
|
|
886421
886463
|
label: surface.label,
|
|
886422
886464
|
kind: surface.kind,
|
|
886423
886465
|
summary: surface.summary,
|
|
886424
886466
|
command: surface.command,
|
|
886425
|
-
...lookup ? { lookup } : {},
|
|
886467
|
+
...options.lookup ? { lookup: options.lookup } : {},
|
|
886426
886468
|
preferredModelRoute: surface.preferredModelRoute,
|
|
886427
|
-
parameters: surface.parameters ?? [],
|
|
886428
886469
|
available: surface.available(context),
|
|
886429
|
-
|
|
886430
|
-
|
|
886431
|
-
|
|
886432
|
-
|
|
886433
|
-
|
|
886470
|
+
...options.includeParameters ? {
|
|
886471
|
+
parameters: surface.parameters ?? [],
|
|
886472
|
+
policy: {
|
|
886473
|
+
effect: "visible-ui-navigation",
|
|
886474
|
+
confirmation: 'agent_harness mode:"open_ui_surface" requires confirm:true and explicitUserRequest.',
|
|
886475
|
+
boundary: "UI surface routing opens the same visible Agent shell surface the user can open. Use first-class model tools, settings modes, workspace actions, or confirmed slash-command mirrors for actual operations."
|
|
886476
|
+
}
|
|
886477
|
+
} : {}
|
|
886434
886478
|
};
|
|
886435
886479
|
}
|
|
886436
886480
|
function totalHarnessUiSurfaces() {
|
|
@@ -886439,12 +886483,13 @@ function totalHarnessUiSurfaces() {
|
|
|
886439
886483
|
function listHarnessUiSurfaces(context, args2) {
|
|
886440
886484
|
const query2 = readString73(args2.query);
|
|
886441
886485
|
const limit3 = readLimit24(args2.limit, 200);
|
|
886442
|
-
|
|
886486
|
+
const includeParameters = args2.includeParameters === true;
|
|
886487
|
+
return UI_SURFACES.map((surface) => describeSurface(context, surface, { includeParameters })).filter((surface) => surfaceMatches(surface, query2)).slice(0, limit3);
|
|
886443
886488
|
}
|
|
886444
886489
|
function describeHarnessUiSurface(context, args2) {
|
|
886445
886490
|
const resolved = resolveHarnessUiSurface(args2);
|
|
886446
886491
|
if (resolved?.status === "found")
|
|
886447
|
-
return describeSurface(context, resolved.surface, resolved.lookup);
|
|
886492
|
+
return describeSurface(context, resolved.surface, { includeParameters: true, lookup: resolved.lookup });
|
|
886448
886493
|
if (resolved?.status === "ambiguous") {
|
|
886449
886494
|
return { status: "ambiguous", input: resolved.input, candidates: resolved.candidates };
|
|
886450
886495
|
}
|
|
@@ -886465,7 +886510,7 @@ async function openHarnessUiSurface(context, args2) {
|
|
|
886465
886510
|
const routed = await resolved.surface.open(context, args2);
|
|
886466
886511
|
return {
|
|
886467
886512
|
...routed,
|
|
886468
|
-
descriptor: describeSurface(context, resolved.surface, resolved.lookup)
|
|
886513
|
+
descriptor: describeSurface(context, resolved.surface, { includeParameters: true, lookup: resolved.lookup })
|
|
886469
886514
|
};
|
|
886470
886515
|
}
|
|
886471
886516
|
|
|
@@ -887491,6 +887536,10 @@ function describeWorkspaceEditor(editor) {
|
|
|
887491
887536
|
}))
|
|
887492
887537
|
};
|
|
887493
887538
|
}
|
|
887539
|
+
function previewText6(value, maxLength = 120) {
|
|
887540
|
+
const normalized3 = value.replace(/\s+/g, " ").trim();
|
|
887541
|
+
return normalized3.length <= maxLength ? normalized3 : `${normalized3.slice(0, maxLength - 1).trimEnd()}...`;
|
|
887542
|
+
}
|
|
887494
887543
|
function selectedRoutineFromArgs(snapshot, args2) {
|
|
887495
887544
|
const fields = readFieldMap3(args2.fields);
|
|
887496
887545
|
const routineId = readString74(args2.recordId) || readString74(fields.routineId) || readString74(fields.id);
|
|
@@ -887544,6 +887593,23 @@ function describeWorkspaceAction(category, action2, options = {}) {
|
|
|
887544
887593
|
} : {}
|
|
887545
887594
|
};
|
|
887546
887595
|
}
|
|
887596
|
+
function describeWorkspaceActionSummary(category, action2) {
|
|
887597
|
+
return {
|
|
887598
|
+
id: action2.id,
|
|
887599
|
+
categoryId: category.id,
|
|
887600
|
+
category: category.label,
|
|
887601
|
+
group: category.group,
|
|
887602
|
+
label: action2.label,
|
|
887603
|
+
summary: previewText6(action2.detail),
|
|
887604
|
+
kind: action2.kind,
|
|
887605
|
+
safety: action2.safety,
|
|
887606
|
+
...action2.command ? { command: action2.command } : {},
|
|
887607
|
+
...action2.targetCategoryId ? { targetCategoryId: action2.targetCategoryId } : {},
|
|
887608
|
+
...action2.editorKind ? { editorKind: action2.editorKind } : {},
|
|
887609
|
+
...action2.localKind ? { localKind: action2.localKind } : {},
|
|
887610
|
+
...action2.localOperation ? { localOperation: action2.localOperation } : {}
|
|
887611
|
+
};
|
|
887612
|
+
}
|
|
887547
887613
|
function listWorkspaceActions(context, args2) {
|
|
887548
887614
|
const query2 = readString74(args2.query);
|
|
887549
887615
|
const categoryId = readString74(args2.categoryId || args2.category);
|
|
@@ -887551,7 +887617,7 @@ function listWorkspaceActions(context, args2) {
|
|
|
887551
887617
|
const includeEditor = args2.includeParameters === true;
|
|
887552
887618
|
const editorContext = includeEditor ? buildWorkspaceEditorContext(context, args2) : null;
|
|
887553
887619
|
const source = query2 ? searchAgentWorkspaceActions(AGENT_WORKSPACE_CATEGORIES, query2).map((result2) => ({ category: result2.category, action: result2.action })) : allWorkspaceActions();
|
|
887554
|
-
return source.filter((entry) => !categoryId || entry.category.id === categoryId).slice(0, limit3).map((entry) => describeWorkspaceAction(entry.category, entry.action, { includeEditor, editorContext }));
|
|
887620
|
+
return source.filter((entry) => !categoryId || entry.category.id === categoryId).slice(0, limit3).map((entry) => includeEditor ? describeWorkspaceAction(entry.category, entry.action, { includeEditor, editorContext }) : describeWorkspaceActionSummary(entry.category, entry.action));
|
|
887555
887621
|
}
|
|
887556
887622
|
function workspaceActionLookupFromArgs(args2) {
|
|
887557
887623
|
const actionId = readString74(args2.actionId);
|
|
@@ -887642,6 +887708,113 @@ function output7(value) {
|
|
|
887642
887708
|
function error52(message) {
|
|
887643
887709
|
return { success: false, error: message };
|
|
887644
887710
|
}
|
|
887711
|
+
function compactHarnessModeGuide() {
|
|
887712
|
+
return {
|
|
887713
|
+
discover: [
|
|
887714
|
+
"cli_commands",
|
|
887715
|
+
"panels",
|
|
887716
|
+
"ui_surfaces",
|
|
887717
|
+
"shortcuts",
|
|
887718
|
+
"keybindings",
|
|
887719
|
+
"commands",
|
|
887720
|
+
"channels",
|
|
887721
|
+
"notifications",
|
|
887722
|
+
"provider_accounts",
|
|
887723
|
+
"mcp_servers",
|
|
887724
|
+
"setup_posture",
|
|
887725
|
+
"model_routing",
|
|
887726
|
+
"pairing_posture",
|
|
887727
|
+
"delegation_posture",
|
|
887728
|
+
"security_posture",
|
|
887729
|
+
"support_bundles",
|
|
887730
|
+
"media_posture",
|
|
887731
|
+
"sessions",
|
|
887732
|
+
"settings",
|
|
887733
|
+
"workspace",
|
|
887734
|
+
"workspace_categories",
|
|
887735
|
+
"workspace_actions",
|
|
887736
|
+
"tools",
|
|
887737
|
+
"release_evidence",
|
|
887738
|
+
"release_readiness",
|
|
887739
|
+
"operator_methods",
|
|
887740
|
+
"service_posture",
|
|
887741
|
+
"connected_host",
|
|
887742
|
+
"daemon"
|
|
887743
|
+
],
|
|
887744
|
+
inspect: [
|
|
887745
|
+
"cli_command",
|
|
887746
|
+
"panel",
|
|
887747
|
+
"ui_surface",
|
|
887748
|
+
"keybinding",
|
|
887749
|
+
"command",
|
|
887750
|
+
"channel",
|
|
887751
|
+
"notification_target",
|
|
887752
|
+
"provider_account",
|
|
887753
|
+
"mcp_server",
|
|
887754
|
+
"setup_item",
|
|
887755
|
+
"model_route",
|
|
887756
|
+
"pairing_route",
|
|
887757
|
+
"delegation_route",
|
|
887758
|
+
"security_finding",
|
|
887759
|
+
"support_bundle",
|
|
887760
|
+
"media_provider",
|
|
887761
|
+
"session",
|
|
887762
|
+
"get_setting",
|
|
887763
|
+
"workspace_action",
|
|
887764
|
+
"tool",
|
|
887765
|
+
"release_evidence_artifact",
|
|
887766
|
+
"release_readiness_item",
|
|
887767
|
+
"operator_method",
|
|
887768
|
+
"service_endpoint",
|
|
887769
|
+
"connected_host_capability",
|
|
887770
|
+
"connected_host_status",
|
|
887771
|
+
"daemon_status"
|
|
887772
|
+
],
|
|
887773
|
+
effects: [
|
|
887774
|
+
"open_panel",
|
|
887775
|
+
"open_ui_surface",
|
|
887776
|
+
"run_keybinding",
|
|
887777
|
+
"set_keybinding",
|
|
887778
|
+
"reset_keybinding",
|
|
887779
|
+
"run_command",
|
|
887780
|
+
"set_setting",
|
|
887781
|
+
"reset_setting",
|
|
887782
|
+
"run_workspace_action"
|
|
887783
|
+
],
|
|
887784
|
+
pattern: "Use query|target for search, exact ids for inspect modes, and confirm:true plus explicitUserRequest for effects."
|
|
887785
|
+
};
|
|
887786
|
+
}
|
|
887787
|
+
function detailedHarnessModelAccessGuide() {
|
|
887788
|
+
return {
|
|
887789
|
+
cliCommands: 'List mode:"cli_commands"; inspect mode:"cli_command" with cliCommand|commandName|query. Discovery only.',
|
|
887790
|
+
panels: 'List mode:"panels"; inspect mode:"panel"; navigate mode:"open_panel" with confirm:true and explicitUserRequest.',
|
|
887791
|
+
uiSurfaces: 'List mode:"ui_surfaces"; inspect mode:"ui_surface"; navigate mode:"open_ui_surface" with confirmation.',
|
|
887792
|
+
shortcuts: 'List mode:"shortcuts"; inspect mode:"keybinding"; run mode:"run_keybinding"; edit with set_keybinding/reset_keybinding and confirmation.',
|
|
887793
|
+
slashCommands: 'List mode:"commands"; inspect mode:"command"; execute mode:"run_command" with confirmation.',
|
|
887794
|
+
channels: 'List mode:"channels"; inspect mode:"channel"; deliver with agent_channel_send and confirmation.',
|
|
887795
|
+
notifications: 'List mode:"notifications"; inspect mode:"notification_target"; deliver with agent_notify and confirmation.',
|
|
887796
|
+
providerAccounts: 'List mode:"provider_accounts"; inspect mode:"provider_account"; auth changes stay confirmed workspace/command flows.',
|
|
887797
|
+
mcpServers: 'List mode:"mcp_servers"; inspect mode:"mcp_server"; trust/server changes stay confirmed workspace/command flows.',
|
|
887798
|
+
setupPosture: 'List mode:"setup_posture"; inspect mode:"setup_item"; setup mutations stay confirmed visible flows.',
|
|
887799
|
+
modelRouting: 'List mode:"model_routing"; inspect mode:"model_route"; selection and provider edits stay confirmed visible flows.',
|
|
887800
|
+
pairingPosture: 'List mode:"pairing_posture"; inspect mode:"pairing_route"; raw token/QR and pairing effects stay visible user flows.',
|
|
887801
|
+
delegationPosture: 'List mode:"delegation_posture"; inspect mode:"delegation_route"; delegated submission stays confirmed visible flow.',
|
|
887802
|
+
securityPosture: 'List mode:"security_posture"; inspect mode:"security_finding"; mutate only through confirmed security routes.',
|
|
887803
|
+
supportBundles: 'List mode:"support_bundles"; inspect mode:"support_bundle"; export/import stays confirmation-gated.',
|
|
887804
|
+
mediaPosture: 'List mode:"media_posture"; inspect mode:"media_provider"; generate with agent_media_generate and confirmation.',
|
|
887805
|
+
sessions: 'List mode:"sessions"; inspect mode:"session"; save/resume/export/delete stays visible confirmed flow.',
|
|
887806
|
+
workspace: 'List mode:"workspace" or mode:"workspace_categories"; actions via workspace_actions/workspace_action/run_workspace_action; includeParameters:true inlines editor schemas.',
|
|
887807
|
+
settings: 'List mode:"settings" with category|prefix|query|includeHidden:true; get_setting/set_setting/reset_setting use key|target|query and confirmation for writes.',
|
|
887808
|
+
tools: 'List mode:"tools" with query|limit|includeParameters:true; inspect mode:"tool" with toolName|target|query.',
|
|
887809
|
+
releaseEvidence: 'List mode:"release_evidence"; inspect mode:"release_evidence_artifact"; includeParameters:true inlines artifact detail.',
|
|
887810
|
+
releaseReadiness: 'List mode:"release_readiness"; inspect mode:"release_readiness_item"; includeParameters:true inlines item detail.',
|
|
887811
|
+
operatorMethods: 'List mode:"operator_methods"; inspect mode:"operator_method"; execute only through the returned first-class tool.',
|
|
887812
|
+
servicePosture: 'List mode:"service_posture"; inspect mode:"service_endpoint"; includeParameters:true adds probes and redacted log tail.',
|
|
887813
|
+
connectedHost: 'Map mode:"connected_host"; inspect mode:"connected_host_capability"; no lifecycle control.',
|
|
887814
|
+
connectedHostStatus: 'Live read-only mode:"connected_host_status" for host reachability, SDK compatibility, token posture, and Knowledge readiness.',
|
|
887815
|
+
daemon: 'Daemon aliases route to mode:"connected_host" and mode:"connected_host_status"; lifecycle control is not exposed.'
|
|
887816
|
+
};
|
|
887817
|
+
}
|
|
887645
887818
|
function requireConfirmedAction(args2, action2) {
|
|
887646
887819
|
const explicitUserRequest = readString75(args2.explicitUserRequest);
|
|
887647
887820
|
if (!explicitUserRequest)
|
|
@@ -887841,11 +888014,7 @@ function createAgentHarnessTool(deps) {
|
|
|
887841
888014
|
return {
|
|
887842
888015
|
definition: {
|
|
887843
888016
|
name: "agent_harness",
|
|
887844
|
-
description:
|
|
887845
|
-
"Inspect or operate the GoodVibes Agent harness.",
|
|
887846
|
-
"Use summary for mode help.",
|
|
887847
|
-
"Effects require confirm:true plus explicitUserRequest; no host lifecycle or raw secrets."
|
|
887848
|
-
].join(" "),
|
|
888017
|
+
description: "Inspect or operate GoodVibes Agent harness surfaces.",
|
|
887849
888018
|
parameters: {
|
|
887850
888019
|
type: "object",
|
|
887851
888020
|
properties: AGENT_HARNESS_PARAMETER_PROPERTIES,
|
|
@@ -887901,36 +888070,12 @@ function createAgentHarnessTool(deps) {
|
|
|
887901
888070
|
releaseReadiness: releaseReadinessInventoryStatus(),
|
|
887902
888071
|
operatorMethods: operatorMethodCatalogStatus(),
|
|
887903
888072
|
servicePosture: servicePostureCatalogStatus(),
|
|
887904
|
-
|
|
887905
|
-
|
|
887906
|
-
panels: 'List mode:"panels"; inspect mode:"panel"; navigate mode:"open_panel" with confirm:true and explicitUserRequest.',
|
|
887907
|
-
uiSurfaces: 'List mode:"ui_surfaces"; inspect mode:"ui_surface"; navigate mode:"open_ui_surface" with confirmation.',
|
|
887908
|
-
shortcuts: 'List mode:"shortcuts"; inspect mode:"keybinding"; run mode:"run_keybinding"; edit with set_keybinding/reset_keybinding and confirmation.',
|
|
887909
|
-
slashCommands: 'List mode:"commands"; inspect mode:"command"; execute mode:"run_command" with confirmation.',
|
|
887910
|
-
channels: 'List mode:"channels"; inspect mode:"channel"; deliver with agent_channel_send and confirmation.',
|
|
887911
|
-
notifications: 'List mode:"notifications"; inspect mode:"notification_target"; deliver with agent_notify and confirmation.',
|
|
887912
|
-
providerAccounts: 'List mode:"provider_accounts"; inspect mode:"provider_account"; auth changes stay confirmed workspace/command flows.',
|
|
887913
|
-
mcpServers: 'List mode:"mcp_servers"; inspect mode:"mcp_server"; trust/server changes stay confirmed workspace/command flows.',
|
|
887914
|
-
setupPosture: 'List mode:"setup_posture"; inspect mode:"setup_item"; setup mutations stay confirmed visible flows.',
|
|
887915
|
-
modelRouting: 'List mode:"model_routing"; inspect mode:"model_route"; selection and provider edits stay confirmed visible flows.',
|
|
887916
|
-
pairingPosture: 'List mode:"pairing_posture"; inspect mode:"pairing_route"; raw token/QR and pairing effects stay visible user flows.',
|
|
887917
|
-
delegationPosture: 'List mode:"delegation_posture"; inspect mode:"delegation_route"; delegated submission stays confirmed visible flow.',
|
|
887918
|
-
securityPosture: 'List mode:"security_posture"; inspect mode:"security_finding"; mutate only through confirmed security routes.',
|
|
887919
|
-
supportBundles: 'List mode:"support_bundles"; inspect mode:"support_bundle"; export/import stays confirmation-gated.',
|
|
887920
|
-
mediaPosture: 'List mode:"media_posture"; inspect mode:"media_provider"; generate with agent_media_generate and confirmation.',
|
|
887921
|
-
sessions: 'List mode:"sessions"; inspect mode:"session"; save/resume/export/delete stays visible confirmed flow.',
|
|
887922
|
-
workspace: 'List mode:"workspace" or mode:"workspace_categories"; actions via workspace_actions/workspace_action/run_workspace_action; includeParameters:true inlines editor schemas.',
|
|
887923
|
-
settings: 'List mode:"settings" with category|prefix|query|includeHidden:true; get_setting/set_setting/reset_setting use key|target|query and confirmation for writes.',
|
|
887924
|
-
tools: 'List mode:"tools" with query|limit|includeParameters:true; inspect mode:"tool" with toolName|target|query.',
|
|
887925
|
-
releaseEvidence: 'List mode:"release_evidence"; inspect mode:"release_evidence_artifact"; includeParameters:true inlines artifact detail.',
|
|
887926
|
-
releaseReadiness: 'List mode:"release_readiness"; inspect mode:"release_readiness_item"; includeParameters:true inlines item detail.',
|
|
887927
|
-
operatorMethods: 'List mode:"operator_methods"; inspect mode:"operator_method"; execute only through the returned first-class tool.',
|
|
887928
|
-
servicePosture: 'List mode:"service_posture"; inspect mode:"service_endpoint"; includeParameters:true adds probes and redacted log tail.',
|
|
887929
|
-
connectedHost: 'Map mode:"connected_host"; inspect mode:"connected_host_capability"; no lifecycle control.',
|
|
887930
|
-
connectedHostStatus: 'Live read-only mode:"connected_host_status" for host reachability, SDK compatibility, token posture, and Knowledge readiness.'
|
|
887931
|
-
},
|
|
888073
|
+
modeGuide: compactHarnessModeGuide(),
|
|
888074
|
+
...args2.includeParameters === true ? { modelAccess: detailedHarnessModelAccessGuide() } : {},
|
|
887932
888075
|
settingsPolicy: settingsPolicySummary(),
|
|
887933
|
-
connectedHost: connectedHostSummary(deps.commandContext, deps.toolRegistry
|
|
888076
|
+
connectedHost: connectedHostSummary(deps.commandContext, deps.toolRegistry, {
|
|
888077
|
+
includeParameters: args2.includeParameters === true
|
|
888078
|
+
})
|
|
887934
888079
|
});
|
|
887935
888080
|
}
|
|
887936
888081
|
if (args2.mode === "cli_commands") {
|
|
@@ -888135,6 +888280,8 @@ function createAgentHarnessTool(deps) {
|
|
|
888135
888280
|
query: readString75(args2.query) || undefined,
|
|
888136
888281
|
includeHidden: args2.includeHidden === true,
|
|
888137
888282
|
limit: readLimit26(args2.limit, 100)
|
|
888283
|
+
}, {
|
|
888284
|
+
includeParameters: args2.includeParameters === true
|
|
888138
888285
|
});
|
|
888139
888286
|
return output7({ settings, returned: settings.length, policy: settingsPolicySummary() });
|
|
888140
888287
|
}
|
|
@@ -888259,8 +888406,11 @@ function createAgentHarnessTool(deps) {
|
|
|
888259
888406
|
return error52(`Ambiguous service endpoint ${resolved.input}. Candidates: ${JSON.stringify(resolved.candidates)}`);
|
|
888260
888407
|
return error52(resolved.usage);
|
|
888261
888408
|
}
|
|
888262
|
-
if (args2.mode === "connected_host")
|
|
888263
|
-
return output7(connectedHostSummary(deps.commandContext, deps.toolRegistry
|
|
888409
|
+
if (args2.mode === "connected_host" || args2.mode === "daemon") {
|
|
888410
|
+
return output7(connectedHostSummary(deps.commandContext, deps.toolRegistry, {
|
|
888411
|
+
includeParameters: args2.includeParameters === true
|
|
888412
|
+
}));
|
|
888413
|
+
}
|
|
888264
888414
|
if (args2.mode === "connected_host_capability") {
|
|
888265
888415
|
const query2 = readString75(args2.capabilityId || args2.target || args2.query);
|
|
888266
888416
|
const resolved = describeConnectedHostCapability(deps.toolRegistry, query2);
|
|
@@ -888270,8 +888420,11 @@ function createAgentHarnessTool(deps) {
|
|
|
888270
888420
|
return error52(`Ambiguous connected-host capability ${resolved.input}. Candidates: ${JSON.stringify(resolved.candidates)}`);
|
|
888271
888421
|
return error52(`Unknown connected-host capability ${query2 || "<missing>"}. Use mode:"connected_host" to inspect allowed and blocked capability ids.`);
|
|
888272
888422
|
}
|
|
888273
|
-
if (args2.mode === "connected_host_status")
|
|
888274
|
-
return output7(await connectedHostStatusSummary(deps.commandContext, deps.toolRegistry
|
|
888423
|
+
if (args2.mode === "connected_host_status" || args2.mode === "daemon_status") {
|
|
888424
|
+
return output7(await connectedHostStatusSummary(deps.commandContext, deps.toolRegistry, {
|
|
888425
|
+
includeParameters: args2.includeParameters === true
|
|
888426
|
+
}));
|
|
888427
|
+
}
|
|
888275
888428
|
return error52(`Unhandled agent_harness mode: ${args2.mode}`);
|
|
888276
888429
|
} catch (err2) {
|
|
888277
888430
|
return error52(formatHarnessError(err2));
|
|
@@ -888286,24 +888439,16 @@ function registerAgentHarnessTool(registry5, commandRegistry, commandContext) {
|
|
|
888286
888439
|
// src/runtime/bootstrap.ts
|
|
888287
888440
|
var GOODVIBES_AGENT_OPERATOR_POLICY = [
|
|
888288
888441
|
"## GoodVibes Agent Operator Policy",
|
|
888289
|
-
"-
|
|
888290
|
-
"-
|
|
888291
|
-
"-
|
|
888292
|
-
"-
|
|
888293
|
-
"-
|
|
888294
|
-
"-
|
|
888295
|
-
"-
|
|
888296
|
-
"-
|
|
888297
|
-
"-
|
|
888298
|
-
"-
|
|
888299
|
-
"- When the user explicitly asks Agent to send an alert, message, or notification to configured notification targets, use the `agent_notify` tool with confirm:true and the original user request. Do not infer external notifications from vague suggestions, and never create channel routes or account authorizations from the main conversation.",
|
|
888300
|
-
"- When the user explicitly asks Agent to send one message to a specific configured channel, route, webhook, or link target, use the `agent_channel_send` tool with confirm:true and the original user request. It can deliver one message through configured delivery strategies, but must not create routes, authorize accounts, manage connected-host hosting, use default knowledge, use non-Agent knowledge spaces, create separate Agent jobs, or request GoodVibes TUI delegation.",
|
|
888301
|
-
"- When the user explicitly asks for a reminder or asks Agent to schedule a reminder, use the `agent_reminder_schedule` tool with confirm:true and the original user request. That creates one connected schedules.create reminder on the external GoodVibes host. Do not infer reminders from vague suggestions or routine startup, and never create local scheduler jobs.",
|
|
888302
|
-
"- GoodVibes TUI delegation is never the default Agent reasoning path. Do not delegate planning, research, operations, knowledge, memory, configuration, approvals, automation observability, or ordinary assistant work.",
|
|
888303
|
-
"- GoodVibes Agent is not the coding TUI. Do not use the `agent` tool to create coding-role Agent jobs or batch job roots from Agent.",
|
|
888304
|
-
"- When the user explicitly asks to build, implement, fix, patch, or review code, preserve the full original user ask and delegate one build request to GoodVibes TUI through the public shared-session/build-delegation contract. Include clear executionIntent and request delegated review only for explicit build/fix/review work or when the user explicitly asks for delegated Agent review.",
|
|
888305
|
-
"- Do not narrow explicit build/fix/review requests into design-only, read-only, or no-write work unless the user explicitly requested that limitation. TUI owns file edits, git/worktree work, execution isolation UX, and delegated review coordination.",
|
|
888306
|
-
"- If a stable public delegation route is unavailable, say that the task needs GoodVibes TUI delegation and report the missing route instead of pretending to implement it locally or creating sibling Agent jobs."
|
|
888442
|
+
"- Work serially in the main conversation by default: answer, inspect, summarize, remember useful non-secret facts, configure Agent-local state, and use safe read-only connected-host/operator routes.",
|
|
888443
|
+
"- Connected-host lifecycle is external. Do not start, stop, restart, install, expose, or mutate host listeners/network posture from Agent.",
|
|
888444
|
+
"- Read tools: `agent_operator_briefing` for connected work/approvals/automation/schedules, `agent_knowledge` for isolated Agent Knowledge, `agent_harness` for harness catalogs/settings/status.",
|
|
888445
|
+
"- State tools: `agent_work_plan` for visible local work items; `agent_local_registry` for Agent-local notes, memory, personas, skills, bundles, and routines. Keep records non-secret, sourced, and reviewable.",
|
|
888446
|
+
"- Confirmed tools: use `agent_operator_action`, `agent_knowledge_ingest`, `agent_media_generate`, `agent_notify`, `agent_channel_send`, and `agent_reminder_schedule` only for explicit user requests with confirm:true and explicitUserRequest.",
|
|
888447
|
+
"- Agent Knowledge must use only `/api/goodvibes-agent/knowledge/*` and fail closed. Do not use default knowledge or non-Agent knowledge spaces.",
|
|
888448
|
+
"- External delivery, media generation, reminders, settings writes, slash-command mirrors, workspace action mirrors, and destructive local changes require explicit user intent and the owning tool/command confirmation.",
|
|
888449
|
+
"- Routines run in this serial conversation unless explicitly promoted to a connected schedule. Do not create hidden Agent jobs or local scheduler jobs.",
|
|
888450
|
+
"- Do not delegate planning, research, operations, knowledge, memory, configuration, approvals, observability, or ordinary assistant work.",
|
|
888451
|
+
"- For explicit build, implement, fix, patch, or review requests, preserve the full original ask and use the public shared-session/build-delegation route. If that route is unavailable, report the missing route instead of pretending to perform the work locally."
|
|
888307
888452
|
].join(`
|
|
888308
888453
|
`);
|
|
888309
888454
|
function joinPromptParts(...parts2) {
|