@pellux/goodvibes-agent 1.4.4 → 1.5.1

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 (230) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +52 -7
  3. package/dist/package/main.js +7491 -12253
  4. package/docs/README.md +2 -2
  5. package/docs/channels-remote-and-api.md +1 -1
  6. package/docs/getting-started.md +2 -2
  7. package/docs/release-and-publishing.md +1 -1
  8. package/docs/tools-and-commands.md +5 -5
  9. package/package.json +4 -2
  10. package/release/live-verification/live-verification.json +13 -13
  11. package/release/live-verification/live-verification.md +15 -15
  12. package/release/performance-snapshot.json +2 -2
  13. package/release/release-notes.md +5 -7
  14. package/release/release-readiness.json +6 -6
  15. package/src/agent/behavior-discovery-summary.ts +4 -18
  16. package/src/agent/calendar-registry.ts +322 -0
  17. package/src/agent/competitive-feature-inventory.ts +268 -130
  18. package/src/agent/document-registry.ts +5 -1
  19. package/src/agent/email/email-service.ts +350 -0
  20. package/src/agent/email/imap-client.ts +596 -0
  21. package/src/agent/email/smtp-client.ts +453 -0
  22. package/src/agent/ics-calendar.ts +662 -0
  23. package/src/agent/ics-timezone.ts +172 -0
  24. package/src/agent/markdown-frontmatter.ts +31 -0
  25. package/src/agent/memory-safety.ts +1 -1
  26. package/src/agent/note-registry.ts +3 -9
  27. package/src/agent/persona-discovery.ts +3 -15
  28. package/src/agent/persona-registry.ts +1 -10
  29. package/src/agent/research-source-registry.ts +5 -1
  30. package/src/agent/routine-discovery.ts +3 -15
  31. package/src/agent/runtime-profile.ts +3 -0
  32. package/src/agent/skill-discovery.ts +3 -15
  33. package/src/agent/skill-draft-proposer.ts +203 -0
  34. package/src/agent/skill-draft-runner.ts +201 -0
  35. package/src/agent/skill-registry.ts +36 -1
  36. package/src/agent/skill-standard.ts +99 -0
  37. package/src/agent/vibe-file.ts +7 -22
  38. package/src/cli/completion.ts +1 -1
  39. package/src/cli/config-overrides.ts +10 -1
  40. package/src/cli/redaction.ts +17 -5
  41. package/src/config/provider-model.ts +2 -1
  42. package/src/config/secret-config.ts +13 -6
  43. package/src/core/activity-feed.ts +97 -0
  44. package/src/core/away-digest.ts +161 -0
  45. package/src/core/conversation-rendering.ts +7 -3
  46. package/src/core/conversation.ts +22 -15
  47. package/src/core/hardware-profile.ts +362 -0
  48. package/src/core/last-seen-store.ts +78 -0
  49. package/src/core/plain-language.ts +52 -0
  50. package/src/core/setup-incomplete-hint.ts +90 -0
  51. package/src/core/system-message-router.ts +38 -87
  52. package/src/input/agent-workspace-basic-command-editor-submission.ts +60 -220
  53. package/src/input/agent-workspace-basic-command-editors.ts +39 -141
  54. package/src/input/agent-workspace-categories.ts +40 -125
  55. package/src/input/agent-workspace-command-editor.ts +4 -0
  56. package/src/input/agent-workspace-host-category.ts +0 -5
  57. package/src/input/agent-workspace-local-editor-submission.ts +3 -1
  58. package/src/input/agent-workspace-navigation.ts +10 -3
  59. package/src/input/agent-workspace-onboarding-actions.ts +132 -0
  60. package/src/input/agent-workspace-onboarding-categories.ts +29 -26
  61. package/src/input/agent-workspace-onboarding-finish.ts +11 -4
  62. package/src/input/agent-workspace-onboarding-state.ts +111 -0
  63. package/src/input/agent-workspace-profile-editor-submission.ts +260 -0
  64. package/src/input/agent-workspace-profile-editors.ts +155 -0
  65. package/src/input/agent-workspace-subscription-editor.ts +7 -0
  66. package/src/input/agent-workspace-types.ts +5 -1
  67. package/src/input/agent-workspace.ts +65 -39
  68. package/src/input/command-registry.ts +18 -5
  69. package/src/input/commands/agent-runtime-profile-runtime.ts +2 -1
  70. package/src/input/commands/agent-skills-runtime.ts +60 -3
  71. package/src/input/commands/calendar-runtime.ts +209 -0
  72. package/src/input/commands/channels-runtime.ts +1 -0
  73. package/src/input/commands/command-error.ts +9 -0
  74. package/src/input/commands/compat-runtime.ts +1 -0
  75. package/src/input/commands/config.ts +1 -0
  76. package/src/input/commands/conversation-runtime.ts +1 -1
  77. package/src/input/commands/delegation-runtime.ts +5 -6
  78. package/src/input/commands/email-runtime.ts +387 -0
  79. package/src/input/commands/experience-runtime.ts +17 -4
  80. package/src/input/commands/guidance-runtime.ts +1 -1
  81. package/src/input/commands/health-runtime.ts +6 -1
  82. package/src/input/commands/knowledge-format.ts +73 -0
  83. package/src/input/commands/knowledge.ts +9 -74
  84. package/src/input/commands/local-provider-runtime.ts +2 -1
  85. package/src/input/commands/local-runtime.ts +10 -4
  86. package/src/input/commands/mcp-runtime.ts +7 -0
  87. package/src/input/commands/notify-runtime.ts +17 -1
  88. package/src/input/commands/onboarding-runtime.ts +1 -0
  89. package/src/input/commands/operator-actions-runtime.ts +1 -0
  90. package/src/input/commands/operator-runtime.ts +3 -0
  91. package/src/input/commands/personas-runtime.ts +1 -0
  92. package/src/input/commands/platform-access-runtime.ts +40 -17
  93. package/src/input/commands/product-runtime.ts +6 -1
  94. package/src/input/commands/provider-accounts-runtime.ts +3 -2
  95. package/src/input/commands/qrcode-runtime.ts +1 -0
  96. package/src/input/commands/routines-runtime.ts +1 -0
  97. package/src/input/commands/runtime-services.ts +0 -13
  98. package/src/input/commands/security-runtime.ts +1 -0
  99. package/src/input/commands/session-content.ts +1 -0
  100. package/src/input/commands/shell-core.ts +5 -2
  101. package/src/input/commands/subscription-runtime.ts +33 -9
  102. package/src/input/commands/support-bundle-runtime.ts +8 -1
  103. package/src/input/commands/tasks-runtime.ts +1 -0
  104. package/src/input/commands/tts-runtime.ts +1 -0
  105. package/src/input/commands/vibe-runtime.ts +1 -0
  106. package/src/input/commands.ts +4 -0
  107. package/src/input/feed-context-factory.ts +3 -12
  108. package/src/input/handler-command-route.ts +7 -60
  109. package/src/input/handler-feed-routes.ts +0 -194
  110. package/src/input/handler-feed.ts +2 -54
  111. package/src/input/handler-interactions.ts +0 -2
  112. package/src/input/handler-modal-stack.ts +0 -9
  113. package/src/input/handler-picker-routes.ts +24 -1
  114. package/src/input/handler-shortcuts.ts +11 -40
  115. package/src/input/handler-ui-state.ts +13 -0
  116. package/src/input/handler.ts +8 -35
  117. package/src/input/keybindings.ts +40 -17
  118. package/src/input/model-picker-local-fit.ts +130 -0
  119. package/src/input/shell-passthrough.ts +58 -0
  120. package/src/input/submission-router.ts +0 -5
  121. package/src/main.ts +129 -90
  122. package/src/renderer/activity-sidebar.ts +186 -0
  123. package/src/renderer/agent-workspace-context-lines.ts +5 -48
  124. package/src/renderer/agent-workspace-style.ts +1 -1
  125. package/src/renderer/agent-workspace.ts +14 -2
  126. package/src/renderer/compositor.ts +37 -125
  127. package/src/renderer/conversation-overlays.ts +3 -3
  128. package/src/renderer/help-overlay.ts +7 -5
  129. package/src/renderer/model-workspace.ts +101 -86
  130. package/src/{panels → renderer}/polish.ts +3 -3
  131. package/src/renderer/shell-surface.ts +4 -5
  132. package/src/renderer/status-token.ts +31 -11
  133. package/src/renderer/tab-strip.ts +1 -1
  134. package/src/renderer/tool-call.ts +7 -8
  135. package/src/renderer/tool-labels.ts +92 -0
  136. package/src/renderer/ui-factory.ts +48 -96
  137. package/src/runtime/bootstrap-command-context.ts +0 -5
  138. package/src/runtime/bootstrap-command-parts.ts +6 -15
  139. package/src/runtime/bootstrap-core.ts +34 -13
  140. package/src/runtime/bootstrap-hook-bridge.ts +3 -1
  141. package/src/runtime/bootstrap-shell.ts +3 -50
  142. package/src/runtime/bootstrap.ts +3 -4
  143. package/src/runtime/context.ts +1 -1
  144. package/src/runtime/diagnostics/panels/index.ts +0 -1
  145. package/src/runtime/diagnostics/panels/policy.ts +1 -1
  146. package/src/runtime/execution-ledger.ts +16 -1
  147. package/src/runtime/index.ts +6 -1
  148. package/src/runtime/onboarding/index.ts +1 -0
  149. package/src/runtime/onboarding/onboarding-state.ts +200 -0
  150. package/src/{panels → runtime}/provider-account-snapshot.ts +5 -2
  151. package/src/runtime/services.ts +16 -4
  152. package/src/runtime/terminal-output-guard.ts +7 -0
  153. package/src/runtime/tool-permission-safety.ts +1 -1
  154. package/src/runtime/ui/model-picker/data-provider.ts +1 -1
  155. package/src/runtime/ui/model-picker/health-enrichment.ts +2 -2
  156. package/src/runtime/ui/model-picker/types.ts +2 -2
  157. package/src/runtime/ui/provider-health/data-provider.ts +3 -3
  158. package/src/runtime/ui/provider-health/types.ts +2 -2
  159. package/src/runtime/ui-services.ts +0 -2
  160. package/src/shell/agent-workspace-fullscreen.ts +0 -1
  161. package/src/shell/autonomy-surfacing.ts +272 -0
  162. package/src/shell/session-continuity-hints.ts +0 -6
  163. package/src/shell/startup-wiring.ts +221 -0
  164. package/src/shell/ui-openers.ts +18 -29
  165. package/src/tools/agent-context-policy.ts +1 -1
  166. package/src/tools/agent-harness-background-processes.ts +4 -4
  167. package/src/tools/agent-harness-browser-cockpit-route.ts +3 -3
  168. package/src/tools/agent-harness-command-runner.ts +6 -1
  169. package/src/tools/agent-harness-document-ops.ts +26 -53
  170. package/src/tools/agent-harness-execution-history.ts +1 -13
  171. package/src/tools/agent-harness-execution-posture.ts +0 -15
  172. package/src/tools/agent-harness-keybinding-metadata.ts +28 -29
  173. package/src/tools/agent-harness-local-model-cookbook.ts +24 -1
  174. package/src/tools/agent-harness-metadata.ts +16 -0
  175. package/src/tools/agent-harness-mode-catalog.ts +2 -9
  176. package/src/tools/agent-harness-provider-account-metadata.ts +2 -2
  177. package/src/tools/agent-harness-setup-posture-utils.ts +1 -1
  178. package/src/tools/agent-harness-tool-schema.ts +13 -14
  179. package/src/tools/agent-harness-tool.ts +27 -23
  180. package/src/tools/agent-harness-ui-surface-metadata.ts +10 -20
  181. package/src/tools/agent-harness-workspace-action-runner.ts +3 -4
  182. package/src/tools/agent-workspace-tool.ts +2 -33
  183. package/src/utils/terminal-width.ts +9 -3
  184. package/src/version.ts +1 -1
  185. package/src/input/agent-workspace-panel-route.ts +0 -44
  186. package/src/input/panel-integration-actions.ts +0 -26
  187. package/src/panels/approval-panel.ts +0 -149
  188. package/src/panels/automation-control-panel.ts +0 -212
  189. package/src/panels/base-panel.ts +0 -254
  190. package/src/panels/builtin/agent.ts +0 -58
  191. package/src/panels/builtin/knowledge.ts +0 -26
  192. package/src/panels/builtin/operations.ts +0 -121
  193. package/src/panels/builtin/session.ts +0 -138
  194. package/src/panels/builtin/shared.ts +0 -275
  195. package/src/panels/builtin/usage.ts +0 -21
  196. package/src/panels/builtin-panels.ts +0 -23
  197. package/src/panels/confirm-state.ts +0 -61
  198. package/src/panels/context-visualizer-panel.ts +0 -204
  199. package/src/panels/cost-tracker-panel.ts +0 -444
  200. package/src/panels/docs-panel.ts +0 -285
  201. package/src/panels/index.ts +0 -25
  202. package/src/panels/knowledge-panel.ts +0 -417
  203. package/src/panels/memory-panel.ts +0 -226
  204. package/src/panels/panel-list-panel.ts +0 -464
  205. package/src/panels/panel-manager.ts +0 -570
  206. package/src/panels/provider-accounts-panel.ts +0 -233
  207. package/src/panels/provider-health-domains.ts +0 -208
  208. package/src/panels/provider-health-panel.ts +0 -720
  209. package/src/panels/provider-health-tracker.ts +0 -115
  210. package/src/panels/provider-stats-panel.ts +0 -366
  211. package/src/panels/qr-panel.ts +0 -207
  212. package/src/panels/schedule-panel.ts +0 -321
  213. package/src/panels/scrollable-list-panel.ts +0 -491
  214. package/src/panels/search-focus.ts +0 -32
  215. package/src/panels/security-panel.ts +0 -295
  216. package/src/panels/session-browser-panel.ts +0 -395
  217. package/src/panels/session-maintenance.ts +0 -125
  218. package/src/panels/subscription-panel.ts +0 -263
  219. package/src/panels/system-messages-panel.ts +0 -230
  220. package/src/panels/tasks-panel.ts +0 -344
  221. package/src/panels/thinking-panel.ts +0 -304
  222. package/src/panels/token-budget-panel.ts +0 -475
  223. package/src/panels/tool-inspector-panel.ts +0 -436
  224. package/src/panels/types.ts +0 -54
  225. package/src/renderer/panel-composite.ts +0 -158
  226. package/src/renderer/panel-tab-bar.ts +0 -69
  227. package/src/renderer/panel-workspace-bar.ts +0 -42
  228. package/src/runtime/diagnostics/panels/panel-resources.ts +0 -118
  229. package/src/tools/agent-harness-panel-metadata.ts +0 -211
  230. /package/src/runtime/perf/{panel-health-monitor.ts → component-health.ts} +0 -0
