@pellux/goodvibes-agent 1.5.5 → 1.5.6

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 (165) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +1 -1
  3. package/dist/package/main.js +94130 -79335
  4. package/docs/tools-and-commands.md +2 -1
  5. package/package.json +6 -3
  6. package/src/agent/autonomy-schedule-format.ts +1 -1
  7. package/src/agent/autonomy-schedule.ts +3 -3
  8. package/src/agent/calendar/calendar-oauth-service.ts +324 -0
  9. package/src/agent/calendar-subscription-registry.ts +497 -0
  10. package/src/agent/email/email-service.ts +57 -0
  11. package/src/agent/email/smtp-client.ts +30 -10
  12. package/src/agent/memory-prompt.ts +143 -12
  13. package/src/agent/operator-actions.ts +26 -22
  14. package/src/agent/prompt-context-receipts.ts +45 -18
  15. package/src/agent/reminder-schedule-format.ts +1 -1
  16. package/src/agent/reminder-schedule.ts +3 -3
  17. package/src/agent/routine-schedule-format.ts +2 -2
  18. package/src/agent/routine-schedule-promotion.ts +5 -5
  19. package/src/agent/routine-schedule-receipts.ts +2 -2
  20. package/src/agent/schedule-edit-format.ts +1 -1
  21. package/src/agent/schedule-edit.ts +5 -5
  22. package/src/agent/session-registration.ts +281 -0
  23. package/src/agent/vibe-file.ts +50 -0
  24. package/src/cli/local-library-command-shared.ts +146 -0
  25. package/src/cli/management.ts +2 -1
  26. package/src/cli/personas-command.ts +252 -0
  27. package/src/cli/resume-relaunch-notice.ts +151 -0
  28. package/src/cli/routines-command.ts +25 -2
  29. package/src/cli/service-posture.ts +3 -2
  30. package/src/cli/skill-bundle-command.ts +175 -0
  31. package/src/cli/skills-command.ts +309 -0
  32. package/src/cli/status.ts +43 -7
  33. package/src/cli/tui-startup.ts +24 -1
  34. package/src/config/agent-settings-policy.ts +0 -1
  35. package/src/config/secret-config.ts +4 -0
  36. package/src/core/conversation-rendering.ts +20 -11
  37. package/src/core/focus-tracker.ts +41 -0
  38. package/src/core/system-message-noise.ts +108 -0
  39. package/src/core/system-message-router.ts +54 -1
  40. package/src/core/thinking-overlay.ts +83 -0
  41. package/src/input/agent-workspace-access-command-editor-submission.ts +75 -108
  42. package/src/input/agent-workspace-access-command-editors.ts +108 -128
  43. package/src/input/agent-workspace-activation.ts +15 -0
  44. package/src/input/agent-workspace-basic-command-editor-submission.ts +292 -513
  45. package/src/input/agent-workspace-basic-command-editors.ts +433 -564
  46. package/src/input/agent-workspace-calendar-connect-editor.ts +116 -0
  47. package/src/input/agent-workspace-calendar-oauth-editor.ts +152 -0
  48. package/src/input/agent-workspace-calendar-subscribe-editor.ts +128 -0
  49. package/src/input/agent-workspace-categories.ts +7 -2
  50. package/src/input/agent-workspace-channel-command-editor-submission.ts +38 -52
  51. package/src/input/agent-workspace-channel-command-editors.ts +42 -46
  52. package/src/input/agent-workspace-command-editor-engine.ts +133 -0
  53. package/src/input/agent-workspace-command-editor.ts +4 -0
  54. package/src/input/agent-workspace-direct-editor-submission.ts +59 -0
  55. package/src/input/agent-workspace-email-connect-editor.ts +162 -0
  56. package/src/input/agent-workspace-knowledge-command-editor-submission.ts +52 -81
  57. package/src/input/agent-workspace-knowledge-command-editors.ts +71 -71
  58. package/src/input/agent-workspace-library-command-editor-submission.ts +10 -28
  59. package/src/input/agent-workspace-library-command-editors.ts +16 -2
  60. package/src/input/agent-workspace-live-counters.ts +55 -0
  61. package/src/input/agent-workspace-mcp-command-editor-submission.ts +60 -82
  62. package/src/input/agent-workspace-mcp-command-editors.ts +52 -0
  63. package/src/input/agent-workspace-media-command-editor-submission.ts +12 -39
  64. package/src/input/agent-workspace-media-command-editors.ts +10 -8
  65. package/src/input/agent-workspace-memory-command-editor-submission.ts +76 -151
  66. package/src/input/agent-workspace-memory-command-editors.ts +116 -141
  67. package/src/input/agent-workspace-operations-command-editor-submission.ts +131 -184
  68. package/src/input/agent-workspace-operations-command-editors.ts +150 -162
  69. package/src/input/agent-workspace-provider-command-editor-submission.ts +60 -106
  70. package/src/input/agent-workspace-provider-command-editors.ts +58 -68
  71. package/src/input/agent-workspace-search.ts +8 -1
  72. package/src/input/agent-workspace-session-command-editor-submission.ts +104 -132
  73. package/src/input/agent-workspace-session-command-editors.ts +160 -195
  74. package/src/input/agent-workspace-settings.ts +40 -1
  75. package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +55 -71
  76. package/src/input/agent-workspace-skill-bundle-command-editors.ts +65 -69
  77. package/src/input/agent-workspace-snapshot-builders.ts +431 -0
  78. package/src/input/agent-workspace-snapshot-config.ts +43 -0
  79. package/src/input/agent-workspace-snapshot.ts +198 -432
  80. package/src/input/agent-workspace-task-command-editor-submission.ts +34 -44
  81. package/src/input/agent-workspace-task-command-editors.ts +27 -28
  82. package/src/input/agent-workspace-types.ts +35 -1
  83. package/src/input/agent-workspace.ts +5 -14
  84. package/src/input/command-registry.ts +23 -1
  85. package/src/input/commands/calendar-connect-runtime.ts +226 -0
  86. package/src/input/commands/calendar-runtime.ts +110 -7
  87. package/src/input/commands/calendar-subscription-runtime.ts +225 -0
  88. package/src/input/commands/email-runtime.ts +100 -40
  89. package/src/input/commands/knowledge.ts +1 -1
  90. package/src/input/commands/network-scan-runtime.ts +75 -0
  91. package/src/input/commands/operator-actions-runtime.ts +9 -6
  92. package/src/input/commands/personas-runtime.ts +1 -1
  93. package/src/input/commands/schedule-runtime.ts +4 -4
  94. package/src/input/commands/session-content.ts +13 -1
  95. package/src/input/commands/session-workflow.ts +15 -20
  96. package/src/input/commands/session.ts +3 -1
  97. package/src/input/commands/shell-core.ts +20 -6
  98. package/src/input/commands.ts +2 -2
  99. package/src/input/delete-key-policy.ts +46 -0
  100. package/src/input/feed-context-factory.ts +10 -0
  101. package/src/input/handler-feed.ts +87 -0
  102. package/src/input/handler-modal-routes.ts +6 -1
  103. package/src/input/handler.ts +5 -0
  104. package/src/input/panel-paste-flood-guard.ts +94 -0
  105. package/src/input/settings-modal-types.ts +5 -3
  106. package/src/input/settings-modal.ts +21 -0
  107. package/src/main.ts +36 -36
  108. package/src/permissions/approval-posture.ts +141 -0
  109. package/src/renderer/agent-workspace-context-lines.ts +10 -2
  110. package/src/renderer/compositor.ts +27 -4
  111. package/src/renderer/diff.ts +61 -18
  112. package/src/renderer/fullscreen-primitives.ts +37 -18
  113. package/src/renderer/markdown.ts +20 -10
  114. package/src/renderer/modal-factory.ts +25 -15
  115. package/src/renderer/overlay-box.ts +23 -12
  116. package/src/renderer/process-indicator.ts +8 -3
  117. package/src/renderer/prompt-content-width.ts +16 -0
  118. package/src/renderer/settings-modal-helpers.ts +2 -0
  119. package/src/renderer/settings-modal.ts +2 -0
  120. package/src/renderer/startup-theme-probe.ts +35 -0
  121. package/src/renderer/status-glyphs.ts +11 -15
  122. package/src/renderer/system-message.ts +17 -2
  123. package/src/renderer/term-caps.ts +318 -0
  124. package/src/renderer/terminal-bg-probe.ts +373 -0
  125. package/src/renderer/terminal-escapes.ts +24 -0
  126. package/src/renderer/theme-mode-config.ts +87 -0
  127. package/src/renderer/theme.ts +241 -0
  128. package/src/renderer/thinking.ts +12 -3
  129. package/src/renderer/tool-call.ts +7 -3
  130. package/src/renderer/ui-factory.ts +92 -36
  131. package/src/renderer/ui-primitives.ts +33 -93
  132. package/src/runtime/bootstrap-core.ts +15 -0
  133. package/src/runtime/bootstrap-hook-bridge.ts +6 -0
  134. package/src/runtime/bootstrap-shell.ts +2 -0
  135. package/src/runtime/bootstrap.ts +68 -5
  136. package/src/runtime/calendar-boot-refresh.ts +105 -0
  137. package/src/runtime/lan-scan-consent.ts +253 -0
  138. package/src/runtime/services.ts +127 -2
  139. package/src/runtime/session-spine-rest-transport.ts +160 -0
  140. package/src/runtime/terminal-output-guard.ts +6 -1
  141. package/src/runtime/ui-services.ts +3 -0
  142. package/src/shell/agent-workspace-fullscreen.ts +5 -0
  143. package/src/shell/terminal-focus-mode.ts +120 -0
  144. package/src/shell/ui-openers.ts +13 -4
  145. package/src/tools/agent-harness-autonomy-intake.ts +5 -5
  146. package/src/tools/agent-harness-autonomy-queue.ts +1 -1
  147. package/src/tools/agent-harness-background-processes.ts +2 -1
  148. package/src/tools/agent-harness-metadata.ts +16 -8
  149. package/src/tools/agent-harness-operator-methods.ts +44 -8
  150. package/src/tools/agent-harness-personal-ops-discovery.ts +57 -10
  151. package/src/tools/agent-harness-personal-ops-lanes.ts +17 -5
  152. package/src/tools/agent-harness-personal-ops-operations.ts +7 -7
  153. package/src/tools/agent-harness-personal-ops-types.ts +6 -0
  154. package/src/tools/agent-harness-prompt-context.ts +26 -12
  155. package/src/tools/agent-harness-workspace-actions.ts +4 -0
  156. package/src/tools/agent-local-registry-args.ts +117 -0
  157. package/src/tools/agent-local-registry-memory.ts +227 -0
  158. package/src/tools/agent-local-registry-tool.ts +19 -237
  159. package/src/tools/agent-operator-briefing-tool.ts +2 -2
  160. package/src/tools/agent-operator-method-tool.ts +13 -0
  161. package/src/tools/agent-policy-explanation.ts +39 -4
  162. package/src/tools/agent-schedule-tool.ts +5 -5
  163. package/src/utils/terminal-width.ts +98 -1
  164. package/src/version.ts +1 -1
  165. package/src/cli/local-library-command.ts +0 -825
