@quantiya/codevibe-claude-plugin 2.0.76 → 2.0.77

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 (47) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/node_modules/@quantiya/codevibe-core/dist/appsync/appsync-client.d.ts +41 -10
  3. package/node_modules/@quantiya/codevibe-core/dist/appsync/queries.d.ts +4 -0
  4. package/node_modules/@quantiya/codevibe-core/dist/appsync/session-freshness.d.ts +12 -0
  5. package/node_modules/@quantiya/codevibe-core/dist/index.js +643 -562
  6. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/brainstorm-context.d.ts +11 -0
  7. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/cli.d.ts +11 -1
  8. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/cli.js +55627 -53046
  9. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/conductor-reply.d.ts +37 -0
  10. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/context-items.d.ts +64 -0
  11. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/index.d.ts +44 -2
  12. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/resume-modal.d.ts +19 -0
  13. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/slash-router.d.ts +2 -0
  14. package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/types.d.ts +48 -2
  15. package/node_modules/@quantiya/codevibe-core/dist/session/pending-session-create.d.ts +31 -0
  16. package/node_modules/@quantiya/codevibe-core/dist/session-resume/ResumePicker.d.ts +21 -0
  17. package/node_modules/@quantiya/codevibe-core/dist/session-resume/carry-over.d.ts +81 -0
  18. package/node_modules/@quantiya/codevibe-core/dist/session-resume/clean-exit.d.ts +33 -0
  19. package/node_modules/@quantiya/codevibe-core/dist/session-resume/cli-resume.d.ts +41 -0
  20. package/node_modules/@quantiya/codevibe-core/dist/session-resume/completeness-copy.d.ts +52 -0
  21. package/node_modules/@quantiya/codevibe-core/dist/session-resume/create-outcome.d.ts +43 -0
  22. package/node_modules/@quantiya/codevibe-core/dist/session-resume/e2e-fault.d.ts +28 -0
  23. package/node_modules/@quantiya/codevibe-core/dist/session-resume/hosted-loader.d.ts +88 -0
  24. package/node_modules/@quantiya/codevibe-core/dist/session-resume/local-completeness.d.ts +10 -0
  25. package/node_modules/@quantiya/codevibe-core/dist/session-resume/local-records.d.ts +121 -0
  26. package/node_modules/@quantiya/codevibe-core/dist/session-resume/picker-rows.d.ts +17 -0
  27. package/node_modules/@quantiya/codevibe-core/dist/session-resume/publish-retire.d.ts +40 -0
  28. package/node_modules/@quantiya/codevibe-core/dist/session-resume/relaunch.d.ts +72 -0
  29. package/node_modules/@quantiya/codevibe-core/dist/session-resume/restore-conversation.d.ts +27 -0
  30. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-candidates.d.ts +52 -0
  31. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-chosen.d.ts +103 -0
  32. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-create.d.ts +121 -0
  33. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-entry.d.ts +87 -0
  34. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-header.d.ts +25 -0
  35. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-io.d.ts +34 -0
  36. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-ledger.d.ts +107 -0
  37. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-messages.d.ts +68 -0
  38. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-rows.d.ts +24 -0
  39. package/node_modules/@quantiya/codevibe-core/dist/session-resume/resume-target.d.ts +65 -0
  40. package/node_modules/@quantiya/codevibe-core/dist/session-resume/shell-resume-io.d.ts +25 -0
  41. package/node_modules/@quantiya/codevibe-core/dist/session-resume/shell-resume.d.ts +34 -0
  42. package/node_modules/@quantiya/codevibe-core/dist/session-resume/source-choice.d.ts +37 -0
  43. package/node_modules/@quantiya/codevibe-core/dist/session-resume/successor-carry-over.d.ts +54 -0
  44. package/node_modules/@quantiya/codevibe-core/dist/session-resume/will-retire.d.ts +24 -0
  45. package/node_modules/@quantiya/codevibe-core/dist/types/session.d.ts +67 -0
  46. package/node_modules/@quantiya/codevibe-core/package.json +1 -1
  47. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codevibe-claude",
