@pellux/goodvibes-agent 1.1.7 → 1.2.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 +170 -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 +132577 -91483
- 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 +56 -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 +114 -45
- package/docs/voice-and-live-tts.md +3 -1
- package/package.json +3 -2
- package/release/release-notes.md +130 -5
- package/release/release-readiness.json +120 -90
- 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 +296 -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-checkpoint.ts +140 -0
- package/src/agent/setup-wizard.ts +447 -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 +262 -30
- package/src/input/agent-workspace-setup-checkpoint-action.ts +127 -0
- package/src/input/agent-workspace-setup-snapshot.ts +198 -0
- package/src/input/agent-workspace-setup.ts +34 -1
- package/src/input/agent-workspace-snapshot.ts +162 -147
- package/src/input/agent-workspace-types.ts +287 -2
- package/src/input/agent-workspace.ts +18 -0
- 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/main.ts +15 -15
- package/src/panels/qr-panel.ts +2 -2
- package/src/renderer/agent-workspace-context-lines.ts +686 -0
- package/src/renderer/agent-workspace.ts +30 -419
- 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.ts +703 -0
- package/src/tools/agent-harness-autonomy-intake.ts +785 -0
- package/src/tools/agent-harness-autonomy-live-records.ts +588 -0
- package/src/tools/agent-harness-autonomy-queue-types.ts +88 -0
- package/src/tools/agent-harness-autonomy-queue.ts +560 -0
- package/src/tools/agent-harness-background-processes-types.ts +35 -0
- package/src/tools/agent-harness-background-processes.ts +794 -0
- package/src/tools/agent-harness-browser-cockpit-route.ts +219 -0
- package/src/tools/agent-harness-browser-control.ts +338 -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-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 +382 -0
- package/src/tools/agent-harness-file-recovery.ts +135 -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 +199 -0
- package/src/tools/agent-harness-local-model-cookbook.ts +238 -0
- package/src/tools/agent-harness-local-model-endpoints.ts +673 -0
- package/src/tools/agent-harness-media-posture.ts +208 -2
- package/src/tools/agent-harness-memory-posture.ts +556 -0
- package/src/tools/agent-harness-metadata.ts +100 -168
- package/src/tools/agent-harness-mode-catalog.ts +84 -33
- package/src/tools/agent-harness-model-catalog.ts +162 -0
- package/src/tools/agent-harness-model-provider-health.ts +186 -0
- package/src/tools/agent-harness-model-readiness.ts +406 -0
- package/src/tools/agent-harness-model-routing-types.ts +266 -0
- package/src/tools/agent-harness-model-routing-utils.ts +30 -0
- package/src/tools/agent-harness-model-routing.ts +137 -190
- package/src/tools/agent-harness-operator-methods.ts +115 -133
- package/src/tools/agent-harness-pairing-posture.ts +431 -18
- 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 +204 -0
- package/src/tools/agent-harness-personal-ops-records.ts +732 -0
- package/src/tools/agent-harness-personal-ops-runner.ts +637 -0
- package/src/tools/agent-harness-personal-ops-types.ts +222 -0
- package/src/tools/agent-harness-personal-ops.ts +606 -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-research-briefing.ts +427 -0
- package/src/tools/agent-harness-research-queue.ts +250 -0
- package/src/tools/agent-harness-research-runs.ts +295 -0
- package/src/tools/agent-harness-research-workflow.ts +322 -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 +101 -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 +508 -0
- package/src/tools/agent-harness-sudo-posture.ts +114 -0
- package/src/tools/agent-harness-tool-schema.ts +120 -7
- package/src/tools/agent-harness-tool-types.ts +78 -0
- package/src/tools/agent-harness-tool-utils.ts +43 -0
- package/src/tools/agent-harness-tool.ts +311 -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 +214 -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 +722 -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-runs-tool.ts +434 -0
- package/src/tools/agent-research-sources-tool.ts +443 -0
- package/src/tools/agent-research-tool.ts +687 -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
|
@@ -2,6 +2,7 @@ import type { ToolRegistry } from '@pellux/goodvibes-sdk/platform/tools';
|
|
|
2
2
|
import type { CommandContext } from '../input/command-registry.ts';
|
|
3
3
|
import { resolveAgentConnectedHostConnection } from '../agent/routine-schedule-promotion.ts';
|
|
4
4
|
import { previewHarnessText } from './agent-harness-text.ts';
|
|
5
|
+
export { describeCliCommandPolicy } from './agent-harness-cli-command-policy.ts';
|
|
5
6
|
|
|
6
7
|
export interface CommandExecutionPolicy {
|
|
7
8
|
readonly effect: 'read-only' | 'local-state' | 'connected-host-state' | 'external-network' | 'ui-navigation' | 'session-lifecycle' | 'delegated-work' | 'mixed' | 'unknown';
|
|
@@ -18,6 +19,14 @@ function agentHarnessModes(...modes: readonly string[]): string {
|
|
|
18
19
|
return `agent_harness ${modes.map((mode) => `mode:"${mode}"`).join(', ')}`;
|
|
19
20
|
}
|
|
20
21
|
|
|
22
|
+
function settingsActions(...actions: readonly string[]): string {
|
|
23
|
+
return `settings ${actions.map((action) => `action:"${action}"`).join('|')}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function hostActions(...actions: readonly string[]): string {
|
|
27
|
+
return `host ${actions.map((action) => `action:"${action}"`).join('|')}`;
|
|
28
|
+
}
|
|
29
|
+
|
|
21
30
|
export function describeCommandPolicy(commandName: string): CommandExecutionPolicy {
|
|
22
31
|
const root = commandName.replace(/^\//, '').trim().toLowerCase();
|
|
23
32
|
const confirmation = 'agent_harness mode:"run_command" requires confirm:true and explicitUserRequest for every slash command invocation.';
|
|
@@ -34,7 +43,7 @@ export function describeCommandPolicy(commandName: string): CommandExecutionPoli
|
|
|
34
43
|
effect: 'ui-navigation',
|
|
35
44
|
confirmation,
|
|
36
45
|
preferredModelTool: agentHarnessModes('workspace_actions', 'workspace_action', 'open_ui_surface'),
|
|
37
|
-
boundary: 'Setup opens the visible Agent workspace. Model-side changes should use
|
|
46
|
+
boundary: 'Setup opens the visible Agent workspace. Model-side changes should use settings or workspace actions.',
|
|
38
47
|
};
|
|
39
48
|
}
|
|
40
49
|
if (root === 'commands' || root === 'help' || root === 'shortcuts') {
|
|
@@ -57,23 +66,23 @@ export function describeCommandPolicy(commandName: string): CommandExecutionPoli
|
|
|
57
66
|
return {
|
|
58
67
|
effect: 'mixed',
|
|
59
68
|
confirmation,
|
|
60
|
-
preferredModelTool:
|
|
61
|
-
boundary: 'Model-writable settings can be changed through
|
|
69
|
+
preferredModelTool: settingsActions('list', 'get', 'set', 'reset', 'import'),
|
|
70
|
+
boundary: 'Model-writable settings can be changed through the first-class settings adapter. Connected-host lifecycle/listener settings remain read-only.',
|
|
62
71
|
};
|
|
63
72
|
}
|
|
64
73
|
if (root === 'model' || root === 'effort') {
|
|
65
74
|
return {
|
|
66
75
|
effect: 'mixed',
|
|
67
76
|
confirmation,
|
|
68
|
-
preferredModelTool:
|
|
69
|
-
boundary: 'Model and reasoning-effort changes affect the current Agent chat route. Prefer settings
|
|
77
|
+
preferredModelTool: `${settingsActions('get', 'set')} or ${agentHarnessModes('open_ui_surface')}`,
|
|
78
|
+
boundary: 'Model and reasoning-effort changes affect the current Agent chat route. Prefer settings for concrete values and UI surface routing for visible pickers.',
|
|
70
79
|
};
|
|
71
80
|
}
|
|
72
81
|
if (root === 'provider' || root === 'providers') {
|
|
73
82
|
return {
|
|
74
83
|
effect: 'mixed',
|
|
75
84
|
confirmation,
|
|
76
|
-
preferredModelTool:
|
|
85
|
+
preferredModelTool: `${settingsActions('get', 'set')} or ${agentHarnessModes('open_ui_surface')}`,
|
|
77
86
|
boundary: 'Provider selection and custom provider files belong to Agent provider configuration. Adding, removing, or switching providers requires explicit user intent.',
|
|
78
87
|
};
|
|
79
88
|
}
|
|
@@ -81,7 +90,7 @@ export function describeCommandPolicy(commandName: string): CommandExecutionPoli
|
|
|
81
90
|
return {
|
|
82
91
|
effect: 'external-network',
|
|
83
92
|
confirmation,
|
|
84
|
-
preferredModelTool:
|
|
93
|
+
preferredModelTool: `${settingsActions('list', 'get')} or ${agentHarnessModes('tools')}`,
|
|
85
94
|
boundary: 'Model catalog refresh may call provider discovery routes and update local provider metadata. Do not run it without explicit user request.',
|
|
86
95
|
};
|
|
87
96
|
}
|
|
@@ -97,10 +106,18 @@ export function describeCommandPolicy(commandName: string): CommandExecutionPoli
|
|
|
97
106
|
return {
|
|
98
107
|
effect: 'local-state',
|
|
99
108
|
confirmation,
|
|
100
|
-
preferredModelTool:
|
|
109
|
+
preferredModelTool: settingsActions('get', 'set'),
|
|
101
110
|
boundary: 'Interaction-mode changes affect the current Agent operator notification posture and should be explicit.',
|
|
102
111
|
};
|
|
103
112
|
}
|
|
113
|
+
if (root === 'vibe' || root === 'vibes') {
|
|
114
|
+
return {
|
|
115
|
+
effect: 'local-state',
|
|
116
|
+
confirmation,
|
|
117
|
+
preferredModelTool: 'vibe or agent_local_registry',
|
|
118
|
+
boundary: 'VIBE.md status/show are read-only; init writes a local personality file and import-persona writes an Agent-local persona after explicit confirmation.',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
104
121
|
if (root === 'brief') {
|
|
105
122
|
return {
|
|
106
123
|
effect: 'read-only',
|
|
@@ -114,8 +131,8 @@ export function describeCommandPolicy(commandName: string): CommandExecutionPoli
|
|
|
114
131
|
effect: 'read-only',
|
|
115
132
|
confirmation,
|
|
116
133
|
preferredModelTool: root === 'compat'
|
|
117
|
-
?
|
|
118
|
-
:
|
|
134
|
+
? hostActions('services', 'service', 'status')
|
|
135
|
+
: `${hostActions('services', 'service', 'status')} or ${settingsActions('list', 'get')} or ${agentHarnessModes('tools', 'open_ui_surface')}`,
|
|
119
136
|
boundary: 'Diagnostics and review commands inspect Agent, provider, MCP, security, and connected-host readiness without taking lifecycle ownership.',
|
|
120
137
|
};
|
|
121
138
|
}
|
|
@@ -132,8 +149,8 @@ export function describeCommandPolicy(commandName: string): CommandExecutionPoli
|
|
|
132
149
|
effect: 'mixed',
|
|
133
150
|
confirmation,
|
|
134
151
|
preferredModelTool: root === 'secrets' || root === 'secret'
|
|
135
|
-
?
|
|
136
|
-
: agentHarnessModes('workspace_actions', '
|
|
152
|
+
? settingsActions('list', 'get', 'set', 'reset')
|
|
153
|
+
: `${agentHarnessModes('workspace_actions', 'open_ui_surface')} or ${settingsActions('list', 'get', 'set')}`,
|
|
137
154
|
boundary: 'Harness-owned configuration, secret, voice, subscription, and MCP commands can expose credentials or external account state. Mutations require explicit user intent and should prefer secret refs over raw values.',
|
|
138
155
|
};
|
|
139
156
|
}
|
|
@@ -183,7 +200,7 @@ export function describeCommandPolicy(commandName: string): CommandExecutionPoli
|
|
|
183
200
|
return {
|
|
184
201
|
effect: 'connected-host-state',
|
|
185
202
|
confirmation,
|
|
186
|
-
preferredModelTool: '
|
|
203
|
+
preferredModelTool: 'schedule',
|
|
187
204
|
boundary: 'Connected schedules require an explicit user request and do not create hidden Agent jobs or local schedulers.',
|
|
188
205
|
};
|
|
189
206
|
}
|
|
@@ -215,7 +232,7 @@ export function describeCommandPolicy(commandName: string): CommandExecutionPoli
|
|
|
215
232
|
return {
|
|
216
233
|
effect: 'external-network',
|
|
217
234
|
confirmation,
|
|
218
|
-
preferredModelTool:
|
|
235
|
+
preferredModelTool: `${settingsActions('get', 'set')} or ${agentHarnessModes('open_ui_surface')}`,
|
|
219
236
|
boundary: 'Live TTS submits a normal prompt and may call model and speech providers; stopping playback is local runtime control.',
|
|
220
237
|
};
|
|
221
238
|
}
|
|
@@ -305,103 +322,6 @@ export function describeCommandPolicy(commandName: string): CommandExecutionPoli
|
|
|
305
322
|
};
|
|
306
323
|
}
|
|
307
324
|
|
|
308
|
-
export function describeCliCommandPolicy(commandName: string): CommandExecutionPolicy {
|
|
309
|
-
const root = commandName.trim().toLowerCase();
|
|
310
|
-
const confirmation = 'agent_harness CLI command modes are discovery-only. Use first-class model tools, workspace actions, slash-command mirrors, or an explicit external shell request to execute equivalent CLI workflows.';
|
|
311
|
-
if ([
|
|
312
|
-
'app',
|
|
313
|
-
'bridge',
|
|
314
|
-
'control-plane',
|
|
315
|
-
'controlplane',
|
|
316
|
-
'cp',
|
|
317
|
-
'daemon',
|
|
318
|
-
'http-listener',
|
|
319
|
-
'launch',
|
|
320
|
-
'listener',
|
|
321
|
-
'remote',
|
|
322
|
-
'serve',
|
|
323
|
-
'server',
|
|
324
|
-
'service',
|
|
325
|
-
'services',
|
|
326
|
-
'start',
|
|
327
|
-
'surface',
|
|
328
|
-
'surfaces',
|
|
329
|
-
'web',
|
|
330
|
-
'webhook',
|
|
331
|
-
].includes(root)) {
|
|
332
|
-
return {
|
|
333
|
-
effect: 'unknown',
|
|
334
|
-
confirmation,
|
|
335
|
-
boundary: 'Blocked package CLI token. Agent can launch its own TUI and use public connected-host routes, but it does not manage connected-host lifecycle, listeners, servers, route relays, remotes, web surfaces, or webhook listeners.',
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
if (root === 'tui' || root === 'onboarding' || root === 'help' || root === 'version' || root === 'completion') {
|
|
339
|
-
return {
|
|
340
|
-
effect: root === 'tui' || root === 'onboarding' ? 'ui-navigation' : 'read-only',
|
|
341
|
-
confirmation,
|
|
342
|
-
preferredModelTool: root === 'onboarding' || root === 'tui'
|
|
343
|
-
? agentHarnessModes('workspace', 'workspace_actions', 'workspace_action', 'run_workspace_action')
|
|
344
|
-
: agentHarnessModes('cli_commands', 'cli_command'),
|
|
345
|
-
boundary: 'Top-level CLI launch, setup, help, version, and completion commands are package entrypoint surfaces; use in-process workspace and slash-command routes from the model when operating inside the TUI.',
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
if (root === 'run') {
|
|
349
|
-
return {
|
|
350
|
-
effect: 'mixed',
|
|
351
|
-
confirmation,
|
|
352
|
-
preferredModelTool: 'current Agent conversation response; do not invoke hidden nested CLI run',
|
|
353
|
-
boundary: 'The CLI run command starts a non-interactive Agent turn from a process entrypoint. Do not create hidden nested turns from agent_harness; answer the user directly in the current conversation.',
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
if (root === 'status' || root === 'doctor' || root === 'auth' || root === 'compat' || root === 'models' || root === 'providers' || root === 'tasks') {
|
|
357
|
-
return {
|
|
358
|
-
effect: 'read-only',
|
|
359
|
-
confirmation,
|
|
360
|
-
preferredModelTool: root === 'tasks' ? 'agent_operator_briefing' : agentHarnessModes('service_posture', 'service_endpoint', 'connected_host_status', 'connected_host', 'settings', 'tools'),
|
|
361
|
-
boundary: 'Diagnostics and posture commands are readable from Agent-owned settings, provider, model, and connected-host capability surfaces without taking connected-host lifecycle ownership.',
|
|
362
|
-
};
|
|
363
|
-
}
|
|
364
|
-
if (root === 'profiles' || root === 'personas' || root === 'skills' || root === 'memory' || root === 'routines' || root === 'sessions' || root === 'bundle') {
|
|
365
|
-
return {
|
|
366
|
-
effect: 'local-state',
|
|
367
|
-
confirmation,
|
|
368
|
-
preferredModelTool: root === 'profiles' ? agentHarnessModes('workspace_actions', 'workspace_action', 'run_workspace_action') : 'agent_local_registry',
|
|
369
|
-
boundary: 'Local library/profile/session/bundle CLI commands operate on Agent-local data. Mutations require explicit user intent and should use first-class Agent-local tools where available.',
|
|
370
|
-
};
|
|
371
|
-
}
|
|
372
|
-
if (root === 'knowledge' || root === 'ask' || root === 'search') {
|
|
373
|
-
return {
|
|
374
|
-
effect: 'mixed',
|
|
375
|
-
confirmation,
|
|
376
|
-
preferredModelTool: root === 'knowledge' ? 'agent_knowledge or agent_knowledge_ingest' : 'agent_knowledge',
|
|
377
|
-
boundary: 'Agent Knowledge CLI commands must stay on isolated Agent Knowledge routes and never fall back to default or non-Agent knowledge spaces.',
|
|
378
|
-
};
|
|
379
|
-
}
|
|
380
|
-
if (root === 'delegate') {
|
|
381
|
-
return {
|
|
382
|
-
effect: 'delegated-work',
|
|
383
|
-
confirmation,
|
|
384
|
-
preferredModelTool: agentHarnessModes('workspace_actions', 'workspace_action', 'run_workspace_action'),
|
|
385
|
-
boundary: 'Delegation is explicit user-directed work only; no hidden background review or separate Agent job should be created implicitly.',
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
if (root === 'subscription' || root === 'secrets' || root === 'pair') {
|
|
389
|
-
return {
|
|
390
|
-
effect: root === 'pair' ? 'external-network' : 'mixed',
|
|
391
|
-
confirmation,
|
|
392
|
-
preferredModelTool: root === 'pair'
|
|
393
|
-
? agentHarnessModes('workspace_actions', 'workspace_action', 'run_workspace_action')
|
|
394
|
-
: `${agentHarnessModes('settings', 'get_setting', 'set_setting', 'reset_setting')} or ${agentHarnessModes('workspace_actions')}`,
|
|
395
|
-
boundary: 'Provider subscription, secret, and pairing flows can expose credentials or external account state. Use only explicit user-directed flows and prefer secret refs over raw values.',
|
|
396
|
-
};
|
|
397
|
-
}
|
|
398
|
-
return {
|
|
399
|
-
effect: 'unknown',
|
|
400
|
-
confirmation,
|
|
401
|
-
boundary: 'Inspect the CLI help, parser result, and preferred model routes before using an equivalent command path.',
|
|
402
|
-
};
|
|
403
|
-
}
|
|
404
|
-
|
|
405
325
|
function toolIsAvailable(toolRegistry: ToolRegistry, toolName: string): boolean {
|
|
406
326
|
return toolRegistry.getToolDefinitions().some((tool) => tool.name === toolName);
|
|
407
327
|
}
|
|
@@ -411,11 +331,11 @@ function connectedHostCapabilityModelRoute(capability: Record<string, unknown>):
|
|
|
411
331
|
? capability.modelTools.filter((tool): tool is string => typeof tool === 'string')
|
|
412
332
|
: [];
|
|
413
333
|
if (modelTools.length > 0) return previewHarnessText(modelTools.join(' or '));
|
|
414
|
-
return '
|
|
334
|
+
return 'host action:"capability"';
|
|
415
335
|
}
|
|
416
336
|
|
|
417
337
|
function blockedConnectedHostModelRoute(): string {
|
|
418
|
-
return '
|
|
338
|
+
return hostActions('services', 'status');
|
|
419
339
|
}
|
|
420
340
|
|
|
421
341
|
export function connectedHostCapabilityMap(toolRegistry: ToolRegistry): readonly Record<string, unknown>[] {
|
|
@@ -424,10 +344,10 @@ export function connectedHostCapabilityMap(toolRegistry: ToolRegistry): readonly
|
|
|
424
344
|
modelRoute: connectedHostCapabilityModelRoute(capability),
|
|
425
345
|
harnessRoute: 'agent_harness mode:"connected_host_capability"',
|
|
426
346
|
modelAccess: {
|
|
427
|
-
inspectCapability: '
|
|
428
|
-
liveStatus: '
|
|
429
|
-
endpointPosture: '
|
|
430
|
-
routeFamilies: '
|
|
347
|
+
inspectCapability: 'host action:"capability"',
|
|
348
|
+
liveStatus: 'host action:"status"',
|
|
349
|
+
endpointPosture: 'host action:"services"',
|
|
350
|
+
routeFamilies: 'host action:"capabilities" includeParameters:true',
|
|
431
351
|
operate: connectedHostCapabilityModelRoute(capability),
|
|
432
352
|
},
|
|
433
353
|
available: capability.modelTools.every((toolName) => toolIsAvailable(toolRegistry, toolName)),
|
|
@@ -455,10 +375,22 @@ export function connectedHostCapabilityMap(toolRegistry: ToolRegistry): readonly
|
|
|
455
375
|
'automation.jobs.resume',
|
|
456
376
|
'automation.runs.cancel',
|
|
457
377
|
'automation.runs.retry',
|
|
378
|
+
'schedules.delete',
|
|
379
|
+
'schedules.disable',
|
|
380
|
+
'schedules.enable',
|
|
458
381
|
'schedules.run',
|
|
459
382
|
],
|
|
460
383
|
purpose: 'Perform one explicit allowlisted approval, automation, run, or schedule action.',
|
|
461
384
|
}),
|
|
385
|
+
withAvailability({
|
|
386
|
+
id: 'schedule-edit',
|
|
387
|
+
effect: 'confirmed-connected-host-state',
|
|
388
|
+
modelTools: ['schedule', 'agent_schedule_edit'],
|
|
389
|
+
workspaceCategories: ['automation', 'personal-ops'],
|
|
390
|
+
slashCommandFamilies: ['schedule'],
|
|
391
|
+
methodIds: ['automation.jobs.patch'],
|
|
392
|
+
purpose: 'Edit one explicit connected schedule name, cadence, or prompt.',
|
|
393
|
+
}),
|
|
462
394
|
withAvailability({
|
|
463
395
|
id: 'agent-knowledge-read',
|
|
464
396
|
effect: 'read-only-network',
|
|
@@ -509,11 +441,11 @@ export function connectedHostCapabilityMap(toolRegistry: ToolRegistry): readonly
|
|
|
509
441
|
withAvailability({
|
|
510
442
|
id: 'reminders-and-schedules',
|
|
511
443
|
effect: 'confirmed-connected-host-state',
|
|
512
|
-
modelTools: ['agent_reminder_schedule'],
|
|
444
|
+
modelTools: ['schedule', 'agent_autonomy_schedule', 'agent_reminder_schedule'],
|
|
513
445
|
workspaceCategories: ['automation', 'routines'],
|
|
514
446
|
slashCommandFamilies: ['schedule', 'reminder'],
|
|
515
447
|
scheduleKinds: ['at', 'every', 'cron'],
|
|
516
|
-
purpose: 'Create one connected reminder schedule from a direct user request.',
|
|
448
|
+
purpose: 'Create one connected reminder or autonomous Agent schedule from a direct user request.',
|
|
517
449
|
}),
|
|
518
450
|
withAvailability({
|
|
519
451
|
id: 'voice-media',
|
|
@@ -564,9 +496,9 @@ export function connectedHostRouteFamilies(): readonly Record<string, unknown>[]
|
|
|
564
496
|
},
|
|
565
497
|
{
|
|
566
498
|
id: 'connected-schedules',
|
|
567
|
-
routes: ['public schedule creation
|
|
568
|
-
modelTools: ['agent_reminder_schedule', 'agent_operator_action'],
|
|
569
|
-
modelRoute: '
|
|
499
|
+
routes: ['public schedule creation, patch, run, toggle, and delete routes'],
|
|
500
|
+
modelTools: ['schedule', 'agent_autonomy_schedule', 'agent_reminder_schedule', 'agent_schedule_edit', 'agent_operator_action'],
|
|
501
|
+
modelRoute: 'schedule action:"list|create|remind|edit|run|pause|resume|delete"',
|
|
570
502
|
boundary: 'Connected schedules only; no hidden local scheduler or separate Agent job.',
|
|
571
503
|
},
|
|
572
504
|
];
|
|
@@ -624,15 +556,15 @@ function connectedHostCapabilityDetail(entry: { readonly status: 'allowed' | 'bl
|
|
|
624
556
|
harnessRoute: 'agent_harness mode:"connected_host_capability"',
|
|
625
557
|
relatedRouteFamilies: relatedConnectedHostRouteFamilies(entry.capability),
|
|
626
558
|
modelAccess: {
|
|
627
|
-
inspectCapability: '
|
|
628
|
-
connectedHostInventory: '
|
|
629
|
-
liveStatus: '
|
|
630
|
-
endpointPosture: '
|
|
559
|
+
inspectCapability: 'host action:"capability"',
|
|
560
|
+
connectedHostInventory: 'host action:"capabilities" includeParameters:true',
|
|
561
|
+
liveStatus: 'host action:"status"',
|
|
562
|
+
endpointPosture: 'host action:"services"',
|
|
631
563
|
operate: connectedHostCapabilityModelRoute(entry.capability),
|
|
632
564
|
},
|
|
633
|
-
operatorMethodMode: 'Use
|
|
634
|
-
servicePostureMode: 'Use
|
|
635
|
-
statusMode: 'Use
|
|
565
|
+
operatorMethodMode: 'Use host action:"methods" for the public operator and Agent Knowledge method catalog. Use action:"method" for one method.',
|
|
566
|
+
servicePostureMode: 'Use host action:"services" for endpoint binding, network-facing posture, issue, and redacted-log diagnostics. Use action:"service" for one endpoint.',
|
|
567
|
+
statusMode: 'Use host action:"status" for live read-only reachability, token posture, and Agent Knowledge route readiness.',
|
|
636
568
|
boundary: 'Use only the listed first-class model tools, slash-command families, and workspace categories. Mutations still require explicit confirmation through those tools or command routes.',
|
|
637
569
|
};
|
|
638
570
|
}
|
|
@@ -644,15 +576,15 @@ function connectedHostCapabilityDetail(entry: { readonly status: 'allowed' | 'bl
|
|
|
644
576
|
allowed: false,
|
|
645
577
|
available: false,
|
|
646
578
|
modelAccess: {
|
|
647
|
-
inspectCapability: '
|
|
648
|
-
connectedHostInventory: '
|
|
649
|
-
liveStatus: '
|
|
650
|
-
endpointPosture: '
|
|
579
|
+
inspectCapability: 'host action:"capability"',
|
|
580
|
+
connectedHostInventory: 'host action:"capabilities" includeParameters:true',
|
|
581
|
+
liveStatus: 'host action:"status"',
|
|
582
|
+
endpointPosture: 'host action:"services"',
|
|
651
583
|
operate: 'not exposed',
|
|
652
584
|
},
|
|
653
585
|
boundary: 'This connected-host surface is intentionally not exposed to the model as an Agent operation.',
|
|
654
|
-
servicePostureMode: 'Use
|
|
655
|
-
statusMode: 'Use
|
|
586
|
+
servicePostureMode: 'Use host action:"services" or action:"service" only for read-only endpoint diagnostics.',
|
|
587
|
+
statusMode: 'Use host action:"status" only for read-only readiness diagnostics.',
|
|
656
588
|
};
|
|
657
589
|
}
|
|
658
590
|
|
|
@@ -693,8 +625,8 @@ export function connectedHostSummary(
|
|
|
693
625
|
baseUrl: connection.baseUrl,
|
|
694
626
|
operatorToken: connection.token ? 'configured' : 'missing',
|
|
695
627
|
tokenPath: connection.tokenPath,
|
|
696
|
-
ownership: '
|
|
697
|
-
lifecycle: 'GoodVibes Agent can
|
|
628
|
+
ownership: 'goodvibes-daemon',
|
|
629
|
+
lifecycle: 'GoodVibes Agent can inspect daemon posture and use confirmed operator methods for supported service lifecycle/listener changes.',
|
|
698
630
|
modes: {
|
|
699
631
|
servicePosture: agentHarnessModes('service_posture', 'service_endpoint'),
|
|
700
632
|
operatorMethods: agentHarnessModes('operator_methods', 'operator_method'),
|
|
@@ -702,15 +634,15 @@ export function connectedHostSummary(
|
|
|
702
634
|
capabilityDetail: agentHarnessModes('connected_host_capability'),
|
|
703
635
|
daemonAliases: agentHarnessModes('daemon', 'daemon_status'),
|
|
704
636
|
},
|
|
705
|
-
modelRoute: '
|
|
637
|
+
modelRoute: hostActions('capabilities', 'capability'),
|
|
706
638
|
modelAccess: {
|
|
707
|
-
inventory: '
|
|
708
|
-
liveStatus: '
|
|
709
|
-
capabilityDetail: '
|
|
710
|
-
servicePosture: '
|
|
639
|
+
inventory: 'host action:"capabilities" includeParameters:true',
|
|
640
|
+
liveStatus: 'host action:"status"',
|
|
641
|
+
capabilityDetail: 'host action:"capability" capabilityId:"..."',
|
|
642
|
+
servicePosture: 'host action:"services"',
|
|
711
643
|
daemonAliases: 'agent_harness mode:"daemon" or mode:"daemon_status"',
|
|
712
644
|
daemonStatusAlias: 'agent_harness mode:"daemon_status"',
|
|
713
|
-
|
|
645
|
+
lifecycle: 'use setup or agent_operator_method with confirm:true and explicitUserRequest for supported daemon service methods.',
|
|
714
646
|
},
|
|
715
647
|
counts: {
|
|
716
648
|
routeFamilies: routeFamilies.length,
|
|
@@ -730,16 +662,16 @@ export function blockedConnectedHostCapabilities(): readonly Record<string, unkn
|
|
|
730
662
|
return [
|
|
731
663
|
{
|
|
732
664
|
id: 'connected-host-lifecycle',
|
|
733
|
-
|
|
734
|
-
modelRoute:
|
|
665
|
+
confirmationGated: ['start', 'stop', 'restart', 'install', 'upgrade', 'expose-listener', 'mutate-listener'],
|
|
666
|
+
modelRoute: 'agent_operator_method',
|
|
735
667
|
harnessRoute: 'agent_harness mode:"connected_host_capability"',
|
|
736
668
|
modelAccess: {
|
|
737
|
-
inspectCapability: '
|
|
738
|
-
liveStatus: '
|
|
739
|
-
endpointPosture: '
|
|
740
|
-
operate: '
|
|
669
|
+
inspectCapability: 'host action:"capability"',
|
|
670
|
+
liveStatus: 'host action:"status"',
|
|
671
|
+
endpointPosture: 'host action:"services"',
|
|
672
|
+
operate: 'agent_operator_method with confirm:true and explicitUserRequest when the daemon contract exposes the method',
|
|
741
673
|
},
|
|
742
|
-
reason: '
|
|
674
|
+
reason: 'Lifecycle changes are powerful daemon operations. They are available only through explicit setup or confirmed operator methods, never as ambient background side effects.',
|
|
743
675
|
},
|
|
744
676
|
{
|
|
745
677
|
id: 'non-agent-knowledge',
|
|
@@ -747,48 +679,48 @@ export function blockedConnectedHostCapabilities(): readonly Record<string, unkn
|
|
|
747
679
|
modelRoute: blockedConnectedHostModelRoute(),
|
|
748
680
|
harnessRoute: 'agent_harness mode:"connected_host_capability"',
|
|
749
681
|
modelAccess: {
|
|
750
|
-
inspectCapability: '
|
|
682
|
+
inspectCapability: 'host action:"capability"',
|
|
751
683
|
allowedAgentKnowledge: 'agent_knowledge or agent_knowledge_ingest',
|
|
752
|
-
liveStatus: '
|
|
684
|
+
liveStatus: 'host action:"status"',
|
|
753
685
|
operate: 'not exposed',
|
|
754
686
|
},
|
|
755
687
|
reason: 'Agent model tools must stay inside the isolated Agent Knowledge route family.',
|
|
756
688
|
},
|
|
757
689
|
{
|
|
758
690
|
id: 'hidden-background-work',
|
|
759
|
-
blocked: ['
|
|
691
|
+
blocked: ['hidden-agent-jobs', 'implicit-delegated-review', 'untracked-local-schedulers'],
|
|
760
692
|
modelRoute: blockedConnectedHostModelRoute(),
|
|
761
693
|
harnessRoute: 'agent_harness mode:"connected_host_capability"',
|
|
762
694
|
modelAccess: {
|
|
763
|
-
inspectCapability: '
|
|
764
|
-
|
|
765
|
-
liveStatus: '
|
|
766
|
-
operate: '
|
|
695
|
+
inspectCapability: 'host action:"capability"',
|
|
696
|
+
allowedAutonomy: 'agent tool spawn/batch-spawn, schedules, automation jobs, or confirmed delegation with visible status/cancel routes',
|
|
697
|
+
liveStatus: 'host action:"status"',
|
|
698
|
+
operate: 'use a visible autonomy route',
|
|
767
699
|
},
|
|
768
|
-
reason: '
|
|
700
|
+
reason: 'Autonomy is allowed when it is visible, statused, and cancellable. Hidden jobs are blocked.',
|
|
769
701
|
},
|
|
770
702
|
{
|
|
771
703
|
id: 'arbitrary-connected-host-mutations',
|
|
772
|
-
|
|
773
|
-
modelRoute:
|
|
704
|
+
confirmationGated: ['route-discovery-mutation', 'account-creation', 'automation-definition-creation'],
|
|
705
|
+
modelRoute: 'agent_operator_method',
|
|
774
706
|
harnessRoute: 'agent_harness mode:"connected_host_capability"',
|
|
775
707
|
modelAccess: {
|
|
776
|
-
inspectCapability: '
|
|
777
|
-
allowedActions: 'agent_operator_action for
|
|
778
|
-
liveStatus: '
|
|
779
|
-
operate: '
|
|
708
|
+
inspectCapability: 'host action:"capability"',
|
|
709
|
+
allowedActions: 'agent_operator_action for simple allowlisted mutations or agent_operator_method for exact confirmed daemon contract methods',
|
|
710
|
+
liveStatus: 'host action:"status"',
|
|
711
|
+
operate: 'agent_operator_method with confirm:true and explicitUserRequest',
|
|
780
712
|
},
|
|
781
|
-
reason: '
|
|
713
|
+
reason: 'Daemon mutations must resolve to a documented SDK operator method and carry explicit user authorization.',
|
|
782
714
|
},
|
|
783
715
|
];
|
|
784
716
|
}
|
|
785
717
|
|
|
786
718
|
export function settingsPolicySummary(): Record<string, unknown> {
|
|
787
719
|
return {
|
|
788
|
-
discovery: 'Use
|
|
789
|
-
mutation: 'Use
|
|
720
|
+
discovery: 'Use settings action:"list" for the setting catalog and action:"get" with key, target, or query for one setting. Hidden/scriptable settings require includeHidden:true unless the exact key is supplied.',
|
|
721
|
+
mutation: 'Use settings action:"set" or action:"reset" with key, target, or query plus confirm:true and explicitUserRequest; ambiguous setting lookups are refused.',
|
|
790
722
|
secretHandling: 'Raw secret values are persisted through the secret manager; config receives only a secret reference and tool output is redacted.',
|
|
791
723
|
writablePolicy: 'Each setting descriptor includes writable, visibleInWorkspace, and lockReason when applicable.',
|
|
792
|
-
|
|
724
|
+
protectedRawDangerKeys: ['danger.daemon', 'danger.httpListener'],
|
|
793
725
|
};
|
|
794
726
|
}
|