@@ -1,4 +1,6 @@
1
1
  import type { AgentWorkspaceEditorKind, AgentWorkspaceLocalEditor } from './agent-workspace-types.ts';
2
+ import type { AgentWorkspaceEditorSpec, AgentWorkspaceEditorSpecEntry } from './agent-workspace-command-editor-engine.ts';
3
+ import { createAgentWorkspaceEditorFromTable } from './agent-workspace-command-editor-engine.ts';
2
4
 
3
5
  export type AgentWorkspaceAccessCommandEditorKind = Extract<
4
6
  AgentWorkspaceEditorKind,
@@ -31,134 +33,95 @@ export function isAgentWorkspaceAccessCommandEditorKind(kind: AgentWorkspaceEdit
31
33
  || kind === 'voice-bundle-inspect';
32
34
  }
33
35
 
34
- export function createAgentWorkspaceAccessCommandEditor(kind: AgentWorkspaceAccessCommandEditorKind): AgentWorkspaceLocalEditor {
35
- if (kind === 'auth-show') {
36
- return {
37
- kind,
38
- mode: 'create',
39
- title: 'Inspect Provider Auth',
40
- selectedFieldIndex: 0,
41
- message: 'Inspect one provider auth route without printing token values.',
42
- fields: [
43
- { id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Provider id, such as openai.' },
44
- ],
45
- };
46
- }
47
- if (kind === 'auth-repair') {
48
- return {
49
- kind,
50
- mode: 'create',
51
- title: 'Review Provider Auth Repair',
52
- selectedFieldIndex: 0,
53
- message: 'Show provider auth repair guidance without storing tokens or starting login.',
54
- fields: [
55
- { id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Provider id to inspect.' },
56
- ],
57
- };
58
- }
59
- if (kind === 'auth-bundle-export') {
60
- return {
61
- kind,
62
- mode: 'create',
63
- title: 'Export Auth Review Bundle',
64
- selectedFieldIndex: 0,
65
- message: 'Export a redacted auth review bundle. Type yes on the final field to confirm.',
66
- fields: [
67
- { id: 'path', label: 'Output path', value: 'auth-review-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
68
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /auth bundle export with --yes.' },
69
- ],
70
- };
71
- }
72
- if (kind === 'auth-bundle-inspect') {
73
- return {
74
- kind,
75
- mode: 'create',
76
- title: 'Inspect Auth Review Bundle',
77
- selectedFieldIndex: 0,
78
- message: 'Inspect a redacted auth review bundle before import or sharing.',
79
- fields: [
80
- { id: 'path', label: 'Bundle path', value: 'auth-review-bundle.json', required: true, multiline: false, hint: 'Workspace-relative auth bundle JSON path.' },
81
- ],
82
- };
83
- }
84
- if (kind === 'trust-bundle-export') {
85
- return {
86
- kind,
87
- mode: 'create',
88
- title: 'Export Trust Bundle',
89
- selectedFieldIndex: 0,
90
- message: 'Export a redacted trust review bundle. Type yes on the final field to confirm.',
91
- fields: [
92
- { id: 'path', label: 'Output path', value: 'trust-review-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
93
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /trust bundle export with --yes.' },
94
- ],
95
- };
96
- }
97
- if (kind === 'trust-bundle-inspect') {
98
- return {
99
- kind,
100
- mode: 'create',
101
- title: 'Inspect Trust Bundle',
102
- selectedFieldIndex: 0,
103
- message: 'Inspect a trust review bundle before using it for setup review.',
104
- fields: [
105
- { id: 'path', label: 'Bundle path', value: 'trust-review-bundle.json', required: true, multiline: false, hint: 'Workspace-relative trust bundle JSON path.' },
106
- ],
107
- };
108
- }
109
- if (kind === 'subscription-bundle-export') {
110
- return {
111
- kind,
112
- mode: 'create',
113
- title: 'Export Subscription Bundle',
114
- selectedFieldIndex: 0,
115
- message: 'Export a redacted provider subscription bundle. Type yes on the final field to confirm.',
116
- fields: [
117
- { id: 'path', label: 'Output path', value: 'subscription-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
118
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /subscription bundle export with --yes.' },
119
- ],
120
- };
121
- }
122
- if (kind === 'subscription-bundle-inspect') {
123
- return {
124
- kind,
125
- mode: 'create',
126
- title: 'Inspect Subscription Bundle',
127
- selectedFieldIndex: 0,
128
- message: 'Inspect a provider subscription bundle before setup review.',
129
- fields: [
130
- { id: 'path', label: 'Bundle path', value: 'subscription-bundle.json', required: true, multiline: false, hint: 'Workspace-relative subscription bundle JSON path.' },
131
- ],
132
- };
133
- }
134
- if (kind === 'voice-enable' || kind === 'voice-disable') {
135
- const enabling = kind === 'voice-enable';
136
- return {
137
- kind,
138
- mode: 'update',
139
- title: enabling ? 'Enable Voice Interaction' : 'Disable Voice Interaction',
140
- selectedFieldIndex: 0,
141
- message: `${enabling ? 'Enable' : 'Disable'} local voice interaction for this Agent runtime. Type yes to confirm.`,
142
- fields: [
143
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: `Type yes to run /voice ${enabling ? 'enable' : 'disable'} with --yes.` },
144
- ],
145
- };
146
- }
147
- if (kind === 'voice-bundle-export') {
148
- return {
149
- kind,
150
- mode: 'create',
151
- title: 'Export Voice Bundle',
152
- selectedFieldIndex: 0,
153
- message: 'Export a voice setup bundle. Type yes on the final field to confirm.',
154
- fields: [
155
- { id: 'path', label: 'Output path', value: 'voice-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
156
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /voice bundle export with --yes.' },
157
- ],
158
- };
159
- }
160
- return {
161
- kind,
36
+ const ACCESS_COMMAND_EDITOR_SPECS: Readonly<Record<AgentWorkspaceAccessCommandEditorKind, AgentWorkspaceEditorSpecEntry<AgentWorkspaceAccessCommandEditorKind>>> = {
37
+ 'auth-show': {
38
+ mode: 'create',
39
+ title: 'Inspect Provider Auth',
40
+ selectedFieldIndex: 0,
41
+ message: 'Inspect one provider auth route without printing token values.',
42
+ fields: [
43
+ { id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Provider id, such as openai.' },
44
+ ],
45
+ },
46
+ 'auth-repair': {
47
+ mode: 'create',
48
+ title: 'Review Provider Auth Repair',
49
+ selectedFieldIndex: 0,
50
+ message: 'Show provider auth repair guidance without storing tokens or starting login.',
51
+ fields: [
52
+ { id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Provider id to inspect.' },
53
+ ],
54
+ },
55
+ 'auth-bundle-export': {
56
+ mode: 'create',
57
+ title: 'Export Auth Review Bundle',
58
+ selectedFieldIndex: 0,
59
+ message: 'Export a redacted auth review bundle. Type yes on the final field to confirm.',
60
+ fields: [
61
+ { id: 'path', label: 'Output path', value: 'auth-review-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
62
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /auth bundle export with --yes.' },
63
+ ],
64
+ },
65
+ 'auth-bundle-inspect': {
66
+ mode: 'create',
67
+ title: 'Inspect Auth Review Bundle',
68
+ selectedFieldIndex: 0,
69
+ message: 'Inspect a redacted auth review bundle before import or sharing.',
70
+ fields: [
71
+ { id: 'path', label: 'Bundle path', value: 'auth-review-bundle.json', required: true, multiline: false, hint: 'Workspace-relative auth bundle JSON path.' },
72
+ ],
73
+ },
74
+ 'trust-bundle-export': {
75
+ mode: 'create',
76
+ title: 'Export Trust Bundle',
77
+ selectedFieldIndex: 0,
78
+ message: 'Export a redacted trust review bundle. Type yes on the final field to confirm.',
79
+ fields: [
80
+ { id: 'path', label: 'Output path', value: 'trust-review-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
81
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /trust bundle export with --yes.' },
82
+ ],
83
+ },
84
+ 'trust-bundle-inspect': {
85
+ mode: 'create',
86
+ title: 'Inspect Trust Bundle',
87
+ selectedFieldIndex: 0,
88
+ message: 'Inspect a trust review bundle before using it for setup review.',
89
+ fields: [
90
+ { id: 'path', label: 'Bundle path', value: 'trust-review-bundle.json', required: true, multiline: false, hint: 'Workspace-relative trust bundle JSON path.' },
91
+ ],
92
+ },
93
+ 'subscription-bundle-export': {
94
+ mode: 'create',
95
+ title: 'Export Subscription Bundle',
96
+ selectedFieldIndex: 0,
97
+ message: 'Export a redacted provider subscription bundle. Type yes on the final field to confirm.',
98
+ fields: [
99
+ { id: 'path', label: 'Output path', value: 'subscription-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
100
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /subscription bundle export with --yes.' },
101
+ ],
102
+ },
103
+ 'subscription-bundle-inspect': {
104
+ mode: 'create',
105
+ title: 'Inspect Subscription Bundle',
106
+ selectedFieldIndex: 0,
107
+ message: 'Inspect a provider subscription bundle before setup review.',
108
+ fields: [
109
+ { id: 'path', label: 'Bundle path', value: 'subscription-bundle.json', required: true, multiline: false, hint: 'Workspace-relative subscription bundle JSON path.' },
110
+ ],
111
+ },
112
+ 'voice-enable': (kind) => voiceEnableDisableSpec(kind),
113
+ 'voice-disable': (kind) => voiceEnableDisableSpec(kind),
114
+ 'voice-bundle-export': {
115
+ mode: 'create',
116
+ title: 'Export Voice Bundle',
117
+ selectedFieldIndex: 0,
118
+ message: 'Export a voice setup bundle. Type yes on the final field to confirm.',
119
+ fields: [
120
+ { id: 'path', label: 'Output path', value: 'voice-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
121
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /voice bundle export with --yes.' },
122
+ ],
123
+ },
124
+ 'voice-bundle-inspect': {
162
125
  mode: 'create',
163
126
  title: 'Inspect Voice Bundle',
164
127
  selectedFieldIndex: 0,
@@ -166,5 +129,22 @@ export function createAgentWorkspaceAccessCommandEditor(kind: AgentWorkspaceAcce
166
129
  fields: [
167
130
  { id: 'path', label: 'Bundle path', value: 'voice-bundle.json', required: true, multiline: false, hint: 'Workspace-relative voice bundle JSON path.' },
168
131
  ],
132
+ },
133
+ };
134
+
135
+ function voiceEnableDisableSpec(kind: AgentWorkspaceAccessCommandEditorKind): AgentWorkspaceEditorSpec {
136
+ const enabling = kind === 'voice-enable';
137
+ return {
138
+ mode: 'update',
139
+ title: enabling ? 'Enable Voice Interaction' : 'Disable Voice Interaction',
140
+ selectedFieldIndex: 0,
141
+ message: `${enabling ? 'Enable' : 'Disable'} local voice interaction for this Agent runtime. Type yes to confirm.`,
142
+ fields: [
143
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: `Type yes to run /voice ${enabling ? 'enable' : 'disable'} with --yes.` },
144
+ ],
169
145
  };
170
146
  }
147
+
148
+ export function createAgentWorkspaceAccessCommandEditor(kind: AgentWorkspaceAccessCommandEditorKind): AgentWorkspaceLocalEditor {
149
+ return createAgentWorkspaceEditorFromTable(kind, ACCESS_COMMAND_EDITOR_SPECS);
150
+ }
@@ -9,6 +9,11 @@ import { createAgentResearchReportEditor } from './agent-workspace-research-repo
9
9
  import { createAgentResearchRunEditor } from './agent-workspace-research-run-editor.ts';
10
10
  import { createAgentResearchSourceEditor } from './agent-workspace-research-source-editor.ts';
11
11
  import { createReminderScheduleEditor } from './agent-workspace-reminder-schedule-editor.ts';
12
+ import { createEmailConnectWizardEditor } from './agent-workspace-email-connect-editor.ts';
13
+ import { createCalendarConnectEditor } from './agent-workspace-calendar-connect-editor.ts';
14
+ import { createCalendarSubscribeWizardEditor } from './agent-workspace-calendar-subscribe-editor.ts';
15
+ import { createCalendarOAuthEditor } from './agent-workspace-calendar-oauth-editor.ts';
16
+ import type { AgentWorkspaceCalendarOAuthConfigStatus } from './agent-workspace-calendar-oauth-editor.ts';
12
17
  import { createRoutineScheduleEditor } from './agent-workspace-routine-schedule-editor.ts';
13
18
  import { createAgentWorkspaceWebResearchEditor } from './agent-workspace-web-research-editor.ts';
14
19
  import { parseSlashCommand } from './slash-command-parser.ts';
@@ -17,6 +22,7 @@ import type {
17
22
  AgentWorkspaceCategory,
18
23
  AgentWorkspaceCommandDispatcher,
19
24
  AgentWorkspaceEditorKind,
25
+ AgentWorkspaceEmailConnectStatus,
20
26
  AgentWorkspaceFocusPane,
21
27
  AgentWorkspaceLocalEditor,
22
28
  AgentWorkspaceLocalEditorKind,
@@ -97,6 +103,8 @@ export function activateAgentWorkspaceSelection(
97
103
  selectedRoutine: workspace.selectedLocalLibraryItem('routine'),
98
104
  recentReviewerHandoffArtifacts: workspace.runtimeSnapshot?.recentReviewerHandoffArtifacts ?? [],
99
105
  reviewPacketDefaults: workspace.runtimeSnapshot?.reviewPacketDefaults ?? null,
106
+ emailConnectStatus: workspace.runtimeSnapshot?.emailConnectStatus ?? null,
107
+ calendarOAuthConfigStatus: workspace.runtimeSnapshot?.calendarOAuthConfigStatus ?? null,
100
108
  });
101
109
  if (!editor) {
102
110
  workspace.status = `Editor unavailable: ${action.editorKind}.`;
@@ -196,8 +204,15 @@ export function createAgentWorkspaceEditor(
196
204
  readonly selectedRoutine?: AgentWorkspaceLocalLibraryItem | null;
197
205
  readonly recentReviewerHandoffArtifacts?: readonly AgentWorkspaceRecentReviewerHandoffArtifact[];
198
206
  readonly reviewPacketDefaults?: AgentWorkspaceReviewPacketDefaults | null;
207
+ readonly emailConnectStatus?: AgentWorkspaceEmailConnectStatus | null;
208
+ readonly calendarOAuthConfigStatus?: AgentWorkspaceCalendarOAuthConfigStatus | null;
199
209
  } = {},
200
210
  ): AgentWorkspaceLocalEditor | null {
211
+ if (editorKind === 'email-connect-wizard') return createEmailConnectWizardEditor(options.emailConnectStatus ?? null);
212
+ if (editorKind === 'calendar-connect') return createCalendarConnectEditor();
213
+ if (editorKind === 'calendar-subscribe-wizard') return createCalendarSubscribeWizardEditor();
214
+ if (editorKind === 'calendar-oauth-google') return createCalendarOAuthEditor('google', options.calendarOAuthConfigStatus?.google ?? false);
215
+ if (editorKind === 'calendar-oauth-outlook') return createCalendarOAuthEditor('microsoft', options.calendarOAuthConfigStatus?.microsoft ?? false);
201
216
  if (editorKind === 'profile') return createProfileEditor(options.runtimeStarterTemplates ?? []);
202
217
  if (editorKind === 'learned-behavior') return createLearnedBehaviorEditor();
203
218
  if (editorKind === 'web-research') return createAgentWorkspaceWebResearchEditor('research');