@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.
Files changed (256) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.md +46 -30
  3. package/dist/package/{ast-grep-napi.linux-x64-gnu-mkk8xwww.node → ast-grep-napi.linux-x64-gnu-swtppvy9.node} +0 -0
  4. package/dist/package/{ast-grep-napi.linux-x64-musl-ryqtgdv6.node → ast-grep-napi.linux-x64-musl-ttfcdtap.node} +0 -0
  5. package/dist/package/main.js +132662 -91399
  6. package/docs/README.md +14 -7
  7. package/docs/channels-remote-and-api.md +8 -5
  8. package/docs/connected-host.md +14 -12
  9. package/docs/getting-started.md +56 -30
  10. package/docs/knowledge-artifacts-and-multimodal.md +7 -5
  11. package/docs/project-planning.md +2 -2
  12. package/docs/providers-and-routing.md +11 -3
  13. package/docs/tools-and-commands.md +114 -45
  14. package/docs/voice-and-live-tts.md +3 -1
  15. package/package.json +3 -2
  16. package/release/release-notes.md +130 -5
  17. package/release/release-readiness.json +120 -90
  18. package/src/agent/assistant-cockpit.ts +247 -0
  19. package/src/agent/autonomy-schedule-format.ts +96 -0
  20. package/src/agent/autonomy-schedule.ts +514 -0
  21. package/src/agent/channel-delivery-receipts.ts +292 -0
  22. package/src/agent/competitive-feature-inventory.ts +296 -0
  23. package/src/agent/document-registry-types.ts +106 -0
  24. package/src/agent/document-registry.ts +734 -0
  25. package/src/agent/harness-control.ts +2 -2
  26. package/src/agent/memory-prompt.ts +2 -2
  27. package/src/agent/operator-actions.ts +50 -6
  28. package/src/agent/persona-registry.ts +8 -0
  29. package/src/agent/project-context-files.ts +273 -0
  30. package/src/agent/prompt-context-receipts.ts +502 -0
  31. package/src/agent/reminder-schedule-format.ts +16 -2
  32. package/src/agent/research-run-registry.ts +582 -0
  33. package/src/agent/research-source-registry.ts +441 -0
  34. package/src/agent/routine-registry.ts +19 -3
  35. package/src/agent/routine-schedule-format.ts +27 -2
  36. package/src/agent/runtime-profile-starters.ts +7 -0
  37. package/src/agent/runtime-profile.ts +106 -4
  38. package/src/agent/schedule-edit-format.ts +129 -0
  39. package/src/agent/schedule-edit.ts +496 -0
  40. package/src/agent/schedule-next-routes.ts +42 -0
  41. package/src/agent/setup-wizard-checkpoint.ts +140 -0
  42. package/src/agent/setup-wizard.ts +447 -0
  43. package/src/agent/skill-registry-types.ts +102 -0
  44. package/src/agent/skill-registry.ts +81 -107
  45. package/src/agent/vibe-confirmation-routes.ts +62 -0
  46. package/src/agent/vibe-file.ts +285 -0
  47. package/src/cli/agent-knowledge-command.ts +45 -2
  48. package/src/cli/help.ts +3 -0
  49. package/src/cli/profiles-command.ts +25 -11
  50. package/src/config/agent-settings-policy.ts +1 -18
  51. package/src/input/agent-workspace-activation.ts +53 -0
  52. package/src/input/agent-workspace-artifact-browser-editor.ts +494 -0
  53. package/src/input/agent-workspace-artifact-metadata.ts +17 -0
  54. package/src/input/agent-workspace-basic-command-editors.ts +5 -1
  55. package/src/input/agent-workspace-categories.ts +153 -155
  56. package/src/input/agent-workspace-channel-triage.ts +481 -0
  57. package/src/input/agent-workspace-channels.ts +263 -0
  58. package/src/input/agent-workspace-command-editor.ts +152 -0
  59. package/src/input/agent-workspace-context-snapshot.ts +349 -0
  60. package/src/input/agent-workspace-delegation-editor-submission.ts +8 -0
  61. package/src/input/agent-workspace-document-editor.ts +502 -0
  62. package/src/input/agent-workspace-document-ops-editor.ts +523 -0
  63. package/src/input/agent-workspace-host-category.ts +1 -1
  64. package/src/input/agent-workspace-local-library-snapshot.ts +167 -0
  65. package/src/input/agent-workspace-model-compare-editor.ts +376 -0
  66. package/src/input/agent-workspace-model-compare-prompt-submission.ts +552 -0
  67. package/src/input/agent-workspace-model-compare-types.ts +82 -0
  68. package/src/input/agent-workspace-model-compare-utils.ts +35 -0
  69. package/src/input/agent-workspace-onboarding-categories.ts +141 -0
  70. package/src/input/agent-workspace-operations-command-editor-submission.ts +53 -0
  71. package/src/input/agent-workspace-operations-command-editors.ts +22 -0
  72. package/src/input/agent-workspace-research-report-editor.ts +212 -0
  73. package/src/input/agent-workspace-research-run-editor.ts +144 -0
  74. package/src/input/agent-workspace-research-source-editor.ts +167 -0
  75. package/src/input/agent-workspace-review-packet-snapshot.ts +593 -0
  76. package/src/input/agent-workspace-review-packet-utils.ts +265 -0
  77. package/src/input/agent-workspace-settings.ts +262 -30
  78. package/src/input/agent-workspace-setup-checkpoint-action.ts +127 -0
  79. package/src/input/agent-workspace-setup-snapshot.ts +198 -0
  80. package/src/input/agent-workspace-setup.ts +34 -1
  81. package/src/input/agent-workspace-snapshot.ts +162 -147
  82. package/src/input/agent-workspace-types.ts +287 -2
  83. package/src/input/agent-workspace.ts +18 -0
  84. package/src/input/command-registry.ts +9 -2
  85. package/src/input/commands/agent-runtime-profile-runtime.ts +28 -13
  86. package/src/input/commands/channels-runtime.ts +102 -114
  87. package/src/input/commands/delegation-runtime.ts +87 -24
  88. package/src/input/commands/knowledge-browser-flags.ts +12 -0
  89. package/src/input/commands/knowledge.ts +28 -14
  90. package/src/input/commands/operator-actions-runtime.ts +6 -3
  91. package/src/input/commands/schedule-runtime.ts +71 -14
  92. package/src/input/commands/session-content.ts +2 -2
  93. package/src/input/commands/shell-core.ts +2 -0
  94. package/src/input/commands/vibe-runtime.ts +140 -0
  95. package/src/input/commands.ts +2 -0
  96. package/src/input/connected-host-routes.ts +123 -0
  97. package/src/input/settings-modal-types.ts +14 -0
  98. package/src/main.ts +15 -15
  99. package/src/panels/qr-panel.ts +2 -2
  100. package/src/renderer/agent-workspace-context-lines.ts +686 -0
  101. package/src/renderer/agent-workspace.ts +30 -419
  102. package/src/renderer/settings-modal-helpers.ts +12 -0
  103. package/src/renderer/settings-modal.ts +12 -0
  104. package/src/runtime/bootstrap-command-context.ts +11 -1
  105. package/src/runtime/bootstrap-command-parts.ts +14 -3
  106. package/src/runtime/bootstrap-core.ts +43 -1
  107. package/src/runtime/bootstrap-shell.ts +6 -0
  108. package/src/runtime/bootstrap.ts +113 -30
  109. package/src/runtime/connected-host-auth.ts +3 -2
  110. package/src/runtime/execution-ledger.ts +231 -0
  111. package/src/runtime/services.ts +88 -10
  112. package/src/runtime/tool-permission-safety.ts +287 -0
  113. package/src/shell/session-continuity-hints.ts +39 -0
  114. package/src/tools/agent-artifacts-tool.ts +606 -0
  115. package/src/tools/agent-audit-tool.ts +155 -0
  116. package/src/tools/agent-autonomy-schedule-tool.ts +238 -0
  117. package/src/tools/agent-autonomy-tool.ts +140 -0
  118. package/src/tools/agent-channel-send-tool.ts +24 -2
  119. package/src/tools/agent-channels-tool.ts +140 -0
  120. package/src/tools/agent-computer-tool.ts +168 -0
  121. package/src/tools/agent-context-policy.ts +267 -10
  122. package/src/tools/agent-context-tool.ts +143 -0
  123. package/src/tools/agent-delegation-tool.ts +128 -0
  124. package/src/tools/agent-device-tool.ts +240 -0
  125. package/src/tools/agent-documents-tool.ts +684 -0
  126. package/src/tools/agent-execution-tool.ts +230 -0
  127. package/src/tools/agent-harness-agent-orchestration.ts +703 -0
  128. package/src/tools/agent-harness-autonomy-intake.ts +785 -0
  129. package/src/tools/agent-harness-autonomy-live-records.ts +588 -0
  130. package/src/tools/agent-harness-autonomy-queue-types.ts +88 -0
  131. package/src/tools/agent-harness-autonomy-queue.ts +560 -0
  132. package/src/tools/agent-harness-background-processes-types.ts +35 -0
  133. package/src/tools/agent-harness-background-processes.ts +794 -0
  134. package/src/tools/agent-harness-browser-cockpit-route.ts +219 -0
  135. package/src/tools/agent-harness-browser-control.ts +338 -0
  136. package/src/tools/agent-harness-channel-metadata.ts +168 -10
  137. package/src/tools/agent-harness-cli-command-policy.ts +110 -0
  138. package/src/tools/agent-harness-command-catalog.ts +4 -2
  139. package/src/tools/agent-harness-command-runner.ts +42 -0
  140. package/src/tools/agent-harness-connected-host-status.ts +7 -4
  141. package/src/tools/agent-harness-delegation-posture.ts +234 -19
  142. package/src/tools/agent-harness-document-ops-reviewer-readiness.ts +234 -0
  143. package/src/tools/agent-harness-document-ops-types.ts +72 -0
  144. package/src/tools/agent-harness-document-ops.ts +671 -0
  145. package/src/tools/agent-harness-execution-history.ts +489 -0
  146. package/src/tools/agent-harness-execution-posture.ts +382 -0
  147. package/src/tools/agent-harness-file-recovery.ts +135 -0
  148. package/src/tools/agent-harness-keybinding-metadata.ts +16 -12
  149. package/src/tools/agent-harness-learning-curator-common.ts +102 -0
  150. package/src/tools/agent-harness-learning-curator-consolidation.ts +295 -0
  151. package/src/tools/agent-harness-learning-curator-proposals.ts +606 -0
  152. package/src/tools/agent-harness-learning-curator-types.ts +151 -0
  153. package/src/tools/agent-harness-learning-curator.ts +417 -0
  154. package/src/tools/agent-harness-local-model-benchmarks.ts +199 -0
  155. package/src/tools/agent-harness-local-model-cookbook.ts +238 -0
  156. package/src/tools/agent-harness-local-model-endpoints.ts +673 -0
  157. package/src/tools/agent-harness-media-posture.ts +208 -2
  158. package/src/tools/agent-harness-memory-posture.ts +556 -0
  159. package/src/tools/agent-harness-metadata.ts +100 -168
  160. package/src/tools/agent-harness-mode-catalog.ts +84 -33
  161. package/src/tools/agent-harness-model-catalog.ts +162 -0
  162. package/src/tools/agent-harness-model-provider-health.ts +186 -0
  163. package/src/tools/agent-harness-model-readiness.ts +406 -0
  164. package/src/tools/agent-harness-model-routing-types.ts +266 -0
  165. package/src/tools/agent-harness-model-routing-utils.ts +30 -0
  166. package/src/tools/agent-harness-model-routing.ts +137 -190
  167. package/src/tools/agent-harness-operator-methods.ts +115 -133
  168. package/src/tools/agent-harness-pairing-posture.ts +431 -18
  169. package/src/tools/agent-harness-personal-ops-discovery.ts +533 -0
  170. package/src/tools/agent-harness-personal-ops-intake.ts +385 -0
  171. package/src/tools/agent-harness-personal-ops-lanes.ts +204 -0
  172. package/src/tools/agent-harness-personal-ops-records.ts +732 -0
  173. package/src/tools/agent-harness-personal-ops-runner.ts +637 -0
  174. package/src/tools/agent-harness-personal-ops-types.ts +222 -0
  175. package/src/tools/agent-harness-personal-ops.ts +606 -0
  176. package/src/tools/agent-harness-project-context.ts +144 -0
  177. package/src/tools/agent-harness-prompt-context.ts +589 -0
  178. package/src/tools/agent-harness-provider-account-metadata.ts +2 -2
  179. package/src/tools/agent-harness-release-evidence.ts +9 -7
  180. package/src/tools/agent-harness-release-readiness.ts +9 -7
  181. package/src/tools/agent-harness-research-briefing.ts +427 -0
  182. package/src/tools/agent-harness-research-queue.ts +250 -0
  183. package/src/tools/agent-harness-research-runs.ts +295 -0
  184. package/src/tools/agent-harness-research-workflow.ts +322 -0
  185. package/src/tools/agent-harness-security-posture.ts +2 -2
  186. package/src/tools/agent-harness-service-posture.ts +9 -9
  187. package/src/tools/agent-harness-session-metadata.ts +3 -3
  188. package/src/tools/agent-harness-setup-connected-host.ts +501 -0
  189. package/src/tools/agent-harness-setup-describe.ts +557 -0
  190. package/src/tools/agent-harness-setup-handoffs.ts +502 -0
  191. package/src/tools/agent-harness-setup-model-helpers.ts +101 -0
  192. package/src/tools/agent-harness-setup-plan.ts +253 -0
  193. package/src/tools/agent-harness-setup-posture-types.ts +218 -0
  194. package/src/tools/agent-harness-setup-posture-utils.ts +173 -0
  195. package/src/tools/agent-harness-setup-posture.ts +449 -221
  196. package/src/tools/agent-harness-setup-smoke.ts +508 -0
  197. package/src/tools/agent-harness-sudo-posture.ts +114 -0
  198. package/src/tools/agent-harness-tool-schema.ts +120 -7
  199. package/src/tools/agent-harness-tool-types.ts +78 -0
  200. package/src/tools/agent-harness-tool-utils.ts +43 -0
  201. package/src/tools/agent-harness-tool.ts +311 -370
  202. package/src/tools/agent-harness-ui-surface-metadata.ts +76 -69
  203. package/src/tools/agent-harness-ui-surface-types.ts +46 -0
  204. package/src/tools/agent-harness-vibe-health.ts +105 -0
  205. package/src/tools/agent-harness-workspace-action-runner.ts +149 -0
  206. package/src/tools/agent-harness-workspace-actions.ts +114 -8
  207. package/src/tools/agent-harness-workspace-editor-execution.ts +214 -0
  208. package/src/tools/agent-harness-workspace-editor-runner.ts +755 -0
  209. package/src/tools/agent-host-tool.ts +159 -0
  210. package/src/tools/agent-knowledge-ingest-tool.ts +34 -1
  211. package/src/tools/agent-learning-consolidation-core.ts +327 -0
  212. package/src/tools/agent-learning-consolidation-tool.ts +758 -0
  213. package/src/tools/agent-memory-tool.ts +214 -0
  214. package/src/tools/agent-model-compare-export.ts +315 -0
  215. package/src/tools/agent-model-compare-handoff.ts +592 -0
  216. package/src/tools/agent-model-compare-judgment.ts +633 -0
  217. package/src/tools/agent-model-compare-run.ts +722 -0
  218. package/src/tools/agent-model-compare-tool.ts +698 -0
  219. package/src/tools/agent-model-compare-types.ts +191 -0
  220. package/src/tools/agent-model-compare-utils.ts +93 -0
  221. package/src/tools/agent-models-tool.ts +208 -0
  222. package/src/tools/agent-operator-action-tool.ts +1 -1
  223. package/src/tools/agent-operator-method-tool.ts +643 -0
  224. package/src/tools/agent-personal-ops-tool.ts +197 -0
  225. package/src/tools/agent-policy-explanation.ts +415 -0
  226. package/src/tools/agent-research-report-tool.ts +608 -0
  227. package/src/tools/agent-research-runs-tool.ts +434 -0
  228. package/src/tools/agent-research-sources-tool.ts +443 -0
  229. package/src/tools/agent-research-tool.ts +687 -0
  230. package/src/tools/agent-review-packet-presets-core.ts +757 -0
  231. package/src/tools/agent-review-packet-presets-tool.ts +466 -0
  232. package/src/tools/agent-review-packet-share-tool.ts +305 -0
  233. package/src/tools/agent-route-planner-candidates-setup.ts +411 -0
  234. package/src/tools/agent-route-planner-candidates-surfaces.ts +432 -0
  235. package/src/tools/agent-route-planner-candidates-work.ts +251 -0
  236. package/src/tools/agent-route-planner-helpers.ts +667 -0
  237. package/src/tools/agent-route-planner.ts +185 -0
  238. package/src/tools/agent-route-tool.ts +105 -0
  239. package/src/tools/agent-schedule-edit-tool.ts +210 -0
  240. package/src/tools/agent-schedule-tool.ts +282 -0
  241. package/src/tools/agent-security-tool.ts +145 -0
  242. package/src/tools/agent-sessions-tool.ts +122 -0
  243. package/src/tools/agent-settings-import-tool.ts +104 -0
  244. package/src/tools/agent-settings-tool.ts +176 -0
  245. package/src/tools/agent-setup-tool.ts +226 -0
  246. package/src/tools/agent-support-tool.ts +122 -0
  247. package/src/tools/agent-terminal-process-tools.ts +167 -0
  248. package/src/tools/agent-tool-policy-guard-types.ts +77 -0
  249. package/src/tools/agent-tool-policy-guard.ts +110 -89
  250. package/src/tools/agent-vibe-tool.ts +297 -0
  251. package/src/tools/agent-work-plan-tool.ts +265 -6
  252. package/src/tools/agent-workspace-tool.ts +305 -0
  253. package/src/tools/artifact-archive.ts +169 -0
  254. package/src/tools/tool-definition-compaction.ts +36 -0
  255. package/src/tools/tool-execution-safety.ts +41 -0
  256. package/src/version.ts +1 -1
