@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.
Files changed (73) hide show
  1. package/CHANGELOG.md +9 -3
  2. package/README.md +1 -1
  3. package/dist/package/main.js +28 -89
  4. package/package.json +1 -1
  5. package/src/agent/memory-prompt.ts +3 -3
  6. package/src/agent/operator-actions.ts +1 -1
  7. package/src/agent/prompt-context-receipts.ts +3 -3
  8. package/src/agent/session-registration.ts +1 -1
  9. package/src/agent/vibe-file.ts +5 -5
  10. package/src/cli/local-library-command-shared.ts +1 -1
  11. package/src/cli/memory-command.ts +9 -6
  12. package/src/cli/resume-relaunch-notice.ts +1 -1
  13. package/src/cli/tui-startup.ts +1 -1
  14. package/src/config/credential-status.ts +1 -1
  15. package/src/config/index.ts +1 -1
  16. package/src/config/secrets.ts +1 -1
  17. package/src/core/conversation-rendering.ts +2 -2
  18. package/src/core/system-message-noise.ts +3 -3
  19. package/src/core/thinking-overlay.ts +1 -1
  20. package/src/input/agent-workspace-basic-command-editor-submission.ts +1 -1
  21. package/src/input/agent-workspace-basic-command-editors.ts +1 -1
  22. package/src/input/agent-workspace-calendar-connect-editor.ts +1 -1
  23. package/src/input/agent-workspace-calendar-oauth-editor.ts +1 -1
  24. package/src/input/agent-workspace-calendar-subscribe-editor.ts +1 -1
  25. package/src/input/agent-workspace-command-editor-engine.ts +2 -2
  26. package/src/input/agent-workspace-direct-editor-submission.ts +1 -1
  27. package/src/input/agent-workspace-email-connect-editor.ts +1 -1
  28. package/src/input/agent-workspace-live-counters.ts +1 -1
  29. package/src/input/agent-workspace-settings.ts +1 -1
  30. package/src/input/agent-workspace-snapshot-builders.ts +2 -2
  31. package/src/input/agent-workspace-snapshot-config.ts +1 -1
  32. package/src/input/agent-workspace-snapshot.ts +9 -9
  33. package/src/input/agent-workspace-types.ts +4 -4
  34. package/src/input/agent-workspace.ts +1 -1
  35. package/src/input/commands/calendar-connect-runtime.ts +1 -1
  36. package/src/input/commands/calendar-subscription-runtime.ts +2 -2
  37. package/src/input/commands/operator-actions-runtime.ts +1 -1
  38. package/src/input/commands/session-content.ts +1 -1
  39. package/src/input/commands/session-workflow.ts +1 -1
  40. package/src/input/feed-context-factory.ts +4 -4
  41. package/src/input/handler-feed.ts +9 -9
  42. package/src/input/handler.ts +1 -1
  43. package/src/input/panel-paste-flood-guard.ts +3 -3
  44. package/src/input/settings-modal.ts +1 -1
  45. package/src/main.ts +4 -4
  46. package/src/renderer/agent-workspace-context-lines.ts +1 -1
  47. package/src/renderer/startup-theme-probe.ts +1 -1
  48. package/src/renderer/status-glyphs.ts +2 -2
  49. package/src/renderer/terminal-bg-probe.ts +1 -1
  50. package/src/renderer/terminal-escapes.ts +3 -2
  51. package/src/renderer/theme-mode-config.ts +2 -2
  52. package/src/renderer/theme.ts +4 -4
  53. package/src/renderer/thinking.ts +1 -1
  54. package/src/renderer/ui-factory.ts +1 -1
  55. package/src/renderer/ui-primitives.ts +2 -2
  56. package/src/runtime/bootstrap-core.ts +2 -2
  57. package/src/runtime/bootstrap.ts +3 -3
  58. package/src/runtime/calendar-boot-refresh.ts +1 -1
  59. package/src/runtime/lan-scan-consent.ts +1 -1
  60. package/src/runtime/services.ts +7 -7
  61. package/src/runtime/terminal-output-guard.ts +1 -1
  62. package/src/runtime/ui-services.ts +1 -1
  63. package/src/shell/agent-workspace-fullscreen.ts +1 -1
  64. package/src/shell/terminal-focus-mode.ts +9 -9
  65. package/src/shell/ui-openers.ts +1 -1
  66. package/src/tools/agent-harness-operator-methods.ts +1 -1
  67. package/src/tools/agent-harness-personal-ops-discovery.ts +2 -2
  68. package/src/tools/agent-harness-personal-ops-lanes.ts +1 -1
  69. package/src/tools/agent-harness-personal-ops-types.ts +1 -1
  70. package/src/tools/agent-harness-prompt-context.ts +3 -3
  71. package/src/tools/agent-local-registry-memory.ts +1 -1
  72. package/src/tools/agent-operator-method-tool.ts +1 -1
  73. package/src/version.ts +1 -1
@@ -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
- // W6-C2 (E6): one canonical cross-surface memory store + no-loss legacy fold.
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
- /** W4-R3 — OS-level terminal focus tracker, ported from goodvibes-tui's W2.3 (core/focus-tracker.ts). */
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
- // W3-A1: the SDK's extracted session-spine core, consumed via this surface's
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
- // W6-C2 (E6): the agent no longer owns a private per-surface memory.sqlite. It opens
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
- // W4-R3 — one shared instance for the process lifetime (mirrors goodvibes-tui's
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 Wave 0: RuntimeServices members required by SDK 0.38 ──────
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
- * W6-C2 (E6): fold the agent's legacy per-surface memory store into the canonical
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. (W4-R2 honest degraded state.)
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
- /** W4-R3 — OS-level terminal focus tracker, ported from goodvibes-tui's W2.3. */
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
- // W4-A6: mirror disk state on every repaint of the workspace panel so the
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 — W4-R3: DECSET ?1004h OS window-focus reporting +
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) this work order adds.
10
+ * behavior added here (the approval alert).
11
11
  *
12
- * FOCUS_ENABLE/FOCUS_DISABLE: sourced from W4-R2's terminal-escapes.ts (the
13
- * shared home for the DECSET ?1004 literals — its own docstring names R3 as
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 is
16
- * the R2/R3 convergence the W4-R1 parity matrix pre-ruled: a relocation of
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 (W4-R1 matrix): ?1004h MUST be disabled on every exit path
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 W4-R1 parity matrix does not list as a PORT item — only
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
@@ -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
- // W4-R4: forced dark/light applies immediately (mode flip + full
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
- * W4-A3 (capability-advertisement honesty): the SDK operator contract marks
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
- * W4-A3/W4-A5 capability honesty: a method whose contract entry carries
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
- * W4-A3 degraded-ad pattern ("unavailable (route not served by this daemon)").
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 (W4-A3/W4-A5 honesty): a
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
- * W4-A3 capability-advertisement honesty: false means the method is
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 (Wave-4
250
- // W4-A1B) — the same wording source prompt-context-receipts.ts uses, never a
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
- // W6-C2 (E6): mirror the runtime — the VIBE prompt is a PROJECTION of persona records,
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 (W4-A1: memory honesty).
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
- // W4-A3 (capability-advertisement honesty): the operator contract marks a
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.7';
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;