@sumicom/quicksave 0.8.1 → 0.8.2

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 (41) hide show
  1. package/README.md +4 -0
  2. package/dist/ai/cardBuilder.d.ts +2 -0
  3. package/dist/ai/cardBuilder.d.ts.map +1 -1
  4. package/dist/ai/cardBuilder.js +62 -0
  5. package/dist/ai/cardBuilder.js.map +1 -1
  6. package/dist/ai/claudeCliProvider.d.ts +25 -1
  7. package/dist/ai/claudeCliProvider.d.ts.map +1 -1
  8. package/dist/ai/claudeCliProvider.js +77 -53
  9. package/dist/ai/claudeCliProvider.js.map +1 -1
  10. package/dist/ai/codexLogin.d.ts +57 -0
  11. package/dist/ai/codexLogin.d.ts.map +1 -0
  12. package/dist/ai/codexLogin.js +240 -0
  13. package/dist/ai/codexLogin.js.map +1 -0
  14. package/dist/ai/codexSdkProvider.d.ts.map +1 -1
  15. package/dist/ai/codexSdkProvider.js +66 -5
  16. package/dist/ai/codexSdkProvider.js.map +1 -1
  17. package/dist/ai/provider.d.ts +5 -0
  18. package/dist/ai/provider.d.ts.map +1 -1
  19. package/dist/ai/sessionManager.d.ts +6 -0
  20. package/dist/ai/sessionManager.d.ts.map +1 -1
  21. package/dist/ai/sessionManager.js +90 -4
  22. package/dist/ai/sessionManager.js.map +1 -1
  23. package/dist/files/fileBrowser.d.ts +25 -0
  24. package/dist/files/fileBrowser.d.ts.map +1 -0
  25. package/dist/files/fileBrowser.js +186 -0
  26. package/dist/files/fileBrowser.js.map +1 -0
  27. package/dist/handlers/messageHandler.d.ts +77 -5
  28. package/dist/handlers/messageHandler.d.ts.map +1 -1
  29. package/dist/handlers/messageHandler.js +399 -53
  30. package/dist/handlers/messageHandler.js.map +1 -1
  31. package/dist/index.js +2 -2
  32. package/dist/service/ipcClient.js +1 -1
  33. package/dist/service/run.d.ts.map +1 -1
  34. package/dist/service/run.js +57 -4
  35. package/dist/service/run.js.map +1 -1
  36. package/dist/service/types.js +1 -1
  37. package/dist/terminal/terminalManager.d.ts +48 -0
  38. package/dist/terminal/terminalManager.d.ts.map +1 -0
  39. package/dist/terminal/terminalManager.js +244 -0
  40. package/dist/terminal/terminalManager.js.map +1 -0
  41. package/package.json +4 -3
@@ -1,7 +1,8 @@
1
- import { Message, License, Repository, SessionRegistryEntry } from '@sumicom/quicksave-shared';
1
+ import { Message, License, Repository, SessionRegistryEntry, CodexModelInfo } from '@sumicom/quicksave-shared';
2
2
  import type { PushClient } from '../service/pushClient.js';
3
3
  import { CommitSummaryStateStore } from '../ai/commitSummaryStore.js';
4
4
  import { SessionManager } from '../ai/sessionManager.js';
