@pellux/goodvibes-agent 1.0.34 → 1.0.36

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 (87) hide show
  1. package/CHANGELOG.md +28 -13
  2. package/README.md +11 -8
  3. package/dist/package/main.js +1592 -921
  4. package/docs/README.md +6 -5
  5. package/docs/channels-remote-and-api.md +3 -3
  6. package/docs/connected-host.md +3 -3
  7. package/docs/getting-started.md +20 -12
  8. package/docs/knowledge-artifacts-and-multimodal.md +9 -4
  9. package/docs/project-planning.md +3 -3
  10. package/docs/providers-and-routing.md +2 -2
  11. package/docs/release-and-publishing.md +8 -8
  12. package/docs/tools-and-commands.md +34 -17
  13. package/docs/voice-and-live-tts.md +1 -1
  14. package/package.json +1 -1
  15. package/release/live-verification/live-verification.json +15 -15
  16. package/release/live-verification/live-verification.md +19 -21
  17. package/release/release-notes.md +6 -6
  18. package/release/release-readiness.json +64 -64
  19. package/src/agent/harness-control.ts +35 -9
  20. package/src/agent/reminder-schedule-format.ts +2 -5
  21. package/src/agent/reminder-schedule.ts +4 -11
  22. package/src/agent/routine-schedule-format.ts +3 -6
  23. package/src/agent/routine-schedule-promotion.ts +5 -14
  24. package/src/agent/routine-schedule-receipts.ts +4 -9
  25. package/src/cli/agent-knowledge-command.ts +6 -11
  26. package/src/cli/agent-knowledge-format.ts +4 -9
  27. package/src/cli/agent-knowledge-runtime.ts +7 -14
  28. package/src/cli/external-runtime.ts +3 -46
  29. package/src/cli/help.ts +2 -2
  30. package/src/cli/status.ts +6 -7
  31. package/src/input/agent-workspace-categories.ts +23 -23
  32. package/src/input/agent-workspace-channels.ts +3 -3
  33. package/src/input/agent-workspace-operations-command-editors.ts +1 -1
  34. package/src/input/command-registry.ts +1 -1
  35. package/src/input/commands/compat-runtime.ts +1 -1
  36. package/src/input/commands/planning-runtime.ts +1 -1
  37. package/src/input/commands/runtime-services.ts +1 -1
  38. package/src/input/mcp-workspace.ts +1 -1
  39. package/src/input/submission-router.ts +1 -1
  40. package/src/panels/builtin/shared.ts +1 -1
  41. package/src/panels/project-planning-panel.ts +4 -4
  42. package/src/panels/qr-panel.ts +2 -2
  43. package/src/renderer/conversation-overlays.ts +1 -0
  44. package/src/runtime/bootstrap-command-parts.ts +1 -1
  45. package/src/runtime/bootstrap-core.ts +3 -1
  46. package/src/runtime/bootstrap-hook-bridge.ts +1 -1
  47. package/src/runtime/bootstrap-shell.ts +1 -1
  48. package/src/runtime/bootstrap.ts +7 -4
  49. package/src/runtime/context.ts +2 -2
  50. package/src/runtime/index.ts +88 -5
  51. package/src/runtime/store/state.ts +1 -1
  52. package/src/tools/agent-channel-send-tool.ts +1 -1
  53. package/src/tools/agent-harness-channel-metadata.ts +36 -25
  54. package/src/tools/agent-harness-cli-metadata.ts +19 -1
  55. package/src/tools/agent-harness-command-catalog.ts +15 -4
  56. package/src/tools/agent-harness-connected-host-status.ts +7 -6
  57. package/src/tools/agent-harness-delegation-posture.ts +15 -4
  58. package/src/tools/agent-harness-keybinding-metadata.ts +67 -16
  59. package/src/tools/agent-harness-mcp-metadata.ts +11 -3
  60. package/src/tools/agent-harness-media-posture.ts +25 -14
  61. package/src/tools/agent-harness-metadata.ts +140 -37
  62. package/src/tools/agent-harness-mode-catalog.ts +258 -0
  63. package/src/tools/agent-harness-model-routing.ts +18 -3
  64. package/src/tools/agent-harness-model-tool-catalog.ts +85 -7
  65. package/src/tools/agent-harness-notification-metadata.ts +30 -19
  66. package/src/tools/agent-harness-operator-methods.ts +15 -10
  67. package/src/tools/agent-harness-pairing-posture.ts +17 -5
  68. package/src/tools/agent-harness-panel-metadata.ts +10 -4
  69. package/src/tools/agent-harness-provider-account-metadata.ts +46 -35
  70. package/src/tools/agent-harness-release-evidence.ts +31 -3
  71. package/src/tools/agent-harness-release-readiness.ts +30 -0
  72. package/src/tools/agent-harness-security-posture.ts +18 -4
  73. package/src/tools/agent-harness-service-posture.ts +9 -2
  74. package/src/tools/agent-harness-session-metadata.ts +24 -8
  75. package/src/tools/agent-harness-setup-posture.ts +32 -21
  76. package/src/tools/agent-harness-text.ts +6 -0
  77. package/src/tools/agent-harness-tool-schema.ts +1 -1
  78. package/src/tools/agent-harness-tool.ts +38 -36
  79. package/src/tools/agent-harness-ui-surface-metadata.ts +105 -101
  80. package/src/tools/agent-harness-workspace-actions.ts +64 -3
  81. package/src/tools/agent-knowledge-ingest-tool.ts +1 -1
  82. package/src/tools/agent-knowledge-tool.ts +1 -1
  83. package/src/tools/agent-media-generate-tool.ts +2 -2
  84. package/src/tools/agent-notify-tool.ts +1 -1
  85. package/src/tools/agent-reminder-schedule-tool.ts +1 -1
  86. package/src/tools/tool-definition-compaction.ts +76 -0
  87. package/src/version.ts +2 -8
