@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
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
* /session command handler — Multi-session Orchestration.
|
|
3
3
|
*
|
|
4
4
|
* Implements read-only session graph inspection plus session continuity commands.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Local task graph mutation commands are blocked in Agent; explicit build/fix/review
|
|
6
|
+
* handoff must use `/delegate` so GoodVibes TUI owns execution.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import type { SlashCommand, CommandContext } from '../command-registry.ts';
|
|
10
|
-
import type {
|
|
11
|
-
import { VALID_SCOPES } from '@pellux/goodvibes-sdk/platform/sessions';
|
|
10
|
+
import type { CrossSessionTaskRef } from '@pellux/goodvibes-sdk/platform/sessions';
|
|
12
11
|
import { handleSessionWorkflowCommand } from './session-workflow.ts';
|
|
13
12
|
import { requireSessionOrchestration } from './runtime-services.ts';
|
|
14
13
|
|
|
@@ -24,21 +23,6 @@ function flagValue(args: string[], flag: string): string | undefined {
|
|
|
24
23
|
return args[idx + 1];
|
|
25
24
|
}
|
|
26
25
|
|
|
27
|
-
/**
|
|
28
|
-
* Parse a cross-session task ref from a string of the form
|
|
29
|
-
* `<sessionId>:<taskId>` or just `<taskId>` (uses currentSessionId as owner).
|
|
30
|
-
*/
|
|
31
|
-
function parseRef(
|
|
32
|
-
raw: string,
|
|
33
|
-
currentSessionId: string,
|
|
34
|
-
): { sessionId: string; taskId: string } {
|
|
35
|
-
const parts = raw.split(':', 2);
|
|
36
|
-
if (parts.length === 2) {
|
|
37
|
-
return { sessionId: parts[0]!, taskId: parts[1]! };
|
|
38
|
-
}
|
|
39
|
-
return { sessionId: currentSessionId, taskId: raw };
|
|
40
|
-
}
|
|
41
|
-
|
|
42
26
|
// ── Formatting helpers ────────────────────────────────────────────────────────
|
|
43
27
|
|
|
44
28
|
/** Status badge for display. */
|
|
@@ -69,101 +53,6 @@ function printSessionGraphMutationBlocked(context: CommandContext): void {
|
|
|
69
53
|
].join('\n'));
|
|
70
54
|
}
|
|
71
55
|
|
|
72
|
-
// ── /session link-task ────────────────────────────────────────────────────────
|
|
73
|
-
|
|
74
|
-
function handleLinkTask(args: string[], context: CommandContext): void {
|
|
75
|
-
const taskId = args[0];
|
|
76
|
-
if (!taskId) {
|
|
77
|
-
context.print(
|
|
78
|
-
'[session] Usage: /session link-task <taskId> [--session <sessionId>] ' +
|
|
79
|
-
'[--depends-on <sessionId:taskId>] [--label <label>]',
|
|
80
|
-
);
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Defense-in-depth: parser splits on whitespace but guard against future changes
|
|
85
|
-
if (!taskId.trim()) {
|
|
86
|
-
context.print('Error: taskId cannot be empty or whitespace.');
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
if (taskId.includes(':')) {
|
|
91
|
-
context.print('Error: taskId cannot contain ":" — it conflicts with the composite key format.');
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const sessionId = flagValue(args, '--session') ?? context.session.runtime.sessionId;
|
|
96
|
-
const dependsOnRaw = flagValue(args, '--depends-on');
|
|
97
|
-
const label = flagValue(args, '--label');
|
|
98
|
-
|
|
99
|
-
const orchestration = requireSessionOrchestration(context);
|
|
100
|
-
|
|
101
|
-
const ref: CrossSessionTaskRef = {
|
|
102
|
-
sessionId,
|
|
103
|
-
taskId,
|
|
104
|
-
title: label ?? taskId,
|
|
105
|
-
status: 'queued',
|
|
106
|
-
createdAt: Date.now(),
|
|
107
|
-
updatedAt: Date.now(),
|
|
108
|
-
label,
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
const dependsOn = dependsOnRaw ? parseRef(dependsOnRaw, sessionId) : undefined;
|
|
112
|
-
|
|
113
|
-
const result = orchestration.linkTask(ref, dependsOn);
|
|
114
|
-
|
|
115
|
-
if (!result.ok) {
|
|
116
|
-
context.print(`[session] link-task failed: ${result.error}`);
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
context.print(
|
|
121
|
-
`[session] Task linked: ${sessionId.slice(0, 8)}...:${taskId}` +
|
|
122
|
-
(label ? ` [${label}]` : '') +
|
|
123
|
-
(dependsOn ? ` → depends on ${dependsOnRaw}` : ''),
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// ── /session handoff ──────────────────────────────────────────────────────────
|
|
128
|
-
|
|
129
|
-
function handleHandoff(args: string[], context: CommandContext): void {
|
|
130
|
-
const taskId = args[0];
|
|
131
|
-
const toSessionId = flagValue(args, '--to');
|
|
132
|
-
const fromSessionId = flagValue(args, '--session') ?? context.session.runtime.sessionId;
|
|
133
|
-
const reason = flagValue(args, '--reason');
|
|
134
|
-
|
|
135
|
-
if (!taskId || !toSessionId) {
|
|
136
|
-
context.print(
|
|
137
|
-
'[session] Usage: /session handoff <taskId> --to <sessionId> ' +
|
|
138
|
-
'[--session <fromSessionId>] [--reason <reason>]',
|
|
139
|
-
);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const orchestration = requireSessionOrchestration(context);
|
|
144
|
-
|
|
145
|
-
const result = orchestration.initiateHandoff(
|
|
146
|
-
{ sessionId: fromSessionId, taskId },
|
|
147
|
-
fromSessionId,
|
|
148
|
-
toSessionId,
|
|
149
|
-
reason,
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
if (!result.ok) {
|
|
153
|
-
context.print(`[session] handoff failed: ${result.error}`);
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
context.print(
|
|
158
|
-
`[session] Handoff initiated: ${taskId} (${fromSessionId.slice(0, 8)}...) → (${toSessionId.slice(0, 8)}...)` +
|
|
159
|
-
(reason ? ` reason: ${reason}` : '') +
|
|
160
|
-
`\n[session] handoffId: ${result.handoffId}`,
|
|
161
|
-
);
|
|
162
|
-
context.print(
|
|
163
|
-
'[session] The task is now blocked pending acknowledgement from the destination session.',
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
56
|
// ── /session graph ────────────────────────────────────────────────────────────
|
|
168
57
|
|
|
169
58
|
function handleGraph(args: string[], context: CommandContext): void {
|
|
@@ -251,66 +140,6 @@ function handleGraph(args: string[], context: CommandContext): void {
|
|
|
251
140
|
context.print(lines.join('\n'));
|
|
252
141
|
}
|
|
253
142
|
|
|
254
|
-
// ── /session cancel ───────────────────────────────────────────────────────────
|
|
255
|
-
|
|
256
|
-
function handleCancel(args: string[], context: CommandContext): void {
|
|
257
|
-
const scopeRaw = flagValue(args, '--scope');
|
|
258
|
-
if (scopeRaw && !VALID_SCOPES.includes(scopeRaw as CancellationScope)) {
|
|
259
|
-
context.print(`Invalid --scope: "${scopeRaw}". Valid: ${VALID_SCOPES.join(', ')}`);
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
const scope: CancellationScope = (scopeRaw as CancellationScope) ?? 'task';
|
|
263
|
-
const sessionId = flagValue(args, '--session') ?? context.session.runtime.sessionId;
|
|
264
|
-
const reason = flagValue(args, '--reason');
|
|
265
|
-
|
|
266
|
-
// For session scope, taskId is not required
|
|
267
|
-
const taskId = scope === 'session' ? undefined : args[0];
|
|
268
|
-
|
|
269
|
-
if (scope !== 'session' && !taskId) {
|
|
270
|
-
context.print(
|
|
271
|
-
'[session] Usage: /session cancel <taskId> [--scope task|subtree|session] ' +
|
|
272
|
-
'[--session <sessionId>] [--reason <reason>]\n' +
|
|
273
|
-
' --scope task Cancel only this task (default)\n' +
|
|
274
|
-
' --scope subtree Cancel this task and all tasks that transitively depend on it\n' +
|
|
275
|
-
' --scope session Cancel all tasks in the session',
|
|
276
|
-
);
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
const orchestration = requireSessionOrchestration(context);
|
|
281
|
-
|
|
282
|
-
const result = orchestration.cancel({
|
|
283
|
-
sessionId,
|
|
284
|
-
taskId,
|
|
285
|
-
scope,
|
|
286
|
-
reason,
|
|
287
|
-
requestedAt: Date.now(),
|
|
288
|
-
});
|
|
289
|
-
|
|
290
|
-
if (!result.ok) {
|
|
291
|
-
context.print(`[session] cancel failed: ${result.error}`);
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
const lines: string[] = [
|
|
296
|
-
`[session] Cancelled ${result.cancelled.length} task${result.cancelled.length !== 1 ? 's' : ''} ` +
|
|
297
|
-
`(scope=${scope}):`,
|
|
298
|
-
];
|
|
299
|
-
|
|
300
|
-
for (const t of result.cancelled) {
|
|
301
|
-
lines.push(` [x] ${t.sessionId.slice(0, 8)}...:${t.taskId.slice(0, 8)}... "${t.title}"`);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
if (result.skipped.length > 0) {
|
|
305
|
-
lines.push(` Skipped ${result.skipped.length} (already terminal):`);
|
|
306
|
-
for (const s of result.skipped) {
|
|
307
|
-
lines.push(` [-] ${s.sessionId.slice(0, 8)}...:${s.taskId.slice(0, 8)}... "${s.title}" (${s.reason})`);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
context.print(lines.join('\n'));
|
|
312
|
-
}
|
|
313
|
-
|
|
314
143
|
// ── Top-level command definition ───────────────────────────────────────────────
|
|
315
144
|
|
|
316
145
|
/**
|
|
@@ -32,10 +32,17 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
32
32
|
ctx.session.runtime.model = selected.registryKey;
|
|
33
33
|
ctx.session.runtime.provider = selected.providerId;
|
|
34
34
|
ctx.platform.configManager.set('provider.model', selected.registryKey);
|
|
35
|
-
ctx.print(
|
|
35
|
+
ctx.print([
|
|
36
|
+
'Switched model',
|
|
37
|
+
` model ${selected.displayName}`,
|
|
38
|
+
` provider ${selected.providerId}`,
|
|
39
|
+
].join('\n'));
|
|
36
40
|
void providerApi.recordModelUsage(selected.registryKey).catch((err) => { logger.debug('model usage record failed', { err }); });
|
|
37
41
|
} catch (e) {
|
|
38
|
-
ctx.print(
|
|
42
|
+
ctx.print([
|
|
43
|
+
'Error',
|
|
44
|
+
` message ${summarizeError(e)}`,
|
|
45
|
+
].join('\n'));
|
|
39
46
|
}
|
|
40
47
|
}
|
|
41
48
|
},
|
|
@@ -114,17 +121,23 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
114
121
|
handler(_args, ctx) {
|
|
115
122
|
if (ctx.openSelection) {
|
|
116
123
|
const items: SelectionItem[] = [
|
|
117
|
-
{ id: '/agent', label: '/agent', detail: 'Open the Agent operator workspace', category: 'Agent Operator' },
|
|
124
|
+
{ id: '/agent', label: '/agent', detail: 'Open the Agent operator workspace; press / inside it to search every action', category: 'Agent Operator' },
|
|
125
|
+
{ id: '/agent setup', label: '/agent setup', detail: 'Open the Agent setup workspace; workspace search can find every setup action', category: 'Agent Operator' },
|
|
126
|
+
{ id: '/agent channels', label: '/agent channels', detail: 'Open channel readiness and delivery safety', category: 'Agent Operator' },
|
|
127
|
+
{ id: '/agent knowledge', label: '/agent knowledge', detail: 'Open isolated Agent Knowledge workflows', category: 'Agent Operator' },
|
|
128
|
+
{ id: '/agent voice-media', label: '/agent voice-media', detail: 'Open voice, TTS, image, browser, and media setup', category: 'Agent Operator' },
|
|
118
129
|
{ id: '/home', label: '/home', detail: 'Alias for the Agent operator workspace', category: 'Agent Operator' },
|
|
119
130
|
{ id: '/brief', label: '/brief', detail: 'Show a concise Agent operator briefing and next actions', category: 'Agent Operator' },
|
|
120
131
|
{ id: '/knowledge', label: '/knowledge', detail: 'Inspect isolated Agent Knowledge status, ask/search, and ingest flows', category: 'Agent Operator' },
|
|
121
|
-
{ id: '/memory', label: '/memory', detail: 'Review local
|
|
122
|
-
{ id: '/
|
|
123
|
-
{ id: '/
|
|
132
|
+
{ id: '/memory', label: '/memory', detail: 'Review Agent-local memory records', category: 'Agent Operator' },
|
|
133
|
+
{ id: '/notes', label: '/notes', detail: 'Open Agent-local scratchpad notes for source triage and temporary context', category: 'Agent Operator' },
|
|
134
|
+
{ id: '/personas', label: '/personas', detail: 'Create, review, and activate Agent-local personas', category: 'Agent Operator' },
|
|
135
|
+
{ id: '/skills', label: '/skills', detail: 'Create, review, and enable reusable Agent skills', category: 'Agent Operator' },
|
|
124
136
|
{ id: '/routines', label: '/routines', detail: 'Create, review, start, and promote Agent routines explicitly', category: 'Agent Operator' },
|
|
137
|
+
{ id: '/automation', label: '/automation', detail: 'Run confirmed connected-host automation actions', category: 'Agent Operator' },
|
|
125
138
|
{ id: '/delegate', label: '/delegate [task]', detail: 'Explicit build/fix/review handoff to GoodVibes TUI', category: 'Agent Operator' },
|
|
126
139
|
{ id: '/channels', label: '/channels', detail: 'Inspect messaging-channel readiness without sending messages', category: 'Agent Operator' },
|
|
127
|
-
{ id: '/pair', label: '/pair', detail: 'Pair companion clients through connected GoodVibes
|
|
140
|
+
{ id: '/pair', label: '/pair', detail: 'Pair companion clients through connected GoodVibes host', category: 'Agent Operator' },
|
|
128
141
|
{ id: '/model', label: '/model [id]', detail: 'Select LLM model', category: 'Model & Provider' },
|
|
129
142
|
{ id: '/provider', label: '/provider [name]', detail: 'Switch provider', category: 'Model & Provider' },
|
|
130
143
|
{ id: '/effort', label: '/effort [level]', detail: 'Reasoning effort (instant/low/medium/high)', category: 'Model & Provider' },
|
|
@@ -156,7 +169,9 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
156
169
|
{ id: '/paste', label: '/paste', detail: 'Insert clipboard text or image into the prompt', category: 'Tools & System' },
|
|
157
170
|
{ id: '/shortcuts', label: '/shortcuts', detail: 'View keyboard shortcuts reference', category: 'Tools & System' },
|
|
158
171
|
{ id: '/commands', label: '/commands', detail: 'Browse all commands in a scrollable list', category: 'Tools & System' },
|
|
172
|
+
{ id: '/compat', label: '/compat', detail: 'Inspect connected-host and Agent Knowledge compatibility', category: 'Tools & System' },
|
|
159
173
|
{ id: '/secrets', label: '/secrets set|link|get|test|list|delete', detail: 'Manage encrypted and provider-backed secrets', category: 'Tools & System' },
|
|
174
|
+
{ id: '/bundle', label: '/bundle export|inspect|import', detail: 'Manage redacted Agent support bundles', category: 'Tools & System' },
|
|
160
175
|
{ id: '/help', label: '/help', detail: 'This help', category: 'Tools & System' },
|
|
161
176
|
{ id: '/quit', label: '/quit', detail: 'Exit', category: 'Tools & System' },
|
|
162
177
|
];
|
|
@@ -172,7 +187,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
172
187
|
});
|
|
173
188
|
return;
|
|
174
189
|
}
|
|
175
|
-
ctx.print('
|
|
190
|
+
ctx.print('Open the Agent workspace first, then press / inside it to search every product action. Slash commands remain available: /agent, /brief, /knowledge, /memory, /notes, /personas, /skills, /routines, /channels, /approval, /automation, /schedule, /delegate, /model, /provider, /config, /compat, /bundle, /paste, /sessions, /bookmarks, /save, /load, /undo, /redo, /retry, /clear, /reset, /compact, /export, /title, /effort, /expand, /collapse, /quit');
|
|
176
191
|
},
|
|
177
192
|
});
|
|
178
193
|
|
|
@@ -253,20 +268,23 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
253
268
|
const level = result.item.id as 'instant' | 'low' | 'medium' | 'high';
|
|
254
269
|
ctx.session.runtime.reasoningEffort = level;
|
|
255
270
|
ctx.platform.configManager.set('provider.reasoningEffort', level);
|
|
256
|
-
ctx.print(
|
|
271
|
+
ctx.print([
|
|
272
|
+
'Reasoning effort set',
|
|
273
|
+
` level ${level}`,
|
|
274
|
+
].join('\n'));
|
|
257
275
|
ctx.renderRequest();
|
|
258
276
|
});
|
|
259
277
|
return;
|
|
260
278
|
}
|
|
261
279
|
const budget = REASONING_BUDGET_MAP[current];
|
|
262
280
|
const lines = [
|
|
263
|
-
`Reasoning effort
|
|
264
|
-
` Mercury-2
|
|
265
|
-
` Claude
|
|
266
|
-
` Gemini
|
|
267
|
-
` GPT-5
|
|
281
|
+
`Reasoning effort ${current}`,
|
|
282
|
+
` Mercury-2 reasoning_effort = '${current}'`,
|
|
283
|
+
` Claude thinking.budget_tokens = ${budget}`,
|
|
284
|
+
` Gemini thinking_config.thinking_budget = ${budget}`,
|
|
285
|
+
` GPT-5 (no-op)`,
|
|
268
286
|
'',
|
|
269
|
-
`Levels
|
|
287
|
+
`Levels ${validLevels.join(', ')}`,
|
|
270
288
|
];
|
|
271
289
|
ctx.print(lines.join('\n'));
|
|
272
290
|
return;
|
|
@@ -274,13 +292,16 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
274
292
|
|
|
275
293
|
const level = args[0] as 'instant' | 'low' | 'medium' | 'high';
|
|
276
294
|
if (!validLevels.includes(level)) {
|
|
277
|
-
ctx.print(`Invalid effort level
|
|
295
|
+
ctx.print(`Invalid effort level ${level}\nValid levels ${validLevels.join(', ')}`);
|
|
278
296
|
return;
|
|
279
297
|
}
|
|
280
298
|
|
|
281
299
|
ctx.session.runtime.reasoningEffort = level;
|
|
282
300
|
ctx.platform.configManager.set('provider.reasoningEffort', level);
|
|
283
|
-
ctx.print(
|
|
301
|
+
ctx.print([
|
|
302
|
+
'Reasoning effort set',
|
|
303
|
+
` level ${level}`,
|
|
304
|
+
].join('\n'));
|
|
284
305
|
},
|
|
285
306
|
});
|
|
286
307
|
|