aicodeman 0.9.2 → 0.9.4

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 (63) hide show
  1. package/dist/types/index.d.ts +1 -0
  2. package/dist/types/index.d.ts.map +1 -1
  3. package/dist/types/index.js +1 -0
  4. package/dist/types/index.js.map +1 -1
  5. package/dist/types/update.d.ts +79 -0
  6. package/dist/types/update.d.ts.map +1 -0
  7. package/dist/types/update.js +16 -0
  8. package/dist/types/update.js.map +1 -0
  9. package/dist/web/public/api-client.3adebdc2.js.gz +0 -0
  10. package/dist/web/public/app.c860ea08.js.gz +0 -0
  11. package/dist/web/public/{constants.cb6426c4.js → constants.5b68d2de.js} +39 -3
  12. package/dist/web/public/constants.5b68d2de.js.br +0 -0
  13. package/dist/web/public/constants.5b68d2de.js.gz +0 -0
  14. package/dist/web/public/image-input.7cade6a8.js.gz +0 -0
  15. package/dist/web/public/index.html +21 -3
  16. package/dist/web/public/index.html.br +0 -0
  17. package/dist/web/public/index.html.gz +0 -0
  18. package/dist/web/public/input-cjk.88082175.js.gz +0 -0
  19. package/dist/web/public/keyboard-accessory.cdfd8c04.js.gz +0 -0
  20. package/dist/web/public/mobile-handlers.1e2a8ef8.js.gz +0 -0
  21. package/dist/web/public/mobile.26dc30d6.css.gz +0 -0
  22. package/dist/web/public/notification-manager.9c984ac2.js.gz +0 -0
  23. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  24. package/dist/web/public/panels-ui.3e304caf.js.gz +0 -0
  25. package/dist/web/public/ralph-panel.61076370.js.gz +0 -0
  26. package/dist/web/public/ralph-wizard.52d533d2.js.gz +0 -0
  27. package/dist/web/public/respawn-ui.5377f958.js.gz +0 -0
  28. package/dist/web/public/session-ui.3e0cf024.js.gz +0 -0
  29. package/dist/web/public/{settings-ui.c06be9c3.js → settings-ui.da0621e1.js} +8 -8
  30. package/dist/web/public/settings-ui.da0621e1.js.br +0 -0
  31. package/dist/web/public/settings-ui.da0621e1.js.gz +0 -0
  32. package/dist/web/public/styles.e87cb785.css.gz +0 -0
  33. package/dist/web/public/subagent-windows.a366a4ad.js.gz +0 -0
  34. package/dist/web/public/sw.js.gz +0 -0
  35. package/dist/web/public/terminal-ui.37caa926.js.gz +0 -0
  36. package/dist/web/public/upload.html.gz +0 -0
  37. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  38. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  39. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  40. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  41. package/dist/web/public/vendor/xterm-zerolag-input.137ad9f0.js.gz +0 -0
  42. package/dist/web/public/vendor/xterm.css.gz +0 -0
  43. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  44. package/dist/web/public/voice-input.085e9e73.js.gz +0 -0
  45. package/dist/web/routes/system-routes.d.ts.map +1 -1
  46. package/dist/web/routes/system-routes.js +30 -0
  47. package/dist/web/routes/system-routes.js.map +1 -1
  48. package/dist/web/self-update.d.ts +112 -0
  49. package/dist/web/self-update.d.ts.map +1 -0
  50. package/dist/web/self-update.js +518 -0
  51. package/dist/web/self-update.js.map +1 -0
  52. package/dist/web/server.d.ts.map +1 -1
  53. package/dist/web/server.js +7 -0
  54. package/dist/web/server.js.map +1 -1
  55. package/dist/web/sse-events.d.ts +5 -3
  56. package/dist/web/sse-events.d.ts.map +1 -1
  57. package/dist/web/sse-events.js +5 -3
  58. package/dist/web/sse-events.js.map +1 -1
  59. package/package.json +1 -1
  60. package/dist/web/public/constants.cb6426c4.js.br +0 -0
  61. package/dist/web/public/constants.cb6426c4.js.gz +0 -0
  62. package/dist/web/public/settings-ui.c06be9c3.js.br +0 -0
  63. package/dist/web/public/settings-ui.c06be9c3.js.gz +0 -0