5
+ import { CodexLoginManager } from '../ai/codexLogin.js';
5
6
  export declare class MessageHandler {
6
7
  private repos;
7
8
  private agentVersion;
@@ -21,20 +22,74 @@ export declare class MessageHandler {
21
22
  private versionCheckInFlight;
22
23
  private codexModelsCache;
23
24
  private codexModelsCheckInFlight;
25
+ private codexModelsUpdateHandler;
26
+ private codexModelsWatcher;
27
+ private codexModelsWatchDebounce;
28
+ /** Override for tests; defaults to `~/.codex`. */
29
+ private readonly codexCacheDir;
30
+ private codexLoginManager;
24
31
  onHistoryUpdated?: (cwd: string, entry: SessionRegistryEntry, action: 'upsert' | 'delete') => void;
25
32
  private productionBuild;
26
- constructor(repos: Repository[], _license?: License, codingPaths?: string[], productionBuild?: boolean);
33
+ constructor(repos: Repository[], _license?: License, codingPaths?: string[], productionBuild?: boolean, options?: {
34
+ codexCacheDir?: string;
35
+ });
27
36
  /**
28
37
  * Check npm registry for latest version. Deduped: returns cached value
29
38
  * if checked within the last 12 hours. Only runs in production builds.
30
39
  */
31
40
  private checkLatestVersion;
32
41
  /**
33
- * Fetch available Codex models from OpenAI /v1/models. Reads API key from
34
- * ~/.codex/auth.json (ChatGPT OAuth token or OPENAI_API_KEY). Cached for 12h
35
- * with concurrent-request dedup — same pattern as checkLatestVersion.
42
+ * Resolve the Codex model list for the current user.
43
+ *
44
+ * Priority:
45
+ * 1. `~/.codex/models_cache.json` — the Codex CLI's own cache of
46
+ * models the signed-in account can actually use. This is the
47
+ * authoritative list for ChatGPT-OAuth logins (the common case)
48
+ * and is kept fresh by the CLI itself. Reads are essentially free,
49
+ * so we use a short 5min in-memory TTL — and `startCodexModelsWatcher`
50
+ * invalidates the cache the moment the file is rewritten.
51
+ * 2. `OPENAI_API_KEY` env var + OpenAI `/v1/models` — fallback for
52
+ * API-key users, who are rare but still supported. Held to a 1h
53
+ * sub-TTL so we don't hammer OpenAI when the local cache is absent.
54
+ *
55
+ * Returns `null` when neither source is available (not logged in and no
56
+ * API key set). Concurrent calls are deduped.
36
57
  */
37
58
  private fetchCodexModels;
59
+ /** Snapshot accessor for the bus `/codex/models` subscription. */
60
+ getCachedCodexModels(): CodexModelInfo[];
61
+ /**
62
+ * Wire the daemon's bus broadcast for unsolicited model-list pushes.
63
+ * Called once during daemon boot; the watcher invokes this on cache change.
64
+ */
65
+ setCodexModelsUpdateHandler(handler: (models: CodexModelInfo[]) => void): void;
66
+ /**
67
+ * Watch the Codex CLI cache directory and refresh the in-memory model list
68
+ * the moment the CLI rewrites it (typically after a `codex` startup or
69
+ * upgrade). Tolerant of a missing `~/.codex` directory — falls back to TTL
70
+ * alone if the watch can't be set up. Idempotent.
71
+ */
72
+ startCodexModelsWatcher(): void;
73
+ /** Tear down the fs.watch handle (test cleanup). */
74
+ stopCodexModelsWatcher(): void;
75
+ private scheduleCodexModelsRefresh;
76
+ private refreshCodexModelsAndPublish;
77
+ /**
78
+ * Read models from the Codex CLI's local cache. File shape (as of codex
79
+ * CLI v0.125): `{ models: [{ slug, display_name, visibility, supported_in_api, ... }] }`.
80
+ * We surface only entries that are listable and API-supported, so hidden
81
+ * internal models (e.g. `codex-auto-review`) don't leak into the picker.
82
+ */
83
+ private readCodexModelsCacheFile;
84
+ /** Fallback for API-key users (no ChatGPT OAuth). */
85
+ private fetchCodexModelsFromOpenAI;
86
+ /**
87
+ * Best-effort check for whether the local Codex CLI has valid auth.
88
+ * Matches how `fetchCodexModels` resolves credentials, so the PWA can
89
+ * prompt for login when this returns false. Does not validate the
90
+ * token — just checks that a credential source exists.
91
+ */
92
+ private getCodexLoginStatus;
38
93
  addRepo(repo: Repository): void;
39
94
  removeRepo(path: string): void;
40
95
  private getClientRepoPath;
@@ -106,6 +161,16 @@ export declare class MessageHandler {
106
161
  private handleAgentUpdate;
107
162
  private handleAgentRestart;
108
163
  private handleCodexListModels;
164
+ /**
165
+ * Kick off the Codex device-auth OAuth flow on the daemon. Returns the
166
+ * one-time verification URL + user code so the PWA can display them — the
167
+ * user typically completes this on a different device (e.g. phone).
168
+ */
169
+ private handleCodexLoginStart;
170
+ private handleCodexLoginStatus;
171
+ private handleCodexLoginCancel;
172
+ /** Expose for the daemon to wire login-state updates into bus broadcasts. */
173
+ getCodexLoginManager(): CodexLoginManager;
109
174
  private handleClaudeStart;
110
175
  private handleClaudeResume;
111
176
  private handleClaudeCancel;
@@ -140,6 +205,13 @@ export declare class MessageHandler {
140
205
  private getGitBranchQuiet;
141
206
  private getGitDirtyQuiet;
142
207
  private handlePushSubscriptionOffer;
208
+ private handleTerminalCreate;
209
+ private handleTerminalInput;
210
+ private handleTerminalResize;
211
+ private handleTerminalClose;
212
+ private handleTerminalRename;
213
+ private handleFilesList;
214
+ private handleFilesRead;
143
215
  private createErrorResponse;
144
216
  }
145
217
  //# sourceMappingURL=messageHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/messageHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/messageHandler.ts"],"names":[],"mappings":"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"}