@@ -15,6 +15,7 @@ import { buildAgentWorkspaceSessionCommandEditorSubmission, isAgentWorkspaceSess
15
15
  import { buildAgentWorkspaceSkillBundleCommandEditorSubmission, isAgentWorkspaceSkillBundleCommandSubmissionKind } from './agent-workspace-skill-bundle-command-editor-submission.ts';
16
16
  import { buildAgentWorkspaceTaskCommandEditorSubmission, isAgentWorkspaceTaskCommandSubmissionKind } from './agent-workspace-task-command-editor-submission.ts';
17
17
  import { buildAgentWorkspaceWorkPlanEditorSubmission, isAgentWorkspaceWorkPlanEditorKind } from './agent-workspace-workplan-editor-submission.ts';
18
+ import { buildAgentWorkspaceProfileEditorSubmission, isAgentWorkspaceProfileEditorSubmissionKind } from './agent-workspace-profile-editor-submission.ts';
18
19
  import { quoteSlashCommandArg } from './slash-command-parser.ts';
19
20
 
20
21
  type AgentWorkspaceFieldReader = (fieldId: string) => string;
@@ -306,226 +307,8 @@ export function buildAgentWorkspaceBasicCommandEditorSubmission(
306
307
  },
307
308
  };
308
309
  }
