@pellux/goodvibes-agent 1.1.6 → 1.2.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 +176 -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 +132662 -91399
- 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 +56 -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 +114 -45
- package/docs/voice-and-live-tts.md +3 -1
- package/package.json +3 -2
- package/release/release-notes.md +130 -5
- package/release/release-readiness.json +120 -90
- 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 +296 -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-checkpoint.ts +140 -0
- package/src/agent/setup-wizard.ts +447 -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 +262 -30
- package/src/input/agent-workspace-setup-checkpoint-action.ts +127 -0
- package/src/input/agent-workspace-setup-snapshot.ts +198 -0
- package/src/input/agent-workspace-setup.ts +34 -1
- package/src/input/agent-workspace-snapshot.ts +162 -147
- package/src/input/agent-workspace-types.ts +287 -2
- package/src/input/agent-workspace.ts +18 -0
- 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/main.ts +15 -15
- package/src/panels/qr-panel.ts +2 -2
- package/src/renderer/agent-workspace-context-lines.ts +686 -0
- package/src/renderer/agent-workspace.ts +30 -419
- 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 +43 -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 +287 -0
- 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 +267 -10
- 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.ts +703 -0
- package/src/tools/agent-harness-autonomy-intake.ts +785 -0
- package/src/tools/agent-harness-autonomy-live-records.ts +588 -0
- package/src/tools/agent-harness-autonomy-queue-types.ts +88 -0
- package/src/tools/agent-harness-autonomy-queue.ts +560 -0
- package/src/tools/agent-harness-background-processes-types.ts +35 -0
- package/src/tools/agent-harness-background-processes.ts +794 -0
- package/src/tools/agent-harness-browser-cockpit-route.ts +219 -0
- package/src/tools/agent-harness-browser-control.ts +338 -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-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 +382 -0
- package/src/tools/agent-harness-file-recovery.ts +135 -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 +199 -0
- package/src/tools/agent-harness-local-model-cookbook.ts +238 -0
- package/src/tools/agent-harness-local-model-endpoints.ts +673 -0
- package/src/tools/agent-harness-media-posture.ts +208 -2
- package/src/tools/agent-harness-memory-posture.ts +556 -0
- package/src/tools/agent-harness-metadata.ts +100 -168
- package/src/tools/agent-harness-mode-catalog.ts +84 -33
- package/src/tools/agent-harness-model-catalog.ts +162 -0
- package/src/tools/agent-harness-model-provider-health.ts +186 -0
- package/src/tools/agent-harness-model-readiness.ts +406 -0
- package/src/tools/agent-harness-model-routing-types.ts +266 -0
- package/src/tools/agent-harness-model-routing-utils.ts +30 -0
- package/src/tools/agent-harness-model-routing.ts +137 -190
- package/src/tools/agent-harness-operator-methods.ts +115 -133
- package/src/tools/agent-harness-pairing-posture.ts +431 -18
- 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 +204 -0
- package/src/tools/agent-harness-personal-ops-records.ts +732 -0
- package/src/tools/agent-harness-personal-ops-runner.ts +637 -0
- package/src/tools/agent-harness-personal-ops-types.ts +222 -0
- package/src/tools/agent-harness-personal-ops.ts +606 -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-research-briefing.ts +427 -0
- package/src/tools/agent-harness-research-queue.ts +250 -0
- package/src/tools/agent-harness-research-runs.ts +295 -0
- package/src/tools/agent-harness-research-workflow.ts +322 -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 +101 -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 +508 -0
- package/src/tools/agent-harness-sudo-posture.ts +114 -0
- package/src/tools/agent-harness-tool-schema.ts +120 -7
- package/src/tools/agent-harness-tool-types.ts +78 -0
- package/src/tools/agent-harness-tool-utils.ts +43 -0
- package/src/tools/agent-harness-tool.ts +311 -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 +214 -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 +722 -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-runs-tool.ts +434 -0
- package/src/tools/agent-research-sources-tool.ts +443 -0
- package/src/tools/agent-research-tool.ts +687 -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 +110 -89
- 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/tools/tool-execution-safety.ts +41 -0
- package/src/version.ts +1 -1
|
@@ -16,6 +16,8 @@ type MediaProviderResolution =
|
|
|
16
16
|
| { readonly status: 'ambiguous'; readonly input: string; readonly candidates: readonly Record<string, unknown>[] }
|
|
17
17
|
| { readonly status: 'missing_lookup'; readonly usage: string };
|
|
18
18
|
|
|
19
|
+
type VoiceWorkflowStatus = 'ready' | 'attention' | 'setup-needed' | 'not-published';
|
|
20
|
+
|
|
19
21
|
interface RuntimeProviderStatus {
|
|
20
22
|
readonly id: string;
|
|
21
23
|
readonly state: string;
|
|
@@ -23,6 +25,21 @@ interface RuntimeProviderStatus {
|
|
|
23
25
|
readonly detail?: string;
|
|
24
26
|
}
|
|
25
27
|
|
|
28
|
+
interface VoiceInteractionWorkflow {
|
|
29
|
+
readonly id: string;
|
|
30
|
+
readonly label: string;
|
|
31
|
+
readonly status: VoiceWorkflowStatus;
|
|
32
|
+
readonly userOutcome: string;
|
|
33
|
+
readonly summary: string;
|
|
34
|
+
readonly nextStep: string;
|
|
35
|
+
readonly capabilities: readonly string[];
|
|
36
|
+
readonly modelRoute: string;
|
|
37
|
+
readonly userRoute?: string;
|
|
38
|
+
readonly setupRoutes: readonly string[];
|
|
39
|
+
readonly evidence: Record<string, unknown>;
|
|
40
|
+
readonly policy: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
26
43
|
function readString(value: unknown): string {
|
|
27
44
|
return typeof value === 'string' ? value.trim() : '';
|
|
28
45
|
}
|
|
@@ -70,6 +87,184 @@ function providerSearchText(provider: AgentWorkspaceVoiceMediaProviderStatus, ru
|
|
|
70
87
|
].join('\n').toLowerCase();
|
|
71
88
|
}
|
|
72
89
|
|
|
90
|
+
function voiceWorkflowSearchText(workflow: VoiceInteractionWorkflow): string {
|
|
91
|
+
return [
|
|
92
|
+
workflow.id,
|
|
93
|
+
workflow.label,
|
|
94
|
+
workflow.status,
|
|
95
|
+
workflow.userOutcome,
|
|
96
|
+
workflow.summary,
|
|
97
|
+
workflow.nextStep,
|
|
98
|
+
workflow.modelRoute,
|
|
99
|
+
workflow.userRoute ?? '',
|
|
100
|
+
...workflow.capabilities,
|
|
101
|
+
].join('\n').toLowerCase();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function voiceWorkflowMatches(workflow: VoiceInteractionWorkflow, query: string): boolean {
|
|
105
|
+
if (!query) return true;
|
|
106
|
+
const text = voiceWorkflowSearchText(workflow);
|
|
107
|
+
if (text.includes(query)) return true;
|
|
108
|
+
const tokens = query.split(/\s+/).map((token) => token.trim()).filter(Boolean);
|
|
109
|
+
return tokens.length > 0 && tokens.every((token) => text.includes(token));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function voiceWorkflowSummary(workflows: readonly VoiceInteractionWorkflow[]): Record<string, unknown> {
|
|
113
|
+
return {
|
|
114
|
+
total: workflows.length,
|
|
115
|
+
ready: workflows.filter((workflow) => workflow.status === 'ready').length,
|
|
116
|
+
attention: workflows.filter((workflow) => workflow.status === 'attention').length,
|
|
117
|
+
setupNeeded: workflows.filter((workflow) => workflow.status === 'setup-needed').length,
|
|
118
|
+
notPublished: workflows.filter((workflow) => workflow.status === 'not-published').length,
|
|
119
|
+
primaryNextStep: workflows.find((workflow) => workflow.status !== 'ready')?.nextStep
|
|
120
|
+
?? 'Voice workflows are ready; keep effects on explicit user-visible routes.',
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function hasReadyVoiceFeature(readiness: ReturnType<typeof buildReadiness>, featureIds: readonly string[]): boolean {
|
|
125
|
+
return readiness.voiceProviders.some((provider) => (
|
|
126
|
+
provider.setupState === 'ready'
|
|
127
|
+
&& featureIds.some((feature) => provider.features.includes(feature))
|
|
128
|
+
));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function hasRegisteredVoiceFeature(readiness: ReturnType<typeof buildReadiness>, featureIds: readonly string[]): boolean {
|
|
132
|
+
return readiness.voiceProviders.some((provider) => featureIds.some((feature) => provider.features.includes(feature)));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function buildVoiceInteractionWorkflows(
|
|
136
|
+
context: CommandContext,
|
|
137
|
+
readiness: ReturnType<typeof buildReadiness>,
|
|
138
|
+
): readonly VoiceInteractionWorkflow[] {
|
|
139
|
+
const voiceEnabled = readConfigBoolean(context, 'ui.voiceEnabled', false);
|
|
140
|
+
const spokenTurnRuntime = typeof context.submitSpokenInput === 'function';
|
|
141
|
+
const stopSpokenOutputRuntime = typeof context.stopSpokenOutput === 'function';
|
|
142
|
+
const transcribeRuntime = typeof context.platform.voiceService?.transcribe === 'function';
|
|
143
|
+
const speechInputReady = hasReadyVoiceFeature(readiness, ['stt', 'realtime']);
|
|
144
|
+
const speechInputRegistered = hasRegisteredVoiceFeature(readiness, ['stt', 'realtime']);
|
|
145
|
+
const selectedTtsReady = readiness.selectedTtsProviderStatus === 'ready';
|
|
146
|
+
const spokenReady = spokenTurnRuntime && selectedTtsReady && readiness.ttsVoiceConfigured;
|
|
147
|
+
const spokenAttention = spokenTurnRuntime && selectedTtsReady && !readiness.ttsVoiceConfigured;
|
|
148
|
+
const pushToTalkReady = voiceEnabled && spokenTurnRuntime && speechInputReady;
|
|
149
|
+
const pushToTalkAttention = voiceEnabled && (spokenTurnRuntime || speechInputRegistered);
|
|
150
|
+
const transcriptionReady = transcribeRuntime && speechInputReady;
|
|
151
|
+
const transcriptionAttention = transcribeRuntime || speechInputRegistered;
|
|
152
|
+
|
|
153
|
+
return [
|
|
154
|
+
{
|
|
155
|
+
id: 'push-to-talk',
|
|
156
|
+
label: 'Push-to-talk input',
|
|
157
|
+
status: pushToTalkReady ? 'ready' : pushToTalkAttention ? 'attention' : 'setup-needed',
|
|
158
|
+
userOutcome: 'Speak a short prompt when the local voice surface and speech-input provider are ready.',
|
|
159
|
+
summary: pushToTalkReady
|
|
160
|
+
? 'Voice surface, spoken-turn runtime, and a ready STT/realtime provider are available.'
|
|
161
|
+
: pushToTalkAttention
|
|
162
|
+
? 'Some voice input pieces are present, but the full push-to-talk route is not ready.'
|
|
163
|
+
: 'Voice input needs the voice surface plus a ready STT or realtime provider.',
|
|
164
|
+
nextStep: pushToTalkReady
|
|
165
|
+
? 'Use the visible voice surface when the user asks to speak to the assistant.'
|
|
166
|
+
: 'Review /voice and media provider posture before presenting push-to-talk as available.',
|
|
167
|
+
capabilities: ['push-to-talk', 'speech input', 'stt', 'realtime voice'],
|
|
168
|
+
modelRoute: 'agent_harness mode:"media_posture" query:"push to talk" includeParameters:true',
|
|
169
|
+
userRoute: '/voice review',
|
|
170
|
+
setupRoutes: [
|
|
171
|
+
'settings action:"get" query:"ui.voiceEnabled" includeParameters:true',
|
|
172
|
+
'agent_harness mode:"media_posture" query:"stt realtime" includeParameters:true',
|
|
173
|
+
],
|
|
174
|
+
evidence: {
|
|
175
|
+
voiceSurfaceEnabled: voiceEnabled,
|
|
176
|
+
spokenTurnRuntime,
|
|
177
|
+
speechInputReady,
|
|
178
|
+
speechInputRegistered,
|
|
179
|
+
},
|
|
180
|
+
policy: 'Voice input stays a visible local operator surface; provider setup and transcript submission are separate explicit routes.',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
id: 'voice-memo-transcription',
|
|
184
|
+
label: 'Voice memo transcription',
|
|
185
|
+
status: transcriptionReady ? 'ready' : transcriptionAttention ? 'attention' : 'setup-needed',
|
|
186
|
+
userOutcome: 'Transcribe an audio note only when a speech-to-text provider and runtime route are both present.',
|
|
187
|
+
summary: transcriptionReady
|
|
188
|
+
? 'Speech-to-text provider and voiceService.transcribe are available.'
|
|
189
|
+
: transcriptionAttention
|
|
190
|
+
? 'A speech-to-text provider or runtime route is present, but transcription is not fully ready.'
|
|
191
|
+
: 'No ready speech-to-text transcription route is available.',
|
|
192
|
+
nextStep: transcriptionReady
|
|
193
|
+
? 'Route audio transcription through reviewed media or connected-host voice routes when the user supplies audio.'
|
|
194
|
+
: 'Configure a provider with STT capability and confirm the runtime exposes voiceService.transcribe.',
|
|
195
|
+
capabilities: ['voice memo', 'speech-to-text', 'audio transcription'],
|
|
196
|
+
modelRoute: 'agent_harness mode:"media_posture" query:"voice memo transcription" includeParameters:true',
|
|
197
|
+
setupRoutes: [
|
|
198
|
+
'agent_harness mode:"media_posture" query:"stt" includeParameters:true',
|
|
199
|
+
'host action:"methods" query:"voice.stt"',
|
|
200
|
+
],
|
|
201
|
+
evidence: {
|
|
202
|
+
transcribeRuntime,
|
|
203
|
+
speechInputReady,
|
|
204
|
+
speechInputRegistered,
|
|
205
|
+
},
|
|
206
|
+
policy: 'Audio bytes are not printed into chat; transcription must use reviewed media or connected-host voice routes.',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
id: 'spoken-responses',
|
|
210
|
+
label: 'Spoken responses',
|
|
211
|
+
status: spokenReady ? 'ready' : spokenAttention ? 'attention' : 'setup-needed',
|
|
212
|
+
userOutcome: 'Play an assistant answer aloud with a predictable TTS provider and voice.',
|
|
213
|
+
summary: spokenReady
|
|
214
|
+
? 'Spoken-turn runtime, selected TTS provider, and voice setting are ready.'
|
|
215
|
+
: spokenAttention
|
|
216
|
+
? 'Spoken-turn runtime and provider are ready, but the exact voice is not configured.'
|
|
217
|
+
: 'Spoken responses need a ready selected TTS provider and runtime spoken-turn route.',
|
|
218
|
+
nextStep: spokenReady
|
|
219
|
+
? 'Use /tts only when the user asks for spoken output.'
|
|
220
|
+
: 'Choose a ready TTS provider and voice, then verify the runtime exposes submitSpokenInput.',
|
|
221
|
+
capabilities: ['tts', 'spoken answer', 'stop spoken output'],
|
|
222
|
+
modelRoute: 'agent_harness mode:"media_posture" query:"spoken responses" includeParameters:true',
|
|
223
|
+
userRoute: '/tts <prompt>',
|
|
224
|
+
setupRoutes: [
|
|
225
|
+
'agent_harness mode:"open_ui_surface" surfaceId:"tts-provider-picker" confirm:true explicitUserRequest:"..."',
|
|
226
|
+
'agent_harness mode:"open_ui_surface" surfaceId:"tts-voice-picker" confirm:true explicitUserRequest:"..."',
|
|
227
|
+
],
|
|
228
|
+
evidence: {
|
|
229
|
+
spokenTurnRuntime,
|
|
230
|
+
stopSpokenOutputRuntime,
|
|
231
|
+
selectedTtsProviderStatus: readiness.selectedTtsProviderStatus,
|
|
232
|
+
ttsVoiceConfigured: readiness.ttsVoiceConfigured,
|
|
233
|
+
},
|
|
234
|
+
policy: 'Spoken turns submit normal assistant prompts and may call model/speech providers; playback stop is local runtime control.',
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
id: 'wake-and-speak',
|
|
238
|
+
label: 'Wake and speak',
|
|
239
|
+
status: 'not-published',
|
|
240
|
+
userOutcome: 'Use wake-word or always-listening input only after a permission-scoped runtime contract exists.',
|
|
241
|
+
summary: 'Wake-word or always-listening voice capture is not published by the current Agent runtime contract.',
|
|
242
|
+
nextStep: 'Use explicit voice input or /tts until a wake-word route is published with visible permission controls.',
|
|
243
|
+
capabilities: ['wake word', 'always listening', 'permission repair'],
|
|
244
|
+
modelRoute: 'agent_harness mode:"media_posture" query:"wake word" includeParameters:true',
|
|
245
|
+
setupRoutes: [
|
|
246
|
+
'agent_harness mode:"media_posture" query:"push to talk" includeParameters:true',
|
|
247
|
+
'agent_harness mode:"pairing_posture" query:"device" includeParameters:true',
|
|
248
|
+
],
|
|
249
|
+
evidence: {
|
|
250
|
+
publishedByCurrentAgentContract: false,
|
|
251
|
+
},
|
|
252
|
+
policy: 'Agent does not claim always-listening behavior without an explicit permission-scoped runtime contract.',
|
|
253
|
+
},
|
|
254
|
+
];
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function describeVoiceWorkflow(workflow: VoiceInteractionWorkflow, includeParameters: boolean): Record<string, unknown> {
|
|
258
|
+
if (includeParameters) return { ...workflow };
|
|
259
|
+
return {
|
|
260
|
+
workflowId: workflow.id,
|
|
261
|
+
label: workflow.label,
|
|
262
|
+
status: workflow.status,
|
|
263
|
+
summary: previewHarnessText(workflow.summary),
|
|
264
|
+
modelRoute: workflow.modelRoute,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
|
|
73
268
|
function describeProviderCandidate(provider: AgentWorkspaceVoiceMediaProviderStatus): Record<string, unknown> {
|
|
74
269
|
return {
|
|
75
270
|
mediaProviderId: `${provider.domain}:${provider.id}`,
|
|
@@ -124,7 +319,7 @@ function describeProvider(
|
|
|
124
319
|
inspectPosture: 'agent_harness mode:"media_posture"',
|
|
125
320
|
inspectProvider: 'agent_harness mode:"media_provider"',
|
|
126
321
|
generateMedia: 'agent_media_generate with confirm:true and explicitUserRequest',
|
|
127
|
-
ttsSettings: '
|
|
322
|
+
ttsSettings: 'settings action:"list|get|set" for tts.provider, tts.voice, tts.llmProvider, and tts.llmModel',
|
|
128
323
|
},
|
|
129
324
|
policy: {
|
|
130
325
|
effect: 'read-only',
|
|
@@ -179,12 +374,14 @@ function buildReadiness(context: CommandContext) {
|
|
|
179
374
|
|
|
180
375
|
export function mediaPostureCatalogStatus(context: CommandContext): Record<string, unknown> {
|
|
181
376
|
const readiness = buildReadiness(context);
|
|
377
|
+
const voiceWorkflows = buildVoiceInteractionWorkflows(context, readiness);
|
|
182
378
|
return {
|
|
183
379
|
modes: ['media_posture', 'media_provider'],
|
|
184
380
|
voiceProviders: readiness.voiceProviders.length,
|
|
185
381
|
mediaProviders: readiness.mediaProviders.length,
|
|
186
382
|
readyVoiceProviders: readiness.readyVoiceProviderCount,
|
|
187
383
|
readyMediaProviders: readiness.readyMediaProviderCount,
|
|
384
|
+
voiceWorkflowSummary: voiceWorkflowSummary(voiceWorkflows),
|
|
188
385
|
readOnly: true,
|
|
189
386
|
};
|
|
190
387
|
}
|
|
@@ -199,9 +396,14 @@ export async function mediaPostureSummary(context: CommandContext, args: AgentHa
|
|
|
199
396
|
...readiness.mediaProviders.map((provider) => ({ provider, runtimeStatus: mediaStatuses.get(provider.id) })),
|
|
200
397
|
];
|
|
201
398
|
const query = readString(args.query).toLowerCase();
|
|
399
|
+
const limit = readLimit(args.limit, 100);
|
|
400
|
+
const voiceWorkflows = buildVoiceInteractionWorkflows(context, readiness);
|
|
202
401
|
const filtered = providers
|
|
203
402
|
.filter(({ provider, runtimeStatus }) => !query || providerSearchText(provider, runtimeStatus).includes(query))
|
|
204
|
-
.slice(0,
|
|
403
|
+
.slice(0, limit);
|
|
404
|
+
const filteredVoiceWorkflows = voiceWorkflows
|
|
405
|
+
.filter((workflow) => voiceWorkflowMatches(workflow, query))
|
|
406
|
+
.slice(0, limit);
|
|
205
407
|
return {
|
|
206
408
|
status: 'available',
|
|
207
409
|
summary: {
|
|
@@ -215,6 +417,8 @@ export async function mediaPostureSummary(context: CommandContext, args: AgentHa
|
|
|
215
417
|
ttsResponseRouteConfigured: readiness.ttsResponseRouteConfigured,
|
|
216
418
|
voiceSurfaceEnabled: readConfigBoolean(context, 'ui.voiceEnabled', false),
|
|
217
419
|
browserToolState: readiness.browserToolState,
|
|
420
|
+
voiceWorkflows: voiceWorkflowSummary(voiceWorkflows),
|
|
421
|
+
returnedVoiceWorkflows: filteredVoiceWorkflows.length,
|
|
218
422
|
artifactStoreAvailable: Boolean(context.platform.artifactStore),
|
|
219
423
|
ttsProviderSetting: readConfigString(context, 'tts.provider') || null,
|
|
220
424
|
ttsVoiceSettingConfigured: readConfigString(context, 'tts.voice').length > 0,
|
|
@@ -223,6 +427,7 @@ export async function mediaPostureSummary(context: CommandContext, args: AgentHa
|
|
|
223
427
|
providers: filtered.map(({ provider, runtimeStatus }) => describeProvider(provider, runtimeStatus, {
|
|
224
428
|
includeParameters: args.includeParameters === true,
|
|
225
429
|
})),
|
|
430
|
+
voiceWorkflows: filteredVoiceWorkflows.map((workflow) => describeVoiceWorkflow(workflow, args.includeParameters === true)),
|
|
226
431
|
returned: filtered.length,
|
|
227
432
|
total: providers.length,
|
|
228
433
|
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.',
|
|
@@ -232,6 +437,7 @@ export async function mediaPostureSummary(context: CommandContext, args: AgentHa
|
|
|
232
437
|
singleProviderMode: 'media_provider',
|
|
233
438
|
ttsProviderPicker: 'agent_harness mode:"open_ui_surface" surfaceId:"tts-provider-picker" confirm:true explicitUserRequest:"..."',
|
|
234
439
|
ttsVoicePicker: 'agent_harness mode:"open_ui_surface" surfaceId:"tts-voice-picker" confirm:true explicitUserRequest:"..."',
|
|
440
|
+
voiceWorkflowPosture: 'agent_harness mode:"media_posture" query:"push to talk" includeParameters:true',
|
|
235
441
|
commands: ['/media providers', '/voice review', '/tts <prompt>', '/image <path>'],
|
|
236
442
|
} } : {}),
|
|
237
443
|
};
|