@pellux/goodvibes-agent 1.0.31 → 1.0.34

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.
Files changed (74) hide show
  1. package/CHANGELOG.md +59 -2
  2. package/README.md +72 -58
  3. package/dist/package/main.js +7572 -2430
  4. package/docs/README.md +25 -21
  5. package/docs/channels-remote-and-api.md +6 -2
  6. package/docs/connected-host.md +27 -6
  7. package/docs/getting-started.md +87 -66
  8. package/docs/knowledge-artifacts-and-multimodal.md +16 -4
  9. package/docs/project-planning.md +2 -2
  10. package/docs/providers-and-routing.md +3 -2
  11. package/docs/release-and-publishing.md +15 -11
  12. package/docs/tools-and-commands.md +150 -128
  13. package/docs/voice-and-live-tts.md +1 -1
  14. package/package.json +8 -3
  15. package/release/live-verification/live-verification.json +148 -0
  16. package/release/live-verification/live-verification.md +187 -0
  17. package/release/performance-snapshot.json +57 -0
  18. package/release/release-notes.md +19 -0
  19. package/release/release-readiness.json +581 -0
  20. package/src/agent/harness-control.ts +42 -3
  21. package/src/cli/agent-knowledge-command.ts +5 -5
  22. package/src/cli/agent-knowledge-format.ts +11 -0
  23. package/src/cli/agent-knowledge-runtime.ts +92 -13
  24. package/src/cli/bundle-command.ts +5 -4
  25. package/src/cli/entrypoint.ts +5 -2
  26. package/src/cli/external-runtime.ts +2 -15
  27. package/src/cli/management.ts +4 -3
  28. package/src/input/commands/guidance-runtime.ts +1 -1
  29. package/src/input/commands/knowledge.ts +2 -2
  30. package/src/runtime/bootstrap.ts +10 -18
  31. package/src/runtime/connected-host-auth.ts +16 -0
  32. package/src/tools/agent-analysis-registry-policy.ts +2 -9
  33. package/src/tools/agent-channel-send-tool.ts +3 -9
  34. package/src/tools/agent-context-policy.ts +1 -5
  35. package/src/tools/agent-find-policy.ts +1 -4
  36. package/src/tools/agent-harness-channel-metadata.ts +177 -0
  37. package/src/tools/agent-harness-cli-metadata.ts +4 -1
  38. package/src/tools/agent-harness-command-catalog.ts +10 -3
  39. package/src/tools/agent-harness-connected-host-status.ts +9 -3
  40. package/src/tools/agent-harness-delegation-posture.ts +216 -0
  41. package/src/tools/agent-harness-keybinding-metadata.ts +57 -22
  42. package/src/tools/agent-harness-mcp-metadata.ts +248 -0
  43. package/src/tools/agent-harness-media-posture.ts +282 -0
  44. package/src/tools/agent-harness-metadata.ts +44 -9
  45. package/src/tools/agent-harness-model-routing.ts +501 -0
  46. package/src/tools/agent-harness-model-tool-catalog.ts +7 -2
  47. package/src/tools/agent-harness-notification-metadata.ts +217 -0
  48. package/src/tools/agent-harness-operator-methods.ts +285 -0
  49. package/src/tools/agent-harness-pairing-posture.ts +265 -0
  50. package/src/tools/agent-harness-panel-metadata.ts +26 -12
  51. package/src/tools/agent-harness-provider-account-metadata.ts +205 -0
  52. package/src/tools/agent-harness-release-evidence.ts +364 -0
  53. package/src/tools/agent-harness-release-readiness.ts +298 -0
  54. package/src/tools/agent-harness-security-posture.ts +648 -0
  55. package/src/tools/agent-harness-service-posture.ts +207 -0
  56. package/src/tools/agent-harness-session-metadata.ts +284 -0
  57. package/src/tools/agent-harness-setup-posture.ts +295 -0
  58. package/src/tools/agent-harness-tool-schema.ts +104 -27
  59. package/src/tools/agent-harness-tool.ts +251 -235
  60. package/src/tools/agent-harness-ui-surface-metadata.ts +20 -12
  61. package/src/tools/agent-harness-workspace-actions.ts +260 -0
  62. package/src/tools/agent-knowledge-ingest-tool.ts +4 -10
  63. package/src/tools/agent-knowledge-tool.ts +120 -25
  64. package/src/tools/agent-local-registry-tool.ts +3 -7
  65. package/src/tools/agent-media-generate-tool.ts +2 -8
  66. package/src/tools/agent-notify-tool.ts +3 -8
  67. package/src/tools/agent-operator-action-tool.ts +4 -10
  68. package/src/tools/agent-operator-briefing-tool.ts +1 -6
  69. package/src/tools/agent-read-policy.ts +1 -4
  70. package/src/tools/agent-reminder-schedule-tool.ts +4 -9
  71. package/src/tools/agent-tool-policy-guard.ts +15 -51
  72. package/src/tools/agent-web-search-policy.ts +1 -4
  73. package/src/tools/agent-work-plan-tool.ts +1 -6
  74. package/src/version.ts +2 -2
