@pellux/goodvibes-agent 1.1.7 → 1.3.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 +329 -0
- package/README.md +46 -30
- package/dist/package/{ast-grep-napi.linux-x64-gnu-mkk8xwww.node → ast-grep-napi.linux-x64-gnu-swtppvy9.node} +0 -0
- package/dist/package/{ast-grep-napi.linux-x64-musl-ryqtgdv6.node → ast-grep-napi.linux-x64-musl-ttfcdtap.node} +0 -0
- package/dist/package/main.js +138903 -91477
- package/docs/README.md +14 -7
- package/docs/channels-remote-and-api.md +8 -5
- package/docs/connected-host.md +14 -12
- package/docs/getting-started.md +58 -30
- package/docs/knowledge-artifacts-and-multimodal.md +7 -5
- package/docs/project-planning.md +2 -2
- package/docs/providers-and-routing.md +11 -3
- package/docs/tools-and-commands.md +116 -45
- package/docs/voice-and-live-tts.md +3 -1
- package/package.json +3 -2
- package/release/release-notes.md +142 -5
- package/release/release-readiness.json +124 -94
- package/src/agent/assistant-cockpit.ts +247 -0
- package/src/agent/autonomy-schedule-format.ts +96 -0
- package/src/agent/autonomy-schedule.ts +514 -0
- package/src/agent/channel-delivery-receipts.ts +292 -0
- package/src/agent/competitive-feature-inventory.ts +294 -0
- package/src/agent/document-registry-types.ts +106 -0
- package/src/agent/document-registry.ts +734 -0
- package/src/agent/harness-control.ts +2 -2
- package/src/agent/memory-prompt.ts +2 -2
- package/src/agent/operator-actions.ts +50 -6
- package/src/agent/persona-registry.ts +8 -0
- package/src/agent/project-context-files.ts +273 -0
- package/src/agent/prompt-context-receipts.ts +502 -0
- package/src/agent/reminder-schedule-format.ts +16 -2
- package/src/agent/research-run-registry.ts +582 -0
- package/src/agent/research-source-registry.ts +441 -0
- package/src/agent/routine-registry.ts +19 -3
- package/src/agent/routine-schedule-format.ts +27 -2
- package/src/agent/runtime-profile-starters.ts +7 -0
- package/src/agent/runtime-profile.ts +106 -4
- package/src/agent/schedule-edit-format.ts +129 -0
- package/src/agent/schedule-edit.ts +496 -0
- package/src/agent/schedule-next-routes.ts +42 -0
- package/src/agent/setup-wizard-artifact-receipts.ts +366 -0
- package/src/agent/setup-wizard-checkpoint.ts +140 -0
- package/src/agent/setup-wizard.ts +683 -0
- package/src/agent/skill-registry-types.ts +102 -0
- package/src/agent/skill-registry.ts +81 -107
- package/src/agent/vibe-confirmation-routes.ts +62 -0
- package/src/agent/vibe-file.ts +285 -0
- package/src/cli/agent-knowledge-command.ts +45 -2
- package/src/cli/help.ts +3 -0
- package/src/cli/profiles-command.ts +25 -11
- package/src/config/agent-settings-policy.ts +1 -18
- package/src/input/agent-workspace-activation.ts +53 -0
- package/src/input/agent-workspace-artifact-browser-editor.ts +494 -0
- package/src/input/agent-workspace-artifact-metadata.ts +17 -0
- package/src/input/agent-workspace-basic-command-editors.ts +5 -1
- package/src/input/agent-workspace-categories.ts +153 -155
- package/src/input/agent-workspace-channel-triage.ts +481 -0
- package/src/input/agent-workspace-channels.ts +263 -0
- package/src/input/agent-workspace-command-editor.ts +152 -0
- package/src/input/agent-workspace-context-snapshot.ts +349 -0
- package/src/input/agent-workspace-delegation-editor-submission.ts +8 -0
- package/src/input/agent-workspace-document-editor.ts +502 -0
- package/src/input/agent-workspace-document-ops-editor.ts +523 -0
- package/src/input/agent-workspace-host-category.ts +1 -1
- package/src/input/agent-workspace-local-library-snapshot.ts +167 -0
- package/src/input/agent-workspace-model-compare-editor.ts +376 -0
- package/src/input/agent-workspace-model-compare-prompt-submission.ts +552 -0
- package/src/input/agent-workspace-model-compare-types.ts +82 -0
- package/src/input/agent-workspace-model-compare-utils.ts +35 -0
- package/src/input/agent-workspace-onboarding-categories.ts +141 -0
- package/src/input/agent-workspace-operations-command-editor-submission.ts +53 -0
- package/src/input/agent-workspace-operations-command-editors.ts +22 -0
- package/src/input/agent-workspace-research-report-editor.ts +212 -0
- package/src/input/agent-workspace-research-run-editor.ts +144 -0
- package/src/input/agent-workspace-research-source-editor.ts +167 -0
- package/src/input/agent-workspace-review-packet-snapshot.ts +593 -0
- package/src/input/agent-workspace-review-packet-utils.ts +265 -0
- package/src/input/agent-workspace-settings.ts +313 -30
- package/src/input/agent-workspace-setup-checkpoint-action.ts +127 -0
- package/src/input/agent-workspace-setup-snapshot.ts +217 -0
- package/src/input/agent-workspace-setup.ts +61 -1
- package/src/input/agent-workspace-snapshot.ts +184 -149
- package/src/input/agent-workspace-types.ts +287 -2
- package/src/input/agent-workspace.ts +23 -1
- package/src/input/command-registry.ts +9 -2
- package/src/input/commands/agent-runtime-profile-runtime.ts +28 -13
- package/src/input/commands/channels-runtime.ts +102 -114
- package/src/input/commands/delegation-runtime.ts +87 -24
- package/src/input/commands/knowledge-browser-flags.ts +12 -0
- package/src/input/commands/knowledge.ts +28 -14
- package/src/input/commands/operator-actions-runtime.ts +6 -3
- package/src/input/commands/schedule-runtime.ts +71 -14
- package/src/input/commands/session-content.ts +2 -2
- package/src/input/commands/shell-core.ts +2 -0
- package/src/input/commands/vibe-runtime.ts +140 -0
- package/src/input/commands.ts +2 -0
- package/src/input/connected-host-routes.ts +123 -0
- package/src/input/settings-modal-types.ts +14 -0
- package/src/input/setup-wizard-live-receipts.ts +76 -0
- package/src/main.ts +15 -15
- package/src/panels/qr-panel.ts +2 -2
- package/src/renderer/agent-workspace-context-lines.ts +701 -0
- package/src/renderer/agent-workspace.ts +68 -421
- package/src/renderer/settings-modal-helpers.ts +12 -0
- package/src/renderer/settings-modal.ts +12 -0
- package/src/runtime/bootstrap-command-context.ts +11 -1
- package/src/runtime/bootstrap-command-parts.ts +14 -3
- package/src/runtime/bootstrap-core.ts +39 -1
- package/src/runtime/bootstrap-shell.ts +6 -0
- package/src/runtime/bootstrap.ts +113 -30
- package/src/runtime/connected-host-auth.ts +3 -2
- package/src/runtime/execution-ledger.ts +231 -0
- package/src/runtime/services.ts +88 -10
- package/src/runtime/tool-permission-safety.ts +199 -5
- package/src/shell/session-continuity-hints.ts +39 -0
- package/src/tools/agent-artifacts-tool.ts +606 -0
- package/src/tools/agent-audit-tool.ts +155 -0
- package/src/tools/agent-autonomy-schedule-tool.ts +238 -0
- package/src/tools/agent-autonomy-tool.ts +140 -0
- package/src/tools/agent-channel-send-tool.ts +24 -2
- package/src/tools/agent-channels-tool.ts +140 -0
- package/src/tools/agent-computer-tool.ts +168 -0
- package/src/tools/agent-context-policy.ts +137 -7
- package/src/tools/agent-context-tool.ts +143 -0
- package/src/tools/agent-delegation-tool.ts +128 -0
- package/src/tools/agent-device-tool.ts +240 -0
- package/src/tools/agent-documents-tool.ts +684 -0
- package/src/tools/agent-execution-tool.ts +230 -0
- package/src/tools/agent-harness-agent-orchestration-policy.ts +75 -0
- package/src/tools/agent-harness-agent-orchestration.ts +791 -0
- package/src/tools/agent-harness-autonomy-intake.ts +785 -0
- package/src/tools/agent-harness-autonomy-live-records.ts +742 -0
- package/src/tools/agent-harness-autonomy-queue-types.ts +88 -0
- package/src/tools/agent-harness-autonomy-queue.ts +571 -0
- package/src/tools/agent-harness-autonomy-watcher-read-models.ts +509 -0
- package/src/tools/agent-harness-background-processes-types.ts +35 -0
- package/src/tools/agent-harness-background-processes.ts +798 -0
- package/src/tools/agent-harness-browser-cockpit-route.ts +373 -0
- package/src/tools/agent-harness-browser-control.ts +346 -0
- package/src/tools/agent-harness-browser-pwa-read-models.ts +622 -0
- package/src/tools/agent-harness-channel-metadata.ts +168 -10
- package/src/tools/agent-harness-cli-command-policy.ts +110 -0
- package/src/tools/agent-harness-command-catalog.ts +4 -2
- package/src/tools/agent-harness-command-runner.ts +42 -0
- package/src/tools/agent-harness-connected-host-status.ts +7 -4
- package/src/tools/agent-harness-delegation-posture.ts +234 -19
- package/src/tools/agent-harness-device-live-read-models.ts +366 -0
- package/src/tools/agent-harness-document-ops-reviewer-readiness.ts +234 -0
- package/src/tools/agent-harness-document-ops-types.ts +72 -0
- package/src/tools/agent-harness-document-ops.ts +671 -0
- package/src/tools/agent-harness-execution-history.ts +489 -0
- package/src/tools/agent-harness-execution-posture.ts +385 -0
- package/src/tools/agent-harness-file-recovery.ts +135 -0
- package/src/tools/agent-harness-interactive-runtime-records.ts +421 -0
- package/src/tools/agent-harness-keybinding-metadata.ts +16 -12
- package/src/tools/agent-harness-learning-curator-common.ts +102 -0
- package/src/tools/agent-harness-learning-curator-consolidation.ts +295 -0
- package/src/tools/agent-harness-learning-curator-proposals.ts +606 -0
- package/src/tools/agent-harness-learning-curator-types.ts +151 -0
- package/src/tools/agent-harness-learning-curator.ts +417 -0
- package/src/tools/agent-harness-local-model-benchmarks.ts +269 -0
- package/src/tools/agent-harness-local-model-cookbook.ts +238 -0
- package/src/tools/agent-harness-local-model-endpoints.ts +788 -0
- package/src/tools/agent-harness-local-model-smoke.ts +277 -0
- package/src/tools/agent-harness-local-model-url.ts +78 -0
- package/src/tools/agent-harness-media-posture.ts +223 -2
- package/src/tools/agent-harness-memory-external-providers.ts +796 -0
- package/src/tools/agent-harness-memory-posture.ts +672 -0
- package/src/tools/agent-harness-memory-provider-certification.ts +219 -0
- package/src/tools/agent-harness-memory-refinement.ts +340 -0
- package/src/tools/agent-harness-metadata.ts +100 -168
- package/src/tools/agent-harness-mode-catalog.ts +86 -33
- package/src/tools/agent-harness-model-catalog.ts +162 -0
- package/src/tools/agent-harness-model-provider-health.ts +283 -0
- package/src/tools/agent-harness-model-readiness.ts +432 -0
- package/src/tools/agent-harness-model-routing-types.ts +327 -0
- package/src/tools/agent-harness-model-routing-utils.ts +30 -0
- package/src/tools/agent-harness-model-routing.ts +165 -193
- package/src/tools/agent-harness-operator-methods.ts +115 -133
- package/src/tools/agent-harness-pairing-posture.ts +452 -18
- package/src/tools/agent-harness-personal-ops-certification.ts +116 -0
- package/src/tools/agent-harness-personal-ops-discovery.ts +533 -0
- package/src/tools/agent-harness-personal-ops-intake.ts +385 -0
- package/src/tools/agent-harness-personal-ops-lanes.ts +270 -0
- package/src/tools/agent-harness-personal-ops-operations.ts +225 -0
- package/src/tools/agent-harness-personal-ops-provider-records.ts +358 -0
- package/src/tools/agent-harness-personal-ops-provider-task-records.ts +321 -0
- package/src/tools/agent-harness-personal-ops-records.ts +684 -0
- package/src/tools/agent-harness-personal-ops-runner.ts +637 -0
- package/src/tools/agent-harness-personal-ops-types.ts +240 -0
- package/src/tools/agent-harness-personal-ops.ts +613 -0
- package/src/tools/agent-harness-project-context.ts +144 -0
- package/src/tools/agent-harness-prompt-context.ts +589 -0
- package/src/tools/agent-harness-provider-account-metadata.ts +2 -2
- package/src/tools/agent-harness-release-evidence.ts +9 -7
- package/src/tools/agent-harness-release-readiness.ts +9 -7
- package/src/tools/agent-harness-remote-read-models.ts +541 -0
- package/src/tools/agent-harness-research-briefing.ts +446 -0
- package/src/tools/agent-harness-research-live-read-models.ts +500 -0
- package/src/tools/agent-harness-research-queue.ts +250 -0
- package/src/tools/agent-harness-research-runs.ts +307 -0
- package/src/tools/agent-harness-research-workflow.ts +395 -0
- package/src/tools/agent-harness-security-posture.ts +2 -2
- package/src/tools/agent-harness-service-posture.ts +9 -9
- package/src/tools/agent-harness-session-metadata.ts +3 -3
- package/src/tools/agent-harness-setup-connected-host.ts +501 -0
- package/src/tools/agent-harness-setup-describe.ts +557 -0
- package/src/tools/agent-harness-setup-handoffs.ts +502 -0
- package/src/tools/agent-harness-setup-model-helpers.ts +102 -0
- package/src/tools/agent-harness-setup-plan.ts +253 -0
- package/src/tools/agent-harness-setup-posture-types.ts +218 -0
- package/src/tools/agent-harness-setup-posture-utils.ts +173 -0
- package/src/tools/agent-harness-setup-posture.ts +449 -221
- package/src/tools/agent-harness-setup-smoke.ts +533 -0
- package/src/tools/agent-harness-sudo-posture.ts +114 -0
- package/src/tools/agent-harness-tool-schema.ts +142 -7
- package/src/tools/agent-harness-tool-types.ts +83 -0
- package/src/tools/agent-harness-tool-utils.ts +43 -0
- package/src/tools/agent-harness-tool.ts +319 -370
- package/src/tools/agent-harness-ui-surface-metadata.ts +76 -69
- package/src/tools/agent-harness-ui-surface-types.ts +46 -0
- package/src/tools/agent-harness-vibe-health.ts +105 -0
- package/src/tools/agent-harness-workspace-action-runner.ts +149 -0
- package/src/tools/agent-harness-workspace-actions.ts +114 -8
- package/src/tools/agent-harness-workspace-editor-execution.ts +214 -0
- package/src/tools/agent-harness-workspace-editor-runner.ts +755 -0
- package/src/tools/agent-host-tool.ts +159 -0
- package/src/tools/agent-knowledge-ingest-tool.ts +34 -1
- package/src/tools/agent-learning-consolidation-core.ts +327 -0
- package/src/tools/agent-learning-consolidation-tool.ts +758 -0
- package/src/tools/agent-memory-tool.ts +253 -0
- package/src/tools/agent-model-compare-export.ts +315 -0
- package/src/tools/agent-model-compare-handoff.ts +592 -0
- package/src/tools/agent-model-compare-judgment.ts +633 -0
- package/src/tools/agent-model-compare-run.ts +735 -0
- package/src/tools/agent-model-compare-tool.ts +698 -0
- package/src/tools/agent-model-compare-types.ts +191 -0
- package/src/tools/agent-model-compare-utils.ts +93 -0
- package/src/tools/agent-models-tool.ts +208 -0
- package/src/tools/agent-operator-action-tool.ts +1 -1
- package/src/tools/agent-operator-method-tool.ts +643 -0
- package/src/tools/agent-personal-ops-tool.ts +197 -0
- package/src/tools/agent-policy-explanation.ts +415 -0
- package/src/tools/agent-research-report-tool.ts +608 -0
- package/src/tools/agent-research-runner.ts +367 -0
- package/src/tools/agent-research-runs-tool.ts +434 -0
- package/src/tools/agent-research-sources-tool.ts +443 -0
- package/src/tools/agent-research-tool.ts +515 -0
- package/src/tools/agent-review-packet-presets-core.ts +757 -0
- package/src/tools/agent-review-packet-presets-tool.ts +466 -0
- package/src/tools/agent-review-packet-share-tool.ts +305 -0
- package/src/tools/agent-route-planner-candidates-setup.ts +411 -0
- package/src/tools/agent-route-planner-candidates-surfaces.ts +432 -0
- package/src/tools/agent-route-planner-candidates-work.ts +251 -0
- package/src/tools/agent-route-planner-helpers.ts +667 -0
- package/src/tools/agent-route-planner.ts +185 -0
- package/src/tools/agent-route-tool.ts +105 -0
- package/src/tools/agent-schedule-edit-tool.ts +210 -0
- package/src/tools/agent-schedule-tool.ts +282 -0
- package/src/tools/agent-security-tool.ts +145 -0
- package/src/tools/agent-sessions-tool.ts +122 -0
- package/src/tools/agent-settings-import-tool.ts +104 -0
- package/src/tools/agent-settings-tool.ts +176 -0
- package/src/tools/agent-setup-tool.ts +226 -0
- package/src/tools/agent-support-tool.ts +122 -0
- package/src/tools/agent-terminal-process-tools.ts +167 -0
- package/src/tools/agent-tool-policy-guard-types.ts +77 -0
- package/src/tools/agent-tool-policy-guard.ts +106 -85
- package/src/tools/agent-vibe-tool.ts +297 -0
- package/src/tools/agent-work-plan-tool.ts +265 -6
- package/src/tools/agent-workspace-tool.ts +305 -0
- package/src/tools/artifact-archive.ts +169 -0
- package/src/tools/tool-definition-compaction.ts +36 -0
- package/src/version.ts +1 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { clearSetupWizardCheckpoint, readSetupWizardCheckpoint, saveSetupWizardCheckpoint } from '../agent/setup-wizard-checkpoint.ts';
|
|
2
|
+
import type { CommandContext } from './command-registry.ts';
|
|
3
|
+
import { buildAgentWorkspaceRuntimeSnapshot } from './agent-workspace-snapshot.ts';
|
|
4
|
+
import type { AgentWorkspaceAction, AgentWorkspaceActionResult, AgentWorkspaceRuntimeSnapshot } from './agent-workspace-types.ts';
|
|
5
|
+
|
|
6
|
+
interface AgentWorkspaceSetupCheckpointTarget {
|
|
7
|
+
readonly context: CommandContext | null;
|
|
8
|
+
readonly runtimeSnapshot: AgentWorkspaceRuntimeSnapshot | null;
|
|
9
|
+
readonly setRuntimeSnapshot: (snapshot: AgentWorkspaceRuntimeSnapshot | null) => void;
|
|
10
|
+
readonly setStatus: (status: string) => void;
|
|
11
|
+
readonly setLastActionResult: (result: AgentWorkspaceActionResult) => void;
|
|
12
|
+
readonly clampSelection: () => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function applyAgentWorkspaceSetupCheckpointAction(
|
|
16
|
+
target: AgentWorkspaceSetupCheckpointTarget,
|
|
17
|
+
action: AgentWorkspaceAction,
|
|
18
|
+
requestRender?: () => void,
|
|
19
|
+
): void {
|
|
20
|
+
const shellPaths = target.context?.workspace?.shellPaths;
|
|
21
|
+
if (!shellPaths || typeof shellPaths.resolveUserPath !== 'function') {
|
|
22
|
+
target.setStatus('Setup checkpoint storage is unavailable.');
|
|
23
|
+
target.setLastActionResult({
|
|
24
|
+
kind: 'error',
|
|
25
|
+
title: 'Setup checkpoint unavailable',
|
|
26
|
+
detail: 'The Agent workspace cannot locate Agent shell paths for setup checkpoint storage.',
|
|
27
|
+
safety: action.safety,
|
|
28
|
+
});
|
|
29
|
+
requestRender?.();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const refreshSnapshot = (): void => {
|
|
34
|
+
target.setRuntimeSnapshot(target.context ? buildAgentWorkspaceRuntimeSnapshot(target.context) : target.runtimeSnapshot);
|
|
35
|
+
target.clampSelection();
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
const operation = action.setupCheckpointOperation ?? 'show';
|
|
40
|
+
if (operation === 'show') {
|
|
41
|
+
const checkpoint = readSetupWizardCheckpoint(shellPaths);
|
|
42
|
+
const detail = checkpoint.checkpoint
|
|
43
|
+
? `Saved setup checkpoint: ${checkpoint.checkpoint.currentStepLabel} (${checkpoint.checkpoint.currentStepId}) at ${checkpoint.checkpoint.savedAt}.`
|
|
44
|
+
: checkpoint.exists
|
|
45
|
+
? `Saved setup checkpoint could not be read: ${checkpoint.parseError ?? 'invalid checkpoint file'}.`
|
|
46
|
+
: 'No setup wizard checkpoint is saved yet.';
|
|
47
|
+
target.setStatus(checkpoint.checkpoint ? 'Setup checkpoint loaded.' : 'No setup checkpoint saved.');
|
|
48
|
+
target.setLastActionResult({
|
|
49
|
+
kind: checkpoint.exists && !checkpoint.checkpoint ? 'error' : 'guidance',
|
|
50
|
+
title: 'Setup checkpoint',
|
|
51
|
+
detail,
|
|
52
|
+
safety: action.safety,
|
|
53
|
+
});
|
|
54
|
+
requestRender?.();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (operation === 'clear') {
|
|
59
|
+
const before = readSetupWizardCheckpoint(shellPaths);
|
|
60
|
+
const checkpoint = clearSetupWizardCheckpoint(shellPaths);
|
|
61
|
+
refreshSnapshot();
|
|
62
|
+
target.setStatus(before.exists ? 'Setup checkpoint cleared.' : 'No setup checkpoint was saved.');
|
|
63
|
+
target.setLastActionResult({
|
|
64
|
+
kind: 'refreshed',
|
|
65
|
+
title: 'Setup checkpoint cleared',
|
|
66
|
+
detail: before.exists
|
|
67
|
+
? `Cleared the Agent-owned setup wizard checkpoint at ${checkpoint.path}.`
|
|
68
|
+
: `No Agent-owned setup wizard checkpoint existed at ${checkpoint.path}.`,
|
|
69
|
+
safety: action.safety,
|
|
70
|
+
});
|
|
71
|
+
requestRender?.();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const wizard = target.runtimeSnapshot?.setupWizard;
|
|
76
|
+
const current = wizard?.currentStepId
|
|
77
|
+
? wizard.steps.find((step) => step.id === wizard.currentStepId) ?? null
|
|
78
|
+
: null;
|
|
79
|
+
if (!current) {
|
|
80
|
+
target.setStatus('No current setup wizard step to save.');
|
|
81
|
+
target.setLastActionResult({
|
|
82
|
+
kind: 'guidance',
|
|
83
|
+
title: 'Setup checkpoint not saved',
|
|
84
|
+
detail: 'The setup wizard is complete or unavailable, so there is no current step to resume.',
|
|
85
|
+
safety: action.safety,
|
|
86
|
+
});
|
|
87
|
+
requestRender?.();
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (current.sourceStatus === 'ready') {
|
|
91
|
+
target.setStatus('Setup checkpoint not saved.');
|
|
92
|
+
target.setLastActionResult({
|
|
93
|
+
kind: 'guidance',
|
|
94
|
+
title: 'Setup checkpoint not saved',
|
|
95
|
+
detail: `${current.label} is already ready; use the next live setup step instead.`,
|
|
96
|
+
safety: action.safety,
|
|
97
|
+
});
|
|
98
|
+
requestRender?.();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const checkpoint = saveSetupWizardCheckpoint(shellPaths, {
|
|
102
|
+
currentStepId: current.id,
|
|
103
|
+
currentStepLabel: current.label,
|
|
104
|
+
source: 'workspace',
|
|
105
|
+
note: 'User-selected setup wizard checkpoint.',
|
|
106
|
+
});
|
|
107
|
+
refreshSnapshot();
|
|
108
|
+
target.setStatus(`Saved setup checkpoint for ${current.label}.`);
|
|
109
|
+
target.setLastActionResult({
|
|
110
|
+
kind: 'refreshed',
|
|
111
|
+
title: 'Setup checkpoint saved',
|
|
112
|
+
detail: `Saved ${current.label} (${current.id}) as the Agent-owned setup resume point at ${checkpoint.path}.`,
|
|
113
|
+
safety: action.safety,
|
|
114
|
+
});
|
|
115
|
+
requestRender?.();
|
|
116
|
+
} catch (error) {
|
|
117
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
118
|
+
target.setStatus('Setup checkpoint action failed.');
|
|
119
|
+
target.setLastActionResult({
|
|
120
|
+
kind: 'error',
|
|
121
|
+
title: 'Setup checkpoint action failed',
|
|
122
|
+
detail,
|
|
123
|
+
safety: action.safety,
|
|
124
|
+
});
|
|
125
|
+
requestRender?.();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import type { ArtifactDescriptor } from '@pellux/goodvibes-sdk/platform/artifacts';
|
|
2
|
+
import type { CommandContext } from './command-registry.ts';
|
|
3
|
+
import { readSetupWizardCheckpoint } from '../agent/setup-wizard-checkpoint.ts';
|
|
4
|
+
import { readOnboardingCompletionMarker } from '../runtime/onboarding/index.ts';
|
|
5
|
+
import { DEFAULT_AGENT_SETUP_WIZARD_CLEAR_CHECKPOINT_ROUTE, DEFAULT_AGENT_SETUP_WIZARD_INSPECT_CHECKPOINT_ROUTE, DEFAULT_AGENT_SETUP_WIZARD_MARK_CHECKPOINT_ROUTE, DEFAULT_AGENT_SETUP_WIZARD_RERUN_SMOKE_ROUTE, DEFAULT_AGENT_SETUP_WIZARD_SAVE_SMOKE_ROUTE, buildAgentSetupWizard, emptyAgentSetupSmokeHistory, emptyAgentSetupWizardCheckpoint, type AgentSetupWizard, type AgentSetupWizardBlockedCheckFrequency, type AgentSetupWizardCheckpoint, type AgentSetupWizardDurableReceipt, type AgentSetupWizardSmokeHistory, type AgentSetupWizardSourceItem } from '../agent/setup-wizard.ts';
|
|
6
|
+
import type { AgentWorkspaceSetupChecklistItem } from './agent-workspace-setup.ts';
|
|
7
|
+
import { readArtifactMetadataString, readArtifactMetadataStringList } from './agent-workspace-artifact-metadata.ts';
|
|
8
|
+
|
|
9
|
+
function isSetupSmokeEvidenceArtifact(artifact: ArtifactDescriptor): boolean {
|
|
10
|
+
return readArtifactMetadataString(artifact.metadata, 'purpose') === 'agent-setup-smoke-evidence';
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function setupSmokeEvidenceScore(artifact: ArtifactDescriptor): number {
|
|
14
|
+
const result = readArtifactMetadataString(artifact.metadata, 'result');
|
|
15
|
+
if (result === 'ready-for-user-run') return 2;
|
|
16
|
+
if (result === 'blocked') return 0;
|
|
17
|
+
return 1;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function setupSmokeEvidenceTrend(artifacts: readonly ArtifactDescriptor[]): string {
|
|
21
|
+
if (artifacts.length === 0) return 'none';
|
|
22
|
+
if (artifacts.length === 1) return 'first-run';
|
|
23
|
+
const latest = setupSmokeEvidenceScore(artifacts[0]!);
|
|
24
|
+
const previous = setupSmokeEvidenceScore(artifacts[1]!);
|
|
25
|
+
if (latest > previous) return 'improving';
|
|
26
|
+
if (latest < previous) return 'regressing';
|
|
27
|
+
const result = readArtifactMetadataString(artifacts[0]!.metadata, 'result');
|
|
28
|
+
if (result === 'ready-for-user-run') return 'unchanged-ready';
|
|
29
|
+
if (result === 'blocked') return 'unchanged-blocked';
|
|
30
|
+
return 'unchanged';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function artifactCreatedAtIso(artifact: ArtifactDescriptor): string | null {
|
|
34
|
+
const createdAt = artifact.createdAt;
|
|
35
|
+
if (typeof createdAt !== 'number' || !Number.isFinite(createdAt)) return null;
|
|
36
|
+
return new Date(createdAt).toISOString();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function setupSmokeBlockedCheckFrequency(artifacts: readonly ArtifactDescriptor[]): readonly AgentSetupWizardBlockedCheckFrequency[] {
|
|
40
|
+
const counts = new Map<string, number>();
|
|
41
|
+
for (const artifact of artifacts) {
|
|
42
|
+
for (const checkId of readArtifactMetadataStringList(artifact.metadata, 'blockedChecks')) {
|
|
43
|
+
counts.set(checkId, (counts.get(checkId) ?? 0) + 1);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return [...counts.entries()]
|
|
47
|
+
.sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]))
|
|
48
|
+
.slice(0, 8)
|
|
49
|
+
.map(([checkId, count]) => ({ checkId, count }));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function buildSetupSmokeHistory(artifacts: readonly ArtifactDescriptor[], artifactListAvailable: boolean): AgentSetupWizardSmokeHistory {
|
|
53
|
+
if (!artifactListAvailable) {
|
|
54
|
+
return {
|
|
55
|
+
...emptyAgentSetupSmokeHistory('Artifact list support is unavailable in this runtime.'),
|
|
56
|
+
status: 'unavailable',
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const setupSmokeArtifacts = artifacts
|
|
60
|
+
.filter(isSetupSmokeEvidenceArtifact)
|
|
61
|
+
.sort((left, right) => (right.createdAt ?? 0) - (left.createdAt ?? 0));
|
|
62
|
+
if (setupSmokeArtifacts.length === 0) return emptyAgentSetupSmokeHistory();
|
|
63
|
+
const resultCounts = setupSmokeArtifacts.reduce<Record<string, number>>((counts, artifact) => {
|
|
64
|
+
const result = readArtifactMetadataString(artifact.metadata, 'result') || 'unknown';
|
|
65
|
+
counts[result] = (counts[result] ?? 0) + 1;
|
|
66
|
+
return counts;
|
|
67
|
+
}, {});
|
|
68
|
+
const latest = setupSmokeArtifacts[0]!;
|
|
69
|
+
const previous = setupSmokeArtifacts[1] ?? null;
|
|
70
|
+
return {
|
|
71
|
+
status: 'available',
|
|
72
|
+
total: setupSmokeArtifacts.length,
|
|
73
|
+
trend: setupSmokeEvidenceTrend(setupSmokeArtifacts),
|
|
74
|
+
latestResult: readArtifactMetadataString(latest.metadata, 'result') || 'unknown',
|
|
75
|
+
previousResult: previous ? readArtifactMetadataString(previous.metadata, 'result') || 'unknown' : null,
|
|
76
|
+
latestEvidenceId: latest.id,
|
|
77
|
+
latestEvidenceAt: artifactCreatedAtIso(latest),
|
|
78
|
+
resultCounts,
|
|
79
|
+
blockedCheckFrequency: setupSmokeBlockedCheckFrequency(setupSmokeArtifacts),
|
|
80
|
+
inspectLatestRoute: `agent_artifacts show artifactId:"${latest.id}" includeContent:false`,
|
|
81
|
+
rerunRoute: DEFAULT_AGENT_SETUP_WIZARD_RERUN_SMOKE_ROUTE,
|
|
82
|
+
saveRoute: DEFAULT_AGENT_SETUP_WIZARD_SAVE_SMOKE_ROUTE,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function buildSetupWizardCheckpoint(context: CommandContext): AgentSetupWizardCheckpoint {
|
|
87
|
+
const shellPaths = context.workspace?.shellPaths;
|
|
88
|
+
if (!shellPaths || typeof shellPaths.resolveUserPath !== 'function') {
|
|
89
|
+
return {
|
|
90
|
+
...emptyAgentSetupWizardCheckpoint('Agent shell paths are unavailable; setup wizard checkpoint storage cannot be inspected.'),
|
|
91
|
+
status: 'unavailable',
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const snapshot = readSetupWizardCheckpoint(shellPaths);
|
|
95
|
+
const routes = {
|
|
96
|
+
markCurrentRoute: DEFAULT_AGENT_SETUP_WIZARD_MARK_CHECKPOINT_ROUTE,
|
|
97
|
+
clearRoute: DEFAULT_AGENT_SETUP_WIZARD_CLEAR_CHECKPOINT_ROUTE,
|
|
98
|
+
inspectRoute: DEFAULT_AGENT_SETUP_WIZARD_INSPECT_CHECKPOINT_ROUTE,
|
|
99
|
+
};
|
|
100
|
+
if (!snapshot.exists) {
|
|
101
|
+
return {
|
|
102
|
+
...emptyAgentSetupWizardCheckpoint(),
|
|
103
|
+
...routes,
|
|
104
|
+
path: snapshot.path,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (!snapshot.checkpoint) {
|
|
108
|
+
return {
|
|
109
|
+
...emptyAgentSetupWizardCheckpoint(snapshot.parseError ?? 'Saved setup wizard checkpoint could not be read.'),
|
|
110
|
+
...routes,
|
|
111
|
+
status: 'unavailable',
|
|
112
|
+
path: snapshot.path,
|
|
113
|
+
...(snapshot.parseError ? { parseError: snapshot.parseError } : {}),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
status: 'available',
|
|
118
|
+
currentStepId: snapshot.checkpoint.currentStepId,
|
|
119
|
+
currentStepLabel: snapshot.checkpoint.currentStepLabel,
|
|
120
|
+
savedAt: snapshot.checkpoint.savedAt,
|
|
121
|
+
source: snapshot.checkpoint.source,
|
|
122
|
+
resumed: false,
|
|
123
|
+
summary: `Saved setup checkpoint for ${snapshot.checkpoint.currentStepLabel}.`,
|
|
124
|
+
path: snapshot.path,
|
|
125
|
+
...(snapshot.checkpoint.note ? { note: snapshot.checkpoint.note } : {}),
|
|
126
|
+
...routes,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function setupChecklistUserRoute(item: AgentWorkspaceSetupChecklistItem): string {
|
|
131
|
+
return item.command ?? 'Start';
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function setupChecklistModelRoute(item: AgentWorkspaceSetupChecklistItem): string {
|
|
135
|
+
if (item.id === 'runtime') return 'agent_harness mode:"setup_item" setupItemId:"connected-host-readiness"';
|
|
136
|
+
if (item.id === 'provider-model') return 'models action:"status"';
|
|
137
|
+
if (item.id === 'install-smoke') return DEFAULT_AGENT_SETUP_WIZARD_RERUN_SMOKE_ROUTE;
|
|
138
|
+
if (item.id === 'subscriptions') return 'models action:"providers"';
|
|
139
|
+
if (item.id === 'agent-knowledge') return 'agent_knowledge mode:"status"';
|
|
140
|
+
if (item.id === 'profile') return 'agent_harness mode:"workspace_action" actionId:"profile-template-show"';
|
|
141
|
+
if (item.id === 'persona') return 'agent_harness mode:"workspace" target:"personas"';
|
|
142
|
+
if (item.id === 'skills') return 'agent_harness mode:"workspace" target:"skills"';
|
|
143
|
+
if (item.id === 'routines') return 'agent_harness mode:"workspace" target:"routines"';
|
|
144
|
+
if (item.id === 'memory') return 'memory action:"status"';
|
|
145
|
+
if (item.id === 'notes') return 'personal_ops action:"lane" laneId:"notes"';
|
|
146
|
+
if (item.id === 'channels') return 'channels action:"status"';
|
|
147
|
+
if (item.id === 'browser-pwa') return 'computer action:"browser" includeParameters:true';
|
|
148
|
+
if (item.id === 'voice-media') return 'device action:"voice"';
|
|
149
|
+
return `agent_harness mode:"setup_item" setupItemId:"${item.id}"`;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function setupChecklistActionId(item: AgentWorkspaceSetupChecklistItem): string {
|
|
153
|
+
if (item.id === 'provider-model') return 'setup-provider-model';
|
|
154
|
+
if (item.id === 'subscriptions') return 'subscription-login-start';
|
|
155
|
+
if (item.id === 'agent-knowledge') return 'knowledge-status';
|
|
156
|
+
if (item.id === 'profile') return 'profile-template-show';
|
|
157
|
+
if (item.id === 'persona') return 'persona-search';
|
|
158
|
+
if (item.id === 'skills') return 'skill-search';
|
|
159
|
+
if (item.id === 'routines') return 'routine-search';
|
|
160
|
+
if (item.id === 'channels') return 'channel-show';
|
|
161
|
+
if (item.id === 'browser-pwa') return 'browser-cockpit-readiness';
|
|
162
|
+
if (item.id === 'voice-media') return 'voice-enable';
|
|
163
|
+
return item.id;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const SETUP_WIZARD_SNAPSHOT_BLOCKER_ALIASES: Readonly<Record<string, readonly string[]>> = {
|
|
167
|
+
'agent-binary': ['runtime', 'install-smoke'],
|
|
168
|
+
'connected-host-status': ['runtime'],
|
|
169
|
+
'connected-host-auth': ['connected-host-auth'],
|
|
170
|
+
'provider-model': ['provider-model'],
|
|
171
|
+
'setup-posture': ['install-smoke'],
|
|
172
|
+
'first-assistant-turn': ['install-smoke'],
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
export function buildWorkspaceSetupWizard(
|
|
176
|
+
checklist: readonly AgentWorkspaceSetupChecklistItem[],
|
|
177
|
+
smokeHistory: AgentSetupWizardSmokeHistory,
|
|
178
|
+
checkpoint: AgentSetupWizardCheckpoint,
|
|
179
|
+
setupMarkerExists: boolean,
|
|
180
|
+
durableReceipts: readonly AgentSetupWizardDurableReceipt[] = [],
|
|
181
|
+
): AgentSetupWizard {
|
|
182
|
+
const browserPwaNeedsReceipt = checklist.some((item) => item.id === 'browser-pwa' && item.status !== 'ready');
|
|
183
|
+
const items: AgentSetupWizardSourceItem[] = checklist.map((item) => ({
|
|
184
|
+
id: item.id,
|
|
185
|
+
label: item.label,
|
|
186
|
+
status: item.status,
|
|
187
|
+
detail: item.detail,
|
|
188
|
+
userRoute: setupChecklistUserRoute(item),
|
|
189
|
+
modelRoute: setupChecklistModelRoute(item),
|
|
190
|
+
actionId: setupChecklistActionId(item),
|
|
191
|
+
}));
|
|
192
|
+
return buildAgentSetupWizard({
|
|
193
|
+
items,
|
|
194
|
+
smokeHistory,
|
|
195
|
+
checkpoint,
|
|
196
|
+
closeoutCriticalStepIds: ['runtime', 'connected-host-auth', 'provider-model'],
|
|
197
|
+
receiptRequiredStepIds: [
|
|
198
|
+
'runtime',
|
|
199
|
+
'connected-host-auth',
|
|
200
|
+
'install-smoke',
|
|
201
|
+
...(browserPwaNeedsReceipt ? ['browser-pwa'] : []),
|
|
202
|
+
],
|
|
203
|
+
durableReceipts,
|
|
204
|
+
setupMarkerExists,
|
|
205
|
+
repeatedBlockerAliases: SETUP_WIZARD_SNAPSHOT_BLOCKER_ALIASES,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export function setupCompletionMarkerExists(context: CommandContext): boolean {
|
|
210
|
+
const shellPaths = context.workspace?.shellPaths;
|
|
211
|
+
if (!shellPaths || typeof shellPaths.resolveUserPath !== 'function') return false;
|
|
212
|
+
try {
|
|
213
|
+
return readOnboardingCompletionMarker(shellPaths, 'user').exists;
|
|
214
|
+
} catch {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
@@ -14,6 +14,11 @@ export interface AgentWorkspaceSetupChecklistInput {
|
|
|
14
14
|
readonly provider: string;
|
|
15
15
|
readonly model: string;
|
|
16
16
|
readonly runtimeBaseUrl: string;
|
|
17
|
+
readonly connectedHostTokenPresent: boolean;
|
|
18
|
+
readonly connectedHostTokenReadable: boolean;
|
|
19
|
+
readonly connectedHostTokenPath: string;
|
|
20
|
+
readonly connectedHostTokenError?: string | null;
|
|
21
|
+
readonly connectedHostAuthReceiptReady?: boolean;
|
|
17
22
|
readonly activeSubscriptionCount: number;
|
|
18
23
|
readonly pendingSubscriptionCount: number;
|
|
19
24
|
readonly availableSubscriptionProviderCount: number;
|
|
@@ -37,6 +42,10 @@ export interface AgentWorkspaceSetupChecklistInput {
|
|
|
37
42
|
readonly readyChannelCount: number;
|
|
38
43
|
readonly voiceProviderCount: number;
|
|
39
44
|
readonly mediaProviderCount: number;
|
|
45
|
+
readonly installSmokeReceiptReady?: boolean;
|
|
46
|
+
readonly browserPwaEnabled: boolean;
|
|
47
|
+
readonly browserPwaPublicBaseUrl: string;
|
|
48
|
+
readonly browserPwaFirstRunReceiptStatus: 'published' | 'not-published';
|
|
40
49
|
readonly runtimeProfileCount: number;
|
|
41
50
|
readonly runtimeStarterTemplateCount: number;
|
|
42
51
|
}
|
|
@@ -53,16 +62,43 @@ function sampleNames(summary: AgentBehaviorDiscoverySummary): string {
|
|
|
53
62
|
|
|
54
63
|
export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChecklistInput): readonly AgentWorkspaceSetupChecklistItem[] {
|
|
55
64
|
const providerReady = input.provider !== 'unknown' && input.model !== 'unknown';
|
|
65
|
+
const tokenPathKnown = input.connectedHostTokenPath !== '(Agent home unavailable)';
|
|
66
|
+
const connectedHostAuthReceiptReady = input.connectedHostAuthReceiptReady === true;
|
|
67
|
+
const connectedHostAuthStatus: AgentWorkspaceSetupStatus = input.connectedHostTokenReadable || connectedHostAuthReceiptReady
|
|
68
|
+
? 'ready'
|
|
69
|
+
: tokenPathKnown
|
|
70
|
+
? 'blocked'
|
|
71
|
+
: 'recommended';
|
|
72
|
+
const installSmokePrerequisitesReady = providerReady && (input.connectedHostTokenReadable || connectedHostAuthReceiptReady);
|
|
73
|
+
const installSmokeReceiptReady = input.installSmokeReceiptReady === true;
|
|
56
74
|
const hasActivePersona = input.activePersonaName !== '(none)' && input.activePersonaName !== '(unavailable)';
|
|
57
75
|
const discoveredBehaviorCount = input.discoveredPersonas.count + input.discoveredSkills.count + input.discoveredRoutines.count;
|
|
76
|
+
const browserPwaUrl = input.browserPwaPublicBaseUrl.trim();
|
|
77
|
+
const browserPwaHasPublicUrl = browserPwaUrl.length > 0 && browserPwaUrl !== '(not configured)';
|
|
78
|
+
const browserPwaReceiptPublished = input.browserPwaFirstRunReceiptStatus === 'published';
|
|
58
79
|
return [
|
|
59
80
|
{
|
|
60
81
|
id: 'runtime',
|
|
61
82
|
label: 'Connected host',
|
|
62
83
|
status: 'ready',
|
|
63
|
-
detail: `Agent will connect to ${input.runtimeBaseUrl};
|
|
84
|
+
detail: `Agent will connect to ${input.runtimeBaseUrl}; protected host routes also need the Agent companion token below.`,
|
|
64
85
|
command: 'Home -> Review health',
|
|
65
86
|
},
|
|
87
|
+
{
|
|
88
|
+
id: 'connected-host-auth',
|
|
89
|
+
label: 'Connected-host auth',
|
|
90
|
+
status: connectedHostAuthStatus,
|
|
91
|
+
detail: connectedHostAuthReceiptReady
|
|
92
|
+
? `Durable connected-host auth receipt is ready${input.connectedHostTokenReadable ? ` and Agent has a readable operator token at ${input.connectedHostTokenPath}` : ''}.`
|
|
93
|
+
: input.connectedHostTokenReadable
|
|
94
|
+
? `Agent has a readable connected-host operator token at ${input.connectedHostTokenPath}.`
|
|
95
|
+
: input.connectedHostTokenError
|
|
96
|
+
? `The connected-host operator token exists but cannot be read at ${input.connectedHostTokenPath}. Use the confirmed setup token provisioning route, then rerun auth review.`
|
|
97
|
+
: tokenPathKnown
|
|
98
|
+
? `Provision Agent's local connected-host operator token at ${input.connectedHostTokenPath} before pairing channels, Knowledge, schedules, or protected daemon routes.`
|
|
99
|
+
: 'Shell paths are unavailable in this runtime, so connected-host auth cannot be verified from the workspace snapshot.',
|
|
100
|
+
command: 'Host -> Connected-host auth owner',
|
|
101
|
+
},
|
|
66
102
|
{
|
|
67
103
|
id: 'provider-model',
|
|
68
104
|
label: 'Provider and model',
|
|
@@ -72,6 +108,17 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
|
|
|
72
108
|
: 'Choose a provider and model before relying on assistant turns.',
|
|
73
109
|
command: 'Setup -> Provider and model',
|
|
74
110
|
},
|
|
111
|
+
{
|
|
112
|
+
id: 'install-smoke',
|
|
113
|
+
label: 'Install smoke',
|
|
114
|
+
status: installSmokeReceiptReady ? 'ready' : installSmokePrerequisitesReady ? 'recommended' : tokenPathKnown ? 'blocked' : 'recommended',
|
|
115
|
+
detail: installSmokeReceiptReady
|
|
116
|
+
? 'Durable setup smoke receipt is ready for release closeout; rerun smoke only after install, host, auth, or model changes.'
|
|
117
|
+
: installSmokePrerequisitesReady
|
|
118
|
+
? 'Run setup smoke after install or migration to prove package start, connected host, auth, model route, setup posture, and first assistant turn.'
|
|
119
|
+
: 'Resolve connected-host auth and provider/model setup before treating the first assistant turn as install-ready.',
|
|
120
|
+
command: 'Start -> Install smoke',
|
|
121
|
+
},
|
|
75
122
|
{
|
|
76
123
|
id: 'subscriptions',
|
|
77
124
|
label: 'Provider subscriptions',
|
|
@@ -175,6 +222,19 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
|
|
|
175
222
|
: 'Pair or review channels only when you want the assistant reachable outside this terminal.',
|
|
176
223
|
command: 'Channels',
|
|
177
224
|
},
|
|
225
|
+
{
|
|
226
|
+
id: 'browser-pwa',
|
|
227
|
+
label: 'Browser/PWA',
|
|
228
|
+
status: browserPwaReceiptPublished ? 'ready' : 'recommended',
|
|
229
|
+
detail: browserPwaReceiptPublished
|
|
230
|
+
? `Connected-host browser/PWA first-run receipt is published${browserPwaHasPublicUrl ? ` for ${browserPwaUrl}` : ''}.`
|
|
231
|
+
: input.browserPwaEnabled
|
|
232
|
+
? browserPwaHasPublicUrl
|
|
233
|
+
? `Browser cockpit is openable at ${browserPwaUrl}, but the connected-host browser/PWA first-run completion receipt is not published yet. Terminal Agent remains primary until that receipt exists.`
|
|
234
|
+
: 'Browser cockpit is enabled through the connected-host web endpoint, but the connected-host browser/PWA first-run completion receipt is not published yet.'
|
|
235
|
+
: 'Enable the connected-host web endpoint and publish the browser/PWA first-run completion receipt before treating browser access as setup-ready.',
|
|
236
|
+
command: 'Voice & Media -> Browser/PWA readiness',
|
|
237
|
+
},
|
|
178
238
|
{
|
|
179
239
|
id: 'voice-media',
|
|
180
240
|
label: 'Voice and media',
|