@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
@@ -20,6 +20,58 @@ export interface AgentWorkspaceChannelStatus {
20
20
  readonly nextStep: string;
21
21
  }
22
22
 
23
+ export type AgentWorkspaceChannelSetupGuideStatus = 'ready' | 'attention' | 'setup-needed';
24
+ export type AgentWorkspaceChannelSetupGuideStepStatus = 'complete' | 'current' | 'pending';
25
+ export type AgentWorkspaceChannelSetupGuideStepSafety = 'read-only' | 'settings' | 'confirmed';
26
+
27
+ export interface AgentWorkspaceChannelSetupGuideStep {
28
+ readonly id: string;
29
+ readonly label: string;
30
+ readonly status: AgentWorkspaceChannelSetupGuideStepStatus;
31
+ readonly detail: string;
32
+ readonly userRoute: string;
33
+ readonly modelRoute: string;
34
+ readonly safety: AgentWorkspaceChannelSetupGuideStepSafety;
35
+ }
36
+
37
+ export interface AgentWorkspaceChannelSetupGuideChannel {
38
+ readonly channelId: string;
39
+ readonly label: string;
40
+ readonly setupState: AgentWorkspaceChannelStatus['setupState'];
41
+ readonly enabled: boolean;
42
+ readonly ready: boolean;
43
+ readonly delivery: AgentWorkspaceChannelStatus['delivery'];
44
+ readonly riskLabel: string;
45
+ readonly summary: string;
46
+ readonly guideRoute: string;
47
+ readonly modelRoute: string;
48
+ }
49
+
50
+ export interface AgentWorkspaceChannelSetupGuide {
51
+ readonly status: AgentWorkspaceChannelSetupGuideStatus;
52
+ readonly summary: string;
53
+ readonly progressLabel: string;
54
+ readonly totalChannels: number;
55
+ readonly enabledChannels: number;
56
+ readonly readyChannels: number;
57
+ readonly attentionChannels: number;
58
+ readonly configuredTargets: number;
59
+ readonly currentChannelId: string | null;
60
+ readonly currentChannelLabel: string | null;
61
+ readonly currentStepId: string | null;
62
+ readonly currentStepLabel: string | null;
63
+ readonly channels: readonly AgentWorkspaceChannelSetupGuideChannel[];
64
+ readonly steps: readonly AgentWorkspaceChannelSetupGuideStep[];
65
+ readonly routes: {
66
+ readonly readiness: string;
67
+ readonly attention: string;
68
+ readonly accounts: string;
69
+ readonly policies: string;
70
+ readonly status: string;
71
+ };
72
+ readonly policy: string;
73
+ }
74
+
23
75
  interface AgentWorkspaceConfigReader {
24
76
  get(key: string): unknown;
25
77
  }