@@ -0,0 +1,295 @@
1
+ import type { OnboardingStep1CapabilityItem, OnboardingSurfaceRecord } from '../runtime/onboarding/index.ts';
2
+ import { collectOnboardingSnapshot, deriveStep1Capabilities, deriveStep1CapabilityFlags } from '../runtime/onboarding/index.ts';
3
+ import type { CommandContext } from '../input/command-registry.ts';
4
+ import { buildProviderAccountSnapshot } from '../panels/provider-account-snapshot.ts';
5
+ import { requireLocalUserAuthManager, requirePlatform, requireProvider, requireSecretsManager, requireServiceRegistry, requireShellPaths, requireSubscriptionManager } from '../input/commands/runtime-services.ts';
6
+
7
+ export interface AgentHarnessSetupArgs {
8
+ readonly setupItemId?: unknown;
9
+ readonly target?: unknown;
10
+ readonly query?: unknown;
11
+ readonly includeParameters?: unknown;
12
+ readonly limit?: unknown;
13
+ }
14
+
15
+ type SetupResolution =
16
+ | { readonly status: 'found'; readonly item: Record<string, unknown> }
17
+ | { readonly status: 'ambiguous'; readonly input: string; readonly candidates: readonly Record<string, unknown>[] }
18
+ | { readonly status: 'missing_lookup'; readonly usage: string };
19
+
20
+ type SetupLookupSource = 'setupItemId' | 'target' | 'query';
21
+
22
+ interface SurfaceRegistryLike {
23
+ syncConfiguredSurfaces(): readonly OnboardingSurfaceRecord[];
24
+ }
25
+
26
+ function readString(value: unknown): string {
27
+ return typeof value === 'string' ? value.trim() : '';
28
+ }
29
+
30
+ function readLimit(value: unknown, fallback: number): number {
31
+ const parsed = typeof value === 'string' && value.trim() ? Number(value) : value;
32
+ if (typeof parsed !== 'number' || !Number.isFinite(parsed)) return fallback;
33
+ return Math.max(1, Math.min(500, Math.trunc(parsed)));
34
+ }
35
+
36
+ function safeIso(value: number | null | undefined): string | null {
37
+ if (typeof value !== 'number' || !Number.isFinite(value)) return null;
38
+ return new Date(value).toISOString();
39
+ }
40
+
41
+ function surfaceRegistry(context: CommandContext): SurfaceRegistryLike | undefined {
42
+ const candidate = (context.platform as { readonly surfaceRegistry?: unknown }).surfaceRegistry;
43
+ if (candidate && typeof candidate === 'object' && 'syncConfiguredSurfaces' in candidate) {
44
+ return candidate as SurfaceRegistryLike;
45
+ }
46
+ return undefined;
47
+ }
48
+
49
+ async function collectSnapshot(context: CommandContext) {
50
+ const registry = surfaceRegistry(context);
51
+ return await collectOnboardingSnapshot({
52
+ config: requirePlatform(context).configManager,
53
+ shellPaths: requireShellPaths(context),
54
+ acknowledgementScope: 'project',
55
+ subscriptions: requireSubscriptionManager(context),
56
+ secrets: requireSecretsManager(context),
57
+ auth: requireLocalUserAuthManager(context),
58
+ services: requireServiceRegistry(context),
59
+ ...(registry ? {
60
+ surfaces: {
61
+ list: () => registry.syncConfiguredSurfaces(),
62
+ },
63
+ } : {}),
64
+ providerAccounts: {
65
+ loadSnapshot: () => buildProviderAccountSnapshot({
66
+ providerModels: requireProvider(context).providerRegistry,
67
+ services: requireServiceRegistry(context),
68
+ subscriptions: requireSubscriptionManager(context),
69
+ environment: {
70
+ hasEnvironmentVariable: (name: string) => Boolean(process.env[name]),
71
+ },
72
+ }),
73
+ },
74
+ });
75
+ }
76
+
77
+ function lookupFromArgs(args: AgentHarnessSetupArgs): { readonly source: SetupLookupSource; readonly input: string } | null {
78
+ const setupItemId = readString(args.setupItemId);
79
+ if (setupItemId) return { source: 'setupItemId', input: setupItemId };
80
+ const target = readString(args.target);
81
+ if (target) return { source: 'target', input: target };
82
+ const query = readString(args.query);
83
+ return query ? { source: 'query', input: query } : null;
84
+ }
85
+
86
+ function itemSearchText(item: OnboardingStep1CapabilityItem): string {
87
+ return [
88
+ item.id,
89
+ item.label,
90
+ item.detail,
91
+ item.selected ? 'selected ready configured enabled' : 'optional attention unselected',
92
+ ].join('\n').toLowerCase();
93
+ }
94
+
95
+ function summarizeLocalBehavior(snapshot: Awaited<ReturnType<typeof collectSnapshot>>): Record<string, unknown> {
96
+ const discovery = snapshot.localBehaviorDiscovery;
97
+ return {
98
+ personas: discovery.personas,
99
+ skills: discovery.skills,
100
+ routines: discovery.routines,
101
+ };
102
+ }
103
+
104
+ function signalsForItem(
105
+ item: OnboardingStep1CapabilityItem,
106
+ snapshot: Awaited<ReturnType<typeof collectSnapshot>>,
107
+ ): Record<string, unknown> {
108
+ if (item.id === 'provider-access') {
109
+ return {
110
+ currentRoute: snapshot.providerRouting,
111
+ providerAccounts: {
112
+ providers: snapshot.providerAccounts?.providers.length ?? 0,
113
+ configured: snapshot.providerAccounts?.configuredCount ?? 0,
114
+ issues: snapshot.providerAccounts?.issueCount ?? 0,
115
+ },
116
+ subscriptions: {
117
+ active: snapshot.subscriptions.active.length,
118
+ pending: snapshot.subscriptions.pending.length,
119
+ activeProviderIds: snapshot.subscriptions.activeProviderIds,
120
+ pendingProviderIds: snapshot.subscriptions.pendingProviderIds,
121
+ },
122
+ credentialReferences: snapshot.secrets.records.length,
123
+ };
124
+ }
125
+ if (item.id === 'local-behavior') {
126
+ return summarizeLocalBehavior(snapshot);
127
+ }
128
+ if (item.id === 'communication-channels') {
129
+ return {
130
+ configuredEnabledKinds: snapshot.surfaces.configuredEnabledKinds,
131
+ surfaces: snapshot.surfaces.records.map((surface) => ({
132
+ id: surface.id,
133
+ kind: surface.kind,
134
+ label: surface.label,
135
+ enabled: surface.enabled,
136
+ state: surface.state,
137
+ capabilities: surface.capabilities,
138
+ })),
139
+ };
140
+ }
141
+ if (item.id === 'automation-review') {
142
+ return {
143
+ permissionsMode: snapshot.runtimeDefaults.permissionsMode,
144
+ helperEnabled: snapshot.providerRouting.helperEnabled,
145
+ toolLlmEnabled: snapshot.providerRouting.toolLlmEnabled,
146
+ };
147
+ }
148
+ if (item.id === 'operator-terminal') {
149
+ return {
150
+ display: snapshot.runtimeDefaults.display,
151
+ setupMarker: {
152
+ scope: snapshot.acknowledgements.scope,
153
+ exists: snapshot.acknowledgements.exists,
154
+ updatedAt: safeIso(snapshot.acknowledgements.updatedAt),
155
+ source: snapshot.acknowledgements.source,
156
+ mode: snapshot.acknowledgements.mode ?? null,
157
+ },
158
+ collectionIssues: snapshot.collectionIssues,
159
+ };
160
+ }
161
+ return {
162
+ status: item.selected ? 'covered' : 'available',
163
+ };
164
+ }
165
+
166
+ function describeItem(
167
+ item: OnboardingStep1CapabilityItem,
168
+ snapshot: Awaited<ReturnType<typeof collectSnapshot>>,
169
+ options: {
170
+ readonly includeParameters?: boolean;
171
+ readonly lookup?: Record<string, unknown>;
172
+ } = {},
173
+ ): Record<string, unknown> {
174
+ return {
175
+ setupItemId: item.id,
176
+ label: item.label,
177
+ selected: item.selected,
178
+ detail: item.detail,
179
+ signals: signalsForItem(item, snapshot),
180
+ ...(options.lookup ? { lookup: options.lookup } : {}),
181
+ ...(options.includeParameters ? {
182
+ policy: {
183
+ effect: 'read-only',
184
+ values: 'Setup posture returns onboarding readiness, counts, safe setting keys, and route metadata only; secret values and raw provider tokens are never returned.',
185
+ mutation: 'Setup apply, provider auth, local behavior import/create, channel delivery, and starter profile changes stay visible workspace, settings, slash-command, or first-class tool flows.',
186
+ },
187
+ modelAccess: {
188
+ inspectSetup: 'agent_harness mode:"setup_posture"',
189
+ inspectSetupItem: 'agent_harness mode:"setup_item"',
190
+ openOnboarding: 'agent_harness mode:"open_ui_surface" surfaceId:"onboarding" confirm:true explicitUserRequest:"..."',
191
+ setupWorkspace: 'agent_harness mode:"workspace_action" target:"setup"',
192
+ settings: 'agent_harness modes settings/get_setting/set_setting/reset_setting',
193
+ providerRouting: 'agent_harness mode:"model_routing"',
194
+ providerAccounts: 'agent_harness mode:"provider_accounts"',
195
+ channels: 'agent_harness mode:"channels"',
196
+ media: 'agent_harness mode:"media_posture"',
197
+ security: 'agent_harness mode:"security_posture"',
198
+ },
199
+ } : {}),
200
+ };
201
+ }
202
+
203
+ function describeCandidate(item: OnboardingStep1CapabilityItem): Record<string, unknown> {
204
+ return {
205
+ setupItemId: item.id,
206
+ label: item.label,
207
+ selected: item.selected,
208
+ };
209
+ }
210
+
211
+ export async function setupPostureCatalogStatus(context: CommandContext): Promise<Record<string, unknown>> {
212
+ const snapshot = await collectSnapshot(context);
213
+ return {
214
+ modes: ['setup_posture', 'setup_item'],
215
+ capabilities: deriveStep1Capabilities(snapshot).length,
216
+ collectionIssues: snapshot.collectionIssues.length,
217
+ setupMarkerExists: snapshot.acknowledgements.exists,
218
+ readOnly: true,
219
+ };
220
+ }
221
+
222
+ export async function setupPostureSummary(context: CommandContext, args: AgentHarnessSetupArgs): Promise<Record<string, unknown>> {
223
+ const snapshot = await collectSnapshot(context);
224
+ const query = readString(args.query).toLowerCase();
225
+ const includeParameters = args.includeParameters === true;
226
+ const all = deriveStep1Capabilities(snapshot);
227
+ const filtered = all
228
+ .filter((item) => !query || itemSearchText(item).includes(query))
229
+ .slice(0, readLimit(args.limit, 100));
230
+ return {
231
+ capturedAt: new Date(snapshot.capturedAt).toISOString(),
232
+ setupMarker: {
233
+ scope: snapshot.acknowledgements.scope,
234
+ exists: snapshot.acknowledgements.exists,
235
+ updatedAt: safeIso(snapshot.acknowledgements.updatedAt),
236
+ source: snapshot.acknowledgements.source,
237
+ mode: snapshot.acknowledgements.mode ?? null,
238
+ acceptedCount: Object.values(snapshot.acknowledgements.accepted).filter(Boolean).length,
239
+ },
240
+ summary: {
241
+ capabilities: all.length,
242
+ selectedCapabilities: all.filter((item) => item.selected).length,
243
+ collectionIssues: snapshot.collectionIssues.length,
244
+ services: snapshot.services.total,
245
+ oauthProviders: snapshot.services.oauthProviderIds.length,
246
+ subscriptionSessions: snapshot.subscriptions.active.length,
247
+ pendingSubscriptionSessions: snapshot.subscriptions.pending.length,
248
+ providerAccounts: snapshot.providerAccounts?.providers.length ?? 0,
249
+ providerAccountIssues: snapshot.providerAccounts?.issueCount ?? 0,
250
+ secretsStoredKeys: snapshot.secrets.review.storedKeys,
251
+ secretRecordCount: snapshot.secrets.records.length,
252
+ authUsers: snapshot.auth.snapshot.userCount,
253
+ authSessions: snapshot.auth.snapshot.sessionCount,
254
+ enabledSurfaceKinds: snapshot.surfaces.configuredEnabledKinds.length,
255
+ localBehavior: summarizeLocalBehavior(snapshot),
256
+ capabilityFlags: deriveStep1CapabilityFlags(snapshot),
257
+ },
258
+ currentRoute: snapshot.providerRouting,
259
+ issues: snapshot.collectionIssues,
260
+ capabilities: filtered.map((item) => describeItem(item, snapshot, { includeParameters })),
261
+ returned: filtered.length,
262
+ total: all.length,
263
+ policy: 'Read-only setup/onboarding posture. Apply, import, auth, profile, channel, and setting mutations remain confirmation-gated through visible workspace, settings, slash-command, or first-class tool flows.',
264
+ };
265
+ }
266
+
267
+ export async function describeHarnessSetupItem(context: CommandContext, args: AgentHarnessSetupArgs): Promise<SetupResolution> {
268
+ const lookup = lookupFromArgs(args);
269
+ if (!lookup) {
270
+ return {
271
+ status: 'missing_lookup',
272
+ usage: 'setup_item requires setupItemId, target, or query. Use mode:"setup_posture" to inspect setup item ids.',
273
+ };
274
+ }
275
+ const snapshot = await collectSnapshot(context);
276
+ const items = deriveStep1Capabilities(snapshot);
277
+ const normalized = lookup.input.toLowerCase();
278
+ const exact = items.find((item) => item.id === lookup.input);
279
+ if (exact) return { status: 'found', item: describeItem(exact, snapshot, { includeParameters: true, lookup: { ...lookup, resolvedBy: 'id' } }) };
280
+ const insensitive = items.find((item) => item.id.toLowerCase() === normalized);
281
+ if (insensitive) return { status: 'found', item: describeItem(insensitive, snapshot, { includeParameters: true, lookup: { ...lookup, resolvedBy: 'case-insensitive-id' } }) };
282
+ const searched = items.filter((item) => itemSearchText(item).includes(normalized));
283
+ if (searched.length === 1) return { status: 'found', item: describeItem(searched[0]!, snapshot, { includeParameters: true, lookup: { ...lookup, resolvedBy: 'search' } }) };
284
+ if (searched.length > 1) {
285
+ return {
286
+ status: 'ambiguous',
287
+ input: lookup.input,
288
+ candidates: searched.slice(0, 8).map(describeCandidate),
289
+ };
290
+ }
291
+ return {
292
+ status: 'missing_lookup',
293
+ usage: `Unknown setup item ${lookup.input}. Use mode:"setup_posture" to inspect setup item ids.`,
294
+ };
295
+ }
@@ -2,10 +2,23 @@ export const AGENT_HARNESS_MODES = [
2
2
  'summary', 'cli_commands', 'cli_command', 'panels', 'panel', 'open_panel',
3
3
  'ui_surfaces', 'ui_surface', 'open_ui_surface',
4
4
  'shortcuts', 'keybindings', 'keybinding', 'run_keybinding', 'set_keybinding', 'reset_keybinding',
5
- 'commands', 'command', 'run_command', 'settings', 'get_setting', 'set_setting',
5
+ 'commands', 'command', 'run_command', 'channels', 'channel', 'notifications', 'notification_target',
6
+ 'provider_accounts', 'provider_account', 'mcp_servers', 'mcp_server',
7
+ 'setup_posture', 'setup_item',
8
+ 'model_routing', 'model_route',
9
+ 'pairing_posture', 'pairing_route',
10
+ 'delegation_posture', 'delegation_route',
11
+ 'security_posture', 'security_finding', 'support_bundles', 'support_bundle',
12
+ 'media_posture', 'media_provider',
13
+ 'sessions', 'session',
14
+ 'settings', 'get_setting', 'set_setting',
6
15
  'reset_setting', 'workspace', 'workspace_categories', 'workspace_actions',
7
- 'workspace_action', 'run_workspace_action', 'tools', 'tool', 'connected_host', 'connected_host_status',
8
- 'connected_host_capability',
16
+ 'workspace_action', 'run_workspace_action', 'tools', 'tool', 'release_evidence', 'release_evidence_artifact',
17
+ 'release_readiness', 'release_readiness_item',
18
+ 'operator_methods', 'operator_method',
19
+ 'service_posture', 'service_endpoint',
20
+ 'connected_host', 'connected_host_status', 'connected_host_capability',
21
+ 'daemon', 'daemon_status',
9
22
  ] as const;