@@ -4,6 +4,8 @@ import { AGENT_WORKSPACE_CATEGORIES } from '../input/agent-workspace-categories.
4
4
  import { searchAgentWorkspaceActions } from '../input/agent-workspace-search.ts';
5
5
  import { buildAgentWorkspaceRuntimeSnapshot } from '../input/agent-workspace-snapshot.ts';
6
6
  import type { AgentWorkspaceAction, AgentWorkspaceCategory, AgentWorkspaceEditorKind, AgentWorkspaceLocalEditor, AgentWorkspaceLocalLibraryItem, AgentWorkspaceRuntimeSnapshot } from '../input/agent-workspace-types.ts';
7
+ import { parseSlashCommand } from '../input/slash-command-parser.ts';
8
+ import { describeCommandPolicy } from './agent-harness-metadata.ts';
7
9
  import { describeLocalWorkspaceModelExecution } from './agent-harness-local-operations.ts';
8
10
  import { describeWorkspaceEditorModelExecution } from './agent-harness-workspace-editor-execution.ts';
9
11
 
@@ -97,9 +99,66 @@ export function describeWorkspaceEditor(editor: AgentWorkspaceLocalEditor): Reco
97
99
  };
98
100
  }
99
101
 
100
- function previewText(value: string, maxLength = 120): string {
102
+ function previewText(value: string, maxLength = 56): string {
101
103
  const normalized = value.replace(/\s+/g, ' ').trim();
102
- return normalized.length <= maxLength ? normalized : `${normalized.slice(0, maxLength - 1).trimEnd()}...`;
104
+ return normalized.length <= maxLength ? normalized : `${normalized.slice(0, maxLength - 3).trimEnd()}...`;
105
+ }
106
+
107
+ function commandRouteHint(command: string): string {
108
+ const parsed = parseSlashCommand(command);
109
+ const commandName = parsed.name || command.replace(/^\//, '').trim().split(/\s+/)[0] || command;
110
+ return describeCommandPolicy(commandName).preferredModelTool ?? 'agent_harness mode:"run_command"';
111
+ }
112
+
113
+ function editorRouteHint(editorKind: AgentWorkspaceEditorKind): string {
114
+ if (
115
+ editorKind === 'memory'
116
+ || editorKind === 'note'
117
+ || editorKind === 'persona'
118
+ || editorKind === 'skill'
119
+ || editorKind === 'routine'
120
+ ) return 'agent_local_registry';
121
+ if (
122
+ editorKind === 'knowledge-url'
123
+ || editorKind === 'knowledge-urls'
124
+ || editorKind === 'knowledge-file'
125
+ || editorKind === 'knowledge-bookmarks'
126
+ || editorKind === 'knowledge-browser-history'
127
+ || editorKind === 'knowledge-connector-ingest'
128
+ ) return 'agent_knowledge_ingest';
129
+ if (
130
+ editorKind === 'knowledge-reindex'
131
+ || editorKind === 'knowledge-review-issue'
132
+ || editorKind === 'knowledge-consolidate'
133
+ ) return 'agent_harness mode:"run_workspace_action"';
134
+ if (editorKind.startsWith('knowledge-')) return 'agent_knowledge';
135
+ if (editorKind === 'web-research' || editorKind === 'web-fetch') return 'main conversation prompt';
136
+ if (editorKind === 'media-generate') return 'agent_media_generate';
137
+ if (editorKind === 'channel-send') return 'agent_channel_send';
138
+ if (editorKind === 'notify-send' || editorKind === 'notify-webhook-test') return 'agent_notify';
139
+ if (editorKind === 'reminder-schedule') return 'agent_reminder_schedule';
140
+ if (
141
+ editorKind.startsWith('approval-')
142
+ || editorKind.startsWith('automation-')
143
+ || editorKind === 'schedule-run'
144
+ ) return 'agent_operator_action';
145
+ if (editorKind.startsWith('workplan-') || editorKind.startsWith('plan-') || editorKind.startsWith('task-')) return 'agent_work_plan';
146
+ return 'agent_harness mode:"run_workspace_action"';
147
+ }
148
+
149
+ function localActionRouteHint(action: AgentWorkspaceAction): string {
150
+ const modelExecution = describeLocalWorkspaceModelExecution(action);
151
+ const tool = modelExecution && typeof modelExecution.tool === 'string' ? modelExecution.tool : '';
152
+ return tool || 'agent_local_registry';
153
+ }
154
+
155
+ function workspaceActionRouteHint(action: AgentWorkspaceAction): string {
156
+ if (action.command) return commandRouteHint(action.command);
157
+ if (action.editorKind) return editorRouteHint(action.editorKind);
158
+ if (action.kind === 'local-selection' || action.kind === 'local-operation') return localActionRouteHint(action);
159
+ if (action.targetCategoryId || action.kind === 'workspace') return 'agent_harness mode:"open_ui_surface"';
160
+ if (action.kind === 'guidance') return action.safety === 'blocked' ? 'main conversation policy' : 'main conversation';
161
+ return 'agent_harness mode:"workspace_action"';
103
162
  }
104
163
 
105
164
  function selectedRoutineFromArgs(
@@ -152,6 +211,7 @@ export function describeWorkspaceAction(
152
211
  detail: action.detail,
153
212
  kind: action.kind,
154
213
  safety: action.safety,
214
+ modelRoute: previewText(workspaceActionRouteHint(action)),
155
215
  ...(action.command ? { command: action.command } : {}),
156
216
  ...(action.targetCategoryId ? { targetCategoryId: action.targetCategoryId } : {}),
157
217
  ...(action.editorKind ? { editorKind: action.editorKind } : {}),
@@ -181,6 +241,7 @@ function describeWorkspaceActionSummary(
181
241
  summary: previewText(action.detail),
182
242
  kind: action.kind,
183
243
  safety: action.safety,
244
+ modelRoute: previewText(workspaceActionRouteHint(action)),
184
245
  ...(action.command ? { command: action.command } : {}),
185
246
  ...(action.targetCategoryId ? { targetCategoryId: action.targetCategoryId } : {}),
186
247
  ...(action.editorKind ? { editorKind: action.editorKind } : {}),
@@ -195,7 +256,7 @@ export function listWorkspaceActions(
195
256
  ): readonly Record<string, unknown>[] {
196
257
  const query = readString(args.query);
197
258
  const categoryId = readString(args.categoryId || args.category);
198
- const limit = readLimit(args.limit, 200);
259
+ const limit = readLimit(args.limit, 500);
199
260
  const includeEditor = args.includeParameters === true;
200
261
  const editorContext = includeEditor ? buildWorkspaceEditorContext(context, args) : null;
201
262
  const source = query
@@ -326,7 +326,7 @@ export function createAgentKnowledgeIngestTool(
326
326
  },
327
327
  allowPrivateHosts: {
328
328
  type: 'boolean',
329
- description: 'Allow private-host source URLs where the Agent Knowledge route supports it.',
329
+ description: 'Allow supported private-host source URLs.',
330
330
  },
331
331
  confirm: {
332
332
  type: 'boolean',
@@ -142,7 +142,7 @@ export function createAgentKnowledgeTool(
142
142
  },
143
143
  connectorId: {
144
144
  type: 'string',
145
- description: 'Connector id for action connector or connector_doctor. id may also be used.',
145
+ description: 'Connector id for connector or connector_doctor.',
146
146
  },
147
147
  limit: {
148
148
  type: 'number',
@@ -74,11 +74,11 @@ export function createAgentMediaGenerateTool(
74
74
  },
75
75
  confirm: {
76
76
  type: 'boolean',
77
- description: 'Required true only when the user explicitly asked for this media generation.',
77
+ description: 'Required true only when user requested this media.',
78
78
  },
79
79
  explicitUserRequest: {
80
80
  type: 'string',
81
- description: 'Short quote or summary of the user request that authorized this generation.',
81
+ description: 'User request authorizing this media generation.',
82
82
  },
83
83
  },
84
84
  required: ['prompt', 'confirm', 'explicitUserRequest'],
@@ -88,7 +88,7 @@ export function createAgentNotifyTool(
88
88
  },
89
89
  confirm: {
90
90
  type: 'boolean',
91
- description: 'Required true only when the user explicitly asked to send this notification.',
91
+ description: 'Required true only when user requested notification.',
92
92
  },
93
93
  explicitUserRequest: {
94
94
  type: 'string',
@@ -175,7 +175,7 @@ export function createAgentReminderScheduleTool(
175
175
  },
176
176
  confirm: {
177
177
  type: 'boolean',
178
- description: 'Required true only when the user explicitly asked to create this reminder.',
178
+ description: 'Required true only when user requested reminder.',
179
179
  },
180
180
  explicitUserRequest: {
181
181
  type: 'string',
@@ -0,0 +1,76 @@
1
+ import type { ToolRegistry } from '@pellux/goodvibes-sdk/platform/tools';
2
+ import type { ToolDefinition } from '@pellux/goodvibes-sdk/platform/types';
3
+
4
+ const DEFAULT_TOOL_DESCRIPTION_LIMIT = 56;
5
+
6
+ const TOOL_DESCRIPTION_OVERRIDES: Readonly<Record<string, string>> = {
7
+ agent: 'Inspect explicit subagent tasks.',
8
+ analyze: 'Analyze code impact, symbols, and project risk.',
9
+ channel: 'Inspect or operate configured channel surfaces.',
10
+ control: 'Inspect commands, panels, and runtime posture.',
11
+ edit: 'Edit files with exact, fuzzy, or regex replacements.',
12
+ exec: 'Run shell commands with timeout and retry.',
13
+ fetch: 'Fetch HTTP URLs with auth and sanitization.',
14
+ find: 'Search files, content, symbols, and project structure.',
15
+ goodvibes_context: 'Inspect current GoodVibes runtime and host harness.',
16
+ goodvibes_settings: 'Inspect/update GoodVibes settings on explicit request.',
17
+ inspect: 'Inspect project structure, APIs, routes, and deps.',
18
+ mcp: 'Inspect MCP servers, tools, schemas, and trust state.',
19
+ packet: 'Manage implementation and execution packets.',
20
+ query: 'Track operator queries, answers, and closure.',
21
+ read: 'Read files, outlines, symbols, and ranges.',
22
+ registry: 'Discover local skills, agents, tools, and templates.',
23
+ remote: 'Manage remote runner pools and artifacts.',
24
+ repl: 'Evaluate bounded JS, TS, Python, SQL, or GraphQL.',
25
+ state: 'Read/update session state and diagnostics.',
26
+ task: 'Manage cross-session tasks and handoffs.',
27
+ team: 'Manage team definitions, roles, and lanes.',
28
+ web_search: 'Search the web through the configured provider.',
29
+ workflow: 'Inspect/control configured workflow automation.',
30
+ worklist: 'Manage durable worklists and checklist items.',
31
+ write: 'Write files with batch, mkdir, backup, and validation.',
32
+ agent_harness: 'Harness catalog: modes, settings, commands, UI, tools.',
33
+ agent_knowledge: 'Read isolated Agent Knowledge.',
34
+ agent_knowledge_ingest: 'Ingest confirmed source into Agent Knowledge.',
35
+ agent_local_registry: 'Inspect/update Agent memory, notes, skills, routines.',
36
+ agent_work_plan: 'Inspect/update the visible Agent-local work plan.',
37
+ agent_operator_briefing: 'Read connected Agent operator state.',
38
+ agent_operator_action: 'Run one confirmed allowlisted operator action.',
39
+ agent_reminder_schedule: 'Schedule one confirmed Agent reminder.',
40
+ agent_channel_send: 'Send confirmed message to configured Agent target.',
41
+ agent_notify: 'Send one confirmed plain-text notification.',
42
+ agent_media_generate: 'Generate one confirmed image or video artifact.',
43
+ };
44
+
45
+ function compactText(value: string, limit: number): string {
46
+ const normalized = value.replace(/\s+/g, ' ').trim();
47
+ if (normalized.length <= limit) return normalized;
48
+ if (limit <= 3) return normalized.slice(0, limit);
49
+ return `${normalized.slice(0, limit - 3).trimEnd()}...`;
50
+ }
51
+
52
+ function stripSchemaDescriptions(value: unknown): unknown {
53
+ if (Array.isArray(value)) return value.map(stripSchemaDescriptions);
54
+ if (!value || typeof value !== 'object') return value;
55
+
56
+ const result: Record<string, unknown> = {};
57
+ for (const [key, entry] of Object.entries(value)) {
58
+ if (key === 'description') continue;
59
+ result[key] = stripSchemaDescriptions(entry);
60
+ }
61
+ return result;
62
+ }
63
+
64
+ function compactToolDefinition(definition: ToolDefinition): void {
65
+ definition.description = compactText(
66
+ TOOL_DESCRIPTION_OVERRIDES[definition.name] ?? definition.description,
67
+ DEFAULT_TOOL_DESCRIPTION_LIMIT,
68
+ );
69
+ definition.parameters = stripSchemaDescriptions(definition.parameters) as Record<string, unknown>;
70
+ }
71
+
72
+ export function compactRegisteredToolDefinitions(toolRegistry: ToolRegistry): void {
73
+ for (const definition of toolRegistry.getToolDefinitions()) {
74
+ compactToolDefinition(definition);
75
+ }
76
+ }
package/src/version.ts CHANGED
@@ -6,20 +6,14 @@ import { join } from 'node:path';
6
6
  // The prebuild script updates the fallback value before compilation.
7
7
  // Uses import.meta.dir (Bun) to locate package.json relative to this file,
8
8
  // which is correct regardless of the process working directory.
9
- let _version = '1.0.34';
10
- let _sdkVersion = '0.33.36';
9
+ let _version = '1.0.36';
11
10
  try {
12
11
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8')) as {
13
12
  readonly version?: unknown;
14
- readonly dependencies?: Record<string, unknown>;
15
- readonly devDependencies?: Record<string, unknown>;
16
13
  };
17
14
  _version = typeof pkg.version === 'string' ? pkg.version : _version;
18
- const packageSdkVersion = pkg.dependencies?.['@pellux/goodvibes-sdk'] ?? pkg.devDependencies?.['@pellux/goodvibes-sdk'];
19
- _sdkVersion = typeof packageSdkVersion === 'string' ? packageSdkVersion : _sdkVersion;
20
15
  } catch {
21
- // Compiled binary or missing package.json use fallback
16
+ // Compiled binary or missing package.json - use fallback.
22
17
  }
23
18
 
24
19
  export const VERSION = _version;
25
- export const SDK_VERSION = _sdkVersion;