@pellux/goodvibes-agent 0.1.116 → 1.0.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.
- package/CHANGELOG.md +48 -661
- package/README.md +64 -57
- package/bin/goodvibes-agent.ts +16 -2
- package/dist/package/main.js +199180 -192185
- package/docs/README.md +15 -8
- package/docs/channels-remote-and-api.md +50 -0
- package/docs/connected-host.md +59 -0
- package/docs/getting-started.md +61 -50
- package/docs/knowledge-artifacts-and-multimodal.md +91 -0
- package/docs/project-planning.md +79 -0
- package/docs/providers-and-routing.md +46 -0
- package/docs/release-and-publishing.md +48 -11
- package/docs/tools-and-commands.md +123 -0
- package/docs/voice-and-live-tts.md +51 -0
- package/package.json +3 -6
- package/src/agent/behavior-discovery-summary.ts +1 -3
- package/src/agent/channel-delivery.ts +201 -0
- package/src/agent/media-generation.ts +159 -0
- package/src/agent/memory-prompt.ts +0 -1
- package/src/agent/note-registry.ts +329 -0
- package/src/agent/operator-actions.ts +343 -0
- package/src/agent/persona-discovery.ts +1 -3
- package/src/agent/persona-registry.ts +19 -16
- package/src/agent/record-labels.ts +107 -0
- package/src/agent/reminder-schedule-format.ts +33 -24
- package/src/agent/reminder-schedule.ts +27 -26
- package/src/agent/routine-registry.ts +54 -14
- package/src/agent/routine-schedule-args.ts +2 -1
- package/src/agent/routine-schedule-format.ts +77 -53
- package/src/agent/routine-schedule-promotion.ts +35 -33
- package/src/agent/routine-schedule-receipts.ts +29 -27
- package/src/agent/runtime-profile-starters.ts +5 -5
- package/src/agent/runtime-profile.ts +91 -12
- package/src/agent/skill-registry.ts +210 -32
- package/src/cli/agent-knowledge-args.ts +5 -1
- package/src/cli/agent-knowledge-command.ts +40 -34
- package/src/cli/agent-knowledge-format.ts +80 -67
- package/src/cli/agent-knowledge-methods.ts +1 -1
- package/src/cli/agent-knowledge-runtime.ts +32 -26
- package/src/cli/bundle-command.ts +14 -9
- package/src/cli/config-overrides.ts +37 -36
- package/src/cli/entrypoint.ts +16 -7
- package/src/cli/external-runtime.ts +10 -4
- package/src/cli/help.ts +54 -29
- package/src/cli/local-library-command.ts +203 -83
- package/src/cli/management-commands.ts +105 -68
- package/src/cli/management.ts +55 -74
- package/src/cli/memory-command.ts +66 -32
- package/src/cli/parser.ts +37 -3
- package/src/cli/profiles-command.ts +166 -31
- package/src/cli/provider-auth-routes.ts +2 -1
- package/src/cli/routines-command.ts +176 -40
- package/src/cli/service-posture.ts +16 -16
- package/src/cli/status.ts +56 -135
- package/src/core/conversation-message-snapshot.ts +131 -0
- package/src/input/agent-workspace-access-command-editor-submission.ts +149 -0
- package/src/input/agent-workspace-access-command-editors.ts +170 -0
- package/src/input/agent-workspace-activation.ts +35 -8
- package/src/input/agent-workspace-basic-command-editor-submission.ts +351 -94
- package/src/input/agent-workspace-basic-command-editors.ts +502 -9
- package/src/input/agent-workspace-categories.ts +423 -51
- package/src/input/agent-workspace-channel-command-editor-submission.ts +83 -0
- package/src/input/agent-workspace-channel-command-editors.ts +65 -0
- package/src/input/agent-workspace-channels.ts +35 -2
- package/src/input/agent-workspace-command-editor.ts +41 -3
- package/src/input/agent-workspace-config-reader.ts +16 -0
- package/src/input/agent-workspace-delegation-editor-submission.ts +55 -0
- package/src/input/agent-workspace-editors.ts +166 -1
- package/src/input/agent-workspace-knowledge-command-editor-submission.ts +132 -0
- package/src/input/agent-workspace-knowledge-command-editors.ts +110 -0
- package/src/input/agent-workspace-knowledge-query-editor.ts +1 -1
- package/src/input/agent-workspace-learned-behavior.ts +67 -0
- package/src/input/agent-workspace-library-command-editor-submission.ts +50 -0
- package/src/input/agent-workspace-library-command-editors.ts +35 -0
- package/src/input/agent-workspace-local-operations.ts +218 -0
- package/src/input/agent-workspace-local-selection.ts +75 -0
- package/src/input/agent-workspace-mcp-command-editor-submission.ts +95 -0
- package/src/input/agent-workspace-media-command-editor-submission.ts +62 -0
- package/src/input/agent-workspace-media-command-editors.ts +27 -0
- package/src/input/agent-workspace-memory-command-editor-submission.ts +232 -0
- package/src/input/agent-workspace-memory-command-editors.ts +180 -0
- package/src/input/agent-workspace-memory-editor.ts +2 -2
- package/src/input/agent-workspace-navigation.ts +81 -0
- package/src/input/agent-workspace-notify-editor-submission.ts +121 -0
- package/src/input/agent-workspace-operations-command-editor-submission.ts +208 -0
- package/src/input/agent-workspace-operations-command-editors.ts +196 -0
- package/src/input/agent-workspace-panel-route.ts +43 -0
- package/src/input/agent-workspace-provider-command-editor-submission.ts +155 -0
- package/src/input/agent-workspace-provider-command-editors.ts +93 -0
- package/src/input/agent-workspace-reminder-schedule-editor.ts +1 -1
- package/src/input/agent-workspace-requirements.ts +11 -0
- package/src/input/agent-workspace-routine-schedule-editor.ts +2 -2
- package/src/input/agent-workspace-search.ts +169 -0
- package/src/input/agent-workspace-secret-editor-submission.ts +153 -0
- package/src/input/agent-workspace-session-command-editor-submission.ts +199 -0
- package/src/input/agent-workspace-session-command-editors.ts +249 -0
- package/src/input/agent-workspace-setup.ts +37 -16
- package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +101 -0
- package/src/input/agent-workspace-skill-bundle-command-editors.ts +110 -0
- package/src/input/agent-workspace-snapshot.ts +162 -21
- package/src/input/agent-workspace-task-command-editor-submission.ts +61 -0
- package/src/input/agent-workspace-task-command-editors.ts +47 -0
- package/src/input/agent-workspace-token.ts +18 -2
- package/src/input/agent-workspace-types.ts +212 -4
- package/src/input/agent-workspace-voice-media.ts +4 -7
- package/src/input/agent-workspace-web-research-editor.ts +104 -0
- package/src/input/agent-workspace-workplan-editor-submission.ts +153 -0
- package/src/input/agent-workspace.ts +178 -240
- package/src/input/command-registry.ts +5 -2
- package/src/input/commands/agent-runtime-profile-runtime.ts +126 -37
- package/src/input/commands/agent-skills-runtime.ts +149 -72
- package/src/input/commands/agent-workspace-runtime.ts +23 -6
- package/src/input/commands/brief-runtime.ts +55 -25
- package/src/input/commands/channels-runtime.ts +147 -33
- package/src/input/commands/compat-runtime.ts +32 -0
- package/src/input/commands/delegation-runtime.ts +29 -23
- package/src/input/commands/experience-runtime.ts +6 -4
- package/src/input/commands/guidance-runtime.ts +4 -4
- package/src/input/commands/health-runtime.ts +149 -126
- package/src/input/commands/knowledge.ts +82 -60
- package/src/input/commands/local-provider-runtime.ts +43 -21
- package/src/input/commands/local-runtime.ts +138 -16
- package/src/input/commands/local-setup-review.ts +10 -20
- package/src/input/commands/mcp-runtime.ts +63 -46
- package/src/input/commands/notify-runtime.ts +38 -9
- package/src/input/commands/operator-actions-runtime.ts +138 -0
- package/src/input/commands/operator-runtime.ts +6 -76
- package/src/input/commands/personas-runtime.ts +46 -31
- package/src/input/commands/planning-runtime.ts +1 -1
- package/src/input/commands/platform-access-runtime.ts +35 -98
- package/src/input/commands/product-runtime.ts +2 -2
- package/src/input/commands/provider-accounts-runtime.ts +60 -39
- package/src/input/commands/qrcode-runtime.ts +50 -9
- package/src/input/commands/recall-bundle.ts +11 -11
- package/src/input/commands/recall-capture.ts +13 -11
- package/src/input/commands/recall-query.ts +29 -21
- package/src/input/commands/recall-review.ts +2 -1
- package/src/input/commands/routines-runtime.ts +99 -45
- package/src/input/commands/runtime-services.ts +1 -14
- package/src/input/commands/schedule-runtime.ts +33 -20
- package/src/input/commands/security-runtime.ts +6 -11
- package/src/input/commands/session-content.ts +80 -78
- package/src/input/commands/session-workflow.ts +134 -104
- package/src/input/commands/session.ts +3 -174
- package/src/input/commands/shell-core.ts +38 -17
- package/src/input/commands/subscription-runtime.ts +54 -185
- package/src/input/commands/support-bundle-runtime.ts +53 -0
- package/src/input/commands/tasks-runtime.ts +21 -21
- package/src/input/commands/work-plan-runtime.ts +33 -8
- package/src/input/commands.ts +6 -2
- package/src/input/feed-context-factory.ts +2 -2
- package/src/input/file-picker.ts +3 -2
- package/src/input/handler-command-route.ts +4 -7
- package/src/input/handler-content-actions.ts +89 -26
- package/src/input/handler-feed-routes.ts +19 -12
- package/src/input/handler-feed.ts +6 -5
- package/src/input/handler-interactions.ts +9 -36
- package/src/input/handler-modal-stack.ts +3 -3
- package/src/input/handler-onboarding.ts +52 -91
- package/src/input/handler-shortcuts.ts +16 -7
- package/src/input/handler.ts +50 -23
- package/src/input/input-history.ts +5 -6
- package/src/input/keybindings.ts +27 -16
- package/src/input/mcp-workspace.ts +90 -26
- package/src/input/onboarding/handler-onboarding-routes.ts +3 -1
- package/src/input/onboarding/onboarding-wizard-apply.ts +62 -0
- package/src/input/onboarding/onboarding-wizard-constants.ts +1 -0
- package/src/input/onboarding/onboarding-wizard-helpers.ts +1 -1
- package/src/input/onboarding/onboarding-wizard-operator-steps.ts +223 -55
- package/src/input/onboarding/onboarding-wizard-steps.ts +59 -35
- package/src/input/onboarding/onboarding-wizard-types.ts +4 -1
- package/src/input/onboarding/onboarding-wizard.ts +87 -2
- package/src/input/profile-picker-modal.ts +31 -12
- package/src/input/session-picker-modal.ts +21 -4
- package/src/input/settings-modal-agent-policy.ts +6 -6
- package/src/input/settings-modal-behavior.ts +0 -3
- package/src/input/settings-modal-subscriptions.ts +3 -3
- package/src/input/settings-modal-types.ts +2 -13
- package/src/input/settings-modal.ts +20 -66
- package/src/input/submission-intent.ts +0 -1
- package/src/input/submission-router.ts +3 -3
- package/src/main.ts +18 -10
- package/src/panels/approval-panel.ts +8 -8
- package/src/panels/automation-control-panel.ts +4 -4
- package/src/panels/base-panel.ts +1 -1
- package/src/panels/builtin/agent.ts +1 -1
- package/src/panels/builtin/operations.ts +3 -12
- package/src/panels/builtin/session.ts +32 -24
- package/src/panels/builtin/shared.ts +7 -7
- package/src/panels/cost-tracker-panel.ts +1 -1
- package/src/panels/docs-panel.ts +5 -3
- package/src/panels/index.ts +0 -1
- package/src/panels/knowledge-panel.ts +6 -5
- package/src/panels/memory-panel.ts +7 -6
- package/src/panels/panel-list-panel.ts +36 -80
- package/src/panels/project-planning-panel.ts +19 -12
- package/src/panels/provider-account-snapshot.ts +51 -25
- package/src/panels/provider-accounts-panel.ts +33 -18
- package/src/panels/provider-health-domains.ts +48 -7
- package/src/panels/provider-health-panel.ts +5 -4
- package/src/panels/qr-panel.ts +44 -20
- package/src/panels/schedule-panel.ts +9 -17
- package/src/panels/security-panel.ts +8 -8
- package/src/panels/session-browser-panel.ts +10 -10
- package/src/panels/subscription-panel.ts +6 -6
- package/src/panels/system-messages-panel.ts +3 -3
- package/src/panels/tasks-panel.ts +21 -14
- package/src/panels/tool-inspector-panel.ts +19 -12
- package/src/panels/work-plan-panel.ts +5 -5
- package/src/planning/project-planning-coordinator.ts +3 -3
- package/src/provider-auth-route-display.ts +9 -0
- package/src/renderer/agent-workspace-style.ts +34 -0
- package/src/renderer/agent-workspace.ts +254 -57
- package/src/renderer/autocomplete-overlay.ts +25 -6
- package/src/renderer/block-actions.ts +1 -3
- package/src/renderer/bookmark-modal.ts +19 -4
- package/src/renderer/buffer.ts +4 -2
- package/src/renderer/context-inspector.ts +50 -13
- package/src/renderer/diff.ts +1 -1
- package/src/renderer/file-picker-overlay.ts +19 -6
- package/src/renderer/help-overlay.ts +112 -34
- package/src/renderer/history-search-overlay.ts +19 -4
- package/src/renderer/live-tail-modal.ts +27 -5
- package/src/renderer/mcp-workspace.ts +176 -43
- package/src/renderer/model-picker-overlay.ts +58 -3
- package/src/renderer/model-workspace.ts +104 -22
- package/src/renderer/onboarding/onboarding-wizard.ts +20 -4
- package/src/renderer/process-modal.ts +27 -6
- package/src/renderer/profile-picker-modal.ts +21 -5
- package/src/renderer/search-overlay.ts +25 -5
- package/src/renderer/selection-modal-overlay.ts +46 -14
- package/src/renderer/session-picker-modal.ts +18 -1
- package/src/renderer/settings-modal-helpers.ts +2 -40
- package/src/renderer/settings-modal.ts +88 -55
- package/src/renderer/system-message.ts +1 -1
- package/src/renderer/tool-call.ts +20 -11
- package/src/runtime/agent-runtime-events.ts +129 -0
- package/src/runtime/bootstrap-command-context.ts +7 -1
- package/src/runtime/bootstrap-command-parts.ts +11 -8
- package/src/runtime/bootstrap-core.ts +23 -65
- package/src/runtime/bootstrap-hook-bridge.ts +7 -18
- package/src/runtime/bootstrap-shell.ts +46 -8
- package/src/runtime/bootstrap.ts +36 -46
- package/src/runtime/connected-host-auth.ts +47 -0
- package/src/runtime/diagnostics/panels/index.ts +2 -2
- package/src/runtime/diagnostics/panels/panel-resources.ts +1 -1
- package/src/runtime/diagnostics/panels/policy.ts +7 -7
- package/src/runtime/index.ts +2 -5
- package/src/runtime/onboarding/apply-file-helpers.ts +66 -0
- package/src/runtime/onboarding/apply.ts +288 -74
- package/src/runtime/onboarding/derivation.ts +10 -13
- package/src/runtime/onboarding/snapshot.ts +2 -17
- package/src/runtime/onboarding/types.ts +34 -20
- package/src/runtime/onboarding/verify.ts +105 -4
- package/src/runtime/operator-token-cleanup.ts +3 -3
- package/src/runtime/services.ts +95 -11
- package/src/runtime/store/selectors/index.ts +3 -3
- package/src/runtime/store/state.ts +1 -4
- package/src/runtime/surface-feature-flags.ts +41 -6
- package/src/runtime/ui-read-models.ts +3 -4
- package/src/runtime/ui-services.ts +6 -6
- package/src/shell/blocking-input.ts +2 -1
- package/src/shell/service-settings-sync.ts +7 -7
- package/src/shell/ui-openers.ts +17 -38
- package/src/tools/agent-analysis-registry-policy.ts +0 -1
- package/src/tools/agent-channel-send-tool.ts +133 -0
- package/src/tools/agent-context-policy.ts +1 -1
- package/src/tools/agent-knowledge-ingest-tool.ts +405 -0
- package/src/tools/agent-knowledge-tool.ts +170 -0
- package/src/tools/agent-local-registry-tool.ts +279 -73
- package/src/tools/agent-media-generate-tool.ts +133 -0
- package/src/tools/agent-notify-tool.ts +143 -0
- package/src/tools/agent-operator-action-tool.ts +137 -0
- package/src/tools/agent-operator-briefing-tool.ts +217 -0
- package/src/tools/agent-reminder-schedule-tool.ts +237 -0
- package/src/tools/agent-tool-policy-guard.ts +13 -15
- package/src/tools/agent-work-plan-tool.ts +256 -0
- package/src/version.ts +1 -1
- package/docs/connected-services.md +0 -51
- package/src/cli/package-verification.ts +0 -274
- package/src/input/commands/policy-dispatch.ts +0 -339
- package/src/input/commands/policy.ts +0 -17
- package/src/panels/panel-picker.ts +0 -105
- package/src/panels/policy-panel.ts +0 -308
- package/src/renderer/panel-picker-overlay.ts +0 -202
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import type { AgentWorkspaceActionResult, AgentWorkspaceLocalEditor } from './agent-workspace-types.ts';
|
|
2
|
+
import type { AgentWorkspaceSessionCommandEditorKind } from './agent-workspace-session-command-editors.ts';
|
|
3
|
+
import { isAgentWorkspaceSessionCommandEditorKind } from './agent-workspace-session-command-editors.ts';
|
|
4
|
+
import { quoteSlashCommandArg } from './slash-command-parser.ts';
|
|
5
|
+
|
|
6
|
+
type AgentWorkspaceFieldReader = (fieldId: string) => string;
|
|
7
|
+
|
|
8
|
+
export type AgentWorkspaceSessionCommandEditorSubmission =
|
|
9
|
+
| {
|
|
10
|
+
readonly kind: 'editor';
|
|
11
|
+
readonly editor: AgentWorkspaceLocalEditor;
|
|
12
|
+
readonly status: string;
|
|
13
|
+
readonly actionResult?: AgentWorkspaceActionResult;
|
|
14
|
+
}
|
|
15
|
+
| {
|
|
16
|
+
readonly kind: 'dispatch';
|
|
17
|
+
readonly command: string;
|
|
18
|
+
readonly status: string;
|
|
19
|
+
readonly actionResult: AgentWorkspaceActionResult;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export function isAgentWorkspaceSessionCommandSubmissionKind(kind: string): kind is AgentWorkspaceSessionCommandEditorKind {
|
|
23
|
+
return isAgentWorkspaceSessionCommandEditorKind(kind as AgentWorkspaceSessionCommandEditorKind);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function isAffirmative(value: string): boolean {
|
|
27
|
+
return /^(y|yes|true)$/i.test(value.trim());
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function unconfirmed(editor: AgentWorkspaceLocalEditor, message: string): AgentWorkspaceSessionCommandEditorSubmission {
|
|
31
|
+
return {
|
|
32
|
+
kind: 'editor',
|
|
33
|
+
editor: { ...editor, message },
|
|
34
|
+
status: message,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function dispatch(command: string, title: string, detail: string, safety: AgentWorkspaceActionResult['safety']): AgentWorkspaceSessionCommandEditorSubmission {
|
|
39
|
+
return {
|
|
40
|
+
kind: 'dispatch',
|
|
41
|
+
command,
|
|
42
|
+
status: `${title}.`,
|
|
43
|
+
actionResult: { kind: 'dispatched', title, detail, command, safety },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function buildAgentWorkspaceSessionCommandEditorSubmission(
|
|
48
|
+
editor: AgentWorkspaceLocalEditor,
|
|
49
|
+
readField: AgentWorkspaceFieldReader,
|
|
50
|
+
): AgentWorkspaceSessionCommandEditorSubmission {
|
|
51
|
+
if (editor.kind === 'conversation-export') {
|
|
52
|
+
if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Conversation export not confirmed. Type yes, then press Enter.');
|
|
53
|
+
return dispatch(
|
|
54
|
+
`/export ${quoteSlashCommandArg(readField('format'))} ${quoteSlashCommandArg(readField('path'))} --yes`,
|
|
55
|
+
'Opening conversation export',
|
|
56
|
+
'The workspace handed a confirmed conversation export command to the shell-owned command router.',
|
|
57
|
+
'safe',
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
if (editor.kind === 'conversation-events' || editor.kind === 'conversation-groups') {
|
|
61
|
+
const subcommand = editor.kind === 'conversation-groups' ? 'groups' : 'events';
|
|
62
|
+
const eventKind = readField('kind');
|
|
63
|
+
const command = eventKind.length > 0
|
|
64
|
+
? `/conversation ${subcommand} ${quoteSlashCommandArg(eventKind)}`
|
|
65
|
+
: `/conversation ${subcommand}`;
|
|
66
|
+
return dispatch(
|
|
67
|
+
command,
|
|
68
|
+
editor.kind === 'conversation-groups' ? 'Opening transcript groups' : 'Opening transcript events',
|
|
69
|
+
'The workspace handed read-only transcript structure inspection to the shell-owned command router.',
|
|
70
|
+
'read-only',
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
if (editor.kind === 'conversation-find') {
|
|
74
|
+
const kind = readField('kind');
|
|
75
|
+
const command = kind.length > 0
|
|
76
|
+
? `/conversation find ${quoteSlashCommandArg(readField('query'))} ${quoteSlashCommandArg(kind)}`
|
|
77
|
+
: `/conversation find ${quoteSlashCommandArg(readField('query'))}`;
|
|
78
|
+
return dispatch(
|
|
79
|
+
command,
|
|
80
|
+
'Opening transcript search',
|
|
81
|
+
'The workspace handed read-only transcript search to the shell-owned command router.',
|
|
82
|
+
'read-only',
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
if (editor.kind === 'effort-level') {
|
|
86
|
+
return dispatch(
|
|
87
|
+
`/effort ${quoteSlashCommandArg(readField('level'))}`,
|
|
88
|
+
'Opening reasoning effort change',
|
|
89
|
+
'The workspace handed reasoning effort selection to the shell-owned command router.',
|
|
90
|
+
'safe',
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
if (editor.kind === 'session-save') {
|
|
94
|
+
if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Session save not confirmed. Type yes, then press Enter.');
|
|
95
|
+
return dispatch(
|
|
96
|
+
`/save ${quoteSlashCommandArg(readField('name'))}`,
|
|
97
|
+
'Opening session save',
|
|
98
|
+
'The workspace handed a confirmed session save command to the shell-owned command router.',
|
|
99
|
+
'safe',
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
if (editor.kind === 'session-load') {
|
|
103
|
+
if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Session load not confirmed. Type yes, then press Enter.');
|
|
104
|
+
return dispatch(
|
|
105
|
+
`/load ${quoteSlashCommandArg(readField('name'))}`,
|
|
106
|
+
'Opening session load',
|
|
107
|
+
'The workspace handed a confirmed session load command to the shell-owned command router.',
|
|
108
|
+
'safe',
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
if (editor.kind === 'session-rename') {
|
|
112
|
+
return dispatch(
|
|
113
|
+
`/session rename ${quoteSlashCommandArg(readField('name'))}`,
|
|
114
|
+
'Opening session rename',
|
|
115
|
+
'The workspace handed current-session rename to the shell-owned command router.',
|
|
116
|
+
'safe',
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
if (editor.kind === 'session-resume') {
|
|
120
|
+
return dispatch(
|
|
121
|
+
`/session resume ${quoteSlashCommandArg(readField('target'))}`,
|
|
122
|
+
'Opening session resume',
|
|
123
|
+
'The workspace handed saved-session resume to the shell-owned command router.',
|
|
124
|
+
'safe',
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
if (editor.kind === 'session-info') {
|
|
128
|
+
return dispatch(
|
|
129
|
+
`/session info ${quoteSlashCommandArg(readField('target'))}`,
|
|
130
|
+
'Opening session inspection',
|
|
131
|
+
'The workspace handed read-only saved-session inspection to the shell-owned command router.',
|
|
132
|
+
'read-only',
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
if (editor.kind === 'session-export-saved') {
|
|
136
|
+
return dispatch(
|
|
137
|
+
`/session export ${quoteSlashCommandArg(readField('target'))} ${quoteSlashCommandArg(readField('format'))}`,
|
|
138
|
+
'Opening saved-session export',
|
|
139
|
+
'The workspace handed saved-session transcript export to the shell-owned command router.',
|
|
140
|
+
'read-only',
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
if (editor.kind === 'session-search') {
|
|
144
|
+
return dispatch(
|
|
145
|
+
`/session search ${quoteSlashCommandArg(readField('query'))}`,
|
|
146
|
+
'Opening saved-session search',
|
|
147
|
+
'The workspace handed saved-session search to the shell-owned command router.',
|
|
148
|
+
'read-only',
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
if (editor.kind === 'session-delete') {
|
|
152
|
+
if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Session delete not confirmed. Type yes, then press Enter.');
|
|
153
|
+
return dispatch(
|
|
154
|
+
`/session delete ${quoteSlashCommandArg(readField('target'))} --yes`,
|
|
155
|
+
'Opening saved-session delete',
|
|
156
|
+
'The workspace handed confirmed saved-session deletion to the shell-owned command router.',
|
|
157
|
+
'safe',
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
if (editor.kind === 'session-fork') {
|
|
161
|
+
const name = readField('name');
|
|
162
|
+
return dispatch(
|
|
163
|
+
name.length > 0 ? `/session fork ${quoteSlashCommandArg(name)}` : '/session fork',
|
|
164
|
+
'Opening session fork',
|
|
165
|
+
'The workspace handed current-session fork to the shell-owned command router.',
|
|
166
|
+
'safe',
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
if (editor.kind === 'session-graph') {
|
|
170
|
+
const sessionId = readField('sessionId');
|
|
171
|
+
const format = readField('format');
|
|
172
|
+
const parts = ['/session', 'graph'];
|
|
173
|
+
if (sessionId.length > 0) parts.push('--session', quoteSlashCommandArg(sessionId));
|
|
174
|
+
if (format.length > 0) parts.push('--format', quoteSlashCommandArg(format));
|
|
175
|
+
const command = parts.join(' ');
|
|
176
|
+
return dispatch(
|
|
177
|
+
command,
|
|
178
|
+
'Opening session graph',
|
|
179
|
+
'The workspace handed read-only session graph inspection to the shell-owned command router.',
|
|
180
|
+
'read-only',
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
if (editor.kind === 'mode-preset') {
|
|
184
|
+
if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Interaction mode change not confirmed. Type yes, then press Enter.');
|
|
185
|
+
return dispatch(
|
|
186
|
+
`/mode ${quoteSlashCommandArg(readField('preset'))} --yes`,
|
|
187
|
+
'Opening interaction mode change',
|
|
188
|
+
'The workspace handed a confirmed interaction mode command to the shell-owned command router.',
|
|
189
|
+
'safe',
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Domain verbosity change not confirmed. Type yes, then press Enter.');
|
|
193
|
+
return dispatch(
|
|
194
|
+
`/mode set-domain ${quoteSlashCommandArg(readField('domain'))} ${quoteSlashCommandArg(readField('verbosity'))} --yes`,
|
|
195
|
+
'Opening domain verbosity change',
|
|
196
|
+
'The workspace handed a confirmed domain verbosity command to the shell-owned command router.',
|
|
197
|
+
'safe',
|
|
198
|
+
);
|
|
199
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import type { AgentWorkspaceEditorKind, AgentWorkspaceLocalEditor } from './agent-workspace-types.ts';
|
|
2
|
+
|
|
3
|
+
export type AgentWorkspaceSessionCommandEditorKind = Extract<
|
|
4
|
+
AgentWorkspaceEditorKind,
|
|
5
|
+
| 'conversation-export'
|
|
6
|
+
| 'conversation-events'
|
|
7
|
+
| 'conversation-groups'
|
|
8
|
+
| 'conversation-find'
|
|
9
|
+
| 'effort-level'
|
|
10
|
+
| 'session-save'
|
|
11
|
+
| 'session-load'
|
|
12
|
+
| 'session-rename'
|
|
13
|
+
| 'session-resume'
|
|
14
|
+
| 'session-info'
|
|
15
|
+
| 'session-export-saved'
|
|
16
|
+
| 'session-search'
|
|
17
|
+
| 'session-delete'
|
|
18
|
+
| 'session-fork'
|
|
19
|
+
| 'session-graph'
|
|
20
|
+
| 'mode-preset'
|
|
21
|
+
| 'mode-domain'
|
|
22
|
+
>;
|
|
23
|
+
|
|
24
|
+
export function isAgentWorkspaceSessionCommandEditorKind(kind: AgentWorkspaceEditorKind): kind is AgentWorkspaceSessionCommandEditorKind {
|
|
25
|
+
return kind === 'conversation-export'
|
|
26
|
+
|| kind === 'conversation-events'
|
|
27
|
+
|| kind === 'conversation-groups'
|
|
28
|
+
|| kind === 'conversation-find'
|
|
29
|
+
|| kind === 'effort-level'
|
|
30
|
+
|| kind === 'session-save'
|
|
31
|
+
|| kind === 'session-load'
|
|
32
|
+
|| kind === 'session-rename'
|
|
33
|
+
|| kind === 'session-resume'
|
|
34
|
+
|| kind === 'session-info'
|
|
35
|
+
|| kind === 'session-export-saved'
|
|
36
|
+
|| kind === 'session-search'
|
|
37
|
+
|| kind === 'session-delete'
|
|
38
|
+
|| kind === 'session-fork'
|
|
39
|
+
|| kind === 'session-graph'
|
|
40
|
+
|| kind === 'mode-preset'
|
|
41
|
+
|| kind === 'mode-domain';
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function createAgentWorkspaceSessionCommandEditor(kind: AgentWorkspaceSessionCommandEditorKind): AgentWorkspaceLocalEditor {
|
|
45
|
+
if (kind === 'conversation-export') {
|
|
46
|
+
return {
|
|
47
|
+
kind,
|
|
48
|
+
mode: 'create',
|
|
49
|
+
title: 'Export Conversation',
|
|
50
|
+
selectedFieldIndex: 0,
|
|
51
|
+
message: 'Export the current conversation to a workspace file. Type yes on the final field to confirm.',
|
|
52
|
+
fields: [
|
|
53
|
+
{ id: 'format', label: 'Format', value: 'markdown', required: true, multiline: false, hint: 'markdown or text.' },
|
|
54
|
+
{ id: 'path', label: 'Output path', value: './conversation.md', required: true, multiline: false, hint: 'Workspace-relative output path.' },
|
|
55
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /export with --yes.' },
|
|
56
|
+
],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (kind === 'conversation-events' || kind === 'conversation-groups') {
|
|
60
|
+
const groups = kind === 'conversation-groups';
|
|
61
|
+
return {
|
|
62
|
+
kind,
|
|
63
|
+
mode: 'create',
|
|
64
|
+
title: groups ? 'Show Transcript Groups' : 'Show Transcript Events',
|
|
65
|
+
selectedFieldIndex: 0,
|
|
66
|
+
message: groups
|
|
67
|
+
? 'Inspect grouped transcript structure from the Agent workspace.'
|
|
68
|
+
: 'Inspect transcript events from the Agent workspace.',
|
|
69
|
+
fields: [
|
|
70
|
+
{ id: 'kind', label: 'Event kind', value: '', required: false, multiline: false, hint: 'Optional transcript event kind. Blank shows all.' },
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (kind === 'conversation-find') {
|
|
75
|
+
return {
|
|
76
|
+
kind,
|
|
77
|
+
mode: 'create',
|
|
78
|
+
title: 'Find Transcript Text',
|
|
79
|
+
selectedFieldIndex: 0,
|
|
80
|
+
message: 'Search the current Agent transcript from the workspace.',
|
|
81
|
+
fields: [
|
|
82
|
+
{ id: 'query', label: 'Search query', value: '', required: true, multiline: false, hint: 'Text to find in the current transcript.' },
|
|
83
|
+
{ id: 'kind', label: 'Event kind', value: '', required: false, multiline: false, hint: 'Optional transcript event kind.' },
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
if (kind === 'effort-level') {
|
|
88
|
+
return {
|
|
89
|
+
kind,
|
|
90
|
+
mode: 'update',
|
|
91
|
+
title: 'Set Reasoning Effort',
|
|
92
|
+
selectedFieldIndex: 0,
|
|
93
|
+
message: 'Set the reasoning effort used by normal Agent chat turns when the selected model supports it.',
|
|
94
|
+
fields: [
|
|
95
|
+
{ id: 'level', label: 'Effort level', value: 'medium', required: true, multiline: false, hint: 'instant, low, medium, or high.' },
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (kind === 'session-save') {
|
|
100
|
+
return {
|
|
101
|
+
kind,
|
|
102
|
+
mode: 'create',
|
|
103
|
+
title: 'Save Session',
|
|
104
|
+
selectedFieldIndex: 0,
|
|
105
|
+
message: 'Save the current Agent session under a reviewable name. Type yes on the final field to confirm.',
|
|
106
|
+
fields: [
|
|
107
|
+
{ id: 'name', label: 'Session name', value: '', required: true, multiline: false, hint: 'Local saved-session name.' },
|
|
108
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /save.' },
|
|
109
|
+
],
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (kind === 'session-load') {
|
|
113
|
+
return {
|
|
114
|
+
kind,
|
|
115
|
+
mode: 'update',
|
|
116
|
+
title: 'Load Session',
|
|
117
|
+
selectedFieldIndex: 0,
|
|
118
|
+
message: 'Load a saved Agent session into the current conversation. Type yes on the final field to confirm.',
|
|
119
|
+
fields: [
|
|
120
|
+
{ id: 'name', label: 'Session name', value: '', required: true, multiline: false, hint: 'Existing saved-session name from /sessions.' },
|
|
121
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /load.' },
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (kind === 'session-rename') {
|
|
126
|
+
return {
|
|
127
|
+
kind,
|
|
128
|
+
mode: 'update',
|
|
129
|
+
title: 'Rename Current Session',
|
|
130
|
+
selectedFieldIndex: 0,
|
|
131
|
+
message: 'Rename the active Agent session from the workspace.',
|
|
132
|
+
fields: [
|
|
133
|
+
{ id: 'name', label: 'New session name', value: '', required: true, multiline: false, hint: 'New reviewable name for the current session.' },
|
|
134
|
+
],
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
if (kind === 'session-resume') {
|
|
138
|
+
return {
|
|
139
|
+
kind,
|
|
140
|
+
mode: 'update',
|
|
141
|
+
title: 'Resume Saved Session',
|
|
142
|
+
selectedFieldIndex: 0,
|
|
143
|
+
message: 'Resume one saved Agent session by id, prefix, or title.',
|
|
144
|
+
fields: [
|
|
145
|
+
{ id: 'target', label: 'Session id or name', value: '', required: true, multiline: false, hint: 'Use /session list or the Saved sessions action to find ids.' },
|
|
146
|
+
],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (kind === 'session-info') {
|
|
150
|
+
return {
|
|
151
|
+
kind,
|
|
152
|
+
mode: 'create',
|
|
153
|
+
title: 'Inspect Saved Session',
|
|
154
|
+
selectedFieldIndex: 0,
|
|
155
|
+
message: 'Inspect saved session metadata without changing the current conversation.',
|
|
156
|
+
fields: [
|
|
157
|
+
{ id: 'target', label: 'Session id or name', value: '', required: true, multiline: false, hint: 'Saved session id, prefix, or name.' },
|
|
158
|
+
],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
if (kind === 'session-export-saved') {
|
|
162
|
+
return {
|
|
163
|
+
kind,
|
|
164
|
+
mode: 'create',
|
|
165
|
+
title: 'Export Saved Session',
|
|
166
|
+
selectedFieldIndex: 0,
|
|
167
|
+
message: 'Print one saved session transcript as markdown or text.',
|
|
168
|
+
fields: [
|
|
169
|
+
{ id: 'target', label: 'Session id or name', value: '', required: true, multiline: false, hint: 'Use . for the current session, or a saved session id/name.' },
|
|
170
|
+
{ id: 'format', label: 'Format', value: 'markdown', required: true, multiline: false, hint: 'markdown or text.' },
|
|
171
|
+
],
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
if (kind === 'session-search') {
|
|
175
|
+
return {
|
|
176
|
+
kind,
|
|
177
|
+
mode: 'create',
|
|
178
|
+
title: 'Search Saved Sessions',
|
|
179
|
+
selectedFieldIndex: 0,
|
|
180
|
+
message: 'Search saved Agent sessions from the workspace.',
|
|
181
|
+
fields: [
|
|
182
|
+
{ id: 'query', label: 'Search query', value: '', required: true, multiline: false, hint: 'Keyword or phrase to find in saved sessions.' },
|
|
183
|
+
],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (kind === 'session-delete') {
|
|
187
|
+
return {
|
|
188
|
+
kind,
|
|
189
|
+
mode: 'delete',
|
|
190
|
+
title: 'Delete Saved Session',
|
|
191
|
+
selectedFieldIndex: 0,
|
|
192
|
+
message: 'Delete one saved Agent session. Type yes on the final field to confirm.',
|
|
193
|
+
fields: [
|
|
194
|
+
{ id: 'target', label: 'Session id or name', value: '', required: true, multiline: false, hint: 'Saved session id or prefix. The active session cannot be deleted.' },
|
|
195
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /session delete with --yes.' },
|
|
196
|
+
],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
if (kind === 'session-fork') {
|
|
200
|
+
return {
|
|
201
|
+
kind,
|
|
202
|
+
mode: 'create',
|
|
203
|
+
title: 'Fork Current Session',
|
|
204
|
+
selectedFieldIndex: 0,
|
|
205
|
+
message: 'Fork the current Agent session into a new local saved session.',
|
|
206
|
+
fields: [
|
|
207
|
+
{ id: 'name', label: 'Fork name', value: '', required: false, multiline: false, hint: 'Optional new session name. Blank uses the default fork name.' },
|
|
208
|
+
],
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
if (kind === 'session-graph') {
|
|
212
|
+
return {
|
|
213
|
+
kind,
|
|
214
|
+
mode: 'create',
|
|
215
|
+
title: 'Inspect Session Graph',
|
|
216
|
+
selectedFieldIndex: 0,
|
|
217
|
+
message: 'Inspect the read-only cross-session graph. Mutating graph actions remain blocked in Agent.',
|
|
218
|
+
fields: [
|
|
219
|
+
{ id: 'sessionId', label: 'Session id', value: '', required: false, multiline: false, hint: 'Optional session id filter.' },
|
|
220
|
+
{ id: 'format', label: 'Format', value: 'text', required: false, multiline: false, hint: 'text or json.' },
|
|
221
|
+
],
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
if (kind === 'mode-preset') {
|
|
225
|
+
return {
|
|
226
|
+
kind,
|
|
227
|
+
mode: 'update',
|
|
228
|
+
title: 'Set Interaction Mode',
|
|
229
|
+
selectedFieldIndex: 0,
|
|
230
|
+
message: 'Set the Agent interaction noise level. Type yes on the final field to confirm.',
|
|
231
|
+
fields: [
|
|
232
|
+
{ id: 'preset', label: 'Preset', value: 'balanced', required: true, multiline: false, hint: 'quiet, balanced, or operator.' },
|
|
233
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /mode <preset> with --yes.' },
|
|
234
|
+
],
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
kind,
|
|
239
|
+
mode: 'update',
|
|
240
|
+
title: 'Set Domain Verbosity',
|
|
241
|
+
selectedFieldIndex: 0,
|
|
242
|
+
message: 'Set interaction verbosity for one notification domain. Type yes on the final field to confirm.',
|
|
243
|
+
fields: [
|
|
244
|
+
{ id: 'domain', label: 'Domain', value: '', required: true, multiline: false, hint: 'Domain name from mode output.' },
|
|
245
|
+
{ id: 'verbosity', label: 'Verbosity', value: 'normal', required: true, multiline: false, hint: 'minimal, normal, or verbose.' },
|
|
246
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /mode set-domain.' },
|
|
247
|
+
],
|
|
248
|
+
};
|
|
249
|
+
}
|
|
@@ -17,12 +17,16 @@ export interface AgentWorkspaceSetupChecklistInput {
|
|
|
17
17
|
readonly sessionMemoryCount: number;
|
|
18
18
|
readonly localMemoryCount: number;
|
|
19
19
|
readonly localMemoryReviewQueueCount: number;
|
|
20
|
+
readonly localNoteCount: number;
|
|
21
|
+
readonly localNoteReviewQueueCount: number;
|
|
20
22
|
readonly routineCount: number;
|
|
21
23
|
readonly enabledRoutineCount: number;
|
|
24
|
+
readonly missingRoutineRequirementCount: number;
|
|
22
25
|
readonly skillCount: number;
|
|
23
26
|
readonly enabledSkillCount: number;
|
|
24
27
|
readonly skillBundleCount: number;
|
|
25
28
|
readonly enabledSkillBundleCount: number;
|
|
29
|
+
readonly missingSkillRequirementCount: number;
|
|
26
30
|
readonly activePersonaName: string;
|
|
27
31
|
readonly discoveredPersonas: AgentBehaviorDiscoverySummary;
|
|
28
32
|
readonly discoveredSkills: AgentBehaviorDiscoverySummary;
|
|
@@ -51,10 +55,10 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
|
|
|
51
55
|
return [
|
|
52
56
|
{
|
|
53
57
|
id: 'runtime',
|
|
54
|
-
label: 'Connected
|
|
58
|
+
label: 'Connected host',
|
|
55
59
|
status: 'ready',
|
|
56
|
-
detail: `Agent will connect to ${input.runtimeBaseUrl};
|
|
57
|
-
command: '
|
|
60
|
+
detail: `Agent will connect to ${input.runtimeBaseUrl}; connected-host ownership stays outside this product.`,
|
|
61
|
+
command: 'Home -> Review health',
|
|
58
62
|
},
|
|
59
63
|
{
|
|
60
64
|
id: 'provider-model',
|
|
@@ -63,14 +67,14 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
|
|
|
63
67
|
detail: providerReady
|
|
64
68
|
? `Current chat route is ${input.provider} / ${input.model}.`
|
|
65
69
|
: 'Choose a provider and model before relying on assistant turns.',
|
|
66
|
-
command: '
|
|
70
|
+
command: 'Setup -> Provider and model',
|
|
67
71
|
},
|
|
68
72
|
{
|
|
69
73
|
id: 'agent-knowledge',
|
|
70
74
|
label: 'Agent Knowledge',
|
|
71
75
|
status: 'recommended',
|
|
72
76
|
detail: 'Check isolated Agent Knowledge status, then ingest source-backed material into the Agent segment only.',
|
|
73
|
-
command: '
|
|
77
|
+
command: 'Knowledge',
|
|
74
78
|
},
|
|
75
79
|
{
|
|
76
80
|
id: 'profile',
|
|
@@ -81,7 +85,7 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
|
|
|
81
85
|
: discoveredBehaviorCount > 0
|
|
82
86
|
? `${discoveredBehaviorCount} discovered behavior file(s) can seed an isolated Agent profile from the Profiles workspace.`
|
|
83
87
|
: `${input.runtimeStarterTemplateCount} starter template(s) are available if this machine needs separate operator identities.`,
|
|
84
|
-
command:
|
|
88
|
+
command: 'Profiles',
|
|
85
89
|
},
|
|
86
90
|
{
|
|
87
91
|
id: 'persona',
|
|
@@ -92,29 +96,37 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
|
|
|
92
96
|
: input.discoveredPersonas.count > 0
|
|
93
97
|
? `${input.discoveredPersonas.count} discovered persona file(s) can be imported into the Agent-local registry.${sampleNames(input.discoveredPersonas)}`
|
|
94
98
|
: 'Create or choose a persona to make the assistant voice and policy explicit.',
|
|
95
|
-
command:
|
|
99
|
+
command: 'Personas',
|
|
96
100
|
},
|
|
97
101
|
{
|
|
98
102
|
id: 'skills',
|
|
99
103
|
label: 'Skills',
|
|
100
|
-
status: input.
|
|
104
|
+
status: input.missingSkillRequirementCount > 0
|
|
105
|
+
? 'recommended'
|
|
106
|
+
: input.enabledSkillCount > 0 || input.enabledSkillBundleCount > 0
|
|
107
|
+
? 'ready'
|
|
108
|
+
: input.skillCount > 0 || input.skillBundleCount > 0 || input.discoveredSkills.count > 0
|
|
109
|
+
? 'recommended'
|
|
110
|
+
: 'optional',
|
|
101
111
|
detail: input.skillCount > 0 || input.skillBundleCount > 0
|
|
102
|
-
? `${input.enabledSkillCount}/${input.skillCount} local skill(s) enabled; ${input.enabledSkillBundleCount}/${input.skillBundleCount} bundle(s) enabled.${input.discoveredSkills.count > 0 ? ` ${input.discoveredSkills.count} discovered skill file(s) are still available to import.` : ''}`
|
|
112
|
+
? `${input.enabledSkillCount}/${input.skillCount} local skill(s) enabled; ${input.enabledSkillBundleCount}/${input.skillBundleCount} bundle(s) enabled.${input.missingSkillRequirementCount > 0 ? ` ${input.missingSkillRequirementCount} missing setup requirement(s).` : ''}${input.discoveredSkills.count > 0 ? ` ${input.discoveredSkills.count} discovered skill file(s) are still available to import.` : ''}`
|
|
103
113
|
: input.discoveredSkills.count > 0
|
|
104
114
|
? `${input.discoveredSkills.count} discovered skill file(s) can be imported as local reusable procedures.${sampleNames(input.discoveredSkills)}`
|
|
105
115
|
: 'Create reusable local skills and bundles for repeated workflows.',
|
|
106
|
-
command:
|
|
116
|
+
command: 'Skills',
|
|
107
117
|
},
|
|
108
118
|
{
|
|
109
119
|
id: 'routines',
|
|
110
120
|
label: 'Routines',
|
|
111
|
-
status:
|
|
121
|
+
status: input.missingRoutineRequirementCount > 0
|
|
122
|
+
? 'recommended'
|
|
123
|
+
: setupStatusForCount(input.enabledRoutineCount, 'ready', input.routineCount > 0 || input.discoveredRoutines.count > 0 ? 'recommended' : 'optional'),
|
|
112
124
|
detail: input.routineCount > 0
|
|
113
|
-
? `${input.enabledRoutineCount}/${input.routineCount} local routine(s) enabled.${input.discoveredRoutines.count > 0 ? ` ${input.discoveredRoutines.count} discovered routine file(s) are still available to import.` : ''}`
|
|
125
|
+
? `${input.enabledRoutineCount}/${input.routineCount} local routine(s) enabled.${input.missingRoutineRequirementCount > 0 ? ` ${input.missingRoutineRequirementCount} missing setup requirement(s).` : ''}${input.discoveredRoutines.count > 0 ? ` ${input.discoveredRoutines.count} discovered routine file(s) are still available to import.` : ''}`
|
|
114
126
|
: input.discoveredRoutines.count > 0
|
|
115
127
|
? `${input.discoveredRoutines.count} discovered routine file(s) can be imported as main-conversation workflows.${sampleNames(input.discoveredRoutines)}`
|
|
116
128
|
: 'Create local routines first; promote schedules only with explicit confirmation.',
|
|
117
|
-
command:
|
|
129
|
+
command: 'Routines',
|
|
118
130
|
},
|
|
119
131
|
{
|
|
120
132
|
id: 'memory',
|
|
@@ -123,7 +135,16 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
|
|
|
123
135
|
detail: input.localMemoryCount > 0
|
|
124
136
|
? `${input.localMemoryCount} Agent memory record(s) are available; ${input.localMemoryReviewQueueCount} need review.`
|
|
125
137
|
: 'Memory starts empty; durable facts should be stored deliberately and never include secrets.',
|
|
126
|
-
command: '
|
|
138
|
+
command: 'Memory',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
id: 'notes',
|
|
142
|
+
label: 'Scratchpad notes',
|
|
143
|
+
status: setupStatusForCount(input.localNoteCount, 'ready', 'optional'),
|
|
144
|
+
detail: input.localNoteCount > 0
|
|
145
|
+
? `${input.localNoteCount} Agent scratchpad note(s) are available; ${input.localNoteReviewQueueCount} need review.`
|
|
146
|
+
: 'Notes start empty; use them for source triage, temporary decisions, and handoff before promoting anything durable.',
|
|
147
|
+
command: 'Notes',
|
|
127
148
|
},
|
|
128
149
|
{
|
|
129
150
|
id: 'channels',
|
|
@@ -132,14 +153,14 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
|
|
|
132
153
|
detail: input.readyChannelCount > 0
|
|
133
154
|
? `${input.readyChannelCount} external channel(s) are ready.`
|
|
134
155
|
: 'Pair or review channels only when you want the assistant reachable outside this terminal.',
|
|
135
|
-
command: '
|
|
156
|
+
command: 'Channels',
|
|
136
157
|
},
|
|
137
158
|
{
|
|
138
159
|
id: 'voice-media',
|
|
139
160
|
label: 'Voice and media',
|
|
140
161
|
status: input.voiceProviderCount > 0 || input.mediaProviderCount > 0 ? 'ready' : 'optional',
|
|
141
162
|
detail: `${input.voiceProviderCount} voice provider(s), ${input.mediaProviderCount} media provider(s). Configure these only when useful.`,
|
|
142
|
-
command: '
|
|
163
|
+
command: 'Voice & Media',
|
|
143
164
|
},
|
|
144
165
|
];
|
|
145
166
|
}
|