@pellux/goodvibes-agent 1.1.7 → 1.3.0
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 +329 -0
- package/README.md +46 -30
- package/dist/package/{ast-grep-napi.linux-x64-gnu-mkk8xwww.node → ast-grep-napi.linux-x64-gnu-swtppvy9.node} +0 -0
- package/dist/package/{ast-grep-napi.linux-x64-musl-ryqtgdv6.node → ast-grep-napi.linux-x64-musl-ttfcdtap.node} +0 -0
- package/dist/package/main.js +138903 -91477
- package/docs/README.md +14 -7
- package/docs/channels-remote-and-api.md +8 -5
- package/docs/connected-host.md +14 -12
- package/docs/getting-started.md +58 -30
- package/docs/knowledge-artifacts-and-multimodal.md +7 -5
- package/docs/project-planning.md +2 -2
- package/docs/providers-and-routing.md +11 -3
- package/docs/tools-and-commands.md +116 -45
- package/docs/voice-and-live-tts.md +3 -1
- package/package.json +3 -2
- package/release/release-notes.md +142 -5
- package/release/release-readiness.json +124 -94
- package/src/agent/assistant-cockpit.ts +247 -0
- package/src/agent/autonomy-schedule-format.ts +96 -0
- package/src/agent/autonomy-schedule.ts +514 -0
- package/src/agent/channel-delivery-receipts.ts +292 -0
- package/src/agent/competitive-feature-inventory.ts +294 -0
- package/src/agent/document-registry-types.ts +106 -0
- package/src/agent/document-registry.ts +734 -0
- package/src/agent/harness-control.ts +2 -2
- package/src/agent/memory-prompt.ts +2 -2
- package/src/agent/operator-actions.ts +50 -6
- package/src/agent/persona-registry.ts +8 -0
- package/src/agent/project-context-files.ts +273 -0
- package/src/agent/prompt-context-receipts.ts +502 -0
- package/src/agent/reminder-schedule-format.ts +16 -2
- package/src/agent/research-run-registry.ts +582 -0
- package/src/agent/research-source-registry.ts +441 -0
- package/src/agent/routine-registry.ts +19 -3
- package/src/agent/routine-schedule-format.ts +27 -2
- package/src/agent/runtime-profile-starters.ts +7 -0
- package/src/agent/runtime-profile.ts +106 -4
- package/src/agent/schedule-edit-format.ts +129 -0
- package/src/agent/schedule-edit.ts +496 -0
- package/src/agent/schedule-next-routes.ts +42 -0
- package/src/agent/setup-wizard-artifact-receipts.ts +366 -0
- package/src/agent/setup-wizard-checkpoint.ts +140 -0
- package/src/agent/setup-wizard.ts +683 -0
- package/src/agent/skill-registry-types.ts +102 -0
- package/src/agent/skill-registry.ts +81 -107
- package/src/agent/vibe-confirmation-routes.ts +62 -0
- package/src/agent/vibe-file.ts +285 -0
- package/src/cli/agent-knowledge-command.ts +45 -2
- package/src/cli/help.ts +3 -0
- package/src/cli/profiles-command.ts +25 -11
- package/src/config/agent-settings-policy.ts +1 -18
- package/src/input/agent-workspace-activation.ts +53 -0
- package/src/input/agent-workspace-artifact-browser-editor.ts +494 -0
- package/src/input/agent-workspace-artifact-metadata.ts +17 -0
- package/src/input/agent-workspace-basic-command-editors.ts +5 -1
- package/src/input/agent-workspace-categories.ts +153 -155
- package/src/input/agent-workspace-channel-triage.ts +481 -0
- package/src/input/agent-workspace-channels.ts +263 -0
- package/src/input/agent-workspace-command-editor.ts +152 -0
- package/src/input/agent-workspace-context-snapshot.ts +349 -0
- package/src/input/agent-workspace-delegation-editor-submission.ts +8 -0
- package/src/input/agent-workspace-document-editor.ts +502 -0
- package/src/input/agent-workspace-document-ops-editor.ts +523 -0
- package/src/input/agent-workspace-host-category.ts +1 -1
- package/src/input/agent-workspace-local-library-snapshot.ts +167 -0
- package/src/input/agent-workspace-model-compare-editor.ts +376 -0
- package/src/input/agent-workspace-model-compare-prompt-submission.ts +552 -0
- package/src/input/agent-workspace-model-compare-types.ts +82 -0
- package/src/input/agent-workspace-model-compare-utils.ts +35 -0
- package/src/input/agent-workspace-onboarding-categories.ts +141 -0
- package/src/input/agent-workspace-operations-command-editor-submission.ts +53 -0
- package/src/input/agent-workspace-operations-command-editors.ts +22 -0
- package/src/input/agent-workspace-research-report-editor.ts +212 -0
- package/src/input/agent-workspace-research-run-editor.ts +144 -0
- package/src/input/agent-workspace-research-source-editor.ts +167 -0
- package/src/input/agent-workspace-review-packet-snapshot.ts +593 -0
- package/src/input/agent-workspace-review-packet-utils.ts +265 -0
- package/src/input/agent-workspace-settings.ts +313 -30
- package/src/input/agent-workspace-setup-checkpoint-action.ts +127 -0
- package/src/input/agent-workspace-setup-snapshot.ts +217 -0
- package/src/input/agent-workspace-setup.ts +61 -1
- package/src/input/agent-workspace-snapshot.ts +184 -149
- package/src/input/agent-workspace-types.ts +287 -2
- package/src/input/agent-workspace.ts +23 -1
- package/src/input/command-registry.ts +9 -2
- package/src/input/commands/agent-runtime-profile-runtime.ts +28 -13
- package/src/input/commands/channels-runtime.ts +102 -114
- package/src/input/commands/delegation-runtime.ts +87 -24
- package/src/input/commands/knowledge-browser-flags.ts +12 -0
- package/src/input/commands/knowledge.ts +28 -14
- package/src/input/commands/operator-actions-runtime.ts +6 -3
- package/src/input/commands/schedule-runtime.ts +71 -14
- package/src/input/commands/session-content.ts +2 -2
- package/src/input/commands/shell-core.ts +2 -0
- package/src/input/commands/vibe-runtime.ts +140 -0
- package/src/input/commands.ts +2 -0
- package/src/input/connected-host-routes.ts +123 -0
- package/src/input/settings-modal-types.ts +14 -0
- package/src/input/setup-wizard-live-receipts.ts +76 -0
- package/src/main.ts +15 -15
- package/src/panels/qr-panel.ts +2 -2
- package/src/renderer/agent-workspace-context-lines.ts +701 -0
- package/src/renderer/agent-workspace.ts +68 -421
- package/src/renderer/settings-modal-helpers.ts +12 -0
- package/src/renderer/settings-modal.ts +12 -0
- package/src/runtime/bootstrap-command-context.ts +11 -1
- package/src/runtime/bootstrap-command-parts.ts +14 -3
- package/src/runtime/bootstrap-core.ts +39 -1
- package/src/runtime/bootstrap-shell.ts +6 -0
- package/src/runtime/bootstrap.ts +113 -30
- package/src/runtime/connected-host-auth.ts +3 -2
- package/src/runtime/execution-ledger.ts +231 -0
- package/src/runtime/services.ts +88 -10
- package/src/runtime/tool-permission-safety.ts +199 -5
- package/src/shell/session-continuity-hints.ts +39 -0
- package/src/tools/agent-artifacts-tool.ts +606 -0
- package/src/tools/agent-audit-tool.ts +155 -0
- package/src/tools/agent-autonomy-schedule-tool.ts +238 -0
- package/src/tools/agent-autonomy-tool.ts +140 -0
- package/src/tools/agent-channel-send-tool.ts +24 -2
- package/src/tools/agent-channels-tool.ts +140 -0
- package/src/tools/agent-computer-tool.ts +168 -0
- package/src/tools/agent-context-policy.ts +137 -7
- package/src/tools/agent-context-tool.ts +143 -0
- package/src/tools/agent-delegation-tool.ts +128 -0
- package/src/tools/agent-device-tool.ts +240 -0
- package/src/tools/agent-documents-tool.ts +684 -0
- package/src/tools/agent-execution-tool.ts +230 -0
- package/src/tools/agent-harness-agent-orchestration-policy.ts +75 -0
- package/src/tools/agent-harness-agent-orchestration.ts +791 -0
- package/src/tools/agent-harness-autonomy-intake.ts +785 -0
- package/src/tools/agent-harness-autonomy-live-records.ts +742 -0
- package/src/tools/agent-harness-autonomy-queue-types.ts +88 -0
- package/src/tools/agent-harness-autonomy-queue.ts +571 -0
- package/src/tools/agent-harness-autonomy-watcher-read-models.ts +509 -0
- package/src/tools/agent-harness-background-processes-types.ts +35 -0
- package/src/tools/agent-harness-background-processes.ts +798 -0
- package/src/tools/agent-harness-browser-cockpit-route.ts +373 -0
- package/src/tools/agent-harness-browser-control.ts +346 -0
- package/src/tools/agent-harness-browser-pwa-read-models.ts +622 -0
- package/src/tools/agent-harness-channel-metadata.ts +168 -10
- package/src/tools/agent-harness-cli-command-policy.ts +110 -0
- package/src/tools/agent-harness-command-catalog.ts +4 -2
- package/src/tools/agent-harness-command-runner.ts +42 -0
- package/src/tools/agent-harness-connected-host-status.ts +7 -4
- package/src/tools/agent-harness-delegation-posture.ts +234 -19
- package/src/tools/agent-harness-device-live-read-models.ts +366 -0
- package/src/tools/agent-harness-document-ops-reviewer-readiness.ts +234 -0
- package/src/tools/agent-harness-document-ops-types.ts +72 -0
- package/src/tools/agent-harness-document-ops.ts +671 -0
- package/src/tools/agent-harness-execution-history.ts +489 -0
- package/src/tools/agent-harness-execution-posture.ts +385 -0
- package/src/tools/agent-harness-file-recovery.ts +135 -0
- package/src/tools/agent-harness-interactive-runtime-records.ts +421 -0
- package/src/tools/agent-harness-keybinding-metadata.ts +16 -12
- package/src/tools/agent-harness-learning-curator-common.ts +102 -0
- package/src/tools/agent-harness-learning-curator-consolidation.ts +295 -0
- package/src/tools/agent-harness-learning-curator-proposals.ts +606 -0
- package/src/tools/agent-harness-learning-curator-types.ts +151 -0
- package/src/tools/agent-harness-learning-curator.ts +417 -0
- package/src/tools/agent-harness-local-model-benchmarks.ts +269 -0
- package/src/tools/agent-harness-local-model-cookbook.ts +238 -0
- package/src/tools/agent-harness-local-model-endpoints.ts +788 -0
- package/src/tools/agent-harness-local-model-smoke.ts +277 -0
- package/src/tools/agent-harness-local-model-url.ts +78 -0
- package/src/tools/agent-harness-media-posture.ts +223 -2
- package/src/tools/agent-harness-memory-external-providers.ts +796 -0
- package/src/tools/agent-harness-memory-posture.ts +672 -0
- package/src/tools/agent-harness-memory-provider-certification.ts +219 -0
- package/src/tools/agent-harness-memory-refinement.ts +340 -0
- package/src/tools/agent-harness-metadata.ts +100 -168
- package/src/tools/agent-harness-mode-catalog.ts +86 -33
- package/src/tools/agent-harness-model-catalog.ts +162 -0
- package/src/tools/agent-harness-model-provider-health.ts +283 -0
- package/src/tools/agent-harness-model-readiness.ts +432 -0
- package/src/tools/agent-harness-model-routing-types.ts +327 -0
- package/src/tools/agent-harness-model-routing-utils.ts +30 -0
- package/src/tools/agent-harness-model-routing.ts +165 -193
- package/src/tools/agent-harness-operator-methods.ts +115 -133
- package/src/tools/agent-harness-pairing-posture.ts +452 -18
- package/src/tools/agent-harness-personal-ops-certification.ts +116 -0
- package/src/tools/agent-harness-personal-ops-discovery.ts +533 -0
- package/src/tools/agent-harness-personal-ops-intake.ts +385 -0
- package/src/tools/agent-harness-personal-ops-lanes.ts +270 -0
- package/src/tools/agent-harness-personal-ops-operations.ts +225 -0
- package/src/tools/agent-harness-personal-ops-provider-records.ts +358 -0
- package/src/tools/agent-harness-personal-ops-provider-task-records.ts +321 -0
- package/src/tools/agent-harness-personal-ops-records.ts +684 -0
- package/src/tools/agent-harness-personal-ops-runner.ts +637 -0
- package/src/tools/agent-harness-personal-ops-types.ts +240 -0
- package/src/tools/agent-harness-personal-ops.ts +613 -0
- package/src/tools/agent-harness-project-context.ts +144 -0
- package/src/tools/agent-harness-prompt-context.ts +589 -0
- package/src/tools/agent-harness-provider-account-metadata.ts +2 -2
- package/src/tools/agent-harness-release-evidence.ts +9 -7
- package/src/tools/agent-harness-release-readiness.ts +9 -7
- package/src/tools/agent-harness-remote-read-models.ts +541 -0
- package/src/tools/agent-harness-research-briefing.ts +446 -0
- package/src/tools/agent-harness-research-live-read-models.ts +500 -0
- package/src/tools/agent-harness-research-queue.ts +250 -0
- package/src/tools/agent-harness-research-runs.ts +307 -0
- package/src/tools/agent-harness-research-workflow.ts +395 -0
- package/src/tools/agent-harness-security-posture.ts +2 -2
- package/src/tools/agent-harness-service-posture.ts +9 -9
- package/src/tools/agent-harness-session-metadata.ts +3 -3
- package/src/tools/agent-harness-setup-connected-host.ts +501 -0
- package/src/tools/agent-harness-setup-describe.ts +557 -0
- package/src/tools/agent-harness-setup-handoffs.ts +502 -0
- package/src/tools/agent-harness-setup-model-helpers.ts +102 -0
- package/src/tools/agent-harness-setup-plan.ts +253 -0
- package/src/tools/agent-harness-setup-posture-types.ts +218 -0
- package/src/tools/agent-harness-setup-posture-utils.ts +173 -0
- package/src/tools/agent-harness-setup-posture.ts +449 -221
- package/src/tools/agent-harness-setup-smoke.ts +533 -0
- package/src/tools/agent-harness-sudo-posture.ts +114 -0
- package/src/tools/agent-harness-tool-schema.ts +142 -7
- package/src/tools/agent-harness-tool-types.ts +83 -0
- package/src/tools/agent-harness-tool-utils.ts +43 -0
- package/src/tools/agent-harness-tool.ts +319 -370
- package/src/tools/agent-harness-ui-surface-metadata.ts +76 -69
- package/src/tools/agent-harness-ui-surface-types.ts +46 -0
- package/src/tools/agent-harness-vibe-health.ts +105 -0
- package/src/tools/agent-harness-workspace-action-runner.ts +149 -0
- package/src/tools/agent-harness-workspace-actions.ts +114 -8
- package/src/tools/agent-harness-workspace-editor-execution.ts +214 -0
- package/src/tools/agent-harness-workspace-editor-runner.ts +755 -0
- package/src/tools/agent-host-tool.ts +159 -0
- package/src/tools/agent-knowledge-ingest-tool.ts +34 -1
- package/src/tools/agent-learning-consolidation-core.ts +327 -0
- package/src/tools/agent-learning-consolidation-tool.ts +758 -0
- package/src/tools/agent-memory-tool.ts +253 -0
- package/src/tools/agent-model-compare-export.ts +315 -0
- package/src/tools/agent-model-compare-handoff.ts +592 -0
- package/src/tools/agent-model-compare-judgment.ts +633 -0
- package/src/tools/agent-model-compare-run.ts +735 -0
- package/src/tools/agent-model-compare-tool.ts +698 -0
- package/src/tools/agent-model-compare-types.ts +191 -0
- package/src/tools/agent-model-compare-utils.ts +93 -0
- package/src/tools/agent-models-tool.ts +208 -0
- package/src/tools/agent-operator-action-tool.ts +1 -1
- package/src/tools/agent-operator-method-tool.ts +643 -0
- package/src/tools/agent-personal-ops-tool.ts +197 -0
- package/src/tools/agent-policy-explanation.ts +415 -0
- package/src/tools/agent-research-report-tool.ts +608 -0
- package/src/tools/agent-research-runner.ts +367 -0
- package/src/tools/agent-research-runs-tool.ts +434 -0
- package/src/tools/agent-research-sources-tool.ts +443 -0
- package/src/tools/agent-research-tool.ts +515 -0
- package/src/tools/agent-review-packet-presets-core.ts +757 -0
- package/src/tools/agent-review-packet-presets-tool.ts +466 -0
- package/src/tools/agent-review-packet-share-tool.ts +305 -0
- package/src/tools/agent-route-planner-candidates-setup.ts +411 -0
- package/src/tools/agent-route-planner-candidates-surfaces.ts +432 -0
- package/src/tools/agent-route-planner-candidates-work.ts +251 -0
- package/src/tools/agent-route-planner-helpers.ts +667 -0
- package/src/tools/agent-route-planner.ts +185 -0
- package/src/tools/agent-route-tool.ts +105 -0
- package/src/tools/agent-schedule-edit-tool.ts +210 -0
- package/src/tools/agent-schedule-tool.ts +282 -0
- package/src/tools/agent-security-tool.ts +145 -0
- package/src/tools/agent-sessions-tool.ts +122 -0
- package/src/tools/agent-settings-import-tool.ts +104 -0
- package/src/tools/agent-settings-tool.ts +176 -0
- package/src/tools/agent-setup-tool.ts +226 -0
- package/src/tools/agent-support-tool.ts +122 -0
- package/src/tools/agent-terminal-process-tools.ts +167 -0
- package/src/tools/agent-tool-policy-guard-types.ts +77 -0
- package/src/tools/agent-tool-policy-guard.ts +106 -85
- package/src/tools/agent-vibe-tool.ts +297 -0
- package/src/tools/agent-work-plan-tool.ts +265 -6
- package/src/tools/agent-workspace-tool.ts +305 -0
- package/src/tools/artifact-archive.ts +169 -0
- package/src/tools/tool-definition-compaction.ts +36 -0
- package/src/version.ts +1 -1
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
import type { CommandContext } from '../input/command-registry.ts';
|
|
2
|
+
import {
|
|
3
|
+
AgentResearchRunRegistry,
|
|
4
|
+
researchRunLogTail,
|
|
5
|
+
researchRunReportLine,
|
|
6
|
+
type AgentResearchRunRecord,
|
|
7
|
+
} from '../agent/research-run-registry.ts';
|
|
8
|
+
import {
|
|
9
|
+
AgentResearchSourceRegistry,
|
|
10
|
+
researchSourceReportLine,
|
|
11
|
+
type AgentResearchSourceRecord,
|
|
12
|
+
} from '../agent/research-source-registry.ts';
|
|
13
|
+
import { browserControlPosture } from './agent-harness-browser-control.ts';
|
|
14
|
+
import {
|
|
15
|
+
isCertifiedResearchLiveRecord,
|
|
16
|
+
researchLiveReadModelSnapshot,
|
|
17
|
+
type ResearchBrowserRunnerRecord,
|
|
18
|
+
type ResearchVisualReportRecord,
|
|
19
|
+
} from './agent-harness-research-live-read-models.ts';
|
|
20
|
+
import { previewHarnessText } from './agent-harness-text.ts';
|
|
21
|
+
|
|
22
|
+
interface AgentHarnessResearchWorkflowArgs {
|
|
23
|
+
readonly query?: unknown;
|
|
24
|
+
readonly target?: unknown;
|
|
25
|
+
readonly runId?: unknown;
|
|
26
|
+
readonly includeParameters?: unknown;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function readString(value: unknown): string {
|
|
30
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function quote(value: string): string {
|
|
34
|
+
return JSON.stringify(value);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function fallbackTitle(question: string): string {
|
|
38
|
+
const cleaned = question.trim().replace(/\s+/g, ' ');
|
|
39
|
+
if (!cleaned) return 'Deep research run';
|
|
40
|
+
return cleaned.length <= 72 ? cleaned : `${cleaned.slice(0, 71).trimEnd()}...`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function runSearchText(run: AgentResearchRunRecord): string {
|
|
44
|
+
return [
|
|
45
|
+
run.id,
|
|
46
|
+
run.title,
|
|
47
|
+
run.question,
|
|
48
|
+
run.goal,
|
|
49
|
+
run.status,
|
|
50
|
+
run.phase,
|
|
51
|
+
run.note ?? '',
|
|
52
|
+
run.error ?? '',
|
|
53
|
+
run.reportArtifactId ?? '',
|
|
54
|
+
...run.plan,
|
|
55
|
+
...run.nextSteps,
|
|
56
|
+
...run.sourceIds,
|
|
57
|
+
].join('\n').toLowerCase();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function sourceSearchText(source: AgentResearchSourceRecord): string {
|
|
61
|
+
return [
|
|
62
|
+
source.id,
|
|
63
|
+
source.question,
|
|
64
|
+
source.title,
|
|
65
|
+
source.url ?? '',
|
|
66
|
+
source.publisher ?? '',
|
|
67
|
+
source.summary,
|
|
68
|
+
source.evidence ?? '',
|
|
69
|
+
source.credibility,
|
|
70
|
+
source.status,
|
|
71
|
+
source.note ?? '',
|
|
72
|
+
...source.tags,
|
|
73
|
+
].join('\n').toLowerCase();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function resolveRun(runs: readonly AgentResearchRunRecord[], input: string): AgentResearchRunRecord | null {
|
|
77
|
+
const normalized = input.toLowerCase();
|
|
78
|
+
if (!normalized) {
|
|
79
|
+
return runs.find((run) => run.status === 'running' || run.status === 'blocked' || run.status === 'paused' || run.status === 'planned') ?? null;
|
|
80
|
+
}
|
|
81
|
+
return runs.find((run) => run.id.toLowerCase() === normalized || run.title.toLowerCase() === normalized)
|
|
82
|
+
?? runs.find((run) => runSearchText(run).includes(normalized))
|
|
83
|
+
?? null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function relatedSources(
|
|
87
|
+
sources: readonly AgentResearchSourceRecord[],
|
|
88
|
+
run: AgentResearchRunRecord | null,
|
|
89
|
+
question: string,
|
|
90
|
+
): readonly AgentResearchSourceRecord[] {
|
|
91
|
+
const sourceIds = new Set(run?.sourceIds.map((id) => id.toLowerCase()) ?? []);
|
|
92
|
+
const query = question.toLowerCase();
|
|
93
|
+
return sources.filter((source) => (
|
|
94
|
+
sourceIds.has(source.id.toLowerCase())
|
|
95
|
+
|| (!!query && sourceSearchText(source).includes(query))
|
|
96
|
+
|| (!!run && source.question.toLowerCase() === run.question.toLowerCase())
|
|
97
|
+
));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function liveRunnerSearchText(record: ResearchBrowserRunnerRecord): string {
|
|
101
|
+
return [
|
|
102
|
+
record.id,
|
|
103
|
+
record.runId ?? '',
|
|
104
|
+
record.status,
|
|
105
|
+
record.phase ?? '',
|
|
106
|
+
record.question ?? '',
|
|
107
|
+
record.currentUrl ?? '',
|
|
108
|
+
record.reportDraftId ?? '',
|
|
109
|
+
record.reportArtifactId ?? '',
|
|
110
|
+
...record.sourceReceiptIds,
|
|
111
|
+
].join('\n').toLowerCase();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function matchingLiveRunners(
|
|
115
|
+
records: readonly ResearchBrowserRunnerRecord[],
|
|
116
|
+
run: AgentResearchRunRecord | null,
|
|
117
|
+
question: string,
|
|
118
|
+
): readonly ResearchBrowserRunnerRecord[] {
|
|
119
|
+
const normalized = question.toLowerCase();
|
|
120
|
+
return records.filter((record) => (
|
|
121
|
+
(!!run && record.runId === run.id)
|
|
122
|
+
|| (!!run?.reportArtifactId && record.reportArtifactId === run.reportArtifactId)
|
|
123
|
+
|| (!!normalized && liveRunnerSearchText(record).includes(normalized))
|
|
124
|
+
));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function matchingVisualReports(
|
|
128
|
+
records: readonly ResearchVisualReportRecord[],
|
|
129
|
+
run: AgentResearchRunRecord | null,
|
|
130
|
+
): readonly ResearchVisualReportRecord[] {
|
|
131
|
+
if (!run?.reportArtifactId) return records;
|
|
132
|
+
return records.filter((record) => record.reportArtifactId === run.reportArtifactId);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function runSummary(run: AgentResearchRunRecord, includeParameters: boolean): Record<string, unknown> {
|
|
136
|
+
return {
|
|
137
|
+
runId: run.id,
|
|
138
|
+
title: run.title,
|
|
139
|
+
status: run.status,
|
|
140
|
+
phase: run.phase,
|
|
141
|
+
progress: run.progress,
|
|
142
|
+
sources: run.sourceIds.length,
|
|
143
|
+
inspectRoute: `research action:"run" runId:${quote(run.id)}`,
|
|
144
|
+
checkpointRoute: `research action:"checkpoint" id:${quote(run.id)} phase:"reading" progress:${Math.max(run.progress, 25)} note:"..." sourceIds:["..."] confirm:true explicitUserRequest:"..."`,
|
|
145
|
+
cancelRoute: `research action:"cancel" id:${quote(run.id)} note:"..." confirm:true explicitUserRequest:"..."`,
|
|
146
|
+
completeRoute: `research action:"complete" id:${quote(run.id)} reportArtifactId:"..." confirm:true explicitUserRequest:"..."`,
|
|
147
|
+
runLine: researchRunReportLine(run),
|
|
148
|
+
...(includeParameters ? {
|
|
149
|
+
question: run.question,
|
|
150
|
+
goal: run.goal,
|
|
151
|
+
plan: run.plan,
|
|
152
|
+
nextSteps: run.nextSteps,
|
|
153
|
+
sourceIds: run.sourceIds,
|
|
154
|
+
logTail: researchRunLogTail(run, 5),
|
|
155
|
+
} : {}),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function sourceSummary(source: AgentResearchSourceRecord): Record<string, unknown> {
|
|
160
|
+
return {
|
|
161
|
+
sourceId: source.id,
|
|
162
|
+
title: source.title,
|
|
163
|
+
status: source.status,
|
|
164
|
+
credibility: source.credibility,
|
|
165
|
+
score: source.score,
|
|
166
|
+
inspectRoute: `research action:"source" sourceId:${quote(source.id)}`,
|
|
167
|
+
reviewRoute: `research action:"review_source" id:${quote(source.id)} credibility:"high|medium|mixed|low" score:80 note:"..." confirm:true explicitUserRequest:"..."`,
|
|
168
|
+
reportLine: researchSourceReportLine(source),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function browserRunnerContract(
|
|
173
|
+
browser: ReturnType<typeof browserControlPosture>,
|
|
174
|
+
liveRecords: readonly ResearchBrowserRunnerRecord[],
|
|
175
|
+
): Record<string, unknown> {
|
|
176
|
+
const certified = liveRecords.filter(isCertifiedResearchLiveRecord);
|
|
177
|
+
return {
|
|
178
|
+
status: certified.length > 0 ? 'certified-live-runner' : browser.configured ? 'ready-with-confirmation' : 'setup-contract-needed',
|
|
179
|
+
userOutcome: 'Run browser-backed research only when live browser state, authenticated pages, or interactive source discovery are necessary.',
|
|
180
|
+
currentState: certified.length > 0
|
|
181
|
+
? 'The SDK/daemon published certified browser-backed research run records with visible controls, source/page receipts, bounded logs, and exact inspect routes.'
|
|
182
|
+
: browser.configured
|
|
183
|
+
? 'A reviewed browser/desktop route is configured; use it only after the user accepts the browser-backed research scope.'
|
|
184
|
+
: 'No reviewed browser-backed research runner is configured, so public web_search/fetch stays the current safe route.',
|
|
185
|
+
requiredContracts: [
|
|
186
|
+
'Certified schema/version/publication/publisher/provenance/freshness-cursor/receipt metadata for every live browser-backed research run.',
|
|
187
|
+
'Trusted browser or desktop-control route with setup posture status ready.',
|
|
188
|
+
'Visible run id, phase/progress, current URL/task scope, checkpoint route, and pause/resume/cancel controls for every browser-backed research run.',
|
|
189
|
+
'Source-capture receipt for each accepted source with URL/title/publisher/summary/provenance.',
|
|
190
|
+
'Bounded log/output records suitable for the autonomy queue and research run log tail.',
|
|
191
|
+
'Report draft/save handoff that preserves reviewed source ids and citation coverage requirements.',
|
|
192
|
+
'No credential or page-content leakage outside bounded redacted source summaries.',
|
|
193
|
+
],
|
|
194
|
+
setupRoutes: [
|
|
195
|
+
...certified.slice(0, 3).map((record) => record.modelRoute),
|
|
196
|
+
'computer action:"control" includeParameters:true',
|
|
197
|
+
'computer action:"setup" includeParameters:true',
|
|
198
|
+
browser.setupRoute,
|
|
199
|
+
...browser.fallbackRoutes,
|
|
200
|
+
],
|
|
201
|
+
recommendedRoute: certified[0]?.modelRoute ?? browser.recommendedRoute,
|
|
202
|
+
fallbackRoutes: browser.fallbackRoutes,
|
|
203
|
+
liveRecords: liveRecords.slice(0, 5),
|
|
204
|
+
certifiedLiveRecords: certified.slice(0, 5),
|
|
205
|
+
policy: 'Browser-backed research is not started by this workflow plan. Use certified live SDK/daemon records only as read-only evidence, and use returned confirmed routes before any browser/PWA, source-save, report-save, or Knowledge-ingest effect.',
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function visualReportContract(options: {
|
|
210
|
+
readonly reviewedSources: number;
|
|
211
|
+
readonly reportRoute: string;
|
|
212
|
+
readonly bundleRoute: string;
|
|
213
|
+
readonly question: string;
|
|
214
|
+
readonly liveRecords: readonly ResearchVisualReportRecord[];
|
|
215
|
+
}): Record<string, unknown> {
|
|
216
|
+
const certified = options.liveRecords.filter(isCertifiedResearchLiveRecord);
|
|
217
|
+
return {
|
|
218
|
+
status: certified.length > 0 ? 'certified-live-renderer' : options.reviewedSources > 0 ? 'visual-report-packet-ready' : 'waiting-for-reviewed-sources',
|
|
219
|
+
userOutcome: 'Produce an inspectable research report with source-backed findings, citations, caveats, and handoff/export routes.',
|
|
220
|
+
currentRoute: certified[0]?.modelRoute ?? (options.reviewedSources > 0 ? options.reportRoute : options.bundleRoute),
|
|
221
|
+
currentState: certified.length > 0
|
|
222
|
+
? 'The SDK/daemon published a certified browser/PWA visual report render over the same reviewed report artifact, with source-map and citation-coverage evidence.'
|
|
223
|
+
: options.reviewedSources > 0
|
|
224
|
+
? 'Agent can save a citation-covered markdown report artifact with a visual report packet now; browser/PWA rendering remains an optional view over the same artifact.'
|
|
225
|
+
: 'Review at least one source before saving a report or visual packet.',
|
|
226
|
+
requiredSections: [
|
|
227
|
+
'at-a-glance summary',
|
|
228
|
+
'evidence matrix',
|
|
229
|
+
'findings board',
|
|
230
|
+
'dated source or comparison view',
|
|
231
|
+
'source map',
|
|
232
|
+
'citation coverage',
|
|
233
|
+
'confidence and caveats',
|
|
234
|
+
'open questions',
|
|
235
|
+
'next actions',
|
|
236
|
+
'handoff checklist',
|
|
237
|
+
],
|
|
238
|
+
acceptanceCriteria: [
|
|
239
|
+
'Every material claim maps to a reviewed source line or an explicit caveat.',
|
|
240
|
+
'The report artifact includes citation coverage metadata and repair hints.',
|
|
241
|
+
'The visual report packet is generated by research action:"report" visualReport:true over the same saved report/source artifacts, not a separate uncited answer.',
|
|
242
|
+
'Connected-host visual rendering counts only when the SDK/daemon publishes certified render route, source-map, citation coverage, section, publication, and receipt evidence.',
|
|
243
|
+
'Knowledge ingest remains a separate confirmed action after report review.',
|
|
244
|
+
],
|
|
245
|
+
routes: {
|
|
246
|
+
reviewedSourceBundle: options.bundleRoute,
|
|
247
|
+
saveVisualReport: options.reportRoute,
|
|
248
|
+
saveMarkdownReport: options.reportRoute,
|
|
249
|
+
...(certified[0] ? { openRenderedReport: certified[0].renderRoute } : {}),
|
|
250
|
+
reviewPacketWizard: 'agent_harness mode:"document_ops_lane" laneId:"review_packet_wizard"',
|
|
251
|
+
archiveArtifacts: 'agent_artifacts mode:"archive" artifactIds:["..."] destinationPath:"exports/research-report.zip" confirm:true explicitUserRequest:"..."',
|
|
252
|
+
},
|
|
253
|
+
fallbackRoutes: [
|
|
254
|
+
options.bundleRoute,
|
|
255
|
+
options.reportRoute,
|
|
256
|
+
'agent_harness mode:"document_ops_lane" laneId:"review_packet_wizard"',
|
|
257
|
+
'agent_artifacts mode:"archive" artifactIds:["..."] destinationPath:"exports/research-report.zip" confirm:true explicitUserRequest:"..."',
|
|
258
|
+
],
|
|
259
|
+
liveRecords: options.liveRecords.slice(0, 5),
|
|
260
|
+
certifiedRendererRecords: certified.slice(0, 5),
|
|
261
|
+
policy: `This contract is read-only planning for ${previewHarnessText(options.question, 96)}; saving reports, exports, packages, shares, or Knowledge ingest stay on separate confirmed routes.`,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export function researchWorkflowSummary(context: CommandContext, args: AgentHarnessResearchWorkflowArgs): Record<string, unknown> {
|
|
266
|
+
const includeParameters = args.includeParameters === true;
|
|
267
|
+
const lookup = readString(args.runId) || readString(args.target) || readString(args.query);
|
|
268
|
+
const shellPaths = context.workspace?.shellPaths;
|
|
269
|
+
const runs = shellPaths ? AgentResearchRunRegistry.fromShellPaths(shellPaths).list() : [];
|
|
270
|
+
const sources = shellPaths ? AgentResearchSourceRegistry.fromShellPaths(shellPaths).list() : [];
|
|
271
|
+
const run = resolveRun(runs, lookup);
|
|
272
|
+
const question = run?.question || lookup || 'Research question goes here';
|
|
273
|
+
const title = run?.title || fallbackTitle(question);
|
|
274
|
+
const matchedSources = relatedSources(sources, run, question);
|
|
275
|
+
const reviewedSources = matchedSources.filter((source) => source.status === 'reviewed' || source.status === 'used');
|
|
276
|
+
const candidateSources = matchedSources.filter((source) => source.status === 'candidate');
|
|
277
|
+
const browser = browserControlPosture(context);
|
|
278
|
+
const liveResearch = researchLiveReadModelSnapshot(context);
|
|
279
|
+
const liveRunnerRecords = matchingLiveRunners(liveResearch.browserRunnerRecords, run, question);
|
|
280
|
+
const certifiedRunnerRecords = liveRunnerRecords.filter(isCertifiedResearchLiveRecord);
|
|
281
|
+
const liveVisualRecords = matchingVisualReports(liveResearch.visualReportRecords, run);
|
|
282
|
+
const certifiedVisualRecords = liveVisualRecords.filter(isCertifiedResearchLiveRecord);
|
|
283
|
+
const status = !shellPaths
|
|
284
|
+
? 'unavailable'
|
|
285
|
+
: run?.status === 'completed'
|
|
286
|
+
? 'report-saved'
|
|
287
|
+
: reviewedSources.length > 0
|
|
288
|
+
? 'ready-to-report'
|
|
289
|
+
: candidateSources.length > 0
|
|
290
|
+
? 'needs-source-review'
|
|
291
|
+
: run
|
|
292
|
+
? 'needs-source-collection'
|
|
293
|
+
: 'needs-visible-run';
|
|
294
|
+
|
|
295
|
+
const createRoute = `research action:"create_run" title:${quote(title)} question:${quote(question)} plan:["Search bounded public web sources","Capture candidate sources","Review credibility and citation value","Save sourced report artifact"] nextSteps:["Run bounded web_search/fetch and capture source candidates"] confirm:true explicitUserRequest:"..."`;
|
|
296
|
+
const sourceQuery = question;
|
|
297
|
+
const reportTitle = run ? `${run.title} report` : `${title} report`;
|
|
298
|
+
const reportRoute = `research action:"report" title:${quote(reportTitle)} question:${quote(question)} sources:[...] visualReport:true requireCitationCoverage:true confirm:true explicitUserRequest:"..."`;
|
|
299
|
+
const bundleRoute = `research action:"bundle" query:${quote(sourceQuery)} includeReportLines:true`;
|
|
300
|
+
|
|
301
|
+
return {
|
|
302
|
+
status,
|
|
303
|
+
question: previewHarnessText(question, includeParameters ? 220 : 120),
|
|
304
|
+
...(run ? { run: runSummary(run, includeParameters) } : {}),
|
|
305
|
+
sourcePosture: {
|
|
306
|
+
matched: matchedSources.length,
|
|
307
|
+
candidates: candidateSources.length,
|
|
308
|
+
reviewed: reviewedSources.length,
|
|
309
|
+
used: matchedSources.filter((source) => source.status === 'used').length,
|
|
310
|
+
queueRoute: `research action:"sources" query:${quote(sourceQuery)}`,
|
|
311
|
+
bundleRoute,
|
|
312
|
+
captureRoute: `research action:"add_source" question:${quote(question)} title:"..." url:"..." summary:"..." credibility:"unreviewed" tags:["research"] confirm:true explicitUserRequest:"..."`,
|
|
313
|
+
reviewRoute: 'research action:"review_source" id:"..." credibility:"high|medium|mixed|low" score:80 note:"..." confirm:true explicitUserRequest:"..."',
|
|
314
|
+
reportReadySources: reviewedSources.slice(0, includeParameters ? 8 : 3).map(sourceSummary),
|
|
315
|
+
candidateSources: candidateSources.slice(0, includeParameters ? 8 : 3).map(sourceSummary),
|
|
316
|
+
},
|
|
317
|
+
browserBackedResearch: {
|
|
318
|
+
status: certifiedRunnerRecords.length > 0 ? 'certified-live-runner' : browser.status,
|
|
319
|
+
configured: browser.configured || certifiedRunnerRecords.length > 0,
|
|
320
|
+
recommendedRoute: certifiedRunnerRecords[0]?.modelRoute ?? browser.recommendedRoute,
|
|
321
|
+
fallbackRoutes: browser.fallbackRoutes,
|
|
322
|
+
next: browser.configured
|
|
323
|
+
? 'Use reviewed browser/desktop tooling only when live browser state or authenticated pages are necessary.'
|
|
324
|
+
: certifiedRunnerRecords.length > 0
|
|
325
|
+
? 'Inspect the certified live research runner record, then use confirmed routes for follow-up source, report, or browser effects.'
|
|
326
|
+
: 'Use bounded public web_search/fetch routes now; inspect setup before browser-backed execution.',
|
|
327
|
+
liveRunnerRecords: liveRunnerRecords.slice(0, includeParameters ? 8 : 3),
|
|
328
|
+
certifiedLiveRunnerCount: certifiedRunnerRecords.length,
|
|
329
|
+
},
|
|
330
|
+
browserRunnerContract: browserRunnerContract(browser, liveRunnerRecords),
|
|
331
|
+
visualReportContract: visualReportContract({
|
|
332
|
+
reviewedSources: reviewedSources.length,
|
|
333
|
+
reportRoute,
|
|
334
|
+
bundleRoute,
|
|
335
|
+
question,
|
|
336
|
+
liveRecords: liveVisualRecords,
|
|
337
|
+
}),
|
|
338
|
+
workflow: [
|
|
339
|
+
{
|
|
340
|
+
id: 'visible-run',
|
|
341
|
+
status: run ? 'ready' : 'needed',
|
|
342
|
+
next: run ? 'Use the existing visible run record for checkpoints and cancellation.' : 'Create a visible run before multi-step research so the user can inspect or cancel it.',
|
|
343
|
+
route: run ? `research action:"run" runId:${quote(run.id)}` : createRoute,
|
|
344
|
+
confirmationBoundary: run ? 'Read-only inspection unless checkpoint/cancel/complete route is used.' : 'Creates local visible run state only; no web request, report, Knowledge ingest, or delivery.',
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
id: 'collect-sources',
|
|
348
|
+
status: certifiedRunnerRecords.length > 0 ? 'ready' : reviewedSources.length > 0 || candidateSources.length > 0 ? 'started' : 'needed',
|
|
349
|
+
next: certifiedRunnerRecords.length > 0
|
|
350
|
+
? 'Use the certified live runner record to inspect source receipts, then review captured sources before report generation.'
|
|
351
|
+
: browser.configured
|
|
352
|
+
? 'Collect bounded sources, preferring primary/current sources, then capture each useful source in the queue.'
|
|
353
|
+
: 'Use web_search/fetch for public sources and capture each useful source in the queue.',
|
|
354
|
+
route: certifiedRunnerRecords[0]?.modelRoute ?? 'web_search query:"..." verbosity:"evidence" maxResults:10 evidenceTopN:3 or fetch urls:[...]',
|
|
355
|
+
captureRoute: `research action:"add_source" question:${quote(question)} title:"..." url:"..." summary:"..." credibility:"unreviewed" tags:["research"] confirm:true explicitUserRequest:"..."`,
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
id: 'review-sources',
|
|
359
|
+
status: candidateSources.length > 0 ? 'needed' : reviewedSources.length > 0 ? 'ready' : 'waiting',
|
|
360
|
+
next: candidateSources.length > 0 ? 'Review candidate source credibility, score, and citation value.' : 'Wait until sources are captured, then review them before report generation.',
|
|
361
|
+
route: `research action:"sources" query:${quote(sourceQuery)} includeParameters:true`,
|
|
362
|
+
reviewRoute: 'research action:"review_source" id:"..." credibility:"high|medium|mixed|low" score:80 note:"..." confirm:true explicitUserRequest:"..."',
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
id: 'save-report',
|
|
366
|
+
status: certifiedVisualRecords.length > 0 || reviewedSources.length > 0 ? 'ready' : 'waiting',
|
|
367
|
+
next: certifiedVisualRecords.length > 0 ? 'Inspect the certified browser/PWA report render, then export, archive, or promote only after review.' : reviewedSources.length > 0 ? 'Use the reviewed-source bundle and save a citation-covered visual report packet artifact.' : 'Save the report only after reviewed or used sources exist.',
|
|
368
|
+
route: certifiedVisualRecords[0]?.modelRoute ?? (reviewedSources.length > 0 ? bundleRoute : `research action:"sources" query:${quote(sourceQuery)}`),
|
|
369
|
+
reportRoute,
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
id: 'promote-knowledge',
|
|
373
|
+
status: run?.reportArtifactId ? 'ready' : 'waiting',
|
|
374
|
+
next: run?.reportArtifactId ? 'Promote the reviewed report artifact only if the user wants it durable in Agent Knowledge.' : 'Wait for a saved report artifact before Knowledge promotion.',
|
|
375
|
+
route: run?.reportArtifactId
|
|
376
|
+
? `agent_knowledge_ingest sourceKind:"artifact" artifactId:${quote(run.reportArtifactId)} confirm:true explicitUserRequest:"..."`
|
|
377
|
+
: 'agent_knowledge_ingest sourceKind:"artifact" artifactId:"..." confirm:true explicitUserRequest:"..."',
|
|
378
|
+
},
|
|
379
|
+
],
|
|
380
|
+
routes: {
|
|
381
|
+
createRun: createRoute,
|
|
382
|
+
inspectRuns: 'research action:"runs"',
|
|
383
|
+
inspectSources: `research action:"sources" query:${quote(sourceQuery)}`,
|
|
384
|
+
bundleSources: bundleRoute,
|
|
385
|
+
saveReport: reportRoute,
|
|
386
|
+
...(certifiedRunnerRecords[0] ? { liveRunner: certifiedRunnerRecords[0].modelRoute } : {}),
|
|
387
|
+
...(certifiedVisualRecords[0] ? { liveVisualReport: certifiedVisualRecords[0].modelRoute } : {}),
|
|
388
|
+
...(run ? {
|
|
389
|
+
checkpointRun: `research action:"checkpoint" id:${quote(run.id)} phase:"reading" progress:${Math.max(run.progress, 25)} note:"..." sourceIds:["..."] confirm:true explicitUserRequest:"..."`,
|
|
390
|
+
completeRun: `research action:"complete" id:${quote(run.id)} reportArtifactId:"..." confirm:true explicitUserRequest:"..."`,
|
|
391
|
+
} : {}),
|
|
392
|
+
},
|
|
393
|
+
policy: 'This is a read-only workflow plan. It does not search the web, mutate run/source state, save a report, ingest Knowledge, or send external messages. Use the returned confirmed routes for each separate effect.',
|
|
394
|
+
};
|
|
395
|
+
}
|
|
@@ -159,11 +159,11 @@ function describeFindingCandidate(finding: SecurityFinding): Record<string, unkn
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
function securityFindingModelRoute(): string {
|
|
162
|
-
return '
|
|
162
|
+
return 'security action:"finding" or workspace action:"run_command"';
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
function supportBundleModelRoute(): string {
|
|
166
|
-
return '
|
|
166
|
+
return 'support action:"bundle" or workspace action:"run"';
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
function describeFinding(finding: SecurityFinding, includeParameters: boolean, lookup?: Record<string, unknown>): Record<string, unknown> {
|
|
@@ -83,8 +83,8 @@ function describeEndpoint(
|
|
|
83
83
|
policy: {
|
|
84
84
|
effect: 'read-only',
|
|
85
85
|
modelOperation: 'Inspect endpoint binding, network-facing posture, and optional reachability only.',
|
|
86
|
-
lifecycle: '
|
|
87
|
-
settings: 'Use
|
|
86
|
+
lifecycle: 'Use setup or confirmed GoodVibes daemon operator methods for service lifecycle/listener changes.',
|
|
87
|
+
settings: 'Use settings action:"list|get" for endpoint settings; raw danger toggles stay protected.',
|
|
88
88
|
},
|
|
89
89
|
} : {}),
|
|
90
90
|
};
|
|
@@ -101,7 +101,7 @@ function describeEndpointCandidate(endpoint: CliServiceEndpointPosture): Record<
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
function serviceEndpointModelRoute(): string {
|
|
104
|
-
return '
|
|
104
|
+
return 'host action:"service" or settings action:"get"';
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
function endpointLookupFromArgs(args: AgentHarnessServicePostureArgs): { readonly source: ServiceEndpointLookupSource; readonly input: string } | null {
|
|
@@ -174,7 +174,7 @@ export function servicePostureCatalogStatus(): Record<string, unknown> {
|
|
|
174
174
|
modes: ['service_posture', 'service_endpoint'],
|
|
175
175
|
endpointIds: SERVICE_ENDPOINT_IDS,
|
|
176
176
|
readOnly: true,
|
|
177
|
-
lifecycle: '
|
|
177
|
+
lifecycle: 'Service posture is diagnostic; lifecycle/listener changes require setup or confirmed daemon operator methods.',
|
|
178
178
|
};
|
|
179
179
|
}
|
|
180
180
|
|
|
@@ -185,9 +185,9 @@ export async function servicePostureSummary(
|
|
|
185
185
|
const includeDetails = args.includeParameters === true;
|
|
186
186
|
const posture = await buildCliServicePosture(servicePostureRuntime(context), servicePostureOptions(args));
|
|
187
187
|
return {
|
|
188
|
-
ownership: '
|
|
188
|
+
ownership: 'goodvibes-daemon',
|
|
189
189
|
readOnly: true,
|
|
190
|
-
lifecycle: 'GoodVibes Agent reports
|
|
190
|
+
lifecycle: 'GoodVibes Agent reports service posture here. Lifecycle/listener changes require setup or confirmed daemon operator methods.',
|
|
191
191
|
modelRoute: serviceEndpointModelRoute(),
|
|
192
192
|
config: posture.config,
|
|
193
193
|
managed: posture.managed,
|
|
@@ -195,9 +195,9 @@ export async function servicePostureSummary(
|
|
|
195
195
|
log: summarizeLog(posture, includeDetails),
|
|
196
196
|
issues: posture.issues,
|
|
197
197
|
...(includeDetails ? { modelAccess: {
|
|
198
|
-
endpointLookup: 'Use
|
|
199
|
-
settings: 'Use
|
|
200
|
-
liveHostStatus: 'Use
|
|
198
|
+
endpointLookup: 'Use host action:"service" with endpointId, target, or query to inspect one endpoint.',
|
|
199
|
+
settings: 'Use settings action:"list" includeHidden:true for endpoint setting descriptors. Host-owned listener settings remain read-only.',
|
|
200
|
+
liveHostStatus: 'Use host action:"status" for token posture and Agent Knowledge route readiness.',
|
|
201
201
|
} } : {}),
|
|
202
202
|
};
|
|
203
203
|
}
|
|
@@ -95,7 +95,7 @@ function describeSessionCandidate(session: SessionInfoLike, currentSessionId: st
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
function sessionModelRoute(): string {
|
|
98
|
-
return '
|
|
98
|
+
return 'sessions action:"get" or workspace action:"run_command"';
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
function bookmarkModelRoute(): string {
|
|
@@ -132,8 +132,8 @@ function describeSession(
|
|
|
132
132
|
...(options.includeParameters ? {
|
|
133
133
|
filePath: session.filePath,
|
|
134
134
|
modelRoutes: {
|
|
135
|
-
inspectSessions: '
|
|
136
|
-
inspectSession: '
|
|
135
|
+
inspectSessions: 'sessions action:"list"',
|
|
136
|
+
inspectSession: 'sessions action:"get"',
|
|
137
137
|
resumeSession: '/session resume <session-id-or-name>',
|
|
138
138
|
saveSession: '/session save [name]',
|
|
139
139
|
exportSession: '/session export <session-id> markdown',
|