@pellux/goodvibes-agent 1.0.30 → 1.0.33

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 (63) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/README.md +7 -5
  3. package/dist/package/main.js +7323 -2268
  4. package/docs/README.md +2 -2
  5. package/docs/channels-remote-and-api.md +6 -2
  6. package/docs/connected-host.md +26 -5
  7. package/docs/getting-started.md +30 -10
  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 +20 -8
  13. package/package.json +8 -3
  14. package/release/live-verification/live-verification.json +148 -0
  15. package/release/live-verification/live-verification.md +187 -0
  16. package/release/performance-snapshot.json +57 -0
  17. package/release/release-notes.md +28 -0
  18. package/release/release-readiness.json +581 -0
  19. package/src/cli/agent-knowledge-command.ts +5 -5
  20. package/src/cli/agent-knowledge-format.ts +11 -0
  21. package/src/cli/agent-knowledge-runtime.ts +92 -13
  22. package/src/cli/bundle-command.ts +5 -4
  23. package/src/cli/entrypoint.ts +5 -2
  24. package/src/cli/external-runtime.ts +2 -15
  25. package/src/cli/management.ts +4 -3
  26. package/src/input/commands/guidance-runtime.ts +1 -1
  27. package/src/input/commands/knowledge.ts +2 -2
  28. package/src/runtime/bootstrap.ts +2 -2
  29. package/src/runtime/connected-host-auth.ts +16 -0
  30. package/src/tools/agent-channel-send-tool.ts +5 -7
  31. package/src/tools/agent-harness-channel-metadata.ts +177 -0
  32. package/src/tools/agent-harness-connected-host-status.ts +1 -1
  33. package/src/tools/agent-harness-delegation-posture.ts +216 -0
  34. package/src/tools/agent-harness-keybinding-metadata.ts +57 -22
  35. package/src/tools/agent-harness-mcp-metadata.ts +246 -0
  36. package/src/tools/agent-harness-media-posture.ts +282 -0
  37. package/src/tools/agent-harness-metadata.ts +21 -4
  38. package/src/tools/agent-harness-model-routing.ts +501 -0
  39. package/src/tools/agent-harness-notification-metadata.ts +217 -0
  40. package/src/tools/agent-harness-operator-methods.ts +285 -0
  41. package/src/tools/agent-harness-pairing-posture.ts +265 -0
  42. package/src/tools/agent-harness-provider-account-metadata.ts +203 -0
  43. package/src/tools/agent-harness-release-evidence.ts +364 -0
  44. package/src/tools/agent-harness-release-readiness.ts +298 -0
  45. package/src/tools/agent-harness-security-posture.ts +646 -0
  46. package/src/tools/agent-harness-service-posture.ts +201 -0
  47. package/src/tools/agent-harness-session-metadata.ts +282 -0
  48. package/src/tools/agent-harness-setup-posture.ts +295 -0
  49. package/src/tools/agent-harness-tool-schema.ts +103 -27
  50. package/src/tools/agent-harness-tool.ts +209 -236
  51. package/src/tools/agent-harness-ui-surface-metadata.ts +1 -1
  52. package/src/tools/agent-harness-workspace-actions.ts +232 -0
  53. package/src/tools/agent-knowledge-ingest-tool.ts +6 -8
  54. package/src/tools/agent-knowledge-tool.ts +122 -23
  55. package/src/tools/agent-local-registry-tool.ts +4 -5
  56. package/src/tools/agent-media-generate-tool.ts +4 -6
  57. package/src/tools/agent-notify-tool.ts +5 -6
  58. package/src/tools/agent-operator-action-tool.ts +6 -8
  59. package/src/tools/agent-operator-briefing-tool.ts +3 -4
  60. package/src/tools/agent-reminder-schedule-tool.ts +6 -7
  61. package/src/tools/agent-tool-policy-guard.ts +8 -17
  62. package/src/tools/agent-work-plan-tool.ts +3 -4
  63. 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
