@pellux/goodvibes-agent 0.1.106 → 0.1.108
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 +41 -10
- package/README.md +28 -9
- package/docs/README.md +5 -5
- package/docs/{runtime-connection.md → connected-services.md} +8 -8
- package/docs/getting-started.md +29 -10
- package/docs/release-and-publishing.md +4 -4
- package/package.json +2 -12
- package/src/agent/reminder-schedule-format.ts +75 -0
- package/src/agent/reminder-schedule.ts +494 -0
- package/src/agent/routine-schedule-format.ts +7 -7
- package/src/agent/routine-schedule-promotion.ts +1 -1
- package/src/agent/routine-schedule-receipts.ts +1 -1
- package/src/agent/skill-discovery.ts +2 -0
- package/src/cli/agent-knowledge-args.ts +93 -0
- package/src/cli/agent-knowledge-command.ts +200 -369
- package/src/cli/agent-knowledge-format.ts +58 -7
- package/src/cli/agent-knowledge-methods.ts +84 -0
- package/src/cli/agent-knowledge-runtime.ts +240 -0
- package/src/cli/config-overrides.ts +2 -2
- package/src/cli/help.ts +31 -11
- package/src/cli/management-commands.ts +2 -2
- package/src/cli/management.ts +8 -8
- package/src/cli/package-verification.ts +7 -3
- package/src/cli/parser.ts +10 -2
- package/src/cli/service-posture.ts +6 -6
- package/src/cli/status.ts +32 -32
- package/src/cli/tui-startup.ts +3 -1
- package/src/input/agent-workspace-activation.ts +24 -13
- package/src/input/agent-workspace-basic-command-editors.ts +448 -0
- package/src/input/agent-workspace-categories.ts +42 -34
- package/src/input/agent-workspace-channels.ts +3 -3
- package/src/input/agent-workspace-command-editor.ts +65 -0
- package/src/input/agent-workspace-editors.ts +17 -2
- package/src/input/agent-workspace-knowledge-query-editor.ts +74 -0
- package/src/input/agent-workspace-knowledge-url-editor.ts +95 -0
- package/src/input/agent-workspace-reminder-schedule-editor.ts +125 -0
- package/src/input/agent-workspace-routine-schedule-editor.ts +127 -0
- package/src/input/agent-workspace-setup.ts +2 -2
- package/src/input/agent-workspace-types.ts +20 -2
- package/src/input/agent-workspace-voice-media.ts +5 -5
- package/src/input/agent-workspace.ts +39 -2
- package/src/input/commands/agent-runtime-profile-runtime.ts +1 -1
- package/src/input/commands/agent-skills-runtime.ts +94 -2
- package/src/input/commands/brief-runtime.ts +126 -0
- package/src/input/commands/channels-runtime.ts +47 -0
- package/src/input/commands/health-runtime.ts +10 -10
- package/src/input/commands/knowledge.ts +176 -1
- package/src/input/commands/planning-runtime.ts +1 -1
- package/src/input/commands/platform-access-runtime.ts +10 -10
- package/src/input/commands/policy-dispatch.ts +1 -1
- package/src/input/commands/schedule-runtime.ts +42 -5
- package/src/input/commands/security-runtime.ts +1 -1
- package/src/input/commands/session-content.ts +1 -1
- package/src/input/commands/session-workflow.ts +1 -1
- package/src/input/commands/shell-core.ts +4 -2
- package/src/input/commands/tasks-runtime.ts +3 -3
- package/src/input/commands.ts +4 -0
- package/src/input/handler-onboarding.ts +4 -4
- package/src/input/handler.ts +3 -2
- package/src/input/onboarding/onboarding-wizard-helpers.ts +1 -1
- package/src/input/onboarding/onboarding-wizard-operator-steps.ts +13 -13
- package/src/input/onboarding/onboarding-wizard-steps.ts +8 -8
- package/src/input/settings-modal-agent-policy.ts +1 -1
- package/src/input/slash-command-parser.ts +60 -0
- package/src/panels/builtin/agent.ts +1 -1
- package/src/panels/builtin/operations.ts +2 -2
- package/src/panels/provider-account-snapshot.ts +1 -1
- package/src/panels/provider-health-domains.ts +6 -6
- package/src/panels/subscription-panel.ts +1 -1
- package/src/panels/tasks-panel.ts +3 -3
- package/src/renderer/agent-workspace.ts +43 -30
- package/src/renderer/help-overlay.ts +1 -1
- package/src/renderer/settings-modal.ts +13 -13
- package/src/runtime/bootstrap-hook-bridge.ts +1 -1
- package/src/runtime/bootstrap.ts +8 -8
- package/src/runtime/index.ts +2 -2
- package/src/runtime/onboarding/derivation.ts +6 -6
- package/src/shell/service-settings-sync.ts +1 -1
- package/src/version.ts +1 -1
|
@@ -31,26 +31,26 @@ const CATEGORY_INFO: Record<SettingsCategory, string> = {
|
|
|
31
31
|
storage: 'Local storage posture, including secret storage policy and maximum artifact size for Agent Knowledge, artifacts, and document ingestion.',
|
|
32
32
|
permissions: 'Permission mode and tool-class policy. These settings decide whether the shell prompts before read/write/exec/network/agent actions.',
|
|
33
33
|
orchestration: 'Agent orchestration limits and recursion controls.',
|
|
34
|
-
wrfc: 'WRFC is external to normal Agent operation. Review these
|
|
34
|
+
wrfc: 'WRFC is external to normal Agent operation. Review these compatibility values only for explicit GoodVibes TUI build delegation.',
|
|
35
35
|
helper: 'Helper model defaults used by helper subsystems when they do not use the main chat route.',
|
|
36
36
|
tts: 'Text-to-speech provider, voice, and optional spoken-turn LLM overrides.',
|
|
37
|
-
service: '
|
|
38
|
-
controlPlane: '
|
|
39
|
-
httpListener: 'Inbound event endpoint settings owned by
|
|
37
|
+
service: 'Connected-service installation posture. Agent shows these compatibility keys for inspection only and does not install, start, stop, restart, or autostart anything.',
|
|
38
|
+
controlPlane: 'Connected-service API settings. Agent uses these settings for access and does not mutate bind posture.',
|
|
39
|
+
httpListener: 'Inbound event endpoint settings owned by connected GoodVibes services. Agent inspects readiness and does not expose endpoints.',
|
|
40
40
|
web: 'External browser companion settings. Agent does not own browser hosting or network bind lifecycle.',
|
|
41
|
-
batch: 'Batch execution settings reported from
|
|
41
|
+
batch: 'Batch execution settings reported from connected GoodVibes services. Agent does not own remote queue provisioning.',
|
|
42
42
|
automation: 'Scheduled and automated run settings, concurrency, timeout, catch-up, cooldown, and retention behavior.',
|
|
43
43
|
watchers: 'File/process watcher heartbeat, polling, and recovery-window behavior.',
|
|
44
|
-
runtime: '
|
|
44
|
+
runtime: 'Connected-service guardrails such as companion chat limiter and event bus listener caps.',
|
|
45
45
|
telemetry: 'Telemetry payload policy.',
|
|
46
46
|
cache: 'Provider and model cache behavior, TTL, and hit-rate monitoring.',
|
|
47
47
|
mcp: 'MCP server trust and scope review. Trust changes can expose local files, tools, databases, browsers, or remote automation depending on the server.',
|
|
48
48
|
surfaces: 'Messaging and notification channel accounts such as Slack, Discord, ntfy, Telegram, chat bridges, and delivery providers.',
|
|
49
49
|
release: 'Release-channel preference.',
|
|
50
|
-
danger: 'High-impact
|
|
50
|
+
danger: 'High-impact service switches. Agent renders service-owned switches read-only; change them outside Agent.',
|
|
51
51
|
tools: 'Tool LLM and helper model routing. Empty provider/model values inherit the active chat route unless a specific helper/tool route is set.',
|
|
52
|
-
flags: 'Feature flags are SDK
|
|
53
|
-
network: 'Read-only view of
|
|
52
|
+
flags: 'Feature flags are SDK gates. They are separate from normal config keys because they enable or disable staged behavior.',
|
|
53
|
+
network: 'Read-only view of connected GoodVibes API, inbound-event, and browser companion bind posture plus editable Agent network settings.',
|
|
54
54
|
};
|
|
55
55
|
|
|
56
56
|
const ENUM_VALUE_DESCRIPTIONS: Record<string, Record<string, string>> = {
|
|
@@ -148,7 +148,7 @@ function buildSettingContext(modal: SettingsModal, entry: SettingEntry): string[
|
|
|
148
148
|
];
|
|
149
149
|
|
|
150
150
|
if (entry.locked) lines.push(`Locked: ${entry.lockReason ?? 'This setting is locked by a higher-priority layer.'}`);
|
|
151
|
-
if (entry.conflict) lines.push(`Conflict: inspect with /settings and resolve
|
|
151
|
+
if (entry.conflict) lines.push(`Conflict: inspect with /settings and resolve service-owned sync state in the owning host.`);
|
|
152
152
|
|
|
153
153
|
lines.push('', entry.setting.description);
|
|
154
154
|
|
|
@@ -202,7 +202,7 @@ function buildFlagContext(entry: FlagEntry | null): string[] {
|
|
|
202
202
|
`State: ${entry.state}`,
|
|
203
203
|
`Default: ${entry.flag.defaultState}`,
|
|
204
204
|
`Tier: ${entry.flag.tier}`,
|
|
205
|
-
`
|
|
205
|
+
`Live toggleable: ${entry.flag.runtimeToggleable ? 'yes' : 'no'}`,
|
|
206
206
|
'',
|
|
207
207
|
entry.flag.description,
|
|
208
208
|
...(entry.state === 'killed' && entry.flag.killReason ? ['', `Kill reason: ${entry.flag.killReason}`] : []),
|
|
@@ -479,7 +479,7 @@ function footerText(modal: SettingsModal): string {
|
|
|
479
479
|
if (modal.currentCategory === 'flags') return 'Focus feature flags · Up/Down flag · Left categories · Tab pane · Enter/Space toggle · Esc close';
|
|
480
480
|
const selected = modal.getSelected();
|
|
481
481
|
if (selected && isExternalDaemonOwnedSettingKey(selected.setting.key)) {
|
|
482
|
-
return 'Read-only
|
|
482
|
+
return 'Read-only connected-service setting · Change from GoodVibes TUI or the owning host · Esc close';
|
|
483
483
|
}
|
|
484
484
|
return 'Focus settings · Up/Down setting · Left categories · Tab pane · Enter/Space edit/toggle · R reset · Esc close';
|
|
485
485
|
}
|
|
@@ -490,7 +490,7 @@ export function renderSettingsModal(
|
|
|
490
490
|
viewportHeight = 24,
|
|
491
491
|
): Line[] {
|
|
492
492
|
const notices = [
|
|
493
|
-
...(modal.lastSaveTriggeredRestart ? [`
|
|
493
|
+
...(modal.lastSaveTriggeredRestart ? [`Owning host must restart ${modal.lastSaveTriggeredRestart}`] : []),
|
|
494
494
|
...(modal.lastSettingEffectMessage ? [modal.lastSettingEffectMessage] : []),
|
|
495
495
|
];
|
|
496
496
|
const metrics = getFullscreenWorkspaceMetrics({ width, height: viewportHeight });
|
|
@@ -74,7 +74,7 @@ export function createResumeSessionHandler(options: ResumeSessionOptions): (sess
|
|
|
74
74
|
options.conversation.log(`Resume: Reopened panels: ${reopenedPanels.join(', ')}`, { fg: '244' });
|
|
75
75
|
}
|
|
76
76
|
if ((meta.returnContext.remoteRunners?.length ?? 0) > 0) {
|
|
77
|
-
options.conversation.log('Resume: Remote
|
|
77
|
+
options.conversation.log('Resume: Remote runner recovery belongs outside Agent; delegate explicit build/fix/review recovery from Agent.', { fg: '244' });
|
|
78
78
|
}
|
|
79
79
|
if (returnContextMode === 'assisted') {
|
|
80
80
|
const helperModel = new HelperModel({
|
package/src/runtime/bootstrap.ts
CHANGED
|
@@ -46,8 +46,8 @@ import { buildEnabledRoutinesPrompt } from '../agent/routine-registry.ts';
|
|
|
46
46
|
|
|
47
47
|
const GOODVIBES_AGENT_OPERATOR_POLICY = [
|
|
48
48
|
'## GoodVibes Agent Operator Policy',
|
|
49
|
-
'- Default to serial, proactive assistant work in the main conversation. Answer, inspect, summarize, remember useful non-secret facts, configure local Agent state, use read-only
|
|
50
|
-
'- GoodVibes Agent connects to
|
|
49
|
+
'- Default to serial, proactive assistant work in the main conversation. Answer, inspect, summarize, remember useful non-secret facts, configure local Agent state, use read-only connected-service/operator routes, and take safe non-destructive actions without spawning local agents or WRFC.',
|
|
50
|
+
'- GoodVibes Agent connects to GoodVibes services owned outside this package. Do not start, stop, restart, install, expose, or mutate connected-service network/listener posture from Agent.',
|
|
51
51
|
'- Use the `agent_local_registry` tool when a reusable persona, skill, or routine would improve future work. Keep those records local, non-secret, source/provenance tagged, and reviewable. Starting a routine means applying its steps in this same serial conversation, not creating a background job.',
|
|
52
52
|
'- WRFC is never the default Agent reasoning path. Do not create local WRFC chains for planning, research, operations, knowledge, memory, configuration, approvals, automation observability, or ordinary assistant work.',
|
|
53
53
|
'- GoodVibes Agent is not the coding TUI. Do not use the `agent` tool to spawn local Engineer, Reviewer, Tester, Verifier, or batch-spawn roots from Agent.',
|
|
@@ -332,8 +332,8 @@ export async function bootstrapRuntime(
|
|
|
332
332
|
port,
|
|
333
333
|
baseUrl: formatHostServiceBaseUrl(host, port),
|
|
334
334
|
reason: service === 'daemon'
|
|
335
|
-
? 'GoodVibes Agent connects to
|
|
336
|
-
: 'GoodVibes Agent does not own
|
|
335
|
+
? 'GoodVibes Agent connects to GoodVibes services owned outside this product and does not start or restart them.'
|
|
336
|
+
: 'GoodVibes Agent does not own listener lifecycle.',
|
|
337
337
|
};
|
|
338
338
|
};
|
|
339
339
|
|
|
@@ -373,7 +373,7 @@ export async function bootstrapRuntime(
|
|
|
373
373
|
daemonStatus: createExternalAgentServiceStatus('daemon'),
|
|
374
374
|
httpListenerStatus: createExternalAgentServiceStatus('httpListener'),
|
|
375
375
|
};
|
|
376
|
-
systemMessageRouter.high('[Startup] GoodVibes Agent does not start or restart
|
|
376
|
+
systemMessageRouter.high('[Startup] GoodVibes Agent does not start or restart connected GoodVibes services. Start them from GoodVibes TUI or the owning host, then refresh status.');
|
|
377
377
|
requestRender();
|
|
378
378
|
return inspectExternalServices();
|
|
379
379
|
},
|
|
@@ -450,8 +450,8 @@ export async function bootstrapRuntime(
|
|
|
450
450
|
});
|
|
451
451
|
bootstrapUnsubs.push(() => mcpAutoReload.stop());
|
|
452
452
|
if (configManager.get('automation.enabled')) {
|
|
453
|
-
logger.warn('Local automation startup is disabled in GoodVibes Agent; use
|
|
454
|
-
systemMessageRouter.low('[Startup] Local automation runners are disabled in GoodVibes Agent; use read-only automation observability or explicit
|
|
453
|
+
logger.warn('Local automation startup is disabled in GoodVibes Agent; use connected-service observability instead.');
|
|
454
|
+
systemMessageRouter.low('[Startup] Local automation runners are disabled in GoodVibes Agent; use read-only automation observability or explicit connected-service actions.');
|
|
455
455
|
}
|
|
456
456
|
|
|
457
457
|
// ── Phase 12: Session:start lifecycle hook ─────────────────────────────
|
|
@@ -553,7 +553,7 @@ export async function bootstrapRuntime(
|
|
|
553
553
|
};
|
|
554
554
|
|
|
555
555
|
// ── Phase 12b: Operator intervention wiring (feature-gated) ──────────────
|
|
556
|
-
// Keep
|
|
556
|
+
// Keep service-owned control-plane state internal. GoodVibes Agent does not
|
|
557
557
|
// expose the local ops-control panel; operator control is surfaced
|
|
558
558
|
// through Agent-owned status, approvals, automation, and delegation flows.
|
|
559
559
|
ctx.commandContext.ops.acpManager = acpManager;
|
package/src/runtime/index.ts
CHANGED
|
@@ -113,8 +113,8 @@ function agentExternalHostStatus(
|
|
|
113
113
|
port,
|
|
114
114
|
baseUrl: `http://${host}:${port}`,
|
|
115
115
|
reason: service === 'daemon'
|
|
116
|
-
? 'GoodVibes Agent connects to
|
|
117
|
-
: 'GoodVibes Agent does not own
|
|
116
|
+
? 'GoodVibes Agent connects to GoodVibes services owned outside this product and does not start or restart them.'
|
|
117
|
+
: 'GoodVibes Agent does not own listener lifecycle.',
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
120
|
|
|
@@ -264,10 +264,10 @@ function hasAutomationReviewSignals(snapshot: OnboardingSnapshotState): boolean
|
|
|
264
264
|
|
|
265
265
|
function describeOperatorTerminal(snapshot: OnboardingSnapshotState): string {
|
|
266
266
|
if (!hasAnyServerEnabled(snapshot)) {
|
|
267
|
-
return 'Use GoodVibes Agent as the terminal operator while connecting to
|
|
267
|
+
return 'Use GoodVibes Agent as the terminal operator while connecting to existing GoodVibes services. Agent setup does not create new entrypoints.';
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
return 'Use GoodVibes Agent as the terminal operator;
|
|
270
|
+
return 'Use GoodVibes Agent as the terminal operator; connection settings are shown only so setup is understandable.';
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
function describeProviderAccess(snapshot: OnboardingSnapshotState): string {
|
|
@@ -500,23 +500,23 @@ export function deriveReopenEditAcknowledgementState(
|
|
|
500
500
|
snapshot,
|
|
501
501
|
'auth',
|
|
502
502
|
'bootstrap-credential',
|
|
503
|
-
'
|
|
503
|
+
'A connected-service bootstrap credential signal is still visible to Agent.',
|
|
504
504
|
)
|
|
505
505
|
: authSessionCount > 0
|
|
506
506
|
? buildRequiredAcknowledgement(
|
|
507
507
|
snapshot,
|
|
508
508
|
'auth',
|
|
509
509
|
'active-sessions',
|
|
510
|
-
`${authSessionCount}
|
|
510
|
+
`${authSessionCount} connected-service auth session signal(s) are currently visible.`,
|
|
511
511
|
)
|
|
512
512
|
: authUserCount > 0
|
|
513
513
|
? buildRequiredAcknowledgement(
|
|
514
514
|
snapshot,
|
|
515
515
|
'auth',
|
|
516
516
|
'auth-state',
|
|
517
|
-
`${authUserCount}
|
|
517
|
+
`${authUserCount} connected-service auth user signal(s) are already visible.`,
|
|
518
518
|
)
|
|
519
|
-
: buildNotNeededAcknowledgement(snapshot, 'auth', 'No
|
|
519
|
+
: buildNotNeededAcknowledgement(snapshot, 'auth', 'No connected-service auth signal needs confirmation.');
|
|
520
520
|
|
|
521
521
|
return {
|
|
522
522
|
providers,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ConfigKey } from '@pellux/goodvibes-sdk/platform/config';
|
|
2
2
|
import type { CliServiceRuntime } from '../cli/service-posture.ts';
|
|
3
3
|
|
|
4
|
-
export const AGENT_EXTERNAL_DAEMON_SERVICE_MESSAGE = 'GoodVibes Agent
|
|
4
|
+
export const AGENT_EXTERNAL_DAEMON_SERVICE_MESSAGE = 'GoodVibes Agent uses connected GoodVibes services and does not install, start, stop, restart, or uninstall them. Manage service lifecycle outside Agent.';
|
|
5
5
|
|
|
6
6
|
export interface ServiceSettingsSyncChange {
|
|
7
7
|
readonly key: ConfigKey;
|
package/src/version.ts
CHANGED
|
@@ -6,7 +6,7 @@ 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 = '0.1.
|
|
9
|
+
let _version = '0.1.108';
|
|
10
10
|
let _sdkVersion = '0.33.35';
|
|
11
11
|
try {
|
|
12
12
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8')) as {
|