@pellux/goodvibes-agent 1.1.7 → 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 (255) hide show
  1. package/CHANGELOG.md +170 -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 +132577 -91483
  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 +39 -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 +199 -5
  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 +137 -7
  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 +106 -85
  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/version.ts +1 -1
@@ -0,0 +1,349 @@
1
+ import type { CommandContext } from './command-registry.ts';
2
+ import type { PromptContextReceipt } from '../agent/prompt-context-receipts.ts';
3
+ import { discoverProjectContextFiles } from '../agent/project-context-files.ts';
4
+ import { discoverVibeFiles } from '../agent/vibe-file.ts';
5
+ import type { AgentWorkspaceProcessSupervisionSummary, AgentWorkspacePromptContextReceiptSummary, AgentWorkspacePromptContextReceiptTimeline, AgentWorkspaceProjectContextSummary, AgentWorkspaceResearchContractSummary, AgentWorkspaceVibeSummary } from './agent-workspace-types.ts';
6
+
7
+ type WorkspaceMcpServerRecord = {
8
+ readonly name?: string;
9
+ readonly role?: string;
10
+ readonly connected?: boolean;
11
+ readonly trustMode?: string;
12
+ readonly schemaFreshness?: string;
13
+ };
14
+
15
+ const RESEARCH_BROWSER_TERMS = ['browser', 'desktop', 'computer use', 'screenshot', 'screen recording'];
16
+ const WORKSPACE_PROJECT_CONTEXT_SOURCES = ['.hermes.md', 'HERMES.md', 'AGENTS.md', 'CLAUDE.md', 'HERMES_HOME/SOUL.md', '.cursorrules', '.cursor/rules/*.mdc'] as const;
17
+ const WORKSPACE_PROMPT_CONTEXT_INSPECT_ROUTE = 'context action:"prompt" includeParameters:true' as const;
18
+ type WorkspacePromptReceiptOutcomeStatus = AgentWorkspacePromptContextReceiptSummary['outcomeStatus'];
19
+
20
+ function promptReceiptInspectRoute(receiptId: string): string {
21
+ return `context action:"receipt" receiptId:${JSON.stringify(receiptId)} includeParameters:true`;
22
+ }
23
+
24
+ function promptReceiptOutcomeRoute(status: WorkspacePromptReceiptOutcomeStatus): string {
25
+ return `context action:"receipts" outcomeStatus:${JSON.stringify(status)} includeParameters:true`;
26
+ }
27
+
28
+ function workspaceMcpServers(context: CommandContext): readonly WorkspaceMcpServerRecord[] {
29
+ try {
30
+ return (context.clients?.mcpApi?.listServerSecurity?.() ?? []) as readonly WorkspaceMcpServerRecord[];
31
+ } catch {
32
+ return [];
33
+ }
34
+ }
35
+
36
+ function matchesResearchBrowserTerm(server: WorkspaceMcpServerRecord): boolean {
37
+ const haystack = `${server.name ?? ''}\n${server.role ?? ''}`.toLowerCase();
38
+ return RESEARCH_BROWSER_TERMS.some((term) => haystack.includes(term));
39
+ }
40
+
41
+ export function buildResearchBrowserRunnerContract(context: CommandContext): AgentWorkspaceResearchContractSummary {
42
+ const browserServers = workspaceMcpServers(context).filter(matchesResearchBrowserTerm);
43
+ const ready = browserServers.some((server) =>
44
+ server.connected === true
45
+ && server.schemaFreshness === 'fresh'
46
+ && server.trustMode !== 'blocked'
47
+ && server.trustMode !== 'quarantined'
48
+ );
49
+ const needsReview = !ready && browserServers.length > 0;
50
+ return {
51
+ status: ready ? 'ready-with-confirmation' : needsReview ? 'needs-review' : 'setup-contract-needed',
52
+ label: ready ? 'ready with confirmation' : needsReview ? 'needs setup review' : 'setup needed',
53
+ next: ready
54
+ ? 'Use browser-backed research only when live browser state or authentication is necessary.'
55
+ : needsReview
56
+ ? 'Review browser/desktop MCP trust, connection, and schema freshness before live browser-backed research.'
57
+ : 'Use public web/fetch research now; configure a trusted browser/desktop route before live UI research.',
58
+ route: 'research action:"plan" includeParameters:true',
59
+ details: [
60
+ 'visible run controls',
61
+ 'source capture receipts',
62
+ 'bounded logs',
63
+ 'report handoff',
64
+ ],
65
+ };
66
+ }
67
+
68
+ export function buildResearchVisualReportContract(sourceSnapshot: {
69
+ readonly reviewed: number;
70
+ readonly used: number;
71
+ }): AgentWorkspaceResearchContractSummary {
72
+ const sourceReady = sourceSnapshot.reviewed + sourceSnapshot.used > 0;
73
+ return {
74
+ status: sourceReady ? 'visual-report-packet-ready' : 'waiting-for-reviewed-sources',
75
+ label: sourceReady ? 'visual report packet ready' : 'waiting for reviewed sources',
76
+ next: sourceReady
77
+ ? 'Save a sourced visual report packet now, then archive or promote the same reviewed artifact.'
78
+ : 'Review at least one source before saving a report or visual packet.',
79
+ route: sourceReady
80
+ ? 'research action:"report" title:"..." question:"..." sources:[...] visualReport:true requireCitationCoverage:true confirm:true explicitUserRequest:"..."'
81
+ : 'research action:"sources" includeParameters:true',
82
+ details: [
83
+ 'at-a-glance',
84
+ 'evidence matrix',
85
+ 'source map',
86
+ 'citations',
87
+ 'handoff',
88
+ 'archive',
89
+ ],
90
+ };
91
+ }
92
+
93
+ export function buildVibeSummary(context: CommandContext): AgentWorkspaceVibeSummary {
94
+ const shellPaths = context.workspace?.shellPaths;
95
+ if (!shellPaths) {
96
+ return {
97
+ status: 'unavailable',
98
+ applied: 0,
99
+ blocked: 0,
100
+ truncated: 0,
101
+ projectInitPath: null,
102
+ globalInitPath: null,
103
+ statusRoute: '/vibe status',
104
+ initProjectRoute: '/vibe init',
105
+ initGlobalRoute: '/vibe init --global',
106
+ next: 'Open a normal Agent workspace before relying on VIBE.md personality files.',
107
+ };
108
+ }
109
+ try {
110
+ const snapshot = discoverVibeFiles(shellPaths);
111
+ const truncated = snapshot.files.filter((file) => file.truncated).length;
112
+ const status = snapshot.blocked.length > 0 ? 'attention' : snapshot.files.length > 0 ? 'ready' : 'needs-setup';
113
+ return {
114
+ status,
115
+ applied: snapshot.files.length,
116
+ blocked: snapshot.blocked.length,
117
+ truncated,
118
+ projectInitPath: snapshot.projectInitPath,
119
+ globalInitPath: snapshot.globalInitPath,
120
+ statusRoute: '/vibe status',
121
+ initProjectRoute: '/vibe init',
122
+ initGlobalRoute: '/vibe init --global',
123
+ next: snapshot.blocked.length > 0
124
+ ? 'Inspect blocked VIBE.md files before relying on custom personality.'
125
+ : snapshot.files.length > 0
126
+ ? 'VIBE.md personality is available for later main-conversation turns.'
127
+ : 'Create a VIBE.md only when the user wants a persistent assistant feel.',
128
+ };
129
+ } catch {
130
+ return {
131
+ status: 'unavailable',
132
+ applied: 0,
133
+ blocked: 0,
134
+ truncated: 0,
135
+ projectInitPath: null,
136
+ globalInitPath: null,
137
+ statusRoute: '/vibe status',
138
+ initProjectRoute: '/vibe init',
139
+ initGlobalRoute: '/vibe init --global',
140
+ next: 'VIBE.md discovery failed; use /vibe status for a focused diagnostic.',
141
+ };
142
+ }
143
+ }
144
+
145
+ export function buildProjectContextSummary(context: CommandContext): AgentWorkspaceProjectContextSummary {
146
+ const shellPaths = context.workspace?.shellPaths;
147
+ if (!shellPaths) {
148
+ return {
149
+ status: 'unavailable',
150
+ loaded: 0,
151
+ blocked: 0,
152
+ truncated: 0,
153
+ supportedSources: WORKSPACE_PROJECT_CONTEXT_SOURCES,
154
+ targetAware: true,
155
+ catalogRoute: 'context action:"files"',
156
+ inspectRoute: 'context action:"file"',
157
+ next: 'Open a normal Agent workspace before relying on project context files.',
158
+ };
159
+ }
160
+ try {
161
+ const snapshot = discoverProjectContextFiles(shellPaths);
162
+ const truncated = snapshot.files.filter((file) => file.truncated).length;
163
+ const status = snapshot.blocked.length > 0 ? 'attention' : snapshot.files.length > 0 ? 'ready' : 'needs-setup';
164
+ return {
165
+ status,
166
+ loaded: snapshot.files.length,
167
+ blocked: snapshot.blocked.length,
168
+ truncated,
169
+ supportedSources: WORKSPACE_PROJECT_CONTEXT_SOURCES,
170
+ targetAware: true,
171
+ catalogRoute: 'context action:"files"',
172
+ inspectRoute: 'context action:"file"',
173
+ next: snapshot.blocked.length > 0
174
+ ? 'Inspect blocked context files before relying on project instructions.'
175
+ : snapshot.files.length > 0
176
+ ? 'Project context instructions are available; inspect target-specific files before nuanced work.'
177
+ : 'Add AGENTS.md or another supported context file when the project needs persistent instructions.',
178
+ };
179
+ } catch {
180
+ return {
181
+ status: 'unavailable',
182
+ loaded: 0,
183
+ blocked: 0,
184
+ truncated: 0,
185
+ supportedSources: WORKSPACE_PROJECT_CONTEXT_SOURCES,
186
+ targetAware: true,
187
+ catalogRoute: 'context action:"files"',
188
+ inspectRoute: 'context action:"file"',
189
+ next: 'Project context discovery failed; use context action:"files" for a focused diagnostic.',
190
+ };
191
+ }
192
+ }
193
+
194
+ function summarizePromptContextReceipt(receipt: PromptContextReceipt): AgentWorkspacePromptContextReceiptSummary {
195
+ const outcomeStatus = receipt.turnOutcome?.status ?? 'pending';
196
+ return {
197
+ receiptId: receipt.receiptId,
198
+ turnId: receipt.turnId,
199
+ source: receipt.source,
200
+ provider: receipt.provider,
201
+ model: receipt.model,
202
+ createdAt: receipt.createdAt,
203
+ activeRecords: receipt.activeRecords,
204
+ suppressedRecords: receipt.suppressedRecords,
205
+ segmentCount: receipt.segments.length,
206
+ approxPromptTokens: receipt.approxPromptTokens,
207
+ outcomeStatus,
208
+ stopReason: receipt.turnOutcome?.stopReason ?? null,
209
+ completedAt: receipt.turnOutcome?.completedAt ?? null,
210
+ detail: receipt.turnOutcome?.detail ?? null,
211
+ inspectRoute: promptReceiptInspectRoute(receipt.receiptId),
212
+ outcomeFilterRoute: promptReceiptOutcomeRoute(outcomeStatus),
213
+ };
214
+ }
215
+
216
+ export function buildPromptContextReceiptTimeline(context: CommandContext): AgentWorkspacePromptContextReceiptTimeline {
217
+ const store = context.clients?.promptContextReceipts;
218
+ if (!store) {
219
+ return {
220
+ status: 'unavailable',
221
+ count: 0,
222
+ latestReceiptId: null,
223
+ latestTurnId: null,
224
+ completedCount: 0,
225
+ errorCount: 0,
226
+ cancelledCount: 0,
227
+ pendingCount: 0,
228
+ inspectRoute: WORKSPACE_PROMPT_CONTEXT_INSPECT_ROUTE,
229
+ filterRoutes: {
230
+ completed: promptReceiptOutcomeRoute('completed'),
231
+ error: promptReceiptOutcomeRoute('error'),
232
+ cancelled: promptReceiptOutcomeRoute('cancelled'),
233
+ pending: promptReceiptOutcomeRoute('pending'),
234
+ },
235
+ next: 'Open a normal Agent workspace before relying on prompt-context receipt history.',
236
+ items: [],
237
+ };
238
+ }
239
+ try {
240
+ const count = store.count();
241
+ const recent = store.list(20);
242
+ const completedCount = recent.filter((receipt) => receipt.turnOutcome?.status === 'completed').length;
243
+ const errorCount = recent.filter((receipt) => receipt.turnOutcome?.status === 'error').length;
244
+ const cancelledCount = recent.filter((receipt) => receipt.turnOutcome?.status === 'cancelled').length;
245
+ const pendingCount = recent.filter((receipt) => !receipt.turnOutcome).length;
246
+ const latest = recent[0] ?? null;
247
+ return {
248
+ status: count > 0 ? 'ready' : 'empty',
249
+ count,
250
+ latestReceiptId: latest?.receiptId ?? null,
251
+ latestTurnId: latest?.turnId ?? null,
252
+ completedCount,
253
+ errorCount,
254
+ cancelledCount,
255
+ pendingCount,
256
+ inspectRoute: WORKSPACE_PROMPT_CONTEXT_INSPECT_ROUTE,
257
+ filterRoutes: {
258
+ completed: promptReceiptOutcomeRoute('completed'),
259
+ error: promptReceiptOutcomeRoute('error'),
260
+ cancelled: promptReceiptOutcomeRoute('cancelled'),
261
+ pending: promptReceiptOutcomeRoute('pending'),
262
+ },
263
+ next: count > 0
264
+ ? 'Use Prompt context to inspect recent applied/suppressed context and terminal outcomes without raw prompt text.'
265
+ : 'Run a normal Agent turn, then use Prompt context to review what local context was applied.',
266
+ items: recent.slice(0, 5).map(summarizePromptContextReceipt),
267
+ };
268
+ } catch {
269
+ return {
270
+ status: 'unavailable',
271
+ count: 0,
272
+ latestReceiptId: null,
273
+ latestTurnId: null,
274
+ completedCount: 0,
275
+ errorCount: 0,
276
+ cancelledCount: 0,
277
+ pendingCount: 0,
278
+ inspectRoute: WORKSPACE_PROMPT_CONTEXT_INSPECT_ROUTE,
279
+ filterRoutes: {
280
+ completed: promptReceiptOutcomeRoute('completed'),
281
+ error: promptReceiptOutcomeRoute('error'),
282
+ cancelled: promptReceiptOutcomeRoute('cancelled'),
283
+ pending: promptReceiptOutcomeRoute('pending'),
284
+ },
285
+ next: 'Prompt-context receipt history could not be read; use context action:"prompt" for a focused diagnostic.',
286
+ items: [],
287
+ };
288
+ }
289
+ }
290
+
291
+ type WorkspaceProcessEntry = {
292
+ readonly id?: string;
293
+ readonly done?: boolean;
294
+ };
295
+
296
+ type WorkspaceProcessManager = {
297
+ readonly list?: () => readonly WorkspaceProcessEntry[];
298
+ readonly getStatus?: (processId: string) => WorkspaceProcessEntry | undefined;
299
+ };
300
+
301
+ const WORKSPACE_STDIN_METHOD_NAMES = ['write', 'writeInput', 'sendInput', 'writeStdin', 'sendStdin', 'stdinWrite'] as const;
302
+ const WORKSPACE_PTY_METHOD_NAMES = ['spawnPty', 'openPty', 'createPty', 'pty'] as const;
303
+
304
+ function processManagerMethodNames(manager: WorkspaceProcessManager | undefined): readonly string[] {
305
+ if (!manager) return [];
306
+ const record = manager as unknown as Record<string, unknown>;
307
+ const own = Object.keys(record);
308
+ const prototype = Object.getPrototypeOf(manager) as Record<string, unknown> | null;
309
+ const protoNames = prototype ? Object.getOwnPropertyNames(prototype) : [];
310
+ return [...new Set([...own, ...protoNames])]
311
+ .filter((name) => name !== 'constructor' && typeof record[name] === 'function')
312
+ .sort((left, right) => left.localeCompare(right));
313
+ }
314
+
315
+ export function buildProcessSupervisionSummary(context: CommandContext): AgentWorkspaceProcessSupervisionSummary {
316
+ const manager = context.workspace?.processManager as WorkspaceProcessManager | undefined;
317
+ const methodNames = processManagerMethodNames(manager);
318
+ const stdinMethod = WORKSPACE_STDIN_METHOD_NAMES.find((name) => methodNames.includes(name)) ?? null;
319
+ const ptyMethod = WORKSPACE_PTY_METHOD_NAMES.find((name) => methodNames.includes(name)) ?? null;
320
+ const listed = (() => {
321
+ try {
322
+ return manager?.list?.() ?? [];
323
+ } catch {
324
+ return [];
325
+ }
326
+ })();
327
+ const entries = listed.map((entry) => {
328
+ try {
329
+ return entry.id && manager?.getStatus ? manager.getStatus(entry.id) ?? entry : entry;
330
+ } catch {
331
+ return entry;
332
+ }
333
+ });
334
+ return {
335
+ status: manager ? 'available' : 'unavailable',
336
+ tracked: entries.length,
337
+ running: entries.filter((entry) => entry.done !== true).length,
338
+ completed: entries.filter((entry) => entry.done === true).length,
339
+ stdinWriteStatus: stdinMethod ? 'supported-with-confirmation' : 'not-yet-supported',
340
+ stdinMethod,
341
+ ptyStatus: ptyMethod ? 'contract-discovered' : 'not-yet-supported',
342
+ ptyMethod,
343
+ sudoStatus: 'foreground-only',
344
+ processRoute: 'execution action:"processes"',
345
+ capabilitiesRoute: 'process action:"capabilities"',
346
+ visibleMonitorRoute: 'workspace action:"open" surfaceId:"process-monitor"',
347
+ liveTailRoute: 'workspace action:"open" surfaceId:"live-tail"',
348
+ };
349
+ }
@@ -38,6 +38,14 @@ export function buildAgentWorkspaceDelegationEditorSubmission(
38
38
  }
39
39
  const parts = ['/delegate'];
40
40
  if (isAffirmative(readField('review')) || isAffirmative(readField('wrfc'))) parts.push('--review');
41
+ const reason = readField('reason').trim();
42
+ const success = readField('success').trim();
43
+ const workspace = readField('workspace').trim();
44
+ const priority = readField('priority').trim();
45
+ if (reason) parts.push('--reason', quoteSlashCommandArg(reason));
46
+ if (success) parts.push('--success', quoteSlashCommandArg(success));
47
+ if (workspace) parts.push('--workspace', quoteSlashCommandArg(workspace));
48
+ if (priority) parts.push('--priority', quoteSlashCommandArg(priority));
41
49
  parts.push(quoteSlashCommandArg(readField('task')));
42
50
  const command = parts.join(' ');
43
51
  return {