@quantiya/codevibe-core 2.0.72 → 2.0.73

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.
@@ -29,6 +29,8 @@ export interface AgentCliStatus {
29
29
  installed: boolean;
30
30
  version?: string;
31
31
  binPath?: string;
32
+ model?: string;
33
+ modelIsConfigured?: boolean;
32
34
  error?: string;
33
35
  }
34
36
  export interface AuthPreflightStatus {
@@ -489,6 +489,10 @@ export interface QuorumLoopDeps {
489
489
  * `undefined`.
490
490
  */
491
491
  detectedAgents?: string[];
492
+ /** Deterministic active models per agent discovered during local agent detection. */
493
+ detectedAgentModels?: Partial<Record<string, string>> | Record<string, string>;
494
+ /** Explicitly configured models per agent (env or local config only, no synthetic defaults). */
495
+ configuredAgentModels?: Partial<Record<string, string>> | Record<string, string>;
492
496
  /**
493
497
  * #585 auto-continuation (Max) — the resolved authenticated subscription tier
494
498
  * threaded from CLI startup/resume.
@@ -961,13 +965,21 @@ export declare class QuorumLoop {
961
965
  * Enables reconciliation if a user decision arrives or is replayed after promotion.
962
966
  */
963
967
  private readonly completedTaskSummaries;
964
- private readonly expectedRosterByTask;
968
+ private readonly declaredRosterByTask;
969
+ private readonly dispatchedRosterByTask;
965
970
  private readonly taskDegradedMetadataByTask;
966
971
  private getCompletedSummariesPath;
967
972
  private shouldUnlinkAbandonedTmpLockFile;
968
973
  private withCompletedSummariesLock;
969
974
  private loadCompletedSummariesFromDisk;
970
- private recordCompletedTaskSummary;
975
+ /** @internal */
976
+ recordCompletedTaskSummary(taskId: string, info: {
977
+ historySnapshot?: ReviewHistorySnapshot | null;
978
+ filesApplied: number;
979
+ completedAt: string;
980
+ originEpoch?: number;
981
+ workspaceApplicationStatus?: 'pending_merge_gate' | 'applied' | 'unobserved';
982
+ }): void;
971
983
  getCompletedTaskSummary(taskId: string): {
972
984
  historySnapshot?: ReviewHistorySnapshot | null;
973
985
  filesApplied: number;
@@ -1624,6 +1636,8 @@ export declare class QuorumLoop {
1624
1636
  */
1625
1637
  getDurableStore(): RevertManifestStore | undefined;
1626
1638
  getDetectedAgents(): AgentKind[];
1639
+ getDetectedModelForAgent(agent: string): string | null;
1640
+ getExplicitModelForAgent(agent: string): string | null;
1627
1641
  /**
1628
1642
  * #585 auto-continuation (Max) — pick the agent to AUTO-CONTINUE on when the
1629
1643
  * implementor for `taskId` hit a quota wall, or `null` to fall through to the
@@ -2301,7 +2315,7 @@ export declare class QuorumLoop {
2301
2315
  * error propagates (the caller surfaces it fail-closed).
2302
2316
  */
2303
2317
  private submitImplementorOutputWithRetry;
2304
- private handleReviewerDispatch;
2318
+ handleReviewerDispatch(payload: ReviewerDispatchPayload): Promise<void>;
2305
2319
  /**
2306
2320
  * §3.C.21 — spawn + run ONE reviewer seat, then submit its verdict.
2307
2321
  * Double-guarded (§3.C.21b LOCK): a seat already running-in-memory OR
@@ -212,6 +212,11 @@ export declare class ToolActivityLedger {
212
212
  markTerminal(clientEventId: string, invocationIds?: string[]): Promise<void>;
213
213
  /** Retirement is permanent replay suppression, not delivery/quota settlement. */
214
214
  markRetired(clientEventId: string, invocationIds: string[]): Promise<void>;
215
+ /** One durable mutation per bounded retirement page, not per window. */
216
+ markRetiredWindows(windows: readonly {
217
+ clientEventId: string;
218
+ invocationIds: string[];
219
+ }[]): Promise<void>;
215
220
  /** R2 keeps a window settlement independently of occurrence remapping/pruning. */
216
221
  markSettled(clientEventId: string, invocationIds: string[], disposition: 'acked' | 'terminal', requireDirectorySync?: boolean): Promise<void>;
217
222
  /**
@@ -3,7 +3,7 @@ import type { DesktopSyncSessionScope } from '../appsync/sync-operation-journal'
3
3
  import type { ToolSyncRetirementLocation } from '../appsync/sync-session-retirement';
4
4
  import { ToolActivityOutboxEnvelope } from './types';
5
5
  export interface ToolActivityOutboxOptions {
6
- /** Plugin agent slug — `claude` | `codex` (the on-disk namespace). */
6
+ /** Plugin agent slug — `claude` | `codex` | `agy` (the on-disk namespace). */
7
7
  agent: string;
8
8
  logger: Logger;
9
9
  /** Override the root for tests; defaults to `~/.codevibe/<agent>/tool-activity-outbox`. */
@@ -17,7 +17,7 @@ export interface ListPendingResult {
17
17
  quarantined: string[];
18
18
  }
19
19
  /**
20
- * The durable outbox for ONE consolidated plugin (claude / codex). A pure
20
+ * The durable outbox for ONE consolidated plugin (claude / codex / agy). A pure
21
21
  * durability primitive: persist / list-and-validate / prune / enumerate. The
22
22
  * send orchestration (encrypt-at-send, retry, back-pressure, ack) lives in the
23
23
  * consolidator that owns this outbox.
@@ -60,6 +60,7 @@ export declare class ToolActivityOutbox {
60
60
  * No temp sweep, quarantine, generation rewrite or legacy window deletion. */
61
61
  withRetirementSources<T>(scope: DesktopSyncSessionScope, action: (sources: {
62
62
  windows: ToolActivityOutboxEnvelope[];
63
+ hasMore: boolean;
63
64
  markRetired(): Promise<void>;
64
65
  prune(): Promise<void>;
65
66
  }) => Promise<T>): Promise<T | null>;
@@ -57,6 +57,19 @@ export declare const ReplayCursorStateSchema: z.ZodObject<{
57
57
  carryover: string;
58
58
  }>;
59
59
  export type ReplayCursorState = z.infer<typeof ReplayCursorStateSchema>;
60
+ /** A first-host boundary captured before lifecycle/cloud awaits. This excludes
61
+ * pre-host history; it is NOT a delivery acknowledgement or a copied cursor. */
62
+ export interface ToolReplayInitialBoundary {
63
+ byteOffset: number;
64
+ fileIdentity: {
65
+ dev: number;
66
+ ino: number;
67
+ };
68
+ size: number;
69
+ }
70
+ /** Capture a native boundary synchronously before lifecycle/cloud awaits.
71
+ * Existing partial records remain unread. Memory and reverse lookup are bounded. */
72
+ export declare function captureToolReplayBoundary(filePath: string, initialOffset?: number): ToolReplayInitialBoundary;
60
73
  /** One framed transcript line with its byte span. */
61
74
  export interface ReplayFrame {
62
75
  line: string;
@@ -126,10 +139,11 @@ export declare class ToolReplayCursor {
126
139
  constructor(opts: ToolReplayCursorOptions);
127
140
  private filePath;
128
141
  /**
129
- * Load the persisted cursor. An absent / unreadable / invalid file yields a
130
- * FRESH cursor (rescan from 0) — losing it never skips an occurrence.
142
+ * Existing checkpoints win over a new hosting boundary. Without a boundary,
143
+ * the legacy recovery contract remains rescan-from0. A supplied boundary is
144
+ * used only for a truly absent cursor, never to hide existing corrupt state.
131
145
  */
132
- load(): Promise<void>;
146
+ load(initialBoundary?: ToolReplayInitialBoundary, requireExisting?: boolean): Promise<void>;
133
147
  /** The current durable checkpoint (0 when fresh). */
134
148
  byteOffset(): number;
135
149
  /**
@@ -23,9 +23,12 @@ export declare function retireToolActivityWindows(options: {
23
23
  writer: DurableDesktopSyncWriter;
24
24
  expectedSessionKeyGen: string;
25
25
  confirm(input: ConfirmDesktopSyncRetirementInput): Promise<SyncSessionRetirementReceipt>;
26
+ /** Terminal exit records the existing intent instead of pruning a backlog. */
27
+ deferIfPaged?: boolean;
26
28
  }): Promise<{
27
29
  windowsRemoved: number;
28
30
  operationsRemoved: number;
31
+ hasMore?: true;
29
32
  }>;
30
33
  /**
31
34
  * Shared metered tool transport. An existing ULID window maps deterministically
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantiya/codevibe-core",
3
- "version": "2.0.72",
3
+ "version": "2.0.73",
4
4
  "description": "Core library for CodeVibe plugins - shared keychain, crypto, AppSync, and auth functionality",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",