@@ -65,4 +65,5 @@ export * from './teams.js';
65
65
  export * from './push.js';
66
66
  export * from './plan.js';
67
67
  export * from './orchestrator.js';
68
+ export * from './update.js';
68
69
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
@@ -65,4 +65,5 @@ export * from './teams.js';
65
65
  export * from './push.js';
66
66
  export * from './plan.js';
67
67
  export * from './orchestrator.js';
68
+ export * from './update.js';
68
69
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @fileoverview Types for the in-app self-updater.
3
+ *
4
+ * Codeman can update itself from the web UI (App Settings → Updates). The flow
5
+ * is driven by a detached `scripts/self-update.sh` that outlives the service
6
+ * restart it triggers, and a status file at `~/.codeman/update-status.json`
7
+ * (see `dataPath('update-status.json')`) that the browser polls across the
8
+ * restart boundary.
9
+ *
10
+ * Backend logic: `src/web/self-update.ts`. Routes: `src/web/routes/system-routes.ts`
11
+ * (`/api/system/update/check`, `POST /api/system/update`, `/api/system/update/status`).
12
+ *
13
+ * @module types/update
14
+ */
15
+ /** Which init system supervises the running server (decides how we restart it). */
16
+ export type SupervisorKind = 'systemd' | 'launchd' | 'none';
17
+ /** How Codeman was installed — only `git` installs can self-update in place. */
18
+ export type InstallKind = 'git' | 'npm' | 'unknown';
19
+ /**
20
+ * Lifecycle of a single update run. `idle`/`completed`/`failed`/
21
+ * `completed-needs-manual-restart` are terminal; the rest are in-flight.
22
+ */
23
+ export type UpdatePhase = 'idle' | 'queued' | 'preparing' | 'stashing' | 'fetching' | 'checkout' | 'installing' | 'building' | 'restarting' | 'completed' | 'completed-needs-manual-restart' | 'failed';
24
+ /** Persisted update progress, written atomically by the updater + boot reconcile. */
25
+ export interface UpdateStatus {
26
+ /** Nonce identifying this run; guards boot-reconcile against stale/foreign status. */
27
+ updateId: string;
28
+ phase: UpdatePhase;
29
+ /** Human-readable one-liner for the UI. */
30
+ message: string;
31
+ /** Version the server was on when the update started. */
32
+ fromVersion: string;
33
+ /** Target version (parsed from the release tag). */
34
+ toVersion?: string;
35
+ /** Target git tag, e.g. `codeman@0.9.4`. */
36
+ toTag?: string;
37
+ /** Commit the repo was on before the update, for rollback. */
38
+ prevSha?: string;
39
+ /** Name of the stash holding local changes (when the tree was dirty), else null. */
40
+ stashRef?: string | null;
41
+ supervisor?: SupervisorKind;
42
+ /** epoch ms — update start (freshness guard for boot reconcile). */
43
+ startedAt: number;
44
+ /** epoch ms — last write. */
45
+ updatedAt: number;
46
+ /** Populated on failure. */
47
+ error?: string;
48
+ /** Shown for the `none` supervisor — the command the user must run by hand. */
49
+ manualRestartCommand?: string;
50
+ }
51
+ /** Describes the running install — drives whether/how the Updates UI is shown. */
52
+ export interface InstallInfo {
53
+ installKind: InstallKind;
54
+ installDir: string;
55
+ /** Current git branch, or `HEAD` when detached (e.g. pinned to a release tag). */
56
+ branch?: string;
57
+ /** Uncommitted local changes present (true → updater will auto-stash). */
58
+ dirty: boolean;
59
+ supervisor: SupervisorKind;
60
+ currentVersion: string;
61
+ /** False when `CODEMAN_DISABLE_SELF_UPDATE=1`. */
62
+ selfUpdateEnabled: boolean;
63
+ }
64
+ /** Result of "check for updates" — current vs. latest release. */
65
+ export interface UpdateCheckResult {
66
+ currentVersion: string;
67
+ latestVersion: string | null;
68
+ latestTag: string | null;
69
+ updateAvailable: boolean;
70
+ /** Release notes (markdown) when available from the GitHub API. */
71
+ notes?: string | null;
72
+ /** Link to the release page. */
73
+ htmlUrl?: string | null;
74
+ /** epoch ms of the check. */
75
+ checkedAt: number;
76
+ source: 'github-api' | 'git-ls-remote' | 'none';
77
+ error?: string;
78
+ }
79
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/types/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5D,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,QAAQ,GACR,WAAW,GACX,UAAU,GACV,UAAU,GACV,UAAU,GACV,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,WAAW,GACX,gCAAgC,GAChC,QAAQ,CAAC;AAEb,qFAAqF;AACrF,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,cAAc,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,MAAM,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @fileoverview Types for the in-app self-updater.
3
+ *
4
+ * Codeman can update itself from the web UI (App Settings → Updates). The flow
5
+ * is driven by a detached `scripts/self-update.sh` that outlives the service
6
+ * restart it triggers, and a status file at `~/.codeman/update-status.json`
7
+ * (see `dataPath('update-status.json')`) that the browser polls across the
8
+ * restart boundary.
9
+ *
10
+ * Backend logic: `src/web/self-update.ts`. Routes: `src/web/routes/system-routes.ts`
11
+ * (`/api/system/update/check`, `POST /api/system/update`, `/api/system/update/status`).
12
+ *
13
+ * @module types/update
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/types/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
Binary file
@@ -10,7 +10,7 @@
10
10
  * @globals {function} scheduleBackground - scheduler.postTask wrapper (background priority)
