@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,47 @@
|
|
|
1
|
+
import type { AgentWorkspaceEditorKind, AgentWorkspaceLocalEditor } from './agent-workspace-types.ts';
|
|
2
|
+
|
|
3
|
+
export type AgentWorkspaceTaskCommandEditorKind = Extract<
|
|
4
|
+
AgentWorkspaceEditorKind,
|
|
5
|
+
'task-list-filter' | 'task-show' | 'task-output'
|
|
6
|
+
>;
|
|
7
|
+
|
|
8
|
+
export function isAgentWorkspaceTaskCommandEditorKind(kind: AgentWorkspaceEditorKind): kind is AgentWorkspaceTaskCommandEditorKind {
|
|
9
|
+
return kind === 'task-list-filter' || kind === 'task-show' || kind === 'task-output';
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function createAgentWorkspaceTaskCommandEditor(kind: AgentWorkspaceTaskCommandEditorKind): AgentWorkspaceLocalEditor {
|
|
13
|
+
if (kind === 'task-list-filter') {
|
|
14
|
+
return {
|
|
15
|
+
kind,
|
|
16
|
+
mode: 'create',
|
|
17
|
+
title: 'Filter Host Tasks',
|
|
18
|
+
selectedFieldIndex: 0,
|
|
19
|
+
message: 'List connected-host tasks filtered by status or kind. This is read-only and never creates, retries, or cancels tasks.',
|
|
20
|
+
fields: [
|
|
21
|
+
{ id: 'filter', label: 'Status or kind', value: '', required: false, multiline: false, hint: 'Optional task status or kind. Blank lists recent tasks.' },
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (kind === 'task-output') {
|
|
26
|
+
return {
|
|
27
|
+
kind,
|
|
28
|
+
mode: 'create',
|
|
29
|
+
title: 'Show Task Output',
|
|
30
|
+
selectedFieldIndex: 0,
|
|
31
|
+
message: 'Print one connected-host task output from the Agent workspace. This is read-only and does not retry, cancel, or mutate the task.',
|
|
32
|
+
fields: [
|
|
33
|
+
{ id: 'taskId', label: 'Task id', value: '', required: true, multiline: false, hint: 'Connected-host task id from Host tasks.' },
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
kind,
|
|
39
|
+
mode: 'create',
|
|
40
|
+
title: 'Inspect Host Task',
|
|
41
|
+
selectedFieldIndex: 0,
|
|
42
|
+
message: 'Inspect one connected-host task from the Agent workspace. This is read-only and does not retry, cancel, or mutate the task.',
|
|
43
|
+
fields: [
|
|
44
|
+
{ id: 'taskId', label: 'Task id', value: '', required: true, multiline: false, hint: 'Connected-host task id from Host tasks.' },
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -25,11 +25,25 @@ export function handleAgentWorkspaceToken(
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
if (token.type === 'key') {
|
|
28
|
+
if (workspace.actionSearchActive) {
|
|
29
|
+
if (token.logicalName === 'escape') workspace.clearActionSearch();
|
|
30
|
+
else if (token.logicalName === 'enter') workspace.activateSelected(requestRender);
|
|
31
|
+
else if (token.logicalName === 'up') workspace.moveUp();
|
|
32
|
+
else if (token.logicalName === 'down') workspace.moveDown();
|
|
33
|
+
else if (token.logicalName === 'home') workspace.jumpHome();
|
|
34
|
+
else if (token.logicalName === 'end') workspace.jumpEnd();
|
|
35
|
+
else if (token.logicalName === 'backspace' || token.logicalName === 'delete') workspace.actionSearchBackspace();
|
|
36
|
+
else if (token.logicalName === 'space') workspace.appendActionSearchText(' ');
|
|
37
|
+
requestRender();
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
28
40
|
if (token.logicalName === 'escape') {
|
|
29
41
|
handleEscape();
|
|
30
42
|
return true;
|
|
31
43
|
}
|
|
32
|
-
if (token.
|
|
44
|
+
if (token.ctrl === true && token.logicalName === ']') workspace.cycleCategory('next');
|
|
45
|
+
else if (token.ctrl === true && token.logicalName === '[') workspace.cycleCategory('prev');
|
|
46
|
+
else if (token.logicalName === 'enter' || token.logicalName === 'space') workspace.activateSelected(requestRender);
|
|
33
47
|
else if (token.logicalName === 'left') workspace.focusCategories();
|
|
34
48
|
else if (token.logicalName === 'right') workspace.focusActions();
|
|
35
49
|
else if (token.logicalName === 'up') workspace.moveUp();
|
|
@@ -38,7 +52,9 @@ export function handleAgentWorkspaceToken(
|
|
|
38
52
|
else if (token.logicalName === 'home') workspace.jumpHome();
|
|
39
53
|
else if (token.logicalName === 'end') workspace.jumpEnd();
|
|
40
54
|
} else if (token.type === 'text') {
|
|
41
|
-
if (
|
|
55
|
+
if (workspace.actionSearchActive) workspace.appendActionSearchText(token.value);
|
|
56
|
+
else if (token.value === '/') workspace.beginActionSearch();
|
|
57
|
+
else if (token.value === 'h') workspace.focusCategories();
|
|
42
58
|
else if (token.value === 'l') workspace.focusActions();
|
|
43
59
|
else if (token.value === 'j') workspace.moveDown();
|
|
44
60
|
else if (token.value === 'k') workspace.moveUp();
|
|
@@ -7,33 +7,184 @@ export const AGENT_WORKSPACE_MODAL_NAME = 'agentWorkspace';
|
|
|
7
7
|
|
|
8
8
|
export type AgentWorkspaceFocusPane = 'categories' | 'actions';
|
|
9
9
|
|
|
10
|
+
export const AGENT_WORKSPACE_CATEGORY_IDS = [
|
|
11
|
+
'home',
|
|
12
|
+
'setup',
|
|
13
|
+
'research',
|
|
14
|
+
'artifacts',
|
|
15
|
+
'conversation',
|
|
16
|
+
'channels',
|
|
17
|
+
'tools',
|
|
18
|
+
'knowledge',
|
|
19
|
+
'voice-media',
|
|
20
|
+
'profiles',
|
|
21
|
+
'memory',
|
|
22
|
+
'notes',
|
|
23
|
+
'personas',
|
|
24
|
+
'skills',
|
|
25
|
+
'routines',
|
|
26
|
+
'work',
|
|
27
|
+
'host',
|
|
28
|
+
'automation',
|
|
29
|
+
'delegate',
|
|
30
|
+
] as const;
|
|
31
|
+
|
|
32
|
+
export type AgentWorkspaceCategoryId = (typeof AGENT_WORKSPACE_CATEGORY_IDS)[number];
|
|
33
|
+
|
|
10
34
|
export type AgentWorkspaceActionKind = 'command' | 'guidance' | 'workspace' | 'editor' | 'local-selection' | 'local-operation';
|
|
11
35
|
|
|
12
|
-
export type AgentWorkspaceLocalEditorKind = 'memory' | 'persona' | 'skill' | 'routine' | 'profile';
|
|
36
|
+
export type AgentWorkspaceLocalEditorKind = 'memory' | 'note' | 'persona' | 'skill' | 'routine' | 'profile';
|
|
13
37
|
|
|
14
38
|
export type AgentWorkspaceEditorKind =
|
|
15
39
|
| AgentWorkspaceLocalEditorKind
|
|
40
|
+
| 'web-research'
|
|
41
|
+
| 'web-fetch'
|
|
16
42
|
| 'knowledge-url'
|
|
43
|
+
| 'knowledge-urls'
|
|
17
44
|
| 'knowledge-file'
|
|
18
45
|
| 'knowledge-bookmarks'
|
|
19
46
|
| 'knowledge-browser-history'
|
|
20
47
|
| 'knowledge-connector-ingest'
|
|
48
|
+
| 'knowledge-connector-show'
|
|
49
|
+
| 'knowledge-connector-doctor'
|
|
50
|
+
| 'knowledge-reindex'
|
|
21
51
|
| 'knowledge-search'
|
|
22
52
|
| 'knowledge-ask'
|
|
53
|
+
| 'knowledge-get'
|
|
54
|
+
| 'knowledge-map'
|
|
55
|
+
| 'knowledge-review-issue'
|
|
56
|
+
| 'knowledge-consolidate'
|
|
57
|
+
| 'knowledge-packet'
|
|
58
|
+
| 'knowledge-explain'
|
|
59
|
+
| 'memory-search'
|
|
60
|
+
| 'memory-get'
|
|
61
|
+
| 'memory-explain'
|
|
62
|
+
| 'memory-promote'
|
|
63
|
+
| 'memory-link'
|
|
64
|
+
| 'memory-export'
|
|
65
|
+
| 'memory-import'
|
|
66
|
+
| 'memory-handoff-export'
|
|
67
|
+
| 'memory-handoff-inspect'
|
|
68
|
+
| 'memory-handoff-import'
|
|
69
|
+
| 'memory-vector-rebuild'
|
|
70
|
+
| 'persona-search'
|
|
71
|
+
| 'persona-show'
|
|
72
|
+
| 'skill-search'
|
|
73
|
+
| 'skill-show'
|
|
74
|
+
| 'routine-search'
|
|
75
|
+
| 'routine-show'
|
|
76
|
+
| 'plan-seed'
|
|
23
77
|
| 'mcp-server'
|
|
78
|
+
| 'mcp-tools-server'
|
|
79
|
+
| 'mcp-repair'
|
|
24
80
|
| 'notify-webhook'
|
|
25
81
|
| 'notify-webhook-remove'
|
|
82
|
+
| 'notify-webhook-clear'
|
|
26
83
|
| 'notify-webhook-test'
|
|
84
|
+
| 'notify-send'
|
|
85
|
+
| 'secret-set'
|
|
86
|
+
| 'secret-link'
|
|
87
|
+
| 'secret-test'
|
|
88
|
+
| 'secret-delete'
|
|
27
89
|
| 'tts-prompt'
|
|
28
90
|
| 'image-input'
|
|
91
|
+
| 'media-generate'
|
|
29
92
|
| 'skill-bundle'
|
|
93
|
+
| 'skill-bundle-search'
|
|
94
|
+
| 'skill-bundle-show'
|
|
95
|
+
| 'skill-bundle-update'
|
|
96
|
+
| 'skill-bundle-enable'
|
|
97
|
+
| 'skill-bundle-disable'
|
|
98
|
+
| 'skill-bundle-review'
|
|
99
|
+
| 'skill-bundle-stale'
|
|
100
|
+
| 'skill-bundle-delete'
|
|
30
101
|
| 'persona-discovery-import'
|
|
31
102
|
| 'routine-discovery-import'
|
|
32
103
|
| 'skill-discovery-import'
|
|
104
|
+
| 'learned-behavior'
|
|
33
105
|
| 'profile-template-export'
|
|
34
106
|
| 'profile-template-import'
|
|
107
|
+
| 'profile-template-show'
|
|
35
108
|
| 'profile-template-from-discovered'
|
|
36
109
|
| 'profile-from-discovered'
|
|
110
|
+
| 'profile-show'
|
|
111
|
+
| 'profile-default'
|
|
112
|
+
| 'profile-default-clear'
|
|
113
|
+
| 'profile-delete'
|
|
114
|
+
| 'provider-add'
|
|
115
|
+
| 'provider-remove'
|
|
116
|
+
| 'provider-use'
|
|
117
|
+
| 'provider-inspect'
|
|
118
|
+
| 'provider-routes'
|
|
119
|
+
| 'provider-account-repair'
|
|
120
|
+
| 'auth-show'
|
|
121
|
+
| 'auth-repair'
|
|
122
|
+
| 'auth-bundle-export'
|
|
123
|
+
| 'auth-bundle-inspect'
|
|
124
|
+
| 'trust-bundle-export'
|
|
125
|
+
| 'trust-bundle-inspect'
|
|
126
|
+
| 'support-bundle-export'
|
|
127
|
+
| 'support-bundle-inspect'
|
|
128
|
+
| 'support-bundle-import'
|
|
129
|
+
| 'subscription-inspect'
|
|
130
|
+
| 'subscription-login-start'
|
|
131
|
+
| 'subscription-login-finish'
|
|
132
|
+
| 'subscription-logout'
|
|
133
|
+
| 'subscription-bundle-export'
|
|
134
|
+
| 'subscription-bundle-inspect'
|
|
135
|
+
| 'voice-enable'
|
|
136
|
+
| 'voice-disable'
|
|
137
|
+
| 'voice-bundle-export'
|
|
138
|
+
| 'voice-bundle-inspect'
|
|
139
|
+
| 'conversation-export'
|
|
140
|
+
| 'conversation-events'
|
|
141
|
+
| 'conversation-groups'
|
|
142
|
+
| 'conversation-find'
|
|
143
|
+
| 'effort-level'
|
|
144
|
+
| 'channel-show'
|
|
145
|
+
| 'channel-doctor'
|
|
146
|
+
| 'channel-setup'
|
|
147
|
+
| 'channel-send'
|
|
148
|
+
| 'session-save'
|
|
149
|
+
| 'session-load'
|
|
150
|
+
| 'session-rename'
|
|
151
|
+
| 'session-resume'
|
|
152
|
+
| 'session-info'
|
|
153
|
+
| 'session-export-saved'
|
|
154
|
+
| 'session-search'
|
|
155
|
+
| 'session-delete'
|
|
156
|
+
| 'session-fork'
|
|
157
|
+
| 'session-graph'
|
|
158
|
+
| 'task-list-filter'
|
|
159
|
+
| 'task-show'
|
|
160
|
+
| 'task-output'
|
|
161
|
+
| 'plan-show'
|
|
162
|
+
| 'plan-approve'
|
|
163
|
+
| 'plan-override'
|
|
164
|
+
| 'plan-clear'
|
|
165
|
+
| 'health-repair'
|
|
166
|
+
| 'approval-review'
|
|
167
|
+
| 'approval-approve'
|
|
168
|
+
| 'approval-deny'
|
|
169
|
+
| 'approval-cancel'
|
|
170
|
+
| 'automation-job-run'
|
|
171
|
+
| 'automation-job-pause'
|
|
172
|
+
| 'automation-job-resume'
|
|
173
|
+
| 'automation-run-cancel'
|
|
174
|
+
| 'automation-run-retry'
|
|
175
|
+
| 'schedule-run'
|
|
176
|
+
| 'routine-receipt'
|
|
177
|
+
| 'schedule-receipt'
|
|
178
|
+
| 'mode-preset'
|
|
179
|
+
| 'mode-domain'
|
|
180
|
+
| 'model-pin'
|
|
181
|
+
| 'model-unpin'
|
|
182
|
+
| 'delegate-task'
|
|
183
|
+
| 'workplan-add'
|
|
184
|
+
| 'workplan-show'
|
|
185
|
+
| 'workplan-status'
|
|
186
|
+
| 'workplan-delete'
|
|
187
|
+
| 'workplan-clear-completed'
|
|
37
188
|
| 'routine-schedule'
|
|
38
189
|
| 'reminder-schedule';
|
|
39
190
|
|
|
@@ -42,6 +193,15 @@ export type AgentWorkspaceLocalOperation =
|
|
|
42
193
|
| 'memory-review'
|
|
43
194
|
| 'memory-stale'
|
|
44
195
|
| 'memory-delete'
|
|
196
|
+
| 'note-edit'
|
|
197
|
+
| 'note-review'
|
|
198
|
+
| 'note-stale'
|
|
199
|
+
| 'note-delete'
|
|
200
|
+
| 'note-promote-memory'
|
|
201
|
+
| 'note-promote-persona'
|
|
202
|
+
| 'note-promote-skill'
|
|
203
|
+
| 'note-promote-routine'
|
|
204
|
+
| 'note-promote-knowledge-url'
|
|
45
205
|
| 'persona-edit'
|
|
46
206
|
| 'persona-use'
|
|
47
207
|
| 'persona-review'
|
|
@@ -66,6 +226,7 @@ export interface AgentWorkspaceEditorField {
|
|
|
66
226
|
readonly required: boolean;
|
|
67
227
|
readonly multiline: boolean;
|
|
68
228
|
readonly hint: string;
|
|
229
|
+
readonly redact?: boolean;
|
|
69
230
|
}
|
|
70
231
|
|
|
71
232
|
export interface AgentWorkspaceLocalEditor {
|
|
@@ -83,7 +244,7 @@ export interface AgentWorkspaceAction {
|
|
|
83
244
|
readonly label: string;
|
|
84
245
|
readonly detail: string;
|
|
85
246
|
readonly command?: string;
|
|
86
|
-
readonly targetCategoryId?:
|
|
247
|
+
readonly targetCategoryId?: AgentWorkspaceCategoryId;
|
|
87
248
|
readonly editorKind?: AgentWorkspaceEditorKind;
|
|
88
249
|
readonly localKind?: AgentWorkspaceLocalEditorKind;
|
|
89
250
|
readonly selectionDelta?: number;
|
|
@@ -93,7 +254,7 @@ export interface AgentWorkspaceAction {
|
|
|
93
254
|
}
|
|
94
255
|
|
|
95
256
|
export interface AgentWorkspaceCategory {
|
|
96
|
-
readonly id:
|
|
257
|
+
readonly id: AgentWorkspaceCategoryId;
|
|
97
258
|
readonly group: string;
|
|
98
259
|
readonly label: string;
|
|
99
260
|
readonly summary: string;
|
|
@@ -101,7 +262,15 @@ export interface AgentWorkspaceCategory {
|
|
|
101
262
|
readonly actions: readonly AgentWorkspaceAction[];
|
|
102
263
|
}
|
|
103
264
|
|
|
265
|
+
export interface AgentWorkspaceActionSearchResult {
|
|
266
|
+
readonly category: AgentWorkspaceCategory;
|
|
267
|
+
readonly categoryIndex: number;
|
|
268
|
+
readonly action: AgentWorkspaceAction;
|
|
269
|
+
readonly actionIndex: number;
|
|
270
|
+
}
|
|
271
|
+
|
|
104
272
|
export type AgentWorkspaceCommandDispatcher = (command: string) => void;
|
|
273
|
+
export type AgentWorkspacePromptDispatcher = (prompt: string) => void;
|
|
105
274
|
|
|
106
275
|
export type AgentWorkspaceActionResultKind = 'guidance' | 'blocked' | 'dispatched' | 'refreshed' | 'error';
|
|
107
276
|
|
|
@@ -126,6 +295,9 @@ export interface AgentWorkspaceLocalLibraryItem {
|
|
|
126
295
|
readonly confidence?: number;
|
|
127
296
|
readonly active?: boolean;
|
|
128
297
|
readonly enabled?: boolean;
|
|
298
|
+
readonly requirementCount?: number;
|
|
299
|
+
readonly missingRequirementCount?: number;
|
|
300
|
+
readonly missingRequirements?: readonly string[];
|
|
129
301
|
readonly startCount?: number;
|
|
130
302
|
}
|
|
131
303
|
|
|
@@ -147,6 +319,31 @@ export interface AgentWorkspaceRuntimeStarterTemplateItem {
|
|
|
147
319
|
readonly source: string;
|
|
148
320
|
}
|
|
149
321
|
|
|
322
|
+
export interface AgentWorkspaceRoutineScheduleReceiptSummary {
|
|
323
|
+
readonly id: string;
|
|
324
|
+
readonly status: string;
|
|
325
|
+
readonly routineId: string;
|
|
326
|
+
readonly routineName: string;
|
|
327
|
+
readonly scheduleName: string;
|
|
328
|
+
readonly scheduleKind: string;
|
|
329
|
+
readonly scheduleValue: string;
|
|
330
|
+
readonly createdAt: string;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export interface AgentWorkspaceCompanionAccessSummary {
|
|
334
|
+
readonly surface: 'goodvibes-agent';
|
|
335
|
+
readonly hostUrl: string;
|
|
336
|
+
readonly tokenPath: string;
|
|
337
|
+
readonly tokenPresent: boolean;
|
|
338
|
+
readonly tokenReadable: boolean;
|
|
339
|
+
readonly tokenFingerprint: string | null;
|
|
340
|
+
readonly tokenError: string | null;
|
|
341
|
+
readonly pairingReady: boolean;
|
|
342
|
+
readonly qrCommand: '/pair';
|
|
343
|
+
readonly manualTokenCommand: '/pair --show-token --yes';
|
|
344
|
+
readonly nextStep: string;
|
|
345
|
+
}
|
|
346
|
+
|
|
150
347
|
export interface AgentWorkspaceRuntimeSnapshot {
|
|
151
348
|
readonly provider: string;
|
|
152
349
|
readonly model: string;
|
|
@@ -161,9 +358,16 @@ export interface AgentWorkspaceRuntimeSnapshot {
|
|
|
161
358
|
readonly localMemoryReviewQueueCount: number;
|
|
162
359
|
readonly localMemoryPromptActiveCount: number;
|
|
163
360
|
readonly localMemories: readonly AgentWorkspaceLocalLibraryItem[];
|
|
361
|
+
readonly localNoteCount: number;
|
|
362
|
+
readonly localNoteReviewQueueCount: number;
|
|
363
|
+
readonly localNotes: readonly AgentWorkspaceLocalLibraryItem[];
|
|
164
364
|
readonly localRoutineCount: number;
|
|
165
365
|
readonly enabledRoutineCount: number;
|
|
166
366
|
readonly localRoutines: readonly AgentWorkspaceLocalLibraryItem[];
|
|
367
|
+
readonly routineScheduleReceiptCount: number;
|
|
368
|
+
readonly successfulRoutineScheduleReceiptCount: number;
|
|
369
|
+
readonly failedRoutineScheduleReceiptCount: number;
|
|
370
|
+
readonly latestRoutineScheduleReceipt: AgentWorkspaceRoutineScheduleReceiptSummary | null;
|
|
167
371
|
readonly localSkillCount: number;
|
|
168
372
|
readonly enabledSkillCount: number;
|
|
169
373
|
readonly localSkillBundleCount: number;
|
|
@@ -178,7 +382,8 @@ export interface AgentWorkspaceRuntimeSnapshot {
|
|
|
178
382
|
readonly knowledgeRoute: '/api/goodvibes-agent/knowledge';
|
|
179
383
|
readonly knowledgeIsolation: 'agent-only';
|
|
180
384
|
readonly executionPolicy: 'serial-proactive';
|
|
181
|
-
readonly
|
|
385
|
+
readonly delegatedReviewPolicy: 'explicit-build-delegation-only';
|
|
386
|
+
readonly companionAccess: AgentWorkspaceCompanionAccessSummary;
|
|
182
387
|
readonly channels: readonly AgentWorkspaceChannelStatus[];
|
|
183
388
|
readonly voiceProviderCount: number;
|
|
184
389
|
readonly voiceStreamingProviderCount: number;
|
|
@@ -199,6 +404,9 @@ export interface AgentWorkspaceRuntimeSnapshot {
|
|
|
199
404
|
readonly browserToolExposureEnabled: boolean;
|
|
200
405
|
readonly browserToolPublicBaseUrl: string;
|
|
201
406
|
readonly activeRuntimeProfile: string;
|
|
407
|
+
readonly selectedRuntimeProfile: string | null;
|
|
408
|
+
readonly selectedRuntimeProfileExists: boolean;
|
|
409
|
+
readonly selectedRuntimeProfileSelectedAt: string | null;
|
|
202
410
|
readonly runtimeProfileCount: number;
|
|
203
411
|
readonly runtimeProfiles: readonly AgentWorkspaceRuntimeProfileItem[];
|
|
204
412
|
readonly runtimeProfileRoot: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CommandContext } from './command-registry.ts';
|
|
2
|
+
import { getAgentWorkspaceConfigReader } from './agent-workspace-config-reader.ts';
|
|
2
3
|
|
|
3
4
|
export type AgentWorkspaceVoiceMediaDomain = 'voice' | 'media';
|
|
4
5
|
export type AgentWorkspaceVoiceMediaSetupState = 'ready' | 'registered' | 'needs-secret' | 'not-registered';
|
|
@@ -36,10 +37,6 @@ export interface AgentWorkspaceVoiceMediaReadiness {
|
|
|
36
37
|
readonly nextSteps: readonly string[];
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
type AgentWorkspaceConfigReader = {
|
|
40
|
-
get(key: string): unknown;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
40
|
type ProviderSecretSpec = {
|
|
44
41
|
readonly id: string;
|
|
45
42
|
readonly secretKeyOptions: readonly string[];
|
|
@@ -66,7 +63,7 @@ const MEDIA_SECRET_SPECS: readonly ProviderSecretSpec[] = [
|
|
|
66
63
|
|
|
67
64
|
function readConfigString(context: CommandContext, key: string, fallback: string): string {
|
|
68
65
|
try {
|
|
69
|
-
const configManager = context
|
|
66
|
+
const configManager = getAgentWorkspaceConfigReader(context);
|
|
70
67
|
const value = configManager?.get(key);
|
|
71
68
|
return typeof value === 'string' && value.trim().length > 0 ? value.trim() : fallback;
|
|
72
69
|
} catch {
|
|
@@ -76,7 +73,7 @@ function readConfigString(context: CommandContext, key: string, fallback: string
|
|
|
76
73
|
|
|
77
74
|
function readConfigBoolean(context: CommandContext, key: string, fallback: boolean): boolean {
|
|
78
75
|
try {
|
|
79
|
-
const configManager = context
|
|
76
|
+
const configManager = getAgentWorkspaceConfigReader(context);
|
|
80
77
|
const value = configManager?.get(key);
|
|
81
78
|
if (typeof value === 'boolean') return value;
|
|
82
79
|
if (typeof value === 'string') {
|
|
@@ -150,7 +147,7 @@ function missingSelectedProviderStatus(selectedProviderId: string): AgentWorkspa
|
|
|
150
147
|
secretKeyOptions: [],
|
|
151
148
|
configuredSecretKeys: [],
|
|
152
149
|
missingSecretKeyOptions: [],
|
|
153
|
-
nextStep: `Selected TTS provider ${selectedProviderId} is not registered
|
|
150
|
+
nextStep: `Selected TTS provider ${selectedProviderId} is not registered by the connected GoodVibes host.`,
|
|
154
151
|
};
|
|
155
152
|
}
|
|
156
153
|
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { AgentWorkspaceActionResult, AgentWorkspaceLocalEditor } from './agent-workspace-types.ts';
|
|
2
|
+
|
|
3
|
+
type AgentWorkspaceFieldReader = (fieldId: string) => string;
|
|
4
|
+
export type AgentWorkspaceWebResearchMode = 'research' | 'fetch';
|
|
5
|
+
|
|
6
|
+
export type AgentWorkspaceWebResearchSubmission =
|
|
7
|
+
| {
|
|
8
|
+
readonly kind: 'editor';
|
|
9
|
+
readonly editor: AgentWorkspaceLocalEditor;
|
|
10
|
+
readonly status: string;
|
|
11
|
+
readonly actionResult?: AgentWorkspaceActionResult;
|
|
12
|
+
}
|
|
13
|
+
| {
|
|
14
|
+
readonly kind: 'prompt';
|
|
15
|
+
readonly prompt: string;
|
|
16
|
+
readonly status: string;
|
|
17
|
+
readonly actionResult: AgentWorkspaceActionResult;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export function createAgentWorkspaceWebResearchEditor(mode: AgentWorkspaceWebResearchMode): AgentWorkspaceLocalEditor {
|
|
21
|
+
if (mode === 'fetch') {
|
|
22
|
+
return {
|
|
23
|
+
kind: 'web-fetch',
|
|
24
|
+
mode: 'create',
|
|
25
|
+
title: 'Fetch or Inspect URL',
|
|
26
|
+
selectedFieldIndex: 0,
|
|
27
|
+
message: 'Submit a normal Agent conversation turn that inspects one URL with connected read-only web tools. This does not ingest the URL into Agent Knowledge unless you explicitly ask for that.',
|
|
28
|
+
fields: [
|
|
29
|
+
{ id: 'url', label: 'URL', value: '', required: true, multiline: false, hint: 'https://example.com/page' },
|
|
30
|
+
{ id: 'goal', label: 'Question or goal', value: '', required: false, multiline: true, hint: 'What should Agent extract, compare, summarize, or verify? Ctrl-J inserts a new line.' },
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
kind: 'web-research',
|
|
36
|
+
mode: 'create',
|
|
37
|
+
title: 'Web Research Request',
|
|
38
|
+
selectedFieldIndex: 0,
|
|
39
|
+
message: 'Submit a normal Agent conversation turn that searches or reads the web through connected read-only tools. Agent should answer in the main conversation and remember only durable facts that belong in Agent memory.',
|
|
40
|
+
fields: [
|
|
41
|
+
{ id: 'query', label: 'Research request', value: '', required: true, multiline: true, hint: 'Ask for the outcome you want, not just keywords. Ctrl-J inserts a new line.' },
|
|
42
|
+
{ id: 'scope', label: 'Source or freshness hints', value: '', required: false, multiline: false, hint: 'Optional filters such as official docs only, last 30 days, primary sources, or compare products.' },
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function buildAgentWorkspaceWebResearchSubmission(
|
|
48
|
+
editor: AgentWorkspaceLocalEditor,
|
|
49
|
+
readField: AgentWorkspaceFieldReader,
|
|
50
|
+
promptDispatchAvailable: boolean,
|
|
51
|
+
): AgentWorkspaceWebResearchSubmission {
|
|
52
|
+
if (!promptDispatchAvailable) {
|
|
53
|
+
return {
|
|
54
|
+
kind: 'editor',
|
|
55
|
+
editor: { ...editor, message: 'Main-conversation submission is unavailable; cannot send this request from the workspace.' },
|
|
56
|
+
status: 'Main-conversation submission unavailable.',
|
|
57
|
+
actionResult: {
|
|
58
|
+
kind: 'error',
|
|
59
|
+
title: 'Conversation submission unavailable',
|
|
60
|
+
detail: 'The Agent workspace cannot hand this request back to the main conversation route.',
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (editor.kind === 'web-fetch') {
|
|
66
|
+
const url = readField('url');
|
|
67
|
+
const goal = readField('goal');
|
|
68
|
+
const prompt = [
|
|
69
|
+
`Use connected read-only web tools to inspect this URL: ${url}`,
|
|
70
|
+
goal.length > 0 ? `Goal: ${goal}` : 'Goal: summarize the useful facts, source title, and any caveats.',
|
|
71
|
+
'Do not ingest this into Agent Knowledge unless I explicitly ask you to.',
|
|
72
|
+
].join('\n');
|
|
73
|
+
return {
|
|
74
|
+
kind: 'prompt',
|
|
75
|
+
prompt,
|
|
76
|
+
status: 'Submitting URL inspection to the main conversation.',
|
|
77
|
+
actionResult: {
|
|
78
|
+
kind: 'dispatched',
|
|
79
|
+
title: 'Submitting URL inspection',
|
|
80
|
+
detail: 'The workspace closed and handed a read-only URL inspection request to the normal Agent conversation.',
|
|
81
|
+
safety: 'read-only',
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const query = readField('query');
|
|
87
|
+
const scope = readField('scope');
|
|
88
|
+
const prompt = [
|
|
89
|
+
`Use connected read-only web tools to research this request: ${query}`,
|
|
90
|
+
scope.length > 0 ? `Source and freshness guidance: ${scope}` : 'Prefer current, primary, or official sources when they are available.',
|
|
91
|
+
'Answer in the main conversation. Do not ingest sources into Agent Knowledge unless I explicitly ask you to.',
|
|
92
|
+
].join('\n');
|
|
93
|
+
return {
|
|
94
|
+
kind: 'prompt',
|
|
95
|
+
prompt,
|
|
96
|
+
status: 'Submitting web research to the main conversation.',
|
|
97
|
+
actionResult: {
|
|
98
|
+
kind: 'dispatched',
|
|
99
|
+
title: 'Submitting web research',
|
|
100
|
+
detail: 'The workspace closed and handed a read-only web research request to the normal Agent conversation.',
|
|
101
|
+
safety: 'read-only',
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|