@pellux/goodvibes-agent 1.5.7 → 1.5.8
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 +9 -3
- package/README.md +1 -1
- package/dist/package/main.js +28 -89
- package/package.json +1 -1
- package/src/agent/memory-prompt.ts +3 -3
- package/src/agent/operator-actions.ts +1 -1
- package/src/agent/prompt-context-receipts.ts +3 -3
- package/src/agent/session-registration.ts +1 -1
- package/src/agent/vibe-file.ts +5 -5
- package/src/cli/local-library-command-shared.ts +1 -1
- package/src/cli/memory-command.ts +9 -6
- package/src/cli/resume-relaunch-notice.ts +1 -1
- package/src/cli/tui-startup.ts +1 -1
- package/src/config/credential-status.ts +1 -1
- package/src/config/index.ts +1 -1
- package/src/config/secrets.ts +1 -1
- package/src/core/conversation-rendering.ts +2 -2
- package/src/core/system-message-noise.ts +3 -3
- package/src/core/thinking-overlay.ts +1 -1
- package/src/input/agent-workspace-basic-command-editor-submission.ts +1 -1
- package/src/input/agent-workspace-basic-command-editors.ts +1 -1
- package/src/input/agent-workspace-calendar-connect-editor.ts +1 -1
- package/src/input/agent-workspace-calendar-oauth-editor.ts +1 -1
- package/src/input/agent-workspace-calendar-subscribe-editor.ts +1 -1
- package/src/input/agent-workspace-command-editor-engine.ts +2 -2
- package/src/input/agent-workspace-direct-editor-submission.ts +1 -1
- package/src/input/agent-workspace-email-connect-editor.ts +1 -1
- package/src/input/agent-workspace-live-counters.ts +1 -1
- package/src/input/agent-workspace-settings.ts +1 -1
- package/src/input/agent-workspace-snapshot-builders.ts +2 -2
- package/src/input/agent-workspace-snapshot-config.ts +1 -1
- package/src/input/agent-workspace-snapshot.ts +9 -9
- package/src/input/agent-workspace-types.ts +4 -4
- package/src/input/agent-workspace.ts +1 -1
- package/src/input/commands/calendar-connect-runtime.ts +1 -1
- package/src/input/commands/calendar-subscription-runtime.ts +2 -2
- package/src/input/commands/operator-actions-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/feed-context-factory.ts +4 -4
- package/src/input/handler-feed.ts +9 -9
- package/src/input/handler.ts +1 -1
- package/src/input/panel-paste-flood-guard.ts +3 -3
- package/src/input/settings-modal.ts +1 -1
- package/src/main.ts +4 -4
- package/src/renderer/agent-workspace-context-lines.ts +1 -1
- package/src/renderer/startup-theme-probe.ts +1 -1
- package/src/renderer/status-glyphs.ts +2 -2
- package/src/renderer/terminal-bg-probe.ts +1 -1
- package/src/renderer/terminal-escapes.ts +3 -2
- package/src/renderer/theme-mode-config.ts +2 -2
- package/src/renderer/theme.ts +4 -4
- package/src/renderer/thinking.ts +1 -1
- package/src/renderer/ui-factory.ts +1 -1
- package/src/renderer/ui-primitives.ts +2 -2
- package/src/runtime/bootstrap-core.ts +2 -2
- package/src/runtime/bootstrap.ts +3 -3
- package/src/runtime/calendar-boot-refresh.ts +1 -1
- package/src/runtime/lan-scan-consent.ts +1 -1
- package/src/runtime/services.ts +7 -7
- package/src/runtime/terminal-output-guard.ts +1 -1
- package/src/runtime/ui-services.ts +1 -1
- package/src/shell/agent-workspace-fullscreen.ts +1 -1
- package/src/shell/terminal-focus-mode.ts +9 -9
- package/src/shell/ui-openers.ts +1 -1
- package/src/tools/agent-harness-operator-methods.ts +1 -1
- package/src/tools/agent-harness-personal-ops-discovery.ts +2 -2
- package/src/tools/agent-harness-personal-ops-lanes.ts +1 -1
- package/src/tools/agent-harness-personal-ops-types.ts +1 -1
- package/src/tools/agent-harness-prompt-context.ts +3 -3
- package/src/tools/agent-local-registry-memory.ts +1 -1
- package/src/tools/agent-operator-method-tool.ts +1 -1
- package/src/version.ts +1 -1
package/src/runtime/services.ts
CHANGED
|
@@ -50,7 +50,7 @@ import { ModeManager } from '@pellux/goodvibes-sdk/platform/state';
|
|
|
50
50
|
import { FileUndoManager } from '@pellux/goodvibes-sdk/platform/state';
|
|
51
51
|
import { MemoryRegistry } from '@pellux/goodvibes-sdk/platform/state';
|
|
52
52
|
import { MemoryStore } from '@pellux/goodvibes-sdk/platform/state';
|
|
53
|
-
//
|
|
53
|
+
// One canonical cross-surface memory store + no-loss legacy fold.
|
|
54
54
|
import { resolveCanonicalMemoryDbPath, foldMemoryStores } from '@pellux/goodvibes-sdk/platform/state';
|
|
55
55
|
import type { LegacyMemorySource, MemoryFoldReport } from '@pellux/goodvibes-sdk/platform/state';
|
|
56
56
|
import type { RuntimeEventBus } from '@/runtime/index.ts';
|
|
@@ -456,7 +456,7 @@ export interface RuntimeServices extends SdkRuntimeServices {
|
|
|
456
456
|
readonly worktreeRegistry: WorktreeRegistry;
|
|
457
457
|
readonly sandboxSessionRegistry: SandboxSessionRegistry;
|
|
458
458
|
readonly webhookNotifier: WebhookNotifier;
|
|
459
|
-
/**
|
|
459
|
+
/** OS-level terminal focus tracker, ported from goodvibes-tui's W2.3 (core/focus-tracker.ts). */
|
|
460
460
|
readonly focusTracker: FocusTracker;
|
|
461
461
|
readonly replayEngine: DeterministicReplayEngine;
|
|
462
462
|
readonly providerOptimizer: ProviderOptimizer;
|
|
@@ -613,7 +613,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
613
613
|
agentStatusProvider: agentManager,
|
|
614
614
|
messageSender: agentMessageBus,
|
|
615
615
|
});
|
|
616
|
-
//
|
|
616
|
+
// The SDK's extracted session-spine core, consumed via this surface's
|
|
617
617
|
// own REST transport adapter (session-spine-rest-transport.ts) — version-
|
|
618
618
|
// tolerant, since the agent may compile against a pinned SDK predating the
|
|
619
619
|
// typed sessions.register client. Live-immediately mode: passing `transport`
|
|
@@ -639,7 +639,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
639
639
|
});
|
|
640
640
|
const artifactStore = new ArtifactStore({ configManager });
|
|
641
641
|
const memoryEmbeddingRegistry = new MemoryEmbeddingProviderRegistry({ configManager });
|
|
642
|
-
//
|
|
642
|
+
// The agent no longer owns a private per-surface memory.sqlite. It opens
|
|
643
643
|
// the ONE canonical cross-surface store so a fact learned here recalls in the TUI (and
|
|
644
644
|
// vice-versa). The old agent-global path is folded in at boot with no loss (see
|
|
645
645
|
// foldAgentLegacyMemory), then left in place — migration never deletes.
|
|
@@ -779,7 +779,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
779
779
|
const worktreeRegistry = createDisabledAgentWorktreeRegistry(workingDirectory);
|
|
780
780
|
// Configured and attached to the runtime bus during bootstrap when webhook URLs are present.
|
|
781
781
|
const webhookNotifier = new WebhookNotifier();
|
|
782
|
-
//
|
|
782
|
+
// One shared instance for the process lifetime (mirrors goodvibes-tui's
|
|
783
783
|
// runtime/services.ts); fed from 'focus' tokens in handler-feed.ts and read by
|
|
784
784
|
// the approval-alert wiring in main.ts.
|
|
785
785
|
const focusTracker = new FocusTracker();
|
|
@@ -866,7 +866,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
866
866
|
workflowServices: workflow,
|
|
867
867
|
});
|
|
868
868
|
|
|
869
|
-
// ── One-Platform
|
|
869
|
+
// ── One-Platform: RuntimeServices members required by SDK 0.38 ──────
|
|
870
870
|
// The Agent is delegation-only: it does not own local build/worktree work.
|
|
871
871
|
// These are constructed as real-but-inert SDK services purely to satisfy the
|
|
872
872
|
// RuntimeServices contract — none auto-start:
|
|
@@ -1020,7 +1020,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
1020
1020
|
}
|
|
1021
1021
|
|
|
1022
1022
|
/**
|
|
1023
|
-
*
|
|
1023
|
+
* Fold the agent's legacy per-surface memory store into the canonical
|
|
1024
1024
|
* cross-surface store. Called once at boot AFTER `memoryStore.init()` so any records
|
|
1025
1025
|
* written before unification survive. Id-keyed and idempotent — a re-run imports
|
|
1026
1026
|
* nothing new and never deletes the legacy file. Returns the report so boot can log
|
|
@@ -232,7 +232,7 @@ export function installTuiTerminalOutputGuard(options: TuiTerminalOutputGuardOpt
|
|
|
232
232
|
const notice = `[Terminal] Captured ${count} direct ${event.source} write${plural} that would have corrupted the TUI: ${event.preview}`;
|
|
233
233
|
// Keep the aggregate count reachable in the activity log even though the
|
|
234
234
|
// noise gate (system-message-noise.ts) drops the notice from the Recent
|
|
235
|
-
// feed — drop-from-the-feed, not delete. (
|
|
235
|
+
// feed — drop-from-the-feed, not delete. (Honest degraded state.)
|
|
236
236
|
logger.info(notice, { source: event.source, count });
|
|
237
237
|
options.notify(notice);
|
|
238
238
|
},
|
|
@@ -54,7 +54,7 @@ export interface UiPlatformServices {
|
|
|
54
54
|
readonly tokenAuditor: RuntimeServices['tokenAuditor'];
|
|
55
55
|
readonly replayEngine: RuntimeServices['replayEngine'];
|
|
56
56
|
readonly webhookNotifier: RuntimeServices['webhookNotifier'];
|
|
57
|
-
/**
|
|
57
|
+
/** OS-level terminal focus tracker, ported from goodvibes-tui's W2.3. */
|
|
58
58
|
readonly focusTracker: RuntimeServices['focusTracker'];
|
|
59
59
|
readonly policyRuntimeState: RuntimeServices['policyRuntimeState'];
|
|
60
60
|
readonly externalServices?: {
|
|
@@ -36,7 +36,7 @@ export function createAgentWorkspaceFullscreenComposite(
|
|
|
36
36
|
width: number,
|
|
37
37
|
height: number,
|
|
38
38
|
): CompositeRequest {
|
|
39
|
-
//
|
|
39
|
+
// Mirror disk state on every repaint of the workspace panel so the
|
|
40
40
|
// memory count and routine start counts never show a stale point-in-time
|
|
41
41
|
// snapshot from the last workspace action (e.g. an external delete, or a
|
|
42
42
|
// routine started from another shell/CLI invocation).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* terminal-focus-mode.ts —
|
|
2
|
+
* terminal-focus-mode.ts — DECSET ?1004h OS window-focus reporting +
|
|
3
3
|
* the approval-alert wiring that consumes it.
|
|
4
4
|
*
|
|
5
5
|
* Extracted from main.ts (architecture line-count gate: MAX_SOURCE_LINES=800
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
* extracting terminal-mode literals out of its entry file (see that repo's
|
|
8
8
|
* src/renderer/terminal-escapes.ts docstring). Behavior is unchanged from an
|
|
9
9
|
* inline version; this is purely a line-count extraction plus the one new
|
|
10
|
-
* behavior (the approval alert)
|
|
10
|
+
* behavior added here (the approval alert).
|
|
11
11
|
*
|
|
12
|
-
* FOCUS_ENABLE/FOCUS_DISABLE: sourced from
|
|
13
|
-
* shared home for the DECSET ?1004 literals — its own docstring names
|
|
14
|
-
* the importer) and re-exported here so the focus-mode callers (main.ts and
|
|
15
|
-
* the tests) keep one import site for the whole focus-mode surface. This
|
|
16
|
-
*
|
|
12
|
+
* FOCUS_ENABLE/FOCUS_DISABLE: sourced from terminal-escapes.ts (the
|
|
13
|
+
* shared home for the DECSET ?1004 literals — its own docstring names this
|
|
14
|
+
* module as the importer) and re-exported here so the focus-mode callers (main.ts and
|
|
15
|
+
* the tests) keep one import site for the whole focus-mode surface. This
|
|
16
|
+
* convergence was pre-ruled by the port's parity matrix: a relocation of
|
|
17
17
|
* the literals, no behavior change.
|
|
18
18
|
*
|
|
19
19
|
* installFocusModeExitGuard(): a last-resort safety net. Node/Bun fire 'exit'
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* take — explicit process.exit() calls (normal /exit, double-Ctrl+C via
|
|
22
22
|
* exitApp()) AND the default uncaughtException termination — even though
|
|
23
23
|
* main.ts registers no explicit uncaughtException/SIGTERM handler of its own.
|
|
24
|
-
* Named top-5 risk
|
|
24
|
+
* Named a top-5 risk in the port's parity matrix: ?1004h MUST be disabled on every exit path
|
|
25
25
|
* or the user's shell inherits focus-reporting escape garbage. The write is
|
|
26
26
|
* harmless even if exitApp() already disabled it moments earlier (?1004l is
|
|
27
27
|
* idempotent). It is GATED on focus mode having actually been enabled
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
* module's config-gated alert-class system (alert-gating.ts's
|
|
38
38
|
* behavior.notifyOnApprovalPending / notifyOnlyWhenUnfocused settings, shared
|
|
39
39
|
* with budget-breach/long-task/chain-failure notifiers) is TUI-specific
|
|
40
|
-
* infrastructure the
|
|
40
|
+
* infrastructure the port's parity matrix does not list as a PORT item — only
|
|
41
41
|
* core/focus-tracker.ts is. This is the minimal, self-contained wiring the
|
|
42
42
|
* matrix's own text calls for ("route focus in/out events ... to drive
|
|
43
43
|
* awaiting-approval alerts"). PRIVACY: message content is tool name + category
|
package/src/shell/ui-openers.ts
CHANGED
|
@@ -424,7 +424,7 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
|
|
|
424
424
|
input.modalOpened('settings');
|
|
425
425
|
input.settingsModal.open(configManager, featureFlags, subscriptionManager, serviceRegistry, mcpRegistry, secretsManager, {
|
|
426
426
|
onSettingApplied: (change) => {
|
|
427
|
-
//
|
|
427
|
+
// Forced dark/light applies immediately (mode flip + full
|
|
428
428
|
// repaint via clearScreen's resetDiff); auto only re-probes at startup,
|
|
429
429
|
// so it takes effect next launch (stated honestly).
|
|
430
430
|
if (String(change.key) === THEME_MODE_CONFIG_KEY) {
|
|
@@ -48,7 +48,7 @@ interface OperatorMethodDescriptor {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
51
|
+
* Capability-advertisement honesty: the SDK operator contract marks
|
|
52
52
|
* a method `invokable: false` when it is cataloged but not backed by a real
|
|
53
53
|
* daemon route (see @pellux/goodvibes-sdk's method-catalog-route-reconcile —
|
|
54
54
|
* email.inbox.list/read, email.draft.create, email.send are the dogfood
|
|
@@ -36,7 +36,7 @@ export function methodSearchText(method: OperatorContractMethod): string {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* Capability honesty: a method whose contract entry carries
|
|
40
40
|
* invokable:false is cataloged but NOT dispatchable — no daemon route or
|
|
41
41
|
* handler serves it. Counting it toward "workflow ready" would repeat the
|
|
42
42
|
* dogfood finding (a lane card claiming readiness backed only by methods a
|
|
@@ -77,7 +77,7 @@ export function unavailableMethodIdsMatching(tokens: readonly string[]): readonl
|
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
79
|
* One honest line naming advertised-but-undispatchable methods, matching the
|
|
80
|
-
*
|
|
80
|
+
* degraded-ad pattern ("unavailable (route not served by this daemon)").
|
|
81
81
|
* Returns null when nothing is degraded.
|
|
82
82
|
*/
|
|
83
83
|
export function unavailableMethodsNote(unavailableMethodIds: readonly string[]): string | null {
|
|
@@ -15,7 +15,7 @@ export function buildLanes(
|
|
|
15
15
|
} = {},
|
|
16
16
|
): readonly PersonalOpsLane[] {
|
|
17
17
|
const snapshot = buildAgentWorkspaceRuntimeSnapshot(context);
|
|
18
|
-
// Readiness counts only DISPATCHABLE methods (
|
|
18
|
+
// Readiness counts only DISPATCHABLE methods (capability-advertisement honesty): a
|
|
19
19
|
// method the contract marks invokable:false has no serving route, so it
|
|
20
20
|
// must not make a lane read "ready"/"partial". The unavailable lists feed
|
|
21
21
|
// honest degraded wording instead.
|
|
@@ -29,7 +29,7 @@ export interface OperatorContractMethod {
|
|
|
29
29
|
readonly description?: string;
|
|
30
30
|
readonly category?: string;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Capability-advertisement honesty: false means the method is
|
|
33
33
|
* cataloged but NOT dispatchable (no route/handler serves it). Absent
|
|
34
34
|
* means invokable (older contracts predate the flag).
|
|
35
35
|
*/
|
|
@@ -246,8 +246,8 @@ function memorySegment(memory: PromptMemoryApi | undefined, includeParameters: b
|
|
|
246
246
|
inspectRoute: `agent_local_registry domain:"memory" action:"get" recordId:"${record.id}"`,
|
|
247
247
|
})),
|
|
248
248
|
suppressed: suppressed.slice(0, 12).map((record) => {
|
|
249
|
-
// Honest, per-record reason straight from describeMemoryPromptEligibility
|
|
250
|
-
//
|
|
249
|
+
// Honest, per-record reason straight from describeMemoryPromptEligibility —
|
|
250
|
+
// the same wording source prompt-context-receipts.ts uses, never a
|
|
251
251
|
// locally invented "not reviewed"/"outside prompt limit" guess. A record here
|
|
252
252
|
// either genuinely failed eligibility, or passed it but was cut by the top-10
|
|
253
253
|
// prompt slice — those read differently.
|
|
@@ -399,7 +399,7 @@ function promptContextSegments(context: CommandContext, includeParameters: boole
|
|
|
399
399
|
}
|
|
400
400
|
|
|
401
401
|
const vibe = discoverVibeFiles(shellPaths);
|
|
402
|
-
//
|
|
402
|
+
// Mirror the runtime — the VIBE prompt is a PROJECTION of persona records,
|
|
403
403
|
// not a file re-read (discoverVibeFiles stays for the file-discovery receipt below).
|
|
404
404
|
const vibeMemory = promptMemoryApi(context.clients?.agentKnowledgeApi?.memory);
|
|
405
405
|
const vibePrompt = (vibeMemory ? buildVibeProjectionPrompt(vibeMemory) : null) ?? '';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Agent-local memory domain handler (
|
|
2
|
+
* Agent-local memory domain handler (memory honesty).
|
|
3
3
|
*
|
|
4
4
|
* Split out of agent-local-registry-tool.ts to stay under the 800-line
|
|
5
5
|
* architecture cap. Owns the `memory` domain of the agent_local_registry
|
|
@@ -563,7 +563,7 @@ export function createAgentOperatorMethodTool(
|
|
|
563
563
|
error: `Unknown GoodVibes operator method '${methodId}'. Inspect host action:"methods" first.`,
|
|
564
564
|
};
|
|
565
565
|
}
|
|
566
|
-
//
|
|
566
|
+
// Capability-advertisement honesty: the operator contract marks a
|
|
567
567
|
// cataloged-but-not-route-backed method invokable:false (email.inbox.list,
|
|
568
568
|
// email.send, etc. — see @pellux/goodvibes-sdk's method-catalog-route-reconcile).
|
|
569
569
|
// Refuse here, before prepareOperatorRoute/fetch, rather than letting the
|
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 = '1.5.
|
|
9
|
+
let _version = '1.5.8';
|
|
10
10
|
try {
|
|
11
11
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8')) as {
|
|
12
12
|
readonly version?: unknown;
|