@@ -273,3 +325,214 @@ function buildChannelStatus(context: CommandContext, spec: AgentWorkspaceChannel
273
325
  export function buildAgentWorkspaceChannels(context: CommandContext): readonly AgentWorkspaceChannelStatus[] {
274
326
  return AGENT_WORKSPACE_CHANNEL_SPECS.map((spec) => buildChannelStatus(context, spec));
275
327
  }
328
+
329
+ function channelGuideModelRoute(channelId?: string): string {
330
+ return channelId
331
+ ? `channels action:"setup" channelId:"${channelId}"`
332
+ : 'channels action:"setup"';
333
+ }
334
+
335
+ function summarizeGuideChannel(channel: AgentWorkspaceChannelStatus): string {
336
+ if (!channel.enabled) return `Enable ${channel.label} only if the user wants this surface.`;
337
+ if (channel.setupState === 'needs-config') return `Missing ${channel.missingRequiredKeys.length} required config key(s).`;
338
+ if (channel.setupState === 'needs-target') return 'Ready for explicit targets; default target is not configured.';
339
+ return `${channel.label} is ready; delivery still requires explicit user action.`;
340
+ }
341
+
342
+ function rankedChannelGuideChannels(channels: readonly AgentWorkspaceChannelStatus[]): readonly AgentWorkspaceChannelStatus[] {
343
+ const rank = (channel: AgentWorkspaceChannelStatus): number => {
344
+ if (channel.setupState === 'needs-config') return 0;
345
+ if (channel.setupState === 'needs-target') return 1;
346
+ if (channel.setupState === 'disabled') return 2;
347
+ return 3;
348
+ };
349
+ return [...channels].sort((left, right) => rank(left) - rank(right) || left.label.localeCompare(right.label));
350
+ }
351
+
352
+ function currentGuideChannel(channels: readonly AgentWorkspaceChannelStatus[]): AgentWorkspaceChannelStatus | null {
353
+ const ranked = rankedChannelGuideChannels(channels);
354
+ return ranked[0] ?? null;
355
+ }
356
+
357
+ function currentGuideStepId(channel: AgentWorkspaceChannelStatus | null): string {
358
+ if (!channel) return 'choose-channel';
359
+ if (!channel.enabled) return 'enable-channel';
360
+ if (channel.setupState === 'needs-config') return 'inspect-setup-schema';
361
+ if (channel.setupState === 'needs-target') return 'choose-delivery-target';
362
+ return 'review-policy';
363
+ }
364
+
365
+ function guideStepStatus(stepId: string, currentStepId: string, order: readonly string[]): AgentWorkspaceChannelSetupGuideStepStatus {
366
+ const stepIndex = order.indexOf(stepId);
367
+ const currentIndex = order.indexOf(currentStepId);
368
+ if (stepIndex < currentIndex) return 'complete';
369
+ if (stepIndex === currentIndex) return 'current';
370
+ return 'pending';
371
+ }
372
+
373
+ function buildGuideSteps(channel: AgentWorkspaceChannelStatus | null): readonly AgentWorkspaceChannelSetupGuideStep[] {
374
+ const channelId = channel?.id ?? '<channel-id>';
375
+ const channelLabel = channel?.label ?? 'a channel';
376
+ const currentStepId = currentGuideStepId(channel);
377
+ const order = [
378
+ 'choose-channel',
379
+ 'enable-channel',
380
+ 'inspect-setup-schema',
381
+ 'configure-secrets',
382
+ 'choose-delivery-target',
383
+ 'review-policy',
384
+ 'run-live-checks',
385
+ 'send-explicit-test',
386
+ ] as const;
387
+ const missingConfig = channel && channel.missingRequiredKeys.length > 0
388
+ ? channel.missingRequiredKeys.join(', ')
389
+ : 'the required secret refs or host-owned settings';
390
+ const targetKeys = channel && channel.defaultTargetKeys.length > 0
391
+ ? channel.defaultTargetKeys.join(', ')
392
+ : 'an explicit delivery target';
393
+ const makeStep = (
394
+ id: typeof order[number],
395
+ label: string,
396
+ detail: string,
397
+ userRoute: string,
398
+ modelRoute: string,
399
+ safety: AgentWorkspaceChannelSetupGuideStepSafety,
400
+ ): AgentWorkspaceChannelSetupGuideStep => ({
401
+ id,
402
+ label,
403
+ status: guideStepStatus(id, currentStepId, order),
404
+ detail,
405
+ userRoute,
406
+ modelRoute,
407
+ safety,
408
+ });
409
+ return [
410
+ makeStep(
411
+ 'choose-channel',
412
+ 'Choose channel',
413
+ 'Pick the channel the user actually wants before collecting credentials or exposing delivery routes.',
414
+ '/channels',
415
+ 'channels action:"status"',
416
+ 'read-only',
417
+ ),
418
+ makeStep(
419
+ 'enable-channel',
420
+ 'Enable surface',
421
+ `Enable ${channelLabel} in the owning GoodVibes host or Agent settings only after the user chooses it.`,
422
+ `/settings surfaces.${channelId}.enabled`,
423
+ `settings action:"get" query:"surfaces.${channelId}.enabled" includeParameters:true`,
424
+ 'settings',
425
+ ),
426
+ makeStep(
427
+ 'inspect-setup-schema',
428
+ 'Inspect setup schema',
429
+ `Open the read-only ${channelLabel} setup schema before asking for credentials.`,
430
+ `/channels setup ${channelId}`,
431
+ `channels action:"channel" channelId:"${channelId}" includeParameters:true`,
432
+ 'read-only',
433
+ ),
434
+ makeStep(
435
+ 'configure-secrets',
436
+ 'Configure secrets',
437
+ `Configure ${missingConfig}; secret values must stay in the secret manager or owning host.`,
438
+ `/settings surfaces.${channelId}`,
439
+ `settings action:"list" query:"surfaces.${channelId}" includeParameters:true`,
440
+ 'settings',
441
+ ),
442
+ makeStep(
443
+ 'choose-delivery-target',
444
+ 'Choose target',
445
+ `Configure ${targetKeys}, or require the user to provide an explicit target on every send.`,
446
+ `/channels show ${channelId}`,
447
+ `channels action:"channel" channelId:"${channelId}" includeParameters:true`,
448
+ 'read-only',
449
+ ),
450
+ makeStep(
451
+ 'review-policy',
452
+ 'Review allowlist',
453
+ `Review ${channelLabel} account and allowlist policy before any delivery test.`,
454
+ '/channels policies',
455
+ 'channels action:"status" includeParameters:true',
456
+ 'read-only',
457
+ ),
458
+ makeStep(
459
+ 'run-live-checks',
460
+ 'Run live checks',
461
+ `Inspect connected-host status and doctor output for ${channelLabel}; do not run repair actions from the guide.`,
462
+ `/channels doctor ${channelId}`,
463
+ `channels action:"channel" channelId:"${channelId}" includeParameters:true`,
464
+ 'read-only',
465
+ ),
466
+ makeStep(
467
+ 'send-explicit-test',
468
+ 'Send explicit test',
469
+ 'Send one test message only after the user asks for that exact target and confirms the send.',
470
+ `/channels send --channel ${channelId}:route:Label --message "Test from GoodVibes Agent" --yes`,
471
+ 'agent_channel_send confirm:true explicitUserRequest:"..."',
472
+ 'confirmed',
473
+ ),
474
+ ];
475
+ }
476
+
477
+ export function buildAgentWorkspaceChannelSetupGuide(
478
+ channels: readonly AgentWorkspaceChannelStatus[],
479
+ options: { readonly channelId?: string } = {},
480
+ ): AgentWorkspaceChannelSetupGuide {
481
+ const lookup = options.channelId?.trim().toLowerCase();
482
+ const requested = lookup
483
+ ? channels.find((channel) => channel.id.toLowerCase() === lookup || channel.label.toLowerCase() === lookup) ?? null
484
+ : null;
485
+ const ranked = rankedChannelGuideChannels(channels);
486
+ const current = requested ?? currentGuideChannel(channels);
487
+ const enabledChannels = channels.filter((channel) => channel.enabled).length;
488
+ const readyChannels = channels.filter((channel) => channel.ready).length;
489
+ const attentionChannels = channels.filter((channel) => channel.enabled && channel.setupState !== 'ready').length;
490
+ const configuredTargets = channels.filter((channel) => channel.defaultTarget === 'configured').length;
491
+ const status: AgentWorkspaceChannelSetupGuideStatus = attentionChannels > 0
492
+ ? 'attention'
493
+ : readyChannels > 0
494
+ ? 'ready'
495
+ : 'setup-needed';
496
+ const steps = buildGuideSteps(current);
497
+ const currentStep = steps.find((step) => step.status === 'current') ?? null;
498
+ const summary = status === 'attention'
499
+ ? `${attentionChannels} enabled channel(s) need setup. Start with ${current?.label ?? 'the first attention channel'}.`
500
+ : status === 'ready'
501
+ ? `${readyChannels}/${channels.length} channel(s) ready. Review allowlists and use explicit delivery tests only on request.`
502
+ : 'No channel is ready yet. Choose one channel, enable it intentionally, then configure only that surface.';
503
+ return {
504
+ status,
505
+ summary,
506
+ progressLabel: currentStep ? `${steps.findIndex((step) => step.id === currentStep.id) + 1}/${steps.length} ${currentStep.label}` : `0/${steps.length}`,
507
+ totalChannels: channels.length,
508
+ enabledChannels,
509
+ readyChannels,
510
+ attentionChannels,
511
+ configuredTargets,
512
+ currentChannelId: current?.id ?? null,
513
+ currentChannelLabel: current?.label ?? null,
514
+ currentStepId: currentStep?.id ?? null,
515
+ currentStepLabel: currentStep?.label ?? null,
516
+ channels: ranked.map((channel) => ({
517
+ channelId: channel.id,
518
+ label: channel.label,
519
+ setupState: channel.setupState,
520
+ enabled: channel.enabled,
521
+ ready: channel.ready,
522
+ delivery: channel.delivery,
523
+ riskLabel: channel.riskLabel,
524
+ summary: summarizeGuideChannel(channel),
525
+ guideRoute: `/channels guide ${channel.id}`,
526
+ modelRoute: channelGuideModelRoute(channel.id),
527
+ })),
528
+ steps,
529
+ routes: {
530
+ readiness: '/channels',
531
+ attention: '/channels attention',
532
+ accounts: '/channels accounts',
533
+ policies: '/channels policies',
534
+ status: '/channels status',
535
+ },
536
+ policy: 'Read-only channel setup guide. Credentials stay in secret-backed settings or the owning GoodVibes host, and delivery tests require explicit confirmed user action.',
537
+ };
538
+ }
@@ -1,7 +1,14 @@
1
1
  import type { AgentWorkspaceBasicCommandEditorKind } from './agent-workspace-basic-command-editors.ts';
2
+ import { buildAgentArtifactBrowserPromptSubmission, buildAgentArtifactExportPromptSubmission, buildAgentArtifactPackagePromptSubmission, buildAgentArtifactPromoteKnowledgePromptSubmission } from './agent-workspace-artifact-browser-editor.ts';
2
3
  import { buildAgentWorkspaceBasicCommandEditorSubmission, isAgentWorkspaceBasicCommandEditorKind } from './agent-workspace-basic-command-editors.ts';
4
+ import { buildAgentDocumentReviewerReadinessPromptSubmission, buildAgentDocumentReviewPacketPresetPromptSubmission, buildAgentDocumentReviewPacketPresetRefreshPromptSubmission, buildAgentDocumentReviewPacketSharePromptSubmission, buildAgentDocumentReviewPacketWizardPromptSubmission } from './agent-workspace-document-ops-editor.ts';
5
+ import { buildAgentDocumentPromptSubmission } from './agent-workspace-document-editor.ts';
3
6
  import { buildAgentKnowledgeUrlEditorSubmission } from './agent-workspace-knowledge-url-editor.ts';
4
7
  import { buildAgentKnowledgeQueryEditorSubmission } from './agent-workspace-knowledge-query-editor.ts';
8
+ import { buildAgentModelCompareAnalyticsPromptSubmission, buildAgentModelCompareApplyPromptSubmission, buildAgentModelCompareExportPromptSubmission, buildAgentModelCompareHandoffDiffPromptSubmission, buildAgentModelCompareJudgmentPromptSubmission, buildAgentModelComparePromptSubmission, buildAgentModelCompareReviewPromptSubmission, buildAgentModelCompareRouteDecisionPromptSubmission } from './agent-workspace-model-compare-editor.ts';
9
+ import { buildAgentResearchReportPromptSubmission } from './agent-workspace-research-report-editor.ts';
10
+ import { buildAgentResearchRunPromptSubmission } from './agent-workspace-research-run-editor.ts';
11
+ import { buildAgentResearchSourcePromptSubmission } from './agent-workspace-research-source-editor.ts';
5
12
  import { buildAgentReminderScheduleEditorSubmission } from './agent-workspace-reminder-schedule-editor.ts';
6
13
  import { buildAgentRoutineScheduleEditorSubmission } from './agent-workspace-routine-schedule-editor.ts';
7
14
  import { buildAgentWorkspaceWebResearchSubmission } from './agent-workspace-web-research-editor.ts';
@@ -12,6 +19,9 @@ type AgentWorkspaceCommandEditorKind = AgentWorkspaceBasicCommandEditorKind | Ex
12
19
  AgentWorkspaceEditorKind,
13
20
  'web-research'
14
21
  | 'web-fetch'
22
+ | 'research-run'
23
+ | 'research-source'
24
+ | 'research-report'
15
25
  | 'knowledge-url'
16
26
  | 'knowledge-urls'
17
27
  | 'knowledge-file'
@@ -20,6 +30,32 @@ type AgentWorkspaceCommandEditorKind = AgentWorkspaceBasicCommandEditorKind | Ex
20
30
  | 'knowledge-reindex'
21
31
  | 'knowledge-search'
22
32
  | 'knowledge-ask'
33
+ | 'model-compare'
34
+ | 'document-browse'
35
+ | 'document-show'
36
+ | 'document-create'
37
+ | 'document-update'
38
+ | 'document-review'
39
+ | 'document-comment'
40
+ | 'document-resolve-comment'
41
+ | 'document-suggest'
42
+ | 'document-accept-suggestion'
43
+ | 'document-reject-suggestion'
44
+ | 'document-insert-artifact'
45
+ | 'document-attach-artifact'
46
+ | 'document-export'
47
+ | 'document-reviewer-readiness'
48
+ | 'document-review-packet-wizard'
49
+ | 'document-review-packet-preset'
50
+ | 'document-review-packet-preset-refresh'
51
+ | 'document-review-packet-share'
52
+ | 'model-compare-review'
53
+ | 'model-compare-handoff-diff'
54
+ | 'model-compare-judge'
55
+ | 'model-compare-apply'
56
+ | 'model-compare-route-decision'
57
+ | 'model-compare-export'
58
+ | 'model-compare-analytics'
23
59
  | 'mcp-server'
24
60
  | 'notify-webhook'
25
61
  | 'notify-webhook-remove'
@@ -35,6 +71,11 @@ type AgentWorkspaceCommandEditorKind = AgentWorkspaceBasicCommandEditorKind | Ex
35
71
  | 'knowledge-bookmarks'
36
72
  | 'tts-prompt'
37
73
  | 'image-input'
74
+ | 'artifact-browser'
75
+ | 'artifact-show'
76
+ | 'artifact-export-file'
77
+ | 'artifact-export-package'
78
+ | 'artifact-promote-knowledge'
38
79
  | 'skill-bundle'
39
80
  | 'persona-discovery-import'
40
81
  | 'routine-discovery-import'
@@ -82,9 +123,43 @@ type AgentWorkspaceCommandEditorSubmission =
82
123
  export function isAgentWorkspaceCommandEditorKind(kind: AgentWorkspaceEditorKind): kind is AgentWorkspaceCommandEditorKind {
83
124
  return kind === 'web-research'
84
125
  || kind === 'web-fetch'
126
+ || kind === 'research-run'
127
+ || kind === 'research-source'
128
+ || kind === 'research-report'
85
129
  || kind === 'knowledge-url'
86
130
  || kind === 'knowledge-search'
87
131
  || kind === 'knowledge-ask'
132
+ || kind === 'artifact-browser'
133
+ || kind === 'artifact-show'
134
+ || kind === 'artifact-export-file'
135
+ || kind === 'artifact-export-package'
136
+ || kind === 'artifact-promote-knowledge'
137
+ || kind === 'model-compare'
138
+ || kind === 'document-browse'
139
+ || kind === 'document-show'
140
+ || kind === 'document-create'
141
+ || kind === 'document-update'
142
+ || kind === 'document-review'
143
+ || kind === 'document-comment'
144
+ || kind === 'document-resolve-comment'
145
+ || kind === 'document-suggest'
146
+ || kind === 'document-accept-suggestion'
147
+ || kind === 'document-reject-suggestion'
148
+ || kind === 'document-insert-artifact'
149
+ || kind === 'document-attach-artifact'
150
+ || kind === 'document-export'
151
+ || kind === 'document-reviewer-readiness'
152
+ || kind === 'document-review-packet-wizard'
153
+ || kind === 'document-review-packet-preset'
154
+ || kind === 'document-review-packet-preset-refresh'
155
+ || kind === 'document-review-packet-share'
156
+ || kind === 'model-compare-review'
157
+ || kind === 'model-compare-handoff-diff'
158
+ || kind === 'model-compare-judge'
159
+ || kind === 'model-compare-apply'
160
+ || kind === 'model-compare-route-decision'
161
+ || kind === 'model-compare-export'
162
+ || kind === 'model-compare-analytics'
88
163
  || kind === 'routine-schedule'
89
164
  || kind === 'reminder-schedule'
90
165
  || isAgentWorkspaceBasicCommandEditorKind(kind);
@@ -99,10 +174,87 @@ export function buildAgentWorkspaceCommandEditorSubmission(
99
174
  if (editor.kind === 'web-research' || editor.kind === 'web-fetch') {
100
175
  return buildAgentWorkspaceWebResearchSubmission(editor, readField, promptDispatchAvailable);
101
176
  }
177
+ if (editor.kind === 'research-report') {
178
+ return buildAgentResearchReportPromptSubmission(editor, readField, promptDispatchAvailable);
179
+ }
180
+ if (editor.kind === 'research-run') {
181
+ return buildAgentResearchRunPromptSubmission(editor, readField, promptDispatchAvailable);
182
+ }
183
+ if (editor.kind === 'research-source') {
184
+ return buildAgentResearchSourcePromptSubmission(editor, readField, promptDispatchAvailable);
185
+ }
102
186
  if (editor.kind === 'knowledge-url') return buildAgentKnowledgeUrlEditorSubmission(editor, readField, commandDispatchAvailable);
103
187
  if (editor.kind === 'knowledge-search' || editor.kind === 'knowledge-ask') {
104
188
  return buildAgentKnowledgeQueryEditorSubmission(editor, readField, commandDispatchAvailable);
105
189
  }
190
+ if (editor.kind === 'artifact-browser' || editor.kind === 'artifact-show') {
191
+ return buildAgentArtifactBrowserPromptSubmission(editor, readField, promptDispatchAvailable);
192
+ }
193
+ if (editor.kind === 'artifact-export-file') {
194
+ return buildAgentArtifactExportPromptSubmission(editor, readField, promptDispatchAvailable);
195
+ }
196
+ if (editor.kind === 'artifact-export-package') {
197
+ return buildAgentArtifactPackagePromptSubmission(editor, readField, promptDispatchAvailable);
198
+ }
199
+ if (editor.kind === 'artifact-promote-knowledge') {
200
+ return buildAgentArtifactPromoteKnowledgePromptSubmission(editor, readField, promptDispatchAvailable);
201
+ }
202
+ if (
203
+ editor.kind === 'document-browse'
204
+ || editor.kind === 'document-show'
205
+ || editor.kind === 'document-create'
206
+ || editor.kind === 'document-update'
207
+ || editor.kind === 'document-review'
208
+ || editor.kind === 'document-comment'
209
+ || editor.kind === 'document-resolve-comment'
210
+ || editor.kind === 'document-suggest'
211
+ || editor.kind === 'document-accept-suggestion'
212
+ || editor.kind === 'document-reject-suggestion'
213
+ || editor.kind === 'document-insert-artifact'
214
+ || editor.kind === 'document-attach-artifact'
215
+ || editor.kind === 'document-export'
216
+ ) {
217
+ return buildAgentDocumentPromptSubmission(editor, readField, promptDispatchAvailable);
218
+ }
219
+ if (editor.kind === 'document-reviewer-readiness') {
220
+ return buildAgentDocumentReviewerReadinessPromptSubmission(editor, readField, promptDispatchAvailable);
221
+ }
222
+ if (editor.kind === 'document-review-packet-wizard') {
223
+ return buildAgentDocumentReviewPacketWizardPromptSubmission(editor, readField, promptDispatchAvailable);
224
+ }
225
+ if (editor.kind === 'document-review-packet-preset') {
226
+ return buildAgentDocumentReviewPacketPresetPromptSubmission(editor, readField, promptDispatchAvailable);
227
+ }
228
+ if (editor.kind === 'document-review-packet-preset-refresh') {
229
+ return buildAgentDocumentReviewPacketPresetRefreshPromptSubmission(editor, readField, promptDispatchAvailable);
230
+ }
231
+ if (editor.kind === 'document-review-packet-share') {
232
+ return buildAgentDocumentReviewPacketSharePromptSubmission(editor, readField, promptDispatchAvailable);
233
+ }
234
+ if (editor.kind === 'model-compare' || editor.kind === 'local-model-benchmark') {
235
+ return buildAgentModelComparePromptSubmission(editor, readField, promptDispatchAvailable);
236
+ }
237
+ if (editor.kind === 'model-compare-review') {
238
+ return buildAgentModelCompareReviewPromptSubmission(editor, readField, promptDispatchAvailable);
239
+ }
240
+ if (editor.kind === 'model-compare-handoff-diff') {
241
+ return buildAgentModelCompareHandoffDiffPromptSubmission(editor, readField, promptDispatchAvailable);
242
+ }
243
+ if (editor.kind === 'model-compare-judge') {
244
+ return buildAgentModelCompareJudgmentPromptSubmission(editor, readField, promptDispatchAvailable);
245
+ }
246
+ if (editor.kind === 'model-compare-apply') {
247
+ return buildAgentModelCompareApplyPromptSubmission(editor, readField, promptDispatchAvailable);
248
+ }
249
+ if (editor.kind === 'model-compare-route-decision') {
250
+ return buildAgentModelCompareRouteDecisionPromptSubmission(editor, readField, promptDispatchAvailable);
251
+ }
252
+ if (editor.kind === 'model-compare-export') {
253
+ return buildAgentModelCompareExportPromptSubmission(editor, readField, promptDispatchAvailable);
254
+ }
255
+ if (editor.kind === 'model-compare-analytics') {
256
+ return buildAgentModelCompareAnalyticsPromptSubmission(editor, readField, promptDispatchAvailable);
257
+ }
106
258
  if (isAgentWorkspaceBasicCommandEditorKind(editor.kind)) {
107
259
  return buildAgentWorkspaceBasicCommandEditorSubmission(editor, readField, commandDispatchAvailable);
108
260
  }