11
11
  * @globals {function} getEventCoords - Unified mouse/touch coordinate extractor
12
12
  * @globals {function} escapeHtml - XSS-safe HTML escaping
13
- * @globals {object} SSE_EVENTS - Centralized SSE event type constants (~73 event types)
13
+ * @globals {object} SSE_EVENTS - Centralized SSE event type constants (120 event types; must match backend src/web/sse-events.ts)
14
14
  * @globals {Array} BUILTIN_RESPAWN_PRESETS - Built-in respawn configuration presets
15
15
  *
16
16
  * @dependency None (first in load order)
@@ -241,27 +241,45 @@ const SSE_EVENTS = {
241
241
  SESSION_IDLE: 'session:idle',
242
242
  SESSION_WORKING: 'session:working',
243
243
  SESSION_AUTO_CLEAR: 'session:autoClear',
244
+ SESSION_AUTO_COMPACT: 'session:autoCompact',
244
245
  SESSION_CLI_INFO: 'session:cliInfo',
246
+ SESSION_MESSAGE: 'session:message',
247
+ SESSION_INTERACTIVE: 'session:interactive',
248
+ SESSION_RUNNING: 'session:running',
245
249
 
246
250
  // Scheduled runs
247
251
  SCHEDULED_CREATED: 'scheduled:created',
248
252
  SCHEDULED_UPDATED: 'scheduled:updated',
249
253
  SCHEDULED_COMPLETED: 'scheduled:completed',
250
254
  SCHEDULED_STOPPED: 'scheduled:stopped',
255
+ SCHEDULED_LOG: 'scheduled:log',
256
+ SCHEDULED_DELETED: 'scheduled:deleted',
251
257
 
252
258
  // Respawn
253
259
  RESPAWN_STARTED: 'respawn:started',
254
260
  RESPAWN_STOPPED: 'respawn:stopped',
255
261
  RESPAWN_STATE_CHANGED: 'respawn:stateChanged',
256
262
  RESPAWN_CYCLE_STARTED: 'respawn:cycleStarted',
263
+ RESPAWN_CYCLE_COMPLETED: 'respawn:cycleCompleted',
257
264
  RESPAWN_BLOCKED: 'respawn:blocked',
258
- RESPAWN_AUTO_ACCEPT_SENT: 'respawn:autoAcceptSent',
265
+ RESPAWN_STEP_SENT: 'respawn:stepSent',
266
+ RESPAWN_STEP_COMPLETED: 'respawn:stepCompleted',
259
267
  RESPAWN_DETECTION_UPDATE: 'respawn:detectionUpdate',
268
+ RESPAWN_AUTO_ACCEPT_SENT: 'respawn:autoAcceptSent',
269
+ RESPAWN_AI_CHECK_STARTED: 'respawn:aiCheckStarted',
270
+ RESPAWN_AI_CHECK_COMPLETED: 'respawn:aiCheckCompleted',
271
+ RESPAWN_AI_CHECK_FAILED: 'respawn:aiCheckFailed',
272
+ RESPAWN_AI_CHECK_COOLDOWN: 'respawn:aiCheckCooldown',
273
+ RESPAWN_PLAN_CHECK_STARTED: 'respawn:planCheckStarted',
274
+ RESPAWN_PLAN_CHECK_COMPLETED: 'respawn:planCheckCompleted',
275
+ RESPAWN_PLAN_CHECK_FAILED: 'respawn:planCheckFailed',
260
276
  RESPAWN_TIMER_STARTED: 'respawn:timerStarted',
261
277
  RESPAWN_TIMER_CANCELLED: 'respawn:timerCancelled',
262
278
  RESPAWN_TIMER_COMPLETED: 'respawn:timerCompleted',
263
- RESPAWN_ERROR: 'respawn:error',
264
279
  RESPAWN_ACTION_LOG: 'respawn:actionLog',
280
+ RESPAWN_LOG: 'respawn:log',
281
+ RESPAWN_ERROR: 'respawn:error',
282
+ RESPAWN_CONFIG_UPDATED: 'respawn:configUpdated',
265
283
 
266
284
  // Tasks
267
285
  TASK_CREATED: 'task:created',
@@ -288,6 +306,12 @@ const SSE_EVENTS = {
288
306
  SESSION_BASH_TOOL_END: 'session:bashToolEnd',
289
307
  SESSION_BASH_TOOLS_UPDATE: 'session:bashToolsUpdate',
290
308
 
309
+ // Session: Plan
310
+ SESSION_PLAN_TASK_UPDATE: 'session:planTaskUpdate',
311
+ SESSION_PLAN_CHECKPOINT: 'session:planCheckpoint',
312
+ SESSION_PLAN_ROLLBACK: 'session:planRollback',
313
+ SESSION_PLAN_TASK_ADDED: 'session:planTaskAdded',
314
+
291
315
  // Hooks (Claude Code hook events)
292
316
  HOOK_IDLE_PROMPT: 'hook:idle_prompt',
293
317
  HOOK_PERMISSION_PROMPT: 'hook:permission_prompt',
@@ -338,6 +362,18 @@ const SSE_EVENTS = {
338
362
  ORCHESTRATOR_COMPLETED: 'orchestrator:completed',
339
363
  ORCHESTRATOR_ERROR: 'orchestrator:error',
340
364
 
365
+ // Teams (agent teams)
366
+ TEAM_CREATED: 'team:created',
367
+ TEAM_UPDATED: 'team:updated',
368
+ TEAM_REMOVED: 'team:removed',
369
+ TEAM_TASK_UPDATED: 'team:taskUpdated',
370
+
371
+ // Transcript
372
+ TRANSCRIPT_COMPLETE: 'transcript:complete',
373
+ TRANSCRIPT_PLAN_MODE: 'transcript:plan_mode',
374
+ TRANSCRIPT_TOOL_START: 'transcript:tool_start',
375
+ TRANSCRIPT_TOOL_END: 'transcript:tool_end',
376
+
341
377
  // Clipboard
342
378
  CLIPBOARD_WRITE: 'clipboard:write',
343
379
 
@@ -24,7 +24,7 @@
24
24
  <!-- Preload critical resources — lets browser discover these during HTML parse
25
25
  instead of waiting until <script> tags at bottom-of-body are reached. -->
26
26
  <link rel="preload" href="vendor/xterm.min.js" as="script">
27
- <link rel="preload" href="constants.cb6426c4.js" as="script">
27
+ <link rel="preload" href="constants.5b68d2de.js" as="script">
28
28
  <link rel="preload" href="app.c860ea08.js" as="script">
29
29
  <!-- Self-hosted xterm.js — eliminates CDN DNS/TLS latency (~100ms).
30
30
  'defer' preserves execution order (xterm loads before fit addon). -->
@@ -1078,6 +1078,24 @@
1078
1078
  <span id="tunnelUploadUrlDisplay" class="settings-item-value" style="cursor:pointer; text-decoration:underline; font-family:monospace; font-size:12px" title="Click to copy"></span>
1079
1079
  </div>
1080
1080
 
1081
+ <!-- Updates Section -->
1082
+ <div class="settings-section-header">Updates</div>
1083
+ <div class="settings-item" title="Codeman version currently running">
1084
+ <span class="settings-item-label">Current Version</span>
1085
+ <span class="settings-item-value" id="updateCurrentVersion" style="font-family:monospace">&mdash;</span>
1086
+ </div>
1087
+ <div class="settings-item" id="updateCheckRow" title="Check GitHub for a newer Codeman release">
1088
+ <span class="settings-item-label">Check for Updates</span>
1089
+ <button class="btn-toolbar btn-sm" id="updateCheckBtn" onclick="app.checkForUpdate()">Check now</button>
1090
+ </div>
1091
+ <div id="updateResult" style="display:none; padding:4px 2px 8px; font-size:13px; color:var(--text-secondary)"></div>
1092
+ <div class="settings-item" id="updateActionRow" style="display:none">
1093
+ <span class="settings-item-label" id="updateActionLabel">Update available</span>
1094
+ <button class="btn-toolbar btn-sm btn-primary" id="updateNowBtn" onclick="app.startSelfUpdate()">Update now</button>
1095
+ </div>
1096
+ <div id="updateNotes" style="display:none; max-height:160px; overflow:auto; padding:8px 10px; margin:4px 0 8px; font-size:12px; line-height:1.45; white-space:pre-wrap; word-break:break-word; background:rgba(127,127,127,0.08); border:1px solid var(--border); border-radius:6px"></div>
1097
+ <div id="updateProgress" style="display:none; padding:8px 10px; margin:4px 0 8px; font-size:13px; border:1px solid var(--border); border-radius:6px"></div>
1098
+
1081
1099
  </div>
1082
1100
  </div>
1083
1101
  <!-- Tab-Switch Tab -->
@@ -1816,7 +1834,7 @@
1816
1834
  <!-- Lines drawn dynamically -->
1817
1835
  </svg>
1818
1836
 
1819
- <script defer src="constants.cb6426c4.js"></script>
1837
+ <script defer src="constants.5b68d2de.js"></script>
1820
1838
  <script defer src="mobile-handlers.1e2a8ef8.js"></script>
1821
1839
  <script defer src="voice-input.085e9e73.js"></script>
1822
1840
  <script defer src="notification-manager.9c984ac2.js"></script>
@@ -1827,7 +1845,7 @@
1827
1845
  <script defer src="respawn-ui.5377f958.js"></script>
1828
1846
  <script defer src="ralph-panel.61076370.js"></script>
1829
1847
  <script defer src="orchestrator-panel.js"></script>
1830
- <script defer src="settings-ui.c06be9c3.js"></script>
1848
+ <script defer src="settings-ui.da0621e1.js"></script>
1831
1849
  <script defer src="panels-ui.3e304caf.js"></script>
1832
1850
  <script defer src="session-ui.3e0cf024.js"></script>
1833
1851
  <script defer src="ralph-wizard.52d533d2.js"></script>
Binary file
Binary file