@pellux/goodvibes-agent 0.1.70 → 0.1.71

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 (60) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +42 -1
  3. package/src/agent/skill-discovery.ts +119 -0
  4. package/src/input/commands/delegation-runtime.ts +0 -8
  5. package/src/input/commands/experience-runtime.ts +0 -177
  6. package/src/input/commands/guidance-runtime.ts +0 -69
  7. package/src/input/commands/local-runtime.ts +1 -57
  8. package/src/input/commands/local-setup-review.ts +1 -1
  9. package/src/input/commands/operator-runtime.ts +1 -145
  10. package/src/input/commands/platform-access-runtime.ts +2 -195
  11. package/src/input/commands/product-runtime.ts +0 -116
  12. package/src/input/commands/security-runtime.ts +88 -0
  13. package/src/input/commands/session-content.ts +0 -97
  14. package/src/input/commands/shell-core.ts +0 -13
  15. package/src/input/commands.ts +2 -95
  16. package/src/panels/builtin/operations.ts +3 -184
  17. package/src/panels/index.ts +0 -11
  18. package/src/version.ts +1 -1
  19. package/src/input/commands/branch-runtime.ts +0 -72
  20. package/src/input/commands/control-room-runtime.ts +0 -234
  21. package/src/input/commands/discovery-runtime.ts +0 -61
  22. package/src/input/commands/hooks-runtime.ts +0 -207
  23. package/src/input/commands/incident-runtime.ts +0 -106
  24. package/src/input/commands/integration-runtime.ts +0 -437
  25. package/src/input/commands/local-setup.ts +0 -288
  26. package/src/input/commands/managed-runtime.ts +0 -240
  27. package/src/input/commands/marketplace-runtime.ts +0 -305
  28. package/src/input/commands/memory-product-runtime.ts +0 -148
  29. package/src/input/commands/operator-panel-runtime.ts +0 -146
  30. package/src/input/commands/platform-services-runtime.ts +0 -271
  31. package/src/input/commands/profile-sync-runtime.ts +0 -110
  32. package/src/input/commands/provider.ts +0 -363
  33. package/src/input/commands/remote-runtime-pool.ts +0 -89
  34. package/src/input/commands/remote-runtime-setup.ts +0 -226
  35. package/src/input/commands/remote-runtime.ts +0 -432
  36. package/src/input/commands/replay-runtime.ts +0 -25
  37. package/src/input/commands/services-runtime.ts +0 -220
  38. package/src/input/commands/settings-sync-runtime.ts +0 -197
  39. package/src/input/commands/share-runtime.ts +0 -127
  40. package/src/input/commands/skills-runtime.ts +0 -226
  41. package/src/input/commands/teleport-runtime.ts +0 -68
  42. package/src/panels/cockpit-panel.ts +0 -183
  43. package/src/panels/communication-panel.ts +0 -153
  44. package/src/panels/control-plane-panel.ts +0 -211
  45. package/src/panels/forensics-panel.ts +0 -364
  46. package/src/panels/hooks-panel.ts +0 -239
  47. package/src/panels/incident-review-panel.ts +0 -197
  48. package/src/panels/marketplace-panel.ts +0 -212
  49. package/src/panels/ops-control-panel.ts +0 -150
  50. package/src/panels/ops-strategy-panel.ts +0 -235
  51. package/src/panels/orchestration-panel.ts +0 -272
  52. package/src/panels/plugins-panel.ts +0 -178
  53. package/src/panels/remote-panel.ts +0 -449
  54. package/src/panels/routes-panel.ts +0 -178
  55. package/src/panels/services-panel.ts +0 -231
  56. package/src/panels/settings-sync-panel.ts +0 -120
  57. package/src/panels/skills-panel.ts +0 -431
  58. package/src/panels/watchers-panel.ts +0 -193
  59. package/src/verification/live-verifier.ts +0 -588
  60. package/src/verification/verification-ledger.ts +0 -239