3
- "version": "2.0.76",
3
+ "version": "2.0.77",
4
4
  "description": "Sync Claude Code sessions with iOS mobile app via AWS backend. Control Claude Code from your phone with real-time bidirectional synchronization.",
5
5
  "author": {
6
6
  "name": "CodeVibe Team"
@@ -7,6 +7,7 @@ import { DurableDesktopSyncWriter, type DesktopSyncSessionScope } from './sync-o
7
7
  import { DesktopSyncReadClient } from './sync-read-client';
8
8
  import { DesktopSyncLiveConnection } from './sync-live-connection';
9
9
  import { type DurableDesktopSyncReader } from './sync-desktop-registration';
10
+ import type { ContextItemPage, ResumableSessionPage, ResumeDetails } from '../types/session';
10
11
  import type { PromptReRaiseDisposition } from './sync-prompt-retention';
11
12
  import { type ResolveDesktopSyncPromptInput, type SyncPromptResolutionReceipt } from './sync-prompt-resolution';
12
13
  import { type ConfirmDesktopSyncRetirementInput, type SyncSessionRetirementReceipt } from './sync-session-retirement';
@@ -422,18 +423,16 @@ export interface DownloadUrlResponse {
422
423
  expiresAt: string;
423
424
  }
424
425
  /**
425
- * CP-1.b IMPL r2 M-4 — Typed GraphQL error that preserves AppSync's
426
- * `errorType` and `extensions` fields, alongside the human-readable
427
- * `message`. Stage 2 r1's `graphqlRequest()` threw a plain
428
- * `Error("GraphQL error: <message>")` and silently dropped
429
- * `errorType`, which broke `BackendPlannerClient.classifyTransportError`
430
- * (it discriminates on `err.errorType` to separate
431
- * `BudgetExceeded` / `TierGateRejected` from provider-health failures).
426
+ * The P61 old-backend retry's trigger: the server's schema lacks an input field the update sent.
432
427
  *
433
- * Callers may catch this class to inspect `errorType` directly. Code
434
- * paths that still parse error.message will continue to work because
435
- * the message is unchanged ("GraphQL error: <message>").
428
+ * AppSync answers a variable carrying an undefined input field with a GraphQL error whose message is
429
+ * exactly "The variables input contains a field that is not defined for input object type
430
+ * 'UpdateSessionInput'" — no `errorType`, and the field is not named (observed against Development on
431
+ * 2026-10-15, P61B-S1-F8; Phase B assumption PB-12). The caller retries only when the request carried
432
+ * clean-exit fields, and the retry removes only those, so a different unknown field still fails.
433
+ * The older validation-error shape that names a clean-exit field is kept as a second form.
436
434
  */
435
+ export declare function isUnknownCleanExitFieldError(error: unknown): boolean;
437
436
  export declare class AppSyncGraphQLError extends Error {
438
437
  readonly responseMessage: string;
439
438
  readonly errorType?: string;
@@ -1014,6 +1013,12 @@ export declare class AppSyncClient {
1014
1013
  * Create a session
1015
1014
  */
1016
1015
  createSession(input: CreateSessionInput): Promise<Session>;
1016
+ /**
1017
+ * P61 — the resume create (B-15). The same mutation as `createSession`, with
1018
+ * `resumedFromSessionId` selected so the caller can prove the server resumed
1019
+ * the predecessor. Used only on resume paths.
1020
+ */
1021
+ createResumedSession(input: CreateSessionInput): Promise<Session>;
1017
1022
  /**
1018
1023
  * Blind-hold one canonical ContextItem. The mutation is idempotent only for
1019
1024
  * an exact ciphertext+routing replay; a conflicting rewrite is rejected by
@@ -1098,6 +1103,18 @@ export declare class AppSyncClient {
1098
1103
  createdAt: string | null;
1099
1104
  updatedAt: string | null;
1100
1105
  }>>;
1106
+ /** One page of the caller's resumable sessions (creation order; amendment A-1). */
1107
+ listResumableSessions(limit?: number, nextToken?: string | null): Promise<ResumableSessionPage>;
1108
+ /**
1109
+ * Every resumable session (S1R1-F23: never just the first screen). The
1110
+ * 7-day window bounds the set; the page cap only stops a server that never
1111
+ * ends its token chain.
1112
+ */
1113
+ listAllResumableSessions(maxPages?: number): Promise<ResumeDetails[]>;
1114
+ /** One owner-only row in any status (null when absent or not owned). */
1115
+ getResumeDetails(sessionId: string): Promise<ResumeDetails | null>;
1116
+ /** One page of a session's hosted ContextItem rows (routing ids + ciphertext). */
1117
+ listContextItems(sessionId: string, nextToken?: string | null): Promise<ContextItemPage>;
1101
1118
  /**
1102
1119
  * Mark stale ACTIVE sessions of a given agentType INACTIVE so they
1103
1120
  * stop appearing in the mobile app's session list. Called at daemon
@@ -1128,6 +1145,20 @@ export declare class AppSyncClient {
1128
1145
  staleThresholdMs?: number;
1129
1146
  excludeSessionIds?: string[];
1130
1147
  }): Promise<number>;
1148
+ /**
1149
+ * P61 pre-listing retire (SESSION-RESUME-DESIGN.md §6.2 step 3; Phase B
1150
+ * B-5). Retires exactly the rows of the caller's own step-1 read for which
1151
+ * `willRetire` holds, so the `--continue` comparison and the retirement can
1152
+ * never disagree. Immediately before each retire the row is re-read
1153
+ * strongly, and it is skipped if it is no longer ACTIVE or its heartbeat
1154
+ * moved since the step-1 read (a live shell elsewhere). Returns the retired
1155
+ * IDs (step 4 merges them through `getResumeDetails`). Best effort: a failed
1156
+ * read or update leaves that row as it is.
1157
+ */
1158
+ sweepOrphanSessionsFromRows<T extends {
1159
+ sessionId: string;
1160
+ lastHeartbeatAt?: string | null;
1161
+ }>(rows: readonly T[], willRetire: (row: T) => boolean): Promise<string[]>;
1131
1162
  /**
1132
1163
  * List user device keys
1133
1164
  */
@@ -17,6 +17,9 @@ export declare const queries: {
17
17
  * whose creator died before its first heartbeat.
18
18
  */
19
19
  listSessions: string;
20
+ listResumableSessions: string;
21
+ getResumeDetails: string;
22
+ listContextItems: string;
20
23
  getSubscriptionStatus: string;
21
24
  queryAudit: string;
22
25
  verifyContinuationPacketWritten: string;
@@ -33,6 +36,7 @@ export declare const mutations: {
33
36
  recordExecutionEvent: string;
34
37
  putContextItem: string;
35
38
  createSession: string;
39
+ createResumedSession: string;
36
40
  updateSession: string;
37
41
  updateEvent: string;
38
42
  createEvent: string;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The one freshness rule shared by the plain-launch orphan sweep and the P61
3
+ * pre-listing retire (SESSION-RESUME-DESIGN.md §6.2 step 3): a row's age is
4
+ * `now − max(lastHeartbeatAt, createdAt, updatedAt)`, ignoring unparsable
5
+ * values. A row with no parsable value has no age, and is never swept on age.
6
+ */
7
+ export interface SessionFreshnessFields {
8
+ lastHeartbeatAt?: string | null;
9
+ createdAt?: string | null;
10
+ updatedAt?: string | null;
11
+ }
12
+ export declare function sessionFreshnessAgeMs(row: SessionFreshnessFields, nowMs: number): number | null;