10
23
 
11
24
  const KEY_COMBO_PARAMETER_SCHEMA = {
@@ -19,53 +32,101 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
19
32
  mode: {
20
33
  type: 'string',
21
34
  enum: AGENT_HARNESS_MODES,
22
- description: 'Harness operation to perform.',
35
+ description: 'Harness operation. Start with summary or a plural catalog mode.',
23
36
  },
24
37
  query: {
25
38
  type: 'string',
26
- description: 'Search text for slash-command, CLI mirror, panel, UI surface, keybinding, workspace action, model tool, setting, or connected-host capability catalogs; also lookup text for the matching single-item modes.',
39
+ description: 'Catalog search text or single-item lookup text.',
27
40
  },
28
41
  command: {
29
42
  type: 'string',
30
- description: 'Full slash command string for mode command, workspace_action/run_workspace_action lookup, or run_command, for example "/settings get provider.model". In cli_command mode this may also hold a top-level CLI string such as "goodvibes-agent status --json".',
43
+ description: 'Slash command string, or CLI command string in cli_command mode.',
31
44
  },
32
45
  cliCommand: {
33
46
  type: 'string',
34
- description: 'Top-level CLI command string for mode cli_command, for example "goodvibes-agent status --json" or "profiles list". target or query can also look up one CLI mirror when the exact command token is not known. This mode is read-only metadata/parse inspection.',
47
+ description: 'Top-level CLI command string for cli_command inspection.',
35
48
  },
36
49
  commandName: {
37
50
  type: 'string',
38
- description: 'Slash command root without the leading slash for mode command or run_command, or a top-level CLI command token for cli_command. run_command can also resolve one slash command by target or query when the lookup is unique.',
51
+ description: 'Slash command root or top-level CLI command token.',
39
52
  },
40
53
  args: {
41
54
  type: 'array',
42
55
  items: { type: 'string' },
43
- description: 'Slash command argument tokens for mode run_command when commandName is used.',
56
+ description: 'Arguments for run_command when commandName is used.',
57
+ },
58
+ channelId: {
59
+ type: 'string',
60
+ description: 'Channel id for channel mode.',
61
+ },
62
+ notificationTargetId: {
63
+ type: 'string',
64
+ description: 'Notification target id for notification_target mode.',
65
+ },
66
+ providerId: {
67
+ type: 'string',
68
+ description: 'Provider id for provider_account mode.',
69
+ },
70
+ mcpServerId: {
71
+ type: 'string',
72
+ description: 'MCP server id for mcp_server mode.',
73
+ },
74
+ setupItemId: {
75
+ type: 'string',
76
+ description: 'Setup item id for setup_item mode.',
77
+ },
78
+ modelRouteId: {
79
+ type: 'string',
80
+ description: 'Model route id or model key for model_route mode.',
81
+ },
82
+ pairingRouteId: {
83
+ type: 'string',
84
+ description: 'Pairing route id for pairing_route mode.',
85
+ },
86
+ delegationRouteId: {
87
+ type: 'string',
88
+ description: 'Delegation route id for delegation_route mode.',
89
+ },
90
+ findingId: {
91
+ type: 'string',
92
+ description: 'Security finding id for security_finding mode.',
93
+ },
94
+ bundlePath: {
95
+ type: 'string',
96
+ description: 'Workspace-relative bundle JSON path for support_bundle mode.',
97
+ },
98
+ mediaProviderId: {
99
+ type: 'string',
100
+ description: 'Voice or media provider id for media_provider mode.',
101
+ },
102
+ sessionId: {
103
+ type: 'string',
104
+ description: 'Saved session id for session mode.',
44
105
  },
45
106
  categoryId: {
46
107
  type: 'string',
47
- description: 'Agent workspace category id for workspace action filtering or ui surface routing.',
108
+ description: 'Workspace category id.',
48
109
  },
49
110
  surfaceId: {
50
111
  type: 'string',
51
- description: 'UI surface id for ui_surface or open_ui_surface modes. target or query can also look up one UI surface when the exact id is not known.',
112
+ description: 'UI surface id for ui_surface or open_ui_surface modes.',
52
113
  },
53
114
  panelId: {
54
115
  type: 'string',
55
- description: 'Built-in panel id for panel or open_panel modes. target or query can also look up one panel when the exact id is not known.',
116
+ description: 'Built-in panel id for panel or open_panel modes.',
56
117
  },
57
118
  actionId: {
58
119
  type: 'string',
59
- description: 'Agent workspace action id for workspace_action or run_workspace_action, or keybinding action id for keybinding/run_keybinding/set_keybinding/reset_keybinding. command, target, or query can also look up one workspace action; target or query can also look up one keybinding action.',
120
+ description: 'Workspace action id or keybinding action id.',
60
121
  },
61
122
  fields: {
62
123
  type: 'object',
63
124
  additionalProperties: { type: 'string' },
64
- description: 'Field values for run_workspace_action when the workspace action opens an editor form.',
125
+ description: 'Editor field values for run_workspace_action.',
65
126
  },
66
127
  combo: {
67
128
  ...KEY_COMBO_PARAMETER_SCHEMA,
68
- description: 'Single key combo for set_keybinding, for example { "key": "g", "ctrl": true }.',
129
+ description: 'Single key combo for set_keybinding.',
69
130
  },
70
131
  combos: {
71
132
  type: 'array',
@@ -74,11 +135,11 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
74
135
  },
75
136
  recordId: {
76
137
  type: 'string',
77
- description: 'Selected Agent-local record id for selection-based local workspace operations.',
138
+ description: 'Selected Agent-local record id.',
78
139
  },
79
140
  key: {
80
141
  type: 'string',
81
- description: 'Agent setting key for get_setting, set_setting, or reset_setting. target or query can also look up one setting when the exact key is not known.',
142
+ description: 'Agent setting key.',
82
143
  },
83
144
  value: {
84
145
  anyOf: [
@@ -86,23 +147,39 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
86
147
  { type: 'number' },
87
148
  { type: 'boolean' },
88
149
  ],
89
- description: 'Setting value for set_setting. Strings, booleans, numbers, and enum strings are accepted. In run_keybinding, value can provide visible search text for search/history-search shortcut routes.',
150
+ description: 'Setting value, or visible search text for shortcut routes.',
90
151
  },
91
152
  target: {
92
153
  type: 'string',
93
- description: 'Optional lookup target, such as a model-picker target, top-level CLI mirror/search text, panel id/search text, UI surface id/search text, workspace action id/search text, slash command root or invocation, setting key/search text, keybinding action/search text, model tool name/search text, or connected-host capability id/search text.',
154
+ description: 'Generic lookup target for single-item modes.',
155
+ },
156
+ methodId: {
157
+ type: 'string',
158
+ description: 'Public operator or Agent Knowledge method id.',
159
+ },
160
+ endpointId: {
161
+ type: 'string',
162
+ description: 'Connected service endpoint id.',
163
+ },
164
+ artifactId: {
165
+ type: 'string',
166
+ description: 'Release evidence artifact id.',
167
+ },
168
+ itemId: {
169
+ type: 'string',
170
+ description: 'Release readiness item id for mode release_readiness_item.',
94
171
  },
95
172
  capabilityId: {
96
173
  type: 'string',
97
- description: 'Connected-host allowed or blocked capability id for mode connected_host_capability, such as agent-knowledge-read or connected-host-lifecycle.',
174
+ description: 'Connected-host capability id.',
98
175
  },
99
176
  toolName: {
100
177
  type: 'string',
101
- description: 'First-class model tool name for mode tool, such as agent_harness or agent_local_registry.',
178
+ description: 'First-class model tool name.',
102
179
  },
103
180
  category: {
104
181
  type: 'string',
105
- description: 'Setting category filter such as provider, behavior, tools, ui, tts, permissions, automation, or surfaces.',
182
+ description: 'Setting category filter.',
106
183
  },
107
184
  prefix: {
108
185
  type: 'string',
@@ -110,11 +187,11 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
110
187
  },
111
188
  includeHidden: {
112
189
  type: 'boolean',
113
- description: 'Include settings hidden from the Agent workspace because they are host-owned or non-Agent lifecycle settings.',
190
+ description: 'Include hidden settings in settings mode.',
114
191
  },
115
192
  includeParameters: {
116
193
  type: 'boolean',
117
- description: 'Include model tool JSON schemas in tools mode, or workspace editor field schemas in workspace_actions mode.',
194
+ description: 'Include optional detail for discovery modes.',
118
195
  },
119
196
  limit: {
120
197
  type: 'number',
@@ -123,14 +200,14 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
123
200
  pane: {
124
201
  type: 'string',
125
202
  enum: ['top', 'bottom'],
126
- description: 'Preferred panel pane for open_panel when the current shell supports panel routing.',
203
+ description: 'Preferred pane for open_panel.',
127
204
  },
128
205
  confirm: {
129
206
  type: 'boolean',
130
- description: 'Required true for set_setting, reset_setting, run_keybinding, run_command, open_panel, open_ui_surface, and executable or mutating run_workspace_action calls after an explicit user request.',
207
+ description: 'Required true for confirmed harness effects.',
131
208
  },
132
209
  explicitUserRequest: {
133
210
  type: 'string',
134
- description: 'Exact user request or faithful short summary authorizing a setting mutation, keybinding change/action, harness UI routing, slash-command invocation, or workspace-action invocation.',
211
+ description: 'User request authorizing a confirmed harness effect.',
135
212
  },
136
213
  } as const;