+ policy: {
182
+ effect: 'read-only',
183
+ values: 'Setup posture returns onboarding readiness, counts, safe setting keys, and route metadata only; secret values and raw provider tokens are never returned.',
184
+ 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.',
185
+ },
186
+ ...(options.includeParameters ? {
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',
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,22 @@ 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',
9
21
  ] as const;
10
22
 
11
23
  const KEY_COMBO_PARAMETER_SCHEMA = {
@@ -19,53 +31,101 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
19
31
  mode: {
20
32
  type: 'string',
21
33
  enum: AGENT_HARNESS_MODES,
22
- description: 'Harness operation to perform.',
34
+ description: 'Harness operation. Start with summary or a plural catalog mode.',
23
35
  },
24
36
  query: {
25
37
  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.',
38
+ description: 'Catalog search text or single-item lookup text.',
27
39
  },
28
40
  command: {
29
41
  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".',
42
+ description: 'Slash command string, or CLI command string in cli_command mode.',
31
43
  },
32
44
  cliCommand: {
33
45
  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.',
46
+ description: 'Top-level CLI command string for cli_command inspection.',
35
47
  },
36
48
  commandName: {
37
49
  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.',
50
+ description: 'Slash command root or top-level CLI command token.',
39
51
  },
40
52
  args: {
41
53
  type: 'array',
42
54
  items: { type: 'string' },
43
- description: 'Slash command argument tokens for mode run_command when commandName is used.',
55
+ description: 'Arguments for run_command when commandName is used.',
56
+ },
57
+ channelId: {
58
+ type: 'string',
59
+ description: 'Channel id for channel mode.',
60
+ },
61
+ notificationTargetId: {
62
+ type: 'string',
63
+ description: 'Notification target id for notification_target mode.',
64
+ },
65
+ providerId: {
66
+ type: 'string',
67
+ description: 'Provider id for provider_account mode.',
68
+ },
69
+ mcpServerId: {
70
+ type: 'string',
71
+ description: 'MCP server id for mcp_server mode.',
72
+ },
73
+ setupItemId: {
74
+ type: 'string',
75
+ description: 'Setup item id for setup_item mode.',
76
+ },
77
+ modelRouteId: {
78
+ type: 'string',
79
+ description: 'Model route id or model key for model_route mode.',
80
+ },
81
+ pairingRouteId: {
82
+ type: 'string',
83
+ description: 'Pairing route id for pairing_route mode.',
84
+ },
85
+ delegationRouteId: {
86
+ type: 'string',
87
+ description: 'Delegation route id for delegation_route mode.',
88
+ },
89
+ findingId: {
90
+ type: 'string',
91
+ description: 'Security finding id for security_finding mode.',
92
+ },
93
+ bundlePath: {
94
+ type: 'string',
95
+ description: 'Workspace-relative bundle JSON path for support_bundle mode.',
96
+ },
97
+ mediaProviderId: {
98
+ type: 'string',
99
+ description: 'Voice or media provider id for media_provider mode.',
100
+ },
101
+ sessionId: {
102
+ type: 'string',
103
+ description: 'Saved session id for session mode.',
44
104
  },
45
105
  categoryId: {
46
106
  type: 'string',
47
- description: 'Agent workspace category id for workspace action filtering or ui surface routing.',
107
+ description: 'Workspace category id.',
48
108
  },
49
109
  surfaceId: {
50
110
  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.',
111
+ description: 'UI surface id for ui_surface or open_ui_surface modes.',
52
112
  },
53
113
  panelId: {
54
114
  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.',
115
+ description: 'Built-in panel id for panel or open_panel modes.',
56
116
  },
57
117
  actionId: {
58
118
  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.',
119
+ description: 'Workspace action id or keybinding action id.',
60
120
  },
61
121
  fields: {
62
122
  type: 'object',
63
123
  additionalProperties: { type: 'string' },
64
- description: 'Field values for run_workspace_action when the workspace action opens an editor form.',
124
+ description: 'Editor field values for run_workspace_action.',
65
125
  },
66
126
  combo: {
67
127
  ...KEY_COMBO_PARAMETER_SCHEMA,
68
- description: 'Single key combo for set_keybinding, for example { "key": "g", "ctrl": true }.',
128
+ description: 'Single key combo for set_keybinding.',
69
129
  },
70
130
  combos: {
71
131
  type: 'array',
@@ -74,11 +134,11 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
74
134
  },
75
135
  recordId: {
76
136
  type: 'string',
77
- description: 'Selected Agent-local record id for selection-based local workspace operations.',
137
+ description: 'Selected Agent-local record id.',
78
138
  },
79
139
  key: {
80
140
  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.',
141
+ description: 'Agent setting key.',
82
142
  },
83
143
  value: {
84
144
  anyOf: [
@@ -86,23 +146,39 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
86
146
  { type: 'number' },
87
147
  { type: 'boolean' },
88
148
  ],
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.',
149
+ description: 'Setting value, or visible search text for shortcut routes.',
90
150
  },
91
151
  target: {
92
152
  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.',
153
+ description: 'Generic lookup target for single-item modes.',
154
+ },
155
+ methodId: {
156
+ type: 'string',
157
+ description: 'Public operator or Agent Knowledge method id.',
158
+ },
159
+ endpointId: {
160
+ type: 'string',
161
+ description: 'Connected service endpoint id.',
162
+ },
163
+ artifactId: {
164
+ type: 'string',
165
+ description: 'Release evidence artifact id.',
166
+ },
167
+ itemId: {
168
+ type: 'string',
169
+ description: 'Release readiness item id for mode release_readiness_item.',
94
170
  },
95
171
  capabilityId: {
96
172
  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.',
173
+ description: 'Connected-host capability id.',
98
174
  },
99
175
  toolName: {
100
176
  type: 'string',
101
- description: 'First-class model tool name for mode tool, such as agent_harness or agent_local_registry.',
177
+ description: 'First-class model tool name.',
102
178
  },
103
179
  category: {
104
180
  type: 'string',
105
- description: 'Setting category filter such as provider, behavior, tools, ui, tts, permissions, automation, or surfaces.',
181
+ description: 'Setting category filter.',
106
182
  },
107
183
  prefix: {
108
184
  type: 'string',
@@ -110,11 +186,11 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
110
186
  },
111
187
  includeHidden: {
112
188
  type: 'boolean',
113
- description: 'Include settings hidden from the Agent workspace because they are host-owned or non-Agent lifecycle settings.',
189
+ description: 'Include hidden settings in settings mode.',
114
190
  },
115
191
  includeParameters: {
116
192
  type: 'boolean',
117
- description: 'Include model tool JSON schemas in tools mode, or workspace editor field schemas in workspace_actions mode.',
193
+ description: 'Include optional detail for discovery modes.',
118
194
  },
119
195
  limit: {
120
196
  type: 'number',
@@ -123,14 +199,14 @@ export const AGENT_HARNESS_PARAMETER_PROPERTIES = {
123
199
  pane: {
124
200
  type: 'string',
125
201
  enum: ['top', 'bottom'],
126
- description: 'Preferred panel pane for open_panel when the current shell supports panel routing.',
202
+ description: 'Preferred pane for open_panel.',
127
203
  },
128
204
  confirm: {
129
205
  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.',
206
+ description: 'Required true for confirmed harness effects.',
131
207
  },
132
208
  explicitUserRequest: {
133
209
  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.',
210
+ description: 'User request authorizing a confirmed harness effect.',
135
211
  },
136
212
  } as const;