309
- if (editor.kind === 'profile-template-export') {
310
- if (!isAffirmative(readField('confirm'))) {
311
- return {
312
- kind: 'editor',
313
- editor: { ...editor, message: 'Starter template export not confirmed. Type yes, then press Enter.' },
314
- status: 'Agent starter template export not confirmed.',
315
- };
316
- }
317
- const command = `/agent-profile template export ${quoteSlashCommandArg(readField('templateId'))} ${quoteSlashCommandArg(readField('path'))} --yes`;
318
- return {
319
- kind: 'dispatch',
320
- command,
321
- status: 'Opening Agent starter template export.',
322
- actionResult: {
323
- kind: 'dispatched',
324
- title: 'Opening Agent starter template export',
325
- detail: 'The workspace handed a confirmed starter template export command to the shell-owned command router.',
326
- command,
327
- safety: 'safe',
328
- },
329
- };
330
- }
331
- if (editor.kind === 'profile-template-import') {
332
- if (!isAffirmative(readField('confirm'))) {
333
- return {
334
- kind: 'editor',
335
- editor: { ...editor, message: 'Starter template import not confirmed. Type yes, then press Enter.' },
336
- status: 'Agent starter template import not confirmed.',
337
- };
338
- }
339
- const command = `/agent-profile template import ${quoteSlashCommandArg(readField('path'))} --yes`;
340
- return {
341
- kind: 'dispatch',
342
- command,
343
- status: 'Opening Agent starter template import.',
344
- actionResult: {
345
- kind: 'dispatched',
346
- title: 'Opening Agent starter template import',
347
- detail: 'The workspace handed a confirmed starter template import command to the shell-owned command router.',
348
- command,
349
- safety: 'safe',
350
- },
351
- };
352
- }
353
- if (editor.kind === 'profile-template-show') {
354
- const command = `/agent-profile template show ${quoteSlashCommandArg(readField('id'))}`;
355
- return {
356
- kind: 'dispatch',
357
- command,
358
- status: 'Opening Agent starter template preview.',
359
- actionResult: {
360
- kind: 'dispatched',
361
- title: 'Opening Agent starter template preview',
362
- detail: 'The workspace handed a read-only starter template preview command to the shell-owned command router.',
363
- command,
364
- safety: 'read-only',
365
- },
366
- };
367
- }
368
- if (editor.kind === 'profile-show') {
369
- const command = `/agent-profile show ${quoteSlashCommandArg(readField('profile'))}`;
370
- return {
371
- kind: 'dispatch',
372
- command,
373
- status: 'Opening Agent profile detail.',
374
- actionResult: {
375
- kind: 'dispatched',
376
- title: 'Opening Agent profile detail',
377
- detail: 'The workspace handed a read-only Agent profile inspection command to the shell-owned command router.',
378
- command,
379
- safety: 'read-only',
380
- },
381
- };
382
- }
383
- if (editor.kind === 'profile-template-from-discovered') {
384
- if (!isAffirmative(readField('confirm'))) {
385
- return {
386
- kind: 'editor',
387
- editor: { ...editor, message: 'Starter-from-discovered creation not confirmed. Type yes, then press Enter.' },
388
- status: 'Agent starter-from-discovered creation not confirmed.',
389
- };
390
- }
391
- const parts = [
392
- '/agent-profile',
393
- 'template',
394
- 'from-discovered',
395
- quoteSlashCommandArg(readField('id')),
396
- ];
397
- const name = readField('name');
398
- const description = readField('description');
399
- const persona = readField('persona');
400
- const skills = readField('skills');
401
- const routines = readField('routines');
402
- if (name.length > 0) parts.push('--name', quoteSlashCommandArg(name));
403
- if (description.length > 0) parts.push('--description', quoteSlashCommandArg(description));
404
- if (persona.length > 0) parts.push('--persona', quoteSlashCommandArg(persona));
405
- if (skills.length > 0) parts.push('--skills', quoteSlashCommandArg(skills));
406
- if (routines.length > 0) parts.push('--routines', quoteSlashCommandArg(routines));
407
- if (isAffirmative(readField('replace'))) parts.push('--replace');
408
- parts.push('--yes');
409
- const command = parts.join(' ');
410
- return {
411
- kind: 'dispatch',
412
- command,
413
- status: 'Opening Agent starter-from-discovered creation.',
414
- actionResult: {
415
- kind: 'dispatched',
416
- title: 'Opening Agent starter-from-discovered creation',
417
- detail: 'The workspace handed a confirmed starter creation command to the shell-owned command router.',
418
- command,
419
- safety: 'safe',
420
- },
421
- };
422
- }
423
- if (editor.kind === 'profile-from-discovered') {
424
- if (!isAffirmative(readField('confirm'))) {
425
- return {
426
- kind: 'editor',
427
- editor: { ...editor, message: 'Profile-from-discovered creation not confirmed. Type yes, then press Enter.' },
428
- status: 'Agent profile-from-discovered creation not confirmed.',
429
- };
430
- }
431
- const parts = [
432
- '/agent-profile',
433
- 'create-from-discovered',
434
- quoteSlashCommandArg(readField('profile')),
435
- ];
436
- const templateId = readField('templateId');
437
- const name = readField('name');
438
- const description = readField('description');
439
- const persona = readField('persona');
440
- const skills = readField('skills');
441
- const routines = readField('routines');
442
- if (templateId.length > 0) parts.push('--template-id', quoteSlashCommandArg(templateId));
443
- if (name.length > 0) parts.push('--name', quoteSlashCommandArg(name));
444
- if (description.length > 0) parts.push('--description', quoteSlashCommandArg(description));
445
- if (persona.length > 0) parts.push('--persona', quoteSlashCommandArg(persona));
446
- if (skills.length > 0) parts.push('--skills', quoteSlashCommandArg(skills));
447
- if (routines.length > 0) parts.push('--routines', quoteSlashCommandArg(routines));
448
- if (isAffirmative(readField('replace'))) parts.push('--replace');
449
- parts.push('--yes');
450
- const command = parts.join(' ');
451
- return {
452
- kind: 'dispatch',
453
- command,
454
- status: 'Opening Agent profile-from-discovered creation.',
455
- actionResult: {
456
- kind: 'dispatched',
457
- title: 'Opening Agent profile-from-discovered creation',
458
- detail: 'The workspace handed a confirmed discovered-behavior profile creation command to the shell-owned command router.',
459
- command,
460
- safety: 'safe',
461
- },
462
- };
463
- }
464
- if (editor.kind === 'profile-default') {
465
- if (!isAffirmative(readField('confirm'))) {
466
- return {
467
- kind: 'editor',
468
- editor: { ...editor, message: 'Default Agent profile selection not confirmed. Type yes, then press Enter.' },
469
- status: 'Default Agent profile selection not confirmed.',
470
- };
471
- }
472
- const command = `/agent-profile use ${quoteSlashCommandArg(readField('profile'))} --yes`;
473
- return {
474
- kind: 'dispatch',
475
- command,
476
- status: 'Opening default Agent profile selection.',
477
- actionResult: {
478
- kind: 'dispatched',
479
- title: 'Opening default Agent profile selection',
480
- detail: 'The workspace handed a confirmed default profile selection command to the shell-owned command router.',
481
- command,
482
- safety: 'safe',
483
- },
484
- };
485
- }
486
- if (editor.kind === 'profile-default-clear') {
487
- if (!isAffirmative(readField('confirm'))) {
488
- return {
489
- kind: 'editor',
490
- editor: { ...editor, message: 'Default Agent profile clear not confirmed. Type yes, then press Enter.' },
491
- status: 'Default Agent profile clear not confirmed.',
492
- };
493
- }
494
- const command = '/agent-profile default clear --yes';
495
- return {
496
- kind: 'dispatch',
497
- command,
498
- status: 'Opening default Agent profile clear.',
499
- actionResult: {
500
- kind: 'dispatched',
501
- title: 'Opening default Agent profile clear',
502
- detail: 'The workspace handed a confirmed default profile clear command to the shell-owned command router.',
503
- command,
504
- safety: 'safe',
505
- },
506
- };
507
- }
508
- if (editor.kind === 'profile-delete') {
509
- if (!isAffirmative(readField('confirm'))) {
510
- return {
511
- kind: 'editor',
512
- editor: { ...editor, message: 'Agent profile delete not confirmed. Type yes, then press Enter.' },
513
- status: 'Agent profile delete not confirmed.',
514
- };
515
- }
516
- const command = `/agent-profile delete ${quoteSlashCommandArg(readField('profile'))} --yes`;
517
- return {
518
- kind: 'dispatch',
519
- command,
520
- status: 'Opening Agent profile deletion.',
521
- actionResult: {
522
- kind: 'dispatched',
523
- title: 'Opening Agent profile deletion',
524
- detail: 'The workspace handed a confirmed profile deletion command to the shell-owned command router.',
525
- command,
526
- safety: 'safe',
527
- },
528
- };
310
+ if (isAgentWorkspaceProfileEditorSubmissionKind(editor.kind)) {
311
+ return buildAgentWorkspaceProfileEditorSubmission(editor, readField);
529
312
  }
530
313
  if (editor.kind === 'support-bundle-export') {
531
314
  if (!isAffirmative(readField('confirm'))) {
@@ -736,6 +519,63 @@ export function buildAgentWorkspaceBasicCommandEditorSubmission(
736
519
  },
737
520
  };
738
521
  }
522
+ if (editor.kind === 'skill-standard-import') {
523
+ if (!isAffirmative(readField('confirm'))) {
524
+ return {
525
+ kind: 'editor',
526
+ editor: { ...editor, message: 'Shared skill import not confirmed. Type yes, then press Enter.' },
527
+ status: 'Shared skill import not confirmed.',
528
+ };
529
+ }
530
+ const parts = [
531
+ '/skills',
532
+ 'import-standard',
533
+ quoteSlashCommandArg(readField('path')),
534
+ '--yes',
535
+ ];
536
+ const command = parts.join(' ');
537
+ return {
538
+ kind: 'dispatch',
539
+ command,
540
+ status: 'Opening shared skill import.',
541
+ actionResult: {
542
+ kind: 'dispatched',
543
+ title: 'Opening shared skill import',
544
+ detail: 'The workspace handed a confirmed shared skill import command to the shell-owned command router.',
545
+ command,
546
+ safety: 'safe',
547
+ },
548
+ };
549
+ }
550
+ if (editor.kind === 'skill-standard-export') {
551
+ if (!isAffirmative(readField('confirm'))) {
552
+ return {
553
+ kind: 'editor',
554
+ editor: { ...editor, message: 'Skill export not confirmed. Type yes, then press Enter.' },
555
+ status: 'Skill export not confirmed.',
556
+ };
557
+ }
558
+ const parts = [
559
+ '/skills',
560
+ 'export-standard',
561
+ quoteSlashCommandArg(readField('id')),
562
+ quoteSlashCommandArg(readField('dest')),
563
+ '--yes',
564
+ ];
565
+ const command = parts.join(' ');
566
+ return {
567
+ kind: 'dispatch',
568
+ command,
569
+ status: 'Opening skill export.',
570
+ actionResult: {
571
+ kind: 'dispatched',
572
+ title: 'Opening skill export',
573
+ detail: 'The workspace handed a confirmed skill export command to the shell-owned command router.',
574
+ command,
575
+ safety: 'safe',
576
+ },
577
+ };
578
+ }
739
579
  if (editor.kind === 'routine-discovery-import') {
740
580
  if (!isAffirmative(readField('confirm'))) {
741
581
  return {
@@ -21,14 +21,14 @@ import type { AgentWorkspaceSkillBundleCommandEditorKind } from './agent-workspa
21
21
  import { createAgentWorkspaceSkillBundleCommandEditor, isAgentWorkspaceSkillBundleCommandEditorKind } from './agent-workspace-skill-bundle-command-editors.ts';
22
22
  import type { AgentWorkspaceTaskCommandEditorKind } from './agent-workspace-task-command-editors.ts';
23
23
  import { createAgentWorkspaceTaskCommandEditor, isAgentWorkspaceTaskCommandEditorKind } from './agent-workspace-task-command-editors.ts';
24
+ import type { AgentWorkspaceProfileEditorKind } from './agent-workspace-profile-editors.ts';
25
+ import { createAgentWorkspaceProfileEditor, isAgentWorkspaceProfileEditorKind } from './agent-workspace-profile-editors.ts';
24
26
  export type { AgentWorkspaceBasicCommandEditorSubmission } from './agent-workspace-basic-command-editor-submission.ts';
25
27
  export { buildAgentWorkspaceBasicCommandEditorSubmission } from './agent-workspace-basic-command-editor-submission.ts';
26
28
 
27
- export type AgentWorkspaceBasicCommandEditorKind = AgentWorkspaceAccessCommandEditorKind | AgentWorkspaceChannelCommandEditorKind | AgentWorkspaceKnowledgeCommandEditorKind | AgentWorkspaceLibraryCommandEditorKind | AgentWorkspaceMemoryCommandEditorKind | AgentWorkspaceMediaCommandEditorKind | AgentWorkspaceOperationsCommandEditorKind | AgentWorkspaceProviderCommandEditorKind | AgentWorkspaceSessionCommandEditorKind | AgentWorkspaceSkillBundleCommandEditorKind | AgentWorkspaceTaskCommandEditorKind | Extract<
29
+ export type AgentWorkspaceBasicCommandEditorKind = AgentWorkspaceAccessCommandEditorKind | AgentWorkspaceChannelCommandEditorKind | AgentWorkspaceKnowledgeCommandEditorKind | AgentWorkspaceLibraryCommandEditorKind | AgentWorkspaceMemoryCommandEditorKind | AgentWorkspaceMediaCommandEditorKind | AgentWorkspaceOperationsCommandEditorKind | AgentWorkspaceProviderCommandEditorKind | AgentWorkspaceSessionCommandEditorKind | AgentWorkspaceSkillBundleCommandEditorKind | AgentWorkspaceTaskCommandEditorKind | AgentWorkspaceProfileEditorKind | Extract<
28
30
  AgentWorkspaceEditorKind,
29
- 'knowledge-file' | 'knowledge-urls' | 'knowledge-bookmarks' | 'knowledge-browser-history' | 'knowledge-connector-ingest' | 'knowledge-reindex' | 'tts-prompt' | 'image-input' | 'skill-bundle' | 'skill-discovery-import' | 'profile-template-export' | 'profile-template-import'
30
- | 'profile-template-from-discovered' | 'profile-from-discovered' | 'profile-default' | 'profile-default-clear'
31
- | 'profile-template-show' | 'profile-show' | 'profile-delete'
31
+ 'knowledge-file' | 'knowledge-urls' | 'knowledge-bookmarks' | 'knowledge-browser-history' | 'knowledge-connector-ingest' | 'knowledge-reindex' | 'tts-prompt' | 'image-input' | 'skill-bundle' | 'skill-discovery-import'
32
32
  | 'support-bundle-export' | 'support-bundle-inspect' | 'support-bundle-import'
33
33
  | 'subscription-inspect' | 'subscription-login-start' | 'subscription-login-finish' | 'subscription-logout'
34
34
  | 'model-pin' | 'model-unpin'
@@ -36,6 +36,8 @@ export type AgentWorkspaceBasicCommandEditorKind = AgentWorkspaceAccessCommandEd
36
36
  | 'workplan-add' | 'workplan-show' | 'workplan-status' | 'workplan-delete' | 'workplan-clear-completed'
37
37
  | 'persona-discovery-import'
38
38
  | 'routine-discovery-import'
39
+ | 'skill-standard-import'
40
+ | 'skill-standard-export'
39
41
  | 'mcp-server' | 'mcp-tools-server' | 'mcp-repair' | 'notify-webhook' | 'notify-webhook-remove' | 'notify-webhook-clear' | 'notify-webhook-test' | 'notify-send'
40
42
  | 'secret-set' | 'secret-link' | 'secret-test' | 'secret-delete'
41
43
  >;
@@ -64,15 +66,9 @@ export function isAgentWorkspaceBasicCommandEditorKind(kind: AgentWorkspaceEdito
64
66
  || kind === 'persona-discovery-import'
65
67
  || kind === 'routine-discovery-import'
66
68
  || kind === 'skill-discovery-import'
67
- || kind === 'profile-template-export'
68
- || kind === 'profile-template-import'
69
- || kind === 'profile-template-from-discovered'
70
- || kind === 'profile-from-discovered'
71
- || kind === 'profile-default'
72
- || kind === 'profile-default-clear'
73
- || kind === 'profile-template-show'
74
- || kind === 'profile-show'
75
- || kind === 'profile-delete'
69
+ || kind === 'skill-standard-import'
70
+ || kind === 'skill-standard-export'
71
+ || isAgentWorkspaceProfileEditorKind(kind)
76
72
  || kind === 'support-bundle-export'
77
73
  || kind === 'support-bundle-inspect'
78
74
  || kind === 'support-bundle-import'
@@ -136,6 +132,9 @@ export function createAgentWorkspaceBasicCommandEditor(kind: AgentWorkspaceBasic
136
132
  if (isAgentWorkspaceTaskCommandEditorKind(kind)) {
137
133
  return createAgentWorkspaceTaskCommandEditor(kind);
138
134
  }
135
+ if (isAgentWorkspaceProfileEditorKind(kind)) {
136
+ return createAgentWorkspaceProfileEditor(kind);
137
+ }
139
138
  if (kind === 'knowledge-bookmarks') {
140
139
  return {
141
140
  kind,
@@ -439,134 +438,6 @@ export function createAgentWorkspaceBasicCommandEditor(kind: AgentWorkspaceBasic
439
438
  ],
440
439
  };
441
440
  }
442
- if (kind === 'profile-template-export') {
443
- return {
444
- kind,
445
- mode: 'create',
446
- title: 'Export Agent Starter Template',
447
- selectedFieldIndex: 0,
448
- message: 'Export a starter template JSON file for review and customization. Type yes on the final field to confirm.',
449
- fields: [
450
- { id: 'templateId', label: 'Starter id', value: '', required: true, multiline: false, hint: 'Existing starter id from /agent-profile templates.' },
451
- { id: 'path', label: 'Output path', value: '', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
452
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-profile template export with --yes.' },
453
- ],
454
- };
455
- }
456
- if (kind === 'profile-template-import') {
457
- return {
458
- kind,
459
- mode: 'create',
460
- title: 'Import Agent Starter Template',
461
- selectedFieldIndex: 0,
462
- message: 'Import a reviewed starter template JSON file into this Agent home. Type yes on the final field to confirm.',
463
- fields: [
464
- { id: 'path', label: 'Template path', value: '', required: true, multiline: false, hint: 'Workspace-relative JSON path to import.' },
465
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-profile template import with --yes.' },
466
- ],
467
- };
468
- }
469
- if (kind === 'profile-template-show') {
470
- return {
471
- kind,
472
- mode: 'create',
473
- title: 'Preview Agent Starter Template',
474
- selectedFieldIndex: 0,
475
- message: 'Preview one built-in or local starter template before creating or exporting a profile.',
476
- fields: [
477
- { id: 'id', label: 'Starter id', value: '', required: true, multiline: false, hint: 'Starter template id from /agent-profile templates.' },
478
- ],
479
- };
480
- }
481
- if (kind === 'profile-show') {
482
- return {
483
- kind,
484
- mode: 'create',
485
- title: 'Show Agent Profile',
486
- selectedFieldIndex: 0,
487
- message: 'Show one isolated Agent profile home, starter metadata, and launch command.',
488
- fields: [
489
- { id: 'profile', label: 'Profile name', value: '', required: true, multiline: false, hint: 'Existing isolated Agent profile name from /agent-profile list.' },
490
- ],
491
- };
492
- }
493
- if (kind === 'profile-template-from-discovered') {
494
- return {
495
- kind,
496
- mode: 'create',
497
- title: 'Create Starter from Discovered Behavior',
498
- selectedFieldIndex: 0,
499
- message: 'Create an Agent-local starter template from reviewed discovered persona, skill, and routine markdown. Type yes on the final field to confirm.',
500
- fields: [
501
- { id: 'id', label: 'Starter id', value: '', required: true, multiline: false, hint: 'New local starter id, for example research-desk.' },
502
- { id: 'name', label: 'Starter name', value: '', required: false, multiline: false, hint: 'Optional display name. Defaults to the selected persona name.' },
503
- { id: 'description', label: 'Description', value: '', required: false, multiline: false, hint: 'Optional one-line summary.' },
504
- { id: 'persona', label: 'Persona', value: '', required: false, multiline: false, hint: 'Optional discovered persona name/path. Blank uses the first discovered persona.' },
505
- { id: 'skills', label: 'Skills', value: '', required: false, multiline: false, hint: 'all or comma-separated discovered skill names. Blank includes all.' },
506
- { id: 'routines', label: 'Routines', value: '', required: false, multiline: false, hint: 'all or comma-separated discovered routine names. Blank includes all.' },
507
- { id: 'replace', label: 'Replace existing', value: 'no', required: false, multiline: false, hint: 'yes/no. Existing starter ids are protected unless this is yes.' },
508
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-profile template from-discovered with --yes.' },
509
- ],
510
- };
511
- }
512
- if (kind === 'profile-from-discovered') {
513
- return {
514
- kind,
515
- mode: 'create',
516
- title: 'Create Profile from Discovered Behavior',
517
- selectedFieldIndex: 0,
518
- message: 'Create a local starter template and isolated Agent profile from reviewed discovered behavior markdown. Type yes on the final field to confirm.',
519
- fields: [
520
- { id: 'profile', label: 'Profile name', value: '', required: true, multiline: false, hint: 'New isolated Agent profile name, for example research-desk.' },
521
- { id: 'templateId', label: 'Starter id', value: '', required: false, multiline: false, hint: 'Optional local starter id. Blank uses the profile name.' },
522
- { id: 'name', label: 'Starter name', value: '', required: false, multiline: false, hint: 'Optional display name for the generated starter.' },
523
- { id: 'description', label: 'Description', value: '', required: false, multiline: false, hint: 'Optional one-line summary.' },
524
- { id: 'persona', label: 'Persona', value: '', required: false, multiline: false, hint: 'Optional discovered persona name/path. Blank uses the first discovered persona.' },
525
- { id: 'skills', label: 'Skills', value: '', required: false, multiline: false, hint: 'all or comma-separated discovered skill names. Blank includes all.' },
526
- { id: 'routines', label: 'Routines', value: '', required: false, multiline: false, hint: 'all or comma-separated discovered routine names. Blank includes all.' },
527
- { id: 'replace', label: 'Replace starter', value: 'no', required: false, multiline: false, hint: 'yes/no. Existing starter ids are protected unless this is yes.' },
528
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-profile create-from-discovered with --yes.' },
529
- ],
530
- };
531
- }
532
- if (kind === 'profile-default') {
533
- return {
534
- kind,
535
- mode: 'update',
536
- title: 'Use Default Agent Profile',
537
- selectedFieldIndex: 0,
538
- message: 'Select which isolated Agent profile the next plain goodvibes-agent run should use. Type yes on the final field to confirm.',
539
- fields: [
540
- { id: 'profile', label: 'Profile name', value: '', required: true, multiline: false, hint: 'Existing isolated Agent profile name from /agent-profile list.' },
541
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-profile use with --yes.' },
542
- ],
543
- };
544
- }
545
- if (kind === 'profile-default-clear') {
546
- return {
547
- kind,
548
- mode: 'update',
549
- title: 'Clear Default Agent Profile',
550
- selectedFieldIndex: 0,
551
- message: 'Return the next plain goodvibes-agent run to the base Agent home. Type yes to confirm.',
552
- fields: [
553
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-profile default clear with --yes.' },
554
- ],
555
- };
556
- }
557
- if (kind === 'profile-delete') {
558
- return {
559
- kind,
560
- mode: 'delete',
561
- title: 'Delete Agent Profile',
562
- selectedFieldIndex: 0,
563
- message: 'Delete one isolated Agent profile home. Type yes on the final field to confirm.',
564
- fields: [
565
- { id: 'profile', label: 'Profile name', value: '', required: true, multiline: false, hint: 'Existing isolated Agent profile name from /agent-profile list.' },
566
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-profile delete with --yes.' },
567
- ],
568
- };
569
- }
570
441
  if (kind === 'support-bundle-export') {
571
442
  return {
572
443
  kind,
@@ -783,6 +654,33 @@ export function createAgentWorkspaceBasicCommandEditor(kind: AgentWorkspaceBasic
783
654
  ],
784
655
  };
785
656
  }
657
+ if (kind === 'skill-standard-import') {
658
+ return {
659
+ kind,
660
+ mode: 'create',
661
+ title: 'Import Shared Skill',
662
+ selectedFieldIndex: 0,
663
+ message: 'Import one SKILL.md file in the open skill format into the Agent-local skill library. The skill will wait for your review before it can be enabled.',
664
+ fields: [
665
+ { id: 'path', label: 'Path to SKILL.md', value: '', required: true, multiline: false, hint: 'Full path to a SKILL.md file.' },
666
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to import with --yes.' },
667
+ ],
668
+ };
669
+ }
670
+ if (kind === 'skill-standard-export') {
671
+ return {
672
+ kind,
673
+ mode: 'create',
674
+ title: 'Export Skill to Share',
675
+ selectedFieldIndex: 0,
676
+ message: 'Export one Agent-local skill as a SKILL.md folder you can publish or hand to another assistant.',
677
+ fields: [
678
+ { id: 'id', label: 'Skill id or name', value: '', required: true, multiline: false, hint: 'Local skill id or name.' },
679
+ { id: 'dest', label: 'Destination folder', value: '', required: true, multiline: false, hint: 'Directory to write <slug>/SKILL.md into.' },
680
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to export with --yes.' },
681
+ ],
682
+ };
683
+ }
786
684
  return {
787
685
  kind,
788
686
  mode: 'create',