@@ -1,239 +0,0 @@
1
- import { readFileSync, readdirSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { CONFIG_SCHEMA } from '@pellux/goodvibes-sdk/platform/config';
4
- import { FEATURE_FLAG_MAP } from '@pellux/goodvibes-sdk/platform/runtime/state';
5
- import { CommandRegistry } from '../input/command-registry.ts';
6
- import { registerBuiltinCommands } from '../input/commands.ts';
7
-
8
- export interface VerificationLedgerArea {
9
- readonly area: string;
10
- readonly total: number;
11
- readonly localSignalVerified: number;
12
- readonly localBehaviorVerified: number;
13
- readonly externalOutcomeRequired: number;
14
- readonly notes: string;
15
- }
16
-
17
- export interface VerificationLedger {
18
- readonly generatedAt: string;
19
- readonly areas: readonly VerificationLedgerArea[];
20
- readonly totals: {
21
- readonly total: number;
22
- readonly localSignalVerified: number;
23
- readonly localBehaviorVerified: number;
24
- readonly externalOutcomeRequired: number;
25
- readonly localSignalPercent: number;
26
- readonly localBehaviorPercent: number;
27
- };
28
- }
29
-
30
- const EXTERNAL_SLASH_COMMANDS = new Set([
31
- 'auth',
32
- 'bridge',
33
- 'health',
34
- 'listener',
35
- 'login',
36
- 'logout',
37
- 'mcp',
38
- 'notify',
39
- 'pair',
40
- 'qrcode',
41
- 'remote',
42
- 'remote-env',
43
- 'remote-setup',
44
- 'runner-pool',
45
- 'scan',
46
- 'secrets',
47
- 'services',
48
- 'subscription',
49
- 'teleport',
50
- 'tts',
51
- 'tunnel',
52
- 'voice',
53
- ]);
54
-
55
- const EXTERNAL_CLI_COMMANDS = new Set([
56
- 'bridge',
57
- 'listener',
58
- 'pair',
59
- 'remote',
60
- 'run',
61
- 'serve',
62
- 'service',
63
- 'tui',
64
- 'web',
65
- ]);
66
-
67
- const ONBOARDING_CAPABILITIES = [
68
- 'local-tui-only',
69
- 'browser-access',
70
- 'network-access',
71
- 'webhook-events',
72
- 'external-integrations',
73
- ] as const;
74
-
75
- const EXTERNAL_SURFACES = [
76
- 'bluebubbles',
77
- 'discord',
78
- 'googleChat',
79
- 'imessage',
80
- 'matrix',
81
- 'mattermost',
82
- 'msteams',
83
- 'ntfy',
84
- 'signal',
85
- 'slack',
86
- 'telegram',
87
- 'webhook',
88
- 'whatsapp',
89
- ] as const;
90
-
91
- function percent(numerator: number, denominator: number): number {
92
- return denominator === 0 ? 0 : Math.round((numerator / denominator) * 1000) / 10;
93
- }
94
-
95
- function listSlashCommands(): string[] {
96
- const registry = new CommandRegistry();
97
- registerBuiltinCommands(registry);
98
- return registry.getAll().map((command) => command.name);
99
- }
100
-
101
- function countBuiltinPanels(root: string): number {
102
- const builtinDir = join(root, 'src', 'panels', 'builtin');
103
- let count = 0;
104
- for (const file of readdirSync(builtinDir)) {
105
- if (!file.endsWith('.ts')) continue;
106
- const text = readFileSync(join(builtinDir, file), 'utf8');
107
- count += [...text.matchAll(/registerType\(\s*\{\s*id:\s*['"][^'"]+['"]/g)].length;
108
- }
109
- return count;
110
- }
111
-
112
- function listCliCommands(root: string): string[] {
113
- const text = readFileSync(join(root, 'src', 'cli', 'types.ts'), 'utf8');
114
- const match = text.match(/export type GoodVibesCliCommand =([\s\S]*?)export type GoodVibesCliOutputFormat/);
115
- if (!match) return [];
116
- return [...match[1].matchAll(/\|\s*'([^']+)'/g)]
117
- .map((entry) => entry[1])
118
- .filter((command) => command !== 'unknown');
119
- }
120
-
121
- export function buildVerificationLedger(root: string): VerificationLedger {
122
- const slashCommandNames = listSlashCommands();
123
- const cliCommandNames = listCliCommands(root);
124
- const slashCommands = slashCommandNames.length;
125
- const panels = countBuiltinPanels(root);
126
- const cliCommands = cliCommandNames.length;
127
- const featureFlags = FEATURE_FLAG_MAP.size;
128
- const settings = CONFIG_SCHEMA.length;
129
- const externalSlashCommands = slashCommandNames.filter((command) => EXTERNAL_SLASH_COMMANDS.has(command)).length;
130
- const externalCliCommands = cliCommandNames.filter((command) => EXTERNAL_CLI_COMMANDS.has(command)).length;
131
-
132
- const areas: VerificationLedgerArea[] = [
133
- {
134
- area: 'Settings schema and persistence',
135
- total: settings,
136
- localSignalVerified: settings,
137
- localBehaviorVerified: 184,
138
- externalOutcomeRequired: settings - 184,
139
- notes: 'Every schema setting can be validated for schema/default/load/write/location; external side effects remain separate.',
140
- },
141
- {
142
- area: 'Feature flags',
143
- total: featureFlags,
144
- localSignalVerified: featureFlags,
145
- localBehaviorVerified: featureFlags - 4,
146
- externalOutcomeRequired: 4,
147
- notes: 'All flags can be loaded/toggled; a small surface/service subset still requires live external behavior.',
148
- },
149
- {
150
- area: 'Slash commands',
151
- total: slashCommands,
152
- localSignalVerified: slashCommands,
153
- localBehaviorVerified: slashCommands - externalSlashCommands,
154
- externalOutcomeRequired: externalSlashCommands,
155
- notes: 'Every command can be routed and invoked with a fake context; external/provider/device commands need live outcome checks.',
156
- },
157
- {
158
- area: 'Built-in panels',
159
- total: panels,
160
- localSignalVerified: panels,
161
- localBehaviorVerified: panels,
162
- externalOutcomeRequired: 0,
163
- notes: 'Panels can be rendered and input-tested against fake read models and real cached state.',
164
- },
165
- {
166
- area: 'Top-level CLI commands',
167
- total: cliCommands,
168
- localSignalVerified: cliCommands,
169
- localBehaviorVerified: cliCommands - externalCliCommands,
170
- externalOutcomeRequired: externalCliCommands,
171
- notes: 'Parser/help/status/package behavior is local; long-running TUI/service/remote flows require process or external checks.',
172
- },
173
- {
174
- area: 'External surfaces',
175
- total: EXTERNAL_SURFACES.length,
176
- localSignalVerified: EXTERNAL_SURFACES.length,
177
- localBehaviorVerified: 2,
178
- externalOutcomeRequired: EXTERNAL_SURFACES.length - 2,
179
- notes: 'Config/readiness can be local for all surfaces; real message delivery is external for most surfaces.',
180
- },
181
- {
182
- area: 'Onboarding capability bundles',
183
- total: ONBOARDING_CAPABILITIES.length,
184
- localSignalVerified: ONBOARDING_CAPABILITIES.length,
185
- localBehaviorVerified: ONBOARDING_CAPABILITIES.length,
186
- externalOutcomeRequired: 0,
187
- notes: 'Wizard state derivation/apply is local; daemon-backed outcomes stay external to Agent ownership.',
188
- },
189
- ];
190
-
191
- const total = areas.reduce((sum, area) => sum + area.total, 0);
192
- const localSignalVerified = areas.reduce((sum, area) => sum + area.localSignalVerified, 0);
193
- const localBehaviorVerified = areas.reduce((sum, area) => sum + area.localBehaviorVerified, 0);
194
- const externalOutcomeRequired = areas.reduce((sum, area) => sum + area.externalOutcomeRequired, 0);
195
-
196
- return {
197
- generatedAt: new Date().toISOString(),
198
- areas,
199
- totals: {
200
- total,
201
- localSignalVerified,
202
- localBehaviorVerified,
203
- externalOutcomeRequired,
204
- localSignalPercent: percent(localSignalVerified, total),
205
- localBehaviorPercent: percent(localBehaviorVerified, total),
206
- },
207
- };
208
- }
209
-
210
- export function renderVerificationLedgerMarkdown(ledger: VerificationLedger): string {
211
- const lines = [
212
- '# GoodVibes Verification Ledger',
213
- '',
214
- `Generated: ${ledger.generatedAt}`,
215
- '',
216
- '| Area | Total | Local verification signal | Local behavior | External outcome required | Notes |',
217
- '|---|---:|---:|---:|---:|---|',
218
- ...ledger.areas.map((area) => [
219
- `| ${area.area}`,
220
- area.total,
221
- area.localSignalVerified,
222
- area.localBehaviorVerified,
223
- area.externalOutcomeRequired,
224
- area.notes,
225
- ].join(' | ') + ' |'),
226
- '',
227
- '## Totals',
228
- '',
229
- `- Total inventory items: ${ledger.totals.total}`,
230
- `- Local verification signal: ${ledger.totals.localSignalVerified} (${ledger.totals.localSignalPercent}%)`,
231
- `- Local behavior verified: ${ledger.totals.localBehaviorVerified} (${ledger.totals.localBehaviorPercent}%)`,
232
- `- External outcome required: ${ledger.totals.externalOutcomeRequired}`,
233
- '',
234
- 'Local verification signal means the item can be exercised through schema, routing, persistence, render, readiness, daemon, CLI, or real-state checks without relying on an external SaaS/device outcome.',
235
- 'Local behavior verified means the behavior can be completed locally with in-process, CLI, daemon, tmux, or real persisted state.',
236
- '',
237
- ];
238
- return `${lines.join('\n')}\n`;
239
- }