@@ -0,0 +1,432 @@
1
+ import type { RouteCandidateDraft } from './agent-route-planner.ts';
2
+ import { browserCockpitLike, browserControlLike, channelDeliveriesLike, channelSendLike, channelSetupLike, channelTargetFromText, channelTriageLike, externalChannelLike, externalMemoryProviderLike, hasAny, mediaGenerationLike, quote, releaseAuditLike, releaseEvidenceLike, securityFindingLike, securityPermissionLike, securityPolicyExplainLike, securityPolicyToolTarget, securityStatusLike, sessionMutationLike, sessionWorkspaceLike, supportBundleEffectLike, supportBundleLike, ttsProviderLike, voiceWorkflowLike } from './agent-route-planner-helpers.ts';
3
+
4
+ export function addSurfaceSecurityRouteCandidates(
5
+ lower: string,
6
+ request: string,
7
+ add: (candidate: RouteCandidateDraft) => void,
8
+ ): void {
9
+ if (browserControlLike(lower)) {
10
+ add({
11
+ id: 'browser-control-workflow-plan',
12
+ label: 'Browser, screenshot, or desktop-control workflow plan',
13
+ score: 97,
14
+ userSurface: 'Work and computer-use workspace',
15
+ userOutcome: 'Choose the safest browser, screenshot, or desktop-control workflow before any live UI action.',
16
+ why: 'The request asks for screenshot, browser navigation/control, screen observation, or desktop control.',
17
+ modelRoute: `computer action:"plan" query:${quote(request)} includeParameters:true`,
18
+ inspectRoute: 'computer action:"control" includeParameters:true',
19
+ userRoute: 'Agent Workspace -> Work & Approvals',
20
+ requiresConfirmation: hasAny(lower, ['open', 'control', 'click', 'fill', 'type', 'capture', 'screenshot', 'record', 'desktop']),
21
+ missingFields: ['target page/app/screen when applicable', 'exact live action to perform', 'confirmation for any live-control effect'],
22
+ supportingRoutes: [
23
+ 'computer action:"plan" query:"take a screenshot" includeParameters:true',
24
+ 'computer action:"mcp" query:"browser desktop" includeParameters:true',
25
+ 'computer action:"setup"',
26
+ 'computer action:"open_browser" confirm:true explicitUserRequest:"..."',
27
+ ],
28
+ policy: 'Workflow planning is read-only. Browser opens, screenshots, authenticated browsing, form entry, desktop actions, and MCP/tool invocations require the selected tool-specific confirmation boundary.',
29
+ });
30
+ }
31
+
32
+ if (mediaGenerationLike(lower)) {
33
+ add({
34
+ id: 'media-generation-artifact',
35
+ label: 'Confirmed media artifact generation',
36
+ score: 94,
37
+ userSurface: 'Voice & Media workspace',
38
+ userOutcome: 'Generate image or video only as a confirmed saved artifact with provider readiness visible first.',
39
+ why: 'The request asks to generate, create, render, or draw image/video/media output.',
40
+ modelRoute: 'device action:"provider" target:"media" includeParameters:true',
41
+ inspectRoute: 'agent_harness mode:"media_posture" includeParameters:true',
42
+ userRoute: 'Agent Workspace -> Voice & Media',
43
+ requiresConfirmation: true,
44
+ missingFields: ['media prompt', 'provider/model if the default is not acceptable', 'confirmation'],
45
+ supportingRoutes: [
46
+ `agent_media_generate prompt:${quote(request)} confirm:true explicitUserRequest:${quote(request)}`,
47
+ 'agent_artifacts mode:"list" query:"generated media"',
48
+ 'agent_knowledge_ingest sourceKind:"artifact" artifactId:"..." confirm:true explicitUserRequest:"..."',
49
+ ],
50
+ policy: 'Media generation requires an explicit user request and confirmation. Generated bytes are saved as artifacts, not printed inline or silently ingested into Knowledge.',
51
+ });
52
+ }
53
+
54
+ if (voiceWorkflowLike(lower) && !ttsProviderLike(lower)) {
55
+ const voiceEffect = hasAny(lower, ['record', 'transcribe', 'start ', 'set up', 'setup', 'enable', 'speak', 'capture', 'open ']);
56
+ add({
57
+ id: 'voice-workflow-posture',
58
+ label: 'Voice interaction workflow posture',
59
+ score: 93,
60
+ userSurface: 'Voice & Media workspace',
61
+ userOutcome: 'Inspect push-to-talk, transcription, spoken-response, and wake-word posture before any voice capture or playback effect.',
62
+ why: 'The request mentions voice workflows, voice memo transcription, push-to-talk, spoken responses, or wake-word capture.',
63
+ modelRoute: `device action:"voice" query:${quote(request)} includeParameters:true`,
64
+ inspectRoute: 'device action:"voice" includeParameters:true',
65
+ userRoute: 'Agent Workspace -> Voice & Media -> Voice workflows',
66
+ requiresConfirmation: voiceEffect,
67
+ missingFields: voiceEffect
68
+ ? ['voice workflow id or audio source', 'selected provider when needed', 'confirmation before capture, transcription, playback, or visible picker handoff']
69
+ : undefined,
70
+ supportingRoutes: [
71
+ 'device action:"provider" target:"voice" includeParameters:true',
72
+ 'device action:"open_tts_provider" confirm:true explicitUserRequest:"..."',
73
+ 'device action:"open_tts_voice" providerId:"..." confirm:true explicitUserRequest:"..."',
74
+ 'setup action:"item" setupItemId:"voice-workflows"',
75
+ ],
76
+ policy: 'Voice workflow inspection is read-only. Voice capture, transcription, spoken output, provider picker opens, and wake-word behavior stay unavailable or confirmed until published contracts prove readiness.',
77
+ });
78
+ }
79
+
80
+ if (ttsProviderLike(lower)) {
81
+ const openPicker = hasAny(lower, ['open', 'picker', 'choose', 'select', 'change', 'set ']);
82
+ add({
83
+ id: 'tts-provider-posture',
84
+ label: 'TTS provider and voice setup posture',
85
+ score: 92,
86
+ userSurface: 'Voice & Media workspace',
87
+ userOutcome: 'Inspect TTS provider and voice readiness before opening a picker or changing spoken-response settings.',
88
+ why: 'The request mentions TTS, text-to-speech, speech synthesis, voice provider, or TTS voice selection.',
89
+ modelRoute: 'device action:"provider" target:"tts" includeParameters:true',
90
+ inspectRoute: 'device action:"voice" includeParameters:true',
91
+ userRoute: 'Agent Workspace -> Voice & Media -> TTS setup',
92
+ requiresConfirmation: openPicker,
93
+ missingFields: openPicker ? ['provider or voice target when known', 'confirmation before visible picker handoff or setting change'] : undefined,
94
+ supportingRoutes: [
95
+ 'device action:"open_tts_provider" confirm:true explicitUserRequest:"..."',
96
+ 'device action:"open_tts_voice" providerId:"..." confirm:true explicitUserRequest:"..."',
97
+ 'settings action:"list" query:"tts voice" includeParameters:true',
98
+ ],
99
+ policy: 'TTS inspection is read-only. Opening provider/voice pickers or changing spoken-response settings requires explicit confirmation.',
100
+ });
101
+ }
102
+
103
+ if (browserCockpitLike(lower)) {
104
+ const openCockpit = hasAny(lower, ['open', 'launch', 'show']);
105
+ add({
106
+ id: 'browser-cockpit-readiness',
107
+ label: 'Connected browser cockpit/PWA readiness',
108
+ score: 93,
109
+ userSurface: 'Connected browser cockpit',
110
+ userOutcome: 'Inspect the configured browser/PWA cockpit and setup routes before opening an external browser.',
111
+ why: 'The request mentions the browser cockpit, PWA, web dashboard, or browser dashboard.',
112
+ modelRoute: 'computer action:"browser" includeParameters:true',
113
+ inspectRoute: 'workspace action:"surface" surfaceId:"connected-browser-cockpit" includeParameters:true',
114
+ userRoute: 'Agent Workspace -> Home -> Browser cockpit',
115
+ requiresConfirmation: openCockpit,
116
+ missingFields: openCockpit ? ['confirmation before opening the external browser/PWA handoff'] : undefined,
117
+ supportingRoutes: [
118
+ 'computer action:"open_browser" confirm:true explicitUserRequest:"..."',
119
+ 'workspace action:"open" surfaceId:"connected-browser-cockpit" confirm:true explicitUserRequest:"..."',
120
+ 'host action:"services" query:"web" includeParameters:true',
121
+ ],
122
+ policy: 'Browser/PWA readiness is read-only. Opening the connected browser cockpit is a visible confirmed handoff; browser-native Agent workspace receipts remain unpublished until the connected host provides them.',
123
+ });
124
+ }
125
+
126
+ if (hasAny(lower, ['browser', 'pwa', 'dashboard', 'desktop', 'screen', 'screenshot', 'camera', 'voice', 'tts', 'phone', 'mobile', 'device'])) {
127
+ const device = hasAny(lower, ['voice', 'tts', 'phone', 'mobile', 'device', 'camera']);
128
+ add({
129
+ id: device ? 'device-voice-capability' : 'browser-computer-capability',
130
+ label: device ? 'Device and voice capability map' : 'Browser/PWA or computer-use route',
131
+ score: 84,
132
+ userSurface: device ? 'Voice & Media workspace' : 'Connected browser cockpit',
133
+ userOutcome: 'Use device, browser, and desktop capabilities only through visible permission-aware routes.',
134
+ why: 'The request mentions browser/PWA, desktop/computer use, mobile, camera, screen, or voice/TTS.',
135
+ modelRoute: device ? 'device action:"status" includeParameters:true' : 'computer action:"status" includeParameters:true',
136
+ inspectRoute: device ? 'device action:"capability" target:"..." includeParameters:true' : 'computer action:"browser" includeParameters:true',
137
+ userRoute: device ? 'Agent Workspace -> Voice & Media' : 'Connected browser cockpit',
138
+ requiresConfirmation: hasAny(lower, ['open', 'control', 'run', 'speak', 'send', 'capture']),
139
+ supportingRoutes: [
140
+ 'computer action:"open_browser" confirm:true explicitUserRequest:"..."',
141
+ 'device action:"voice"',
142
+ 'device action:"open_tts_provider" confirm:true explicitUserRequest:"..."',
143
+ ],
144
+ policy: 'Capability inspection is read-only; browser opens, TTS picker opens, desktop control, and device effects require visible confirmation.',
145
+ });
146
+ }
147
+
148
+ if (externalChannelLike(lower)) {
149
+ const target = channelTargetFromText(lower);
150
+ const setup = channelSetupLike(lower);
151
+ const triage = channelTriageLike(lower);
152
+ const deliveries = channelDeliveriesLike(lower);
153
+ const send = channelSendLike(lower);
154
+ const setupEffect = setup;
155
+ const sendEffect = send && !setup && !triage && !deliveries;
156
+ const channelRoute = target
157
+ ? `channels action:"channel" target:"${target}" includeParameters:true`
158
+ : `channels action:"status" query:${quote(request)} includeParameters:true`;
159
+ const setupRoute = target
160
+ ? `channels action:"setup" target:"${target}" includeParameters:true`
161
+ : 'channels action:"setup" includeParameters:true';
162
+ const modelRoute = deliveries
163
+ ? 'channels action:"deliveries" limit:10 includeParameters:true'
164
+ : triage
165
+ ? 'channels action:"triage" includeParameters:true'
166
+ : setup
167
+ ? setupRoute
168
+ : channelRoute;
169
+ add({
170
+ id: deliveries
171
+ ? 'channel-delivery-receipts'
172
+ : triage
173
+ ? 'channel-triage-route'
174
+ : setup
175
+ ? 'channel-setup-route'
176
+ : send
177
+ ? 'channel-delivery-boundary'
178
+ : 'channel-readiness-route',
179
+ label: deliveries
180
+ ? 'Channel delivery receipts'
181
+ : triage
182
+ ? 'Channel triage and retry posture'
183
+ : setup
184
+ ? 'Channel setup guide'
185
+ : send
186
+ ? 'Confirmed channel delivery boundary'
187
+ : 'Channel readiness',
188
+ score: deliveries || triage || setup || send ? 95 : 88,
189
+ userSurface: 'Channels workspace',
190
+ userOutcome: deliveries
191
+ ? 'Review recent redacted delivery outcomes before retrying or sending more messages.'
192
+ : triage
193
+ ? 'Troubleshoot channel blockers, retries, pending messages, and route bindings without sending.'
194
+ : setup
195
+ ? 'Follow the ordered channel setup guide before relying on external delivery.'
196
+ : 'Send and troubleshoot external messages through configured, inspectable channel targets.',
197
+ why: 'The request mentions external channels, notifications, target setup, or delivery receipts.',
198
+ modelRoute,
199
+ inspectRoute: deliveries ? 'channels action:"status" includeParameters:true' : triage ? 'channels action:"status" includeParameters:true' : 'channels action:"triage" includeParameters:true',
200
+ userRoute: 'Agent Workspace -> Channels',
201
+ requiresConfirmation: setupEffect || sendEffect,
202
+ missingFields: sendEffect
203
+ ? ['configured target', 'message text', 'confirmation']
204
+ : setupEffect
205
+ ? ['channel/account target', 'configuration or credential route', 'confirmation before mutating channel setup']
206
+ : undefined,
207
+ supportingRoutes: [
208
+ setupRoute,
209
+ 'channels action:"triage" includeParameters:true',
210
+ 'channels action:"deliveries" limit:10 includeParameters:true',
211
+ 'agent_channel_send confirm:true explicitUserRequest:"..."',
212
+ 'agent_notify confirm:true explicitUserRequest:"..."',
213
+ ],
214
+ policy: 'Channel inspection is read-only; every external delivery uses an explicit configured target and confirmation.',
215
+ });
216
+ }
217
+
218
+ if (hasAny(lower, ['document', 'draft', 'artifact', 'upload', 'export', 'packet', 'handoff', 'blind compare', 'model compare', 'compare models', 'reviewer'])) {
219
+ add({
220
+ id: 'documents-artifacts-compare',
221
+ label: 'Documents, artifacts, and model comparison',
222
+ score: 86,
223
+ userSurface: 'Documents & Compare workspace',
224
+ userOutcome: 'Keep drafts, uploads, artifacts, reviewer packets, and model choices in one reviewable workflow.',
225
+ why: 'The request is about documents, artifacts, exports, reviewer packets, or blind model comparison.',
226
+ modelRoute: 'workspace action:"actions" categoryId:"documents" query:"documents compare artifacts"',
227
+ inspectRoute: 'agent_harness mode:"document_ops" includeParameters:true',
228
+ userRoute: 'Agent Workspace -> Documents & Compare',
229
+ requiresConfirmation: hasAny(lower, ['create', 'revise', 'export', 'archive', 'share', 'compare', 'apply', 'attach', 'insert']),
230
+ supportingRoutes: [
231
+ 'agent_documents action:"browse"',
232
+ 'agent_artifacts mode:"list"',
233
+ 'agent_model_compare mode:"compare" confirm:true explicitUserRequest:"..."',
234
+ 'agent_review_packet_share confirm:true explicitUserRequest:"..."',
235
+ ],
236
+ policy: 'Browsing is read-only; draft changes, exports, archives, sharing, artifact promotion, and comparisons stay confirmed.',
237
+ });
238
+ }
239
+
240
+ if (hasAny(lower, ['knowledge', 'ask knowledge', 'search knowledge', 'ingest', 'source node', 'source-backed'])) {
241
+ add({
242
+ id: 'agent-knowledge',
243
+ label: 'Isolated Agent Knowledge',
244
+ score: 82,
245
+ userSurface: 'Knowledge workspace',
246
+ userOutcome: 'Ask, search, inspect, or deliberately ingest reviewed sources into Agent-owned knowledge only.',
247
+ why: 'The request mentions Agent Knowledge, Knowledge search, source-backed answers, or ingest.',
248
+ modelRoute: 'agent_knowledge action:"ask" query:"..."',
249
+ inspectRoute: 'agent_knowledge action:"status"',
250
+ userRoute: 'Agent Workspace -> Knowledge',
251
+ requiresConfirmation: hasAny(lower, ['ingest', 'add', 'promote', 'import']),
252
+ supportingRoutes: [
253
+ 'agent_knowledge action:"search" query:"..."',
254
+ 'agent_knowledge_ingest sourceKind:"url|file|artifact" confirm:true explicitUserRequest:"..."',
255
+ ],
256
+ policy: 'Agent Knowledge must stay on `/api/goodvibes-agent/knowledge/*` and never fall back to default knowledge.',
257
+ });
258
+ }
259
+
260
+ if (securityPermissionLike(lower)) {
261
+ if (securityStatusLike(lower)) {
262
+ add({
263
+ id: 'security-permission-status',
264
+ label: 'Security and permission posture',
265
+ score: 98,
266
+ userSurface: 'Safety and recovery workspace',
267
+ userOutcome: 'Show the current permission, approval, trust, and security posture before changing policy or attempting risky work.',
268
+ why: 'The request asks what permissions, approvals, policies, or safety status are active.',
269
+ modelRoute: `security action:"status" query:${quote(request)} includeParameters:true`,
270
+ inspectRoute: 'security action:"status" includeParameters:true',
271
+ userRoute: 'Agent Workspace -> Safety & Recovery',
272
+ requiresConfirmation: false,
273
+ supportingRoutes: [
274
+ 'workspace action:"actions" categoryId:"tools-permissions"',
275
+ 'settings action:"list" query:"permissions approval policy" includeParameters:true',
276
+ 'security action:"finding" findingId:"..." includeParameters:true',
277
+ ],
278
+ policy: 'Security posture inspection is read-only. Permission changes, approval changes, and risky target actions remain separate confirmed routes.',
279
+ });
280
+ }
281
+
282
+ if (securityFindingLike(lower)) {
283
+ add({
284
+ id: 'security-finding-inspection',
285
+ label: 'Security finding inspection',
286
+ score: 97,
287
+ userSurface: 'Safety and recovery workspace',
288
+ userOutcome: 'Inspect the exact security finding, trust issue, incident, or leaked-secret record before repair work.',
289
+ why: 'The request asks to inspect a security finding, incident, vulnerability, trust warning, or secret-leak issue.',
290
+ modelRoute: `security action:"finding" target:${quote(request)} includeParameters:true`,
291
+ inspectRoute: 'security action:"status" includeParameters:true',
292
+ userRoute: 'Agent Workspace -> Safety & Recovery',
293
+ requiresConfirmation: false,
294
+ supportingRoutes: [
295
+ 'security action:"status" includeParameters:true',
296
+ 'agent_harness mode:"security_finding" findingId:"..." includeParameters:true',
297
+ 'support action:"status" includeParameters:true',
298
+ ],
299
+ policy: 'Finding inspection returns redacted evidence only. Secret rotation, trust changes, MCP enablement, or file edits stay on explicit confirmed repair routes.',
300
+ });
301
+ }
302
+
303
+ if (securityPolicyExplainLike(lower) || (!securityStatusLike(lower) && !securityFindingLike(lower))) {
304
+ const explainTarget = securityPolicyToolTarget(lower);
305
+ add({
306
+ id: 'security-policy-explanation',
307
+ label: 'Security policy explanation',
308
+ score: securityPolicyExplainLike(lower) ? 100 : 90,
309
+ userSurface: 'Safety and recovery workspace',
310
+ userOutcome: 'Explain whether one model action is allowed, blocked, or waiting on confirmation before performing it.',
311
+ why: 'The request asks about a tool, route, command, approval, confirmation, or why an action is allowed, denied, or blocked.',
312
+ modelRoute: explainTarget
313
+ ? `security action:"explain" target:${quote(explainTarget)} toolArgs:{...} includeParameters:true`
314
+ : 'security action:"explain" toolName:"..." toolArgs:{...} includeParameters:true',
315
+ inspectRoute: 'security action:"status" includeParameters:true',
316
+ userRoute: 'Agent Workspace -> Safety & Recovery',
317
+ requiresConfirmation: false,
318
+ missingFields: explainTarget ? ['arguments or action details to explain'] : ['tool name or route id', 'arguments or action details to explain'],
319
+ supportingRoutes: [
320
+ 'security action:"status" includeParameters:true',
321
+ 'security action:"finding" findingId:"..." includeParameters:true',
322
+ 'agent_harness mode:"policy_explain" toolName:"..." toolArgs:{...}',
323
+ ],
324
+ policy: 'Policy explanations are read-only and never execute the target tool. Final execution still uses the live route guard, permission prompt, and typed confirmation gate.',
325
+ });
326
+ }
327
+ }
328
+
329
+ if (supportBundleLike(lower)) {
330
+ const bundleEffect = supportBundleEffectLike(lower);
331
+ add({
332
+ id: 'support-bundle-route',
333
+ label: 'Support bundle and diagnostics packet route',
334
+ score: 96,
335
+ userSurface: 'Safety and recovery workspace',
336
+ userOutcome: 'Inspect available redacted support, diagnostic, trust, auth, or forensic bundles before exporting or importing anything.',
337
+ why: 'The request mentions support bundles, diagnostic bundles, forensic bundles, or support packets.',
338
+ modelRoute: `support action:"status" query:${quote(request)} includeParameters:true`,
339
+ inspectRoute: 'support action:"status" includeParameters:true',
340
+ userRoute: 'Agent Workspace -> Safety & Recovery -> Support bundles',
341
+ requiresConfirmation: bundleEffect,
342
+ missingFields: bundleEffect ? ['bundle type or path', 'export/import/share destination when applicable', 'confirmation before bundle export, import, or external sharing'] : undefined,
343
+ supportingRoutes: [
344
+ 'support action:"bundle" bundlePath:"..." includeParameters:true',
345
+ 'agent_harness mode:"support_bundles" includeParameters:true',
346
+ 'workspace action:"actions" query:"support bundle" includeParameters:true',
347
+ 'agent_harness mode:"run_workspace_action" actionId:"..." confirm:true explicitUserRequest:"..."',
348
+ ],
349
+ policy: 'Bundle catalog and bundle inspection are read-only and redacted. Bundle export, import, file writes, and sharing remain confirmation-gated workspace or slash-command flows.',
350
+ });
351
+ }
352
+
353
+ if (sessionWorkspaceLike(lower) && !externalMemoryProviderLike(lower)) {
354
+ const mutation = sessionMutationLike(lower);
355
+ add({
356
+ id: 'saved-session-route',
357
+ label: 'Saved sessions, bookmarks, and transcript continuity',
358
+ score: 97,
359
+ userSurface: 'Conversation workspace',
360
+ userOutcome: 'Find, inspect, resume, export, or manage saved Agent sessions and bookmarks from the conversation workspace.',
361
+ why: 'The request mentions saved sessions, session search, transcript export, bookmarks, restore, or conversation continuity.',
362
+ modelRoute: `sessions action:"list" query:${quote(request)} includeParameters:true`,
363
+ inspectRoute: 'sessions action:"list" includeParameters:true',
364
+ userRoute: 'Agent Workspace -> Conversation -> Saved sessions',
365
+ requiresConfirmation: mutation,
366
+ missingFields: mutation ? ['session id, title, or search target', 'exact lifecycle action', 'confirmation before save/load/resume/rename/fork/export/delete/bookmark changes'] : undefined,
367
+ supportingRoutes: [
368
+ 'sessions action:"list" query:"..." includeParameters:true',
369
+ 'sessions action:"get" sessionId:"..." includeParameters:true',
370
+ 'agent_harness mode:"sessions" includeParameters:true',
371
+ 'workspace action:"actions" categoryId:"conversation" query:"session" includeParameters:true',
372
+ 'agent_harness mode:"run_workspace_action" actionId:"session-save|session-load|session-export-saved|session-delete" confirm:true explicitUserRequest:"..."',
373
+ ],
374
+ policy: 'Session and bookmark inspection is read-only. Save, load, resume, rename, fork, export, delete, and bookmark writes stay visible and confirmed through workspace or slash-command routes.',
375
+ });
376
+ }
377
+
378
+ if (releaseAuditLike(lower)) {
379
+ const evidence = releaseEvidenceLike(lower);
380
+ add({
381
+ id: evidence ? 'release-evidence-route' : 'release-readiness-route',
382
+ label: evidence ? 'Release evidence artifact route' : 'Release readiness inventory route',
383
+ score: 96,
384
+ userSurface: 'Operator audit workspace',
385
+ userOutcome: evidence
386
+ ? 'Inspect packaged release evidence and operator/audit artifacts without expanding raw files blindly.'
387
+ : 'Inspect the release-quality inventory, gates, and readiness dimensions before claiming a product capability is covered.',
388
+ why: 'The request mentions release evidence, readiness inventory, release gates, verification ledger, or operator audit artifacts.',
389
+ modelRoute: evidence
390
+ ? `audit action:"evidence" query:${quote(request)} includeParameters:true`
391
+ : `audit action:"readiness" query:${quote(request)} includeParameters:true`,
392
+ inspectRoute: evidence
393
+ ? 'audit action:"evidence" includeParameters:true'
394
+ : 'audit action:"readiness" includeParameters:true',
395
+ userRoute: 'Agent Workspace -> Operator Audit',
396
+ requiresConfirmation: false,
397
+ supportingRoutes: evidence
398
+ ? [
399
+ 'audit action:"artifact" artifactId:"..." includeParameters:true',
400
+ 'audit action:"readiness" includeParameters:true',
401
+ 'agent_harness mode:"release_evidence" includeParameters:true',
402
+ ]
403
+ : [
404
+ 'audit action:"item" itemId:"..." includeParameters:true',
405
+ 'audit action:"evidence" includeParameters:true',
406
+ 'agent_harness mode:"release_readiness" includeParameters:true',
407
+ ],
408
+ policy: 'Release evidence and readiness inventory inspection are read-only. They expose packaged audit facts and bounded artifact content, not product mutations.',
409
+ });
410
+ }
411
+
412
+ if (hasAny(lower, ['daemon method', 'operator method', 'host capability', 'service endpoint', 'control plane', 'api route'])) {
413
+ add({
414
+ id: 'connected-host-contract',
415
+ label: 'Connected host capability or method contract',
416
+ score: 78,
417
+ userSurface: 'Connected host diagnostics',
418
+ userOutcome: 'Inspect daemon capabilities through public contracts instead of guessing hidden routes.',
419
+ why: 'The request asks about daemon/operator/API route capability or service posture.',
420
+ modelRoute: 'host action:"capabilities" includeParameters:true',
421
+ inspectRoute: 'host action:"methods" includeParameters:true',
422
+ userRoute: 'Agent Workspace -> Start',
423
+ requiresConfirmation: false,
424
+ supportingRoutes: [
425
+ 'host action:"method" methodId:"..."',
426
+ 'agent_operator_method methodId:"..." confirm:true explicitUserRequest:"..."',
427
+ 'host action:"services" includeParameters:true',
428
+ ],
429
+ policy: 'Method discovery is read-only; write/admin daemon methods require exact method id, confirmation, and an explicit user request.',
430
+ });
431
+ }
432
+ }