aicodeman 1.25.0 → 1.26.1

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 (123) hide show
  1. package/dist/agent-case-marker.d.ts +91 -0
  2. package/dist/agent-case-marker.d.ts.map +1 -0
  3. package/dist/agent-case-marker.js +151 -0
  4. package/dist/agent-case-marker.js.map +1 -0
  5. package/dist/codex-transcript.d.ts +84 -0
  6. package/dist/codex-transcript.d.ts.map +1 -0
  7. package/dist/codex-transcript.js +341 -0
  8. package/dist/codex-transcript.js.map +1 -0
  9. package/dist/config/cli-registry/schema.d.ts +4 -0
  10. package/dist/config/cli-registry/schema.d.ts.map +1 -1
  11. package/dist/config/cli-registry/schema.js +15 -1
  12. package/dist/config/cli-registry/schema.js.map +1 -1
  13. package/dist/config/cli-registry/stock.d.ts.map +1 -1
  14. package/dist/config/cli-registry/stock.js +12 -0
  15. package/dist/config/cli-registry/stock.js.map +1 -1
  16. package/dist/config/cli-registry/types.d.ts +23 -0
  17. package/dist/config/cli-registry/types.d.ts.map +1 -1
  18. package/dist/hooks-config.d.ts +25 -0
  19. package/dist/hooks-config.d.ts.map +1 -1
  20. package/dist/hooks-config.js +67 -3
  21. package/dist/hooks-config.js.map +1 -1
  22. package/dist/services/unified-session-service.d.ts +28 -10
  23. package/dist/services/unified-session-service.d.ts.map +1 -1
  24. package/dist/services/unified-session-service.js +11 -6
  25. package/dist/services/unified-session-service.js.map +1 -1
  26. package/dist/session.d.ts +11 -0
  27. package/dist/session.d.ts.map +1 -1
  28. package/dist/session.js +90 -41
  29. package/dist/session.js.map +1 -1
  30. package/dist/types/api.d.ts +32 -0
  31. package/dist/types/api.d.ts.map +1 -1
  32. package/dist/types/api.js.map +1 -1
  33. package/dist/web/public/admin-ui.js.gz +0 -0
  34. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  35. package/dist/web/public/app.3a89ac57.js.gz +0 -0
  36. package/dist/web/public/approvals-ui.js.gz +0 -0
  37. package/dist/web/public/constants.7a635e34.js.gz +0 -0
  38. package/dist/web/public/cron-ui.js.gz +0 -0
  39. package/dist/web/public/entrance-animations.js.gz +0 -0
  40. package/dist/web/public/home-sessions.js.gz +0 -0
  41. package/dist/web/public/i18n.9db8c4e0.js.gz +0 -0
  42. package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
  43. package/dist/web/public/index.html +4 -4
  44. package/dist/web/public/index.html.br +0 -0
  45. package/dist/web/public/index.html.gz +0 -0
  46. package/dist/web/public/input-cjk.87f14251.js.gz +0 -0
  47. package/dist/web/public/keyboard-accessory.daf18302.js.gz +0 -0
  48. package/dist/web/public/mobile-handlers.0f83a608.js.gz +0 -0
  49. package/dist/web/public/mobile-overview.js +12 -1
  50. package/dist/web/public/mobile-overview.js.br +0 -0
  51. package/dist/web/public/mobile-overview.js.gz +0 -0
  52. package/dist/web/public/mobile.7112f27d.css.gz +0 -0
  53. package/dist/web/public/notification-manager.36ea4624.js.gz +0 -0
  54. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  55. package/dist/web/public/{panels-ui.db4785bf.js → panels-ui.9eb5b235.js} +1 -1
  56. package/dist/web/public/panels-ui.9eb5b235.js.br +0 -0
  57. package/dist/web/public/panels-ui.9eb5b235.js.gz +0 -0
  58. package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
  59. package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
  60. package/dist/web/public/readmymind-ui.js.gz +0 -0
  61. package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
  62. package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
  63. package/dist/web/public/session-lineage.js.gz +0 -0
  64. package/dist/web/public/{session-ui.58116fce.js → session-ui.cd222710.js} +32 -23
  65. package/dist/web/public/session-ui.cd222710.js.br +0 -0
  66. package/dist/web/public/session-ui.cd222710.js.gz +0 -0
  67. package/dist/web/public/settings-ui.554f9cdd.js.gz +0 -0
  68. package/dist/web/public/styles.298f81f2.css +1 -0
  69. package/dist/web/public/styles.298f81f2.css.br +0 -0
  70. package/dist/web/public/{styles.2a35729d.css.gz → styles.298f81f2.css.gz} +0 -0
  71. package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
  72. package/dist/web/public/sw.js.gz +0 -0
  73. package/dist/web/public/tab-rail-resize.42c24949.js.gz +0 -0
  74. package/dist/web/public/{terminal-ui.70445f81.js → terminal-ui.a39b5aa7.js} +2 -2
  75. package/dist/web/public/terminal-ui.a39b5aa7.js.br +0 -0
  76. package/dist/web/public/terminal-ui.a39b5aa7.js.gz +0 -0
  77. package/dist/web/public/ultracode-panel.js.gz +0 -0
  78. package/dist/web/public/ultracode-windows.js.gz +0 -0
  79. package/dist/web/public/upload.html.gz +0 -0
  80. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  81. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  82. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  83. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  84. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  85. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  86. package/dist/web/public/vendor/xterm-predictive-echo.bd6882b8.js.gz +0 -0
  87. package/dist/web/public/vendor/xterm-zerolag-input.6fee72f2.js.gz +0 -0
  88. package/dist/web/public/vendor/xterm.css.gz +0 -0
  89. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  90. package/dist/web/public/voice-input.c4b51eb6.js.gz +0 -0
  91. package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
  92. package/dist/web/public/webview-tabs.js.gz +0 -0
  93. package/dist/web/route-helpers.d.ts +18 -0
  94. package/dist/web/route-helpers.d.ts.map +1 -1
  95. package/dist/web/route-helpers.js +23 -0
  96. package/dist/web/route-helpers.js.map +1 -1
  97. package/dist/web/routes/case-routes.d.ts.map +1 -1
  98. package/dist/web/routes/case-routes.js +73 -2
  99. package/dist/web/routes/case-routes.js.map +1 -1
  100. package/dist/web/routes/session-routes.d.ts.map +1 -1
  101. package/dist/web/routes/session-routes.js +76 -4
  102. package/dist/web/routes/session-routes.js.map +1 -1
  103. package/dist/web/schemas.d.ts +1 -0
  104. package/dist/web/schemas.d.ts.map +1 -1
  105. package/dist/web/schemas.js +10 -0
  106. package/dist/web/schemas.js.map +1 -1
  107. package/dist/web/server.d.ts.map +1 -1
  108. package/dist/web/server.js +20 -1
  109. package/dist/web/server.js.map +1 -1
  110. package/package.json +1 -1
  111. package/skills/codeman/SKILL.md +14 -10
  112. package/skills/codeman/preamble.sh +6 -3
  113. package/skills/codeman/reference/endpoints.md +9 -0
  114. package/skills/codeman/reference/recipes.md +1 -1
  115. package/skills/codeman/reference/verbs.md +15 -0
  116. package/dist/web/public/panels-ui.db4785bf.js.br +0 -0
  117. package/dist/web/public/panels-ui.db4785bf.js.gz +0 -0
  118. package/dist/web/public/session-ui.58116fce.js.br +0 -0
  119. package/dist/web/public/session-ui.58116fce.js.gz +0 -0
  120. package/dist/web/public/styles.2a35729d.css +0 -1
  121. package/dist/web/public/styles.2a35729d.css.br +0 -0
  122. package/dist/web/public/terminal-ui.70445f81.js.br +0 -0
  123. package/dist/web/public/terminal-ui.70445f81.js.gz +0 -0
@@ -88,6 +88,20 @@ export interface CaseInfo {
88
88
  location?: 'local' | 'linked-local' | 'remote' | 'docker';
89
89
  /** Whether this is a linked local folder */
90
90
  linked?: boolean;
91
+ /**
92
+ * Present when Codeman scaffolded this case directory for an AGENT-spawned session
93
+ * (the packaged skill's workers, or any spawn naming a parent session), read back
94
+ * from the case's own marker file — see `src/agent-case-marker.ts`. Absent for every
95
+ * case a human created, linked or cloned, which is what makes it usable as the
96
+ * "safe to clean up" signal in the Manage tab.
97
+ */
98
+ agentCreated?: {
99
+ createdAt: string;
100
+ createdBy: string;
101
+ parentSessionId?: string;
102
+ parentSessionName?: string;
103
+ mode?: string;
104
+ };
91
105
  /** Remote case metadata for display and session creation */
92
106
  remote?: {
93
107
  hostId: string;
@@ -122,6 +136,24 @@ export interface CaseInfo {
122
136
  owned?: boolean;
123
137
  };
124
138
  }
139
+ /**
140
+ * One agent-created case as `GET /api/cases/agent-created` reports it: the cleanup
141
+ * view over `CaseInfo.agentCreated`, with the two facts a human needs before deleting
142
+ * a directory — whether an agent is still working in it, and when it was last touched.
143
+ */
144
+ export interface AgentCaseSummary {
145
+ name: string;
146
+ path: string;
147
+ createdAt: string;
148
+ createdBy: string;
149
+ parentSessionId?: string;
150
+ parentSessionName?: string;
151
+ mode?: string;
152
+ /** A live session's working directory is this case — deleting it would pull the rug. */
153
+ inUse: boolean;
154
+ /** Directory mtime, so "nothing has touched this in a week" is answerable. */
155
+ modifiedAt?: string;
156
+ }
125
157
  /**
126
158
  * Safely extracts an error message from an unknown caught value.
127
159
  * Handles the TypeScript 4.4+ unknown error type in catch blocks.
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;GAEG;AACH,oBAAY,YAAY;IACtB,yBAAyB;IACzB,SAAS,cAAc;IACvB,6BAA6B;IAC7B,aAAa,kBAAkB;IAC/B,wCAAwC;IACxC,YAAY,iBAAiB;IAC7B,gCAAgC;IAChC,YAAY,iBAAiB;IAC7B,kEAAkE;IAClE,QAAQ,aAAa;IACrB,8BAA8B;IAC9B,cAAc,mBAAmB;IACjC,uCAAuC;IACvC,YAAY,iBAAiB;IAC7B,uEAAuE;IACvE,gBAAgB,qBAAqB;IACrC,8EAA8E;IAC9E,SAAS,cAAc;IACvB,2EAA2E;IAC3E,wBAAwB,6BAA6B;IACrD,wDAAwD;IACxD,WAAW,gBAAgB;IAC3B,0CAA0C;IAC1C,cAAc,mBAAmB;IACjC,4EAA4E;IAC5E,UAAU,eAAe;IACzB,4BAA4B;IAC5B,cAAc,mBAAmB;CAClC;AA4CD,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,mBAAmB,GACnB,oBAAoB,GACpB,sBAAsB,GACtB,sBAAsB,GACtB,MAAM,GACN,eAAe,GACf,gBAAgB,GAIhB,kBAAkB,GAIlB,eAAe,CAAC;AAIpB;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAC/B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAM5F;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1D,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,4DAA4D;IAC5D,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB;;;;;WAKG;QACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B;;;;;;;;;WASG;QACH,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAaD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWtD"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,YA6BX;AA7BD,WAAY,YAAY;IACtB,yBAAyB;IACzB,uCAAuB,CAAA;IACvB,6BAA6B;IAC7B,+CAA+B,CAAA;IAC/B,wCAAwC;IACxC,6CAA6B,CAAA;IAC7B,gCAAgC;IAChC,6CAA6B,CAAA;IAC7B,kEAAkE;IAClE,qCAAqB,CAAA;IACrB,8BAA8B;IAC9B,iDAAiC,CAAA;IACjC,uCAAuC;IACvC,6CAA6B,CAAA;IAC7B,uEAAuE;IACvE,qDAAqC,CAAA;IACrC,8EAA8E;IAC9E,uCAAuB,CAAA;IACvB,2EAA2E;IAC3E,qEAAqD,CAAA;IACrD,wDAAwD;IACxD,2CAA2B,CAAA;IAC3B,0CAA0C;IAC1C,iDAAiC,CAAA;IACjC,4EAA4E;IAC5E,yCAAyB,CAAA;IACzB,4BAA4B;IAC5B,iDAAiC,CAAA;AACnC,CAAC,EA7BW,YAAY,KAAZ,YAAY,QA6BvB;AAED;;GAEG;AACH,MAAM,aAAa,GAAiC;IAClD,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,sCAAsC;IAChE,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,wBAAwB;IACtD,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,yBAAyB;IACtD,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,2BAA2B;IACxD,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,0CAA0C;IACnE,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,yBAAyB;IACxD,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,mBAAmB;IAChD,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,sBAAsB;IACvD,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,mDAAmD;IAC7E,CAAC,YAAY,CAAC,wBAAwB,CAAC,EAAE,iDAAiD;IAC1F,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,sCAAsC;IAClE,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,cAAc;IAC7C,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,sCAAsC;IACjE,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,4BAA4B;CAC5D,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,GAAiC;IAChD,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG;IACjC,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,GAAG;IAChC,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,GAAG;IAC7B,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,GAAG;IAChC,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG;IAC5B,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,GAAG;IAClC,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,GAAG;IACpC,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,GAAG;IAC7B,CAAC,YAAY,CAAC,wBAAwB,CAAC,EAAE,GAAG;IAC5C,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,GAAG;IAC/B,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,GAAG;IAClC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,GAAG;IAC9B,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,GAAG;IAChC,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,GAAG;CACnC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,UAAU,sBAAsB,CAAC,IAAkB;IACvD,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;AAClC,CAAC;AAiCD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAkB,EAAE,OAAgB;IACtE,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC;QACrC,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAoFD,iDAAiD;AAEjD;;;;GAIG;AACH,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,YAAY,KAAK,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAE,KAA8B,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,2BAA2B,CAAC;AACrC,CAAC"}
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -16,7 +16,7 @@
16
16
  <link rel="manifest" href="manifest.json">
17
17
  <title>Codeman</title>
18
18
  <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0%25' y1='0%25' x2='100%25' y2='100%25'%3E%3Cstop offset='0%25' stop-color='%2360a5fa'/%3E%3Cstop offset='100%25' stop-color='%233b82f6'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='32' height='32' rx='6' fill='%230a0a0a'/%3E%3Cpath d='M18 4L8 18h6l-2 10 10-14h-6z' fill='url(%23g)'/%3E%3C/svg%3E">
19
- <link rel="stylesheet" href="styles.2a35729d.css">
19
+ <link rel="stylesheet" href="styles.298f81f2.css">
20
20
  <link rel="stylesheet" href="mobile.7112f27d.css" media="(max-width: 1023px)">
21
21
  <!-- xterm.css loaded async — terminal won't display until xterm.js runs anyway -->
22
22
  <link rel="preload" href="vendor/xterm.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
@@ -3462,18 +3462,18 @@
3462
3462
  <script defer src="sanitize-html.bc7078d6.js"></script>
3463
3463
  <script defer src="app.3a89ac57.js"></script>
3464
3464
  <script defer src="tab-rail-resize.42c24949.js"></script>
3465
- <script defer src="terminal-ui.70445f81.js"></script>
3465
+ <script defer src="terminal-ui.a39b5aa7.js"></script>
3466
3466
  <script defer src="respawn-ui.ff0dae4c.js"></script>
3467
3467
  <script defer src="ralph-panel.6de2d0f8.js"></script>
3468
3468
  <script defer src="orchestrator-panel.js"></script>
3469
3469
  <script defer src="cron-ui.js"></script>
3470
3470
  <script defer src="settings-ui.554f9cdd.js"></script>
3471
- <script defer src="panels-ui.db4785bf.js"></script>
3471
+ <script defer src="panels-ui.9eb5b235.js"></script>
3472
3472
  <script defer src="readmymind-ui.js"></script>
3473
3473
  <script defer src="ultracode-panel.js"></script>
3474
3474
  <script defer src="approvals-ui.js"></script>
3475
3475
  <script defer src="admin-ui.js"></script>
3476
- <script defer src="session-ui.58116fce.js"></script>
3476
+ <script defer src="session-ui.cd222710.js"></script>
3477
3477
  <script defer src="webview-tabs.js"></script>
3478
3478
  <script defer src="mobile-overview.js"></script>
3479
3479
  <script defer src="home-sessions.js"></script>
Binary file
Binary file
@@ -228,6 +228,11 @@ Object.assign(CodemanApp.prototype, {
228
228
  name: item.name || '',
229
229
  title: title || item.name || dir.split('/').pop() || item.sessionId.slice(0, 8),
230
230
  mode: item.mode || 'claude',
231
+ // Only the scanner sets this, and only for a codex rollout. Dropping it here
232
+ // is not cosmetic: resumeMobileOverviewSession() passes row.resumeId on to
233
+ // resumeHistorySession(), so without it a tapped Codex row starts a FRESH
234
+ // session on a thread that is already on disk.
235
+ resumeId: item.resumeId || undefined,
231
236
  caseName: matched ? matched.name : '',
232
237
  dir: this._shortenHomePath ? this._shortenHomePath(dir) : dir,
233
238
  at: item.lastActivityAt || item.createdAt || 0,
@@ -389,7 +394,13 @@ Object.assign(CodemanApp.prototype, {
389
394
  async resumeMobileOverviewSession(sessionId) {
390
395
  const row = (this._mobileOverviewPastRows || []).find((r) => r.id === sessionId);
391
396
  if (!row || !row.workingDir) return;
392
- await this.resumeHistorySession(row.claudeSessionId || row.id, row.workingDir, row.name || undefined, row.mode);
397
+ await this.resumeHistorySession(
398
+ row.claudeSessionId || row.id,
399
+ row.workingDir,
400
+ row.name || undefined,
401
+ row.mode,
402
+ row.resumeId
403
+ );
393
404
  },
394
405
 
395
406
  // ═══════════════════════════════════════════════════════════════
@@ -6,7 +6,7 @@
6
6
  <span class="command-palette-subtitle">${escapeHtml(i.subtitle||"")}</span>
7
7
  </span>
8
8
  </button>
9
- `}).join("")},moveCommandPaletteSelection(e){const t=this.commandPaletteItems||this.buildCommandPaletteItems(document.getElementById("commandPaletteSearch")?.value||"");t.length&&(this.commandPaletteActiveIndex=(this.commandPaletteActiveIndex+e+t.length)%t.length,this.renderCommandPalette())},async activateCommandPaletteItem(e=this.commandPaletteActiveIndex||0){const t=(this.commandPaletteItems||[])[e];if(t){if(this.closeCommandPalette(),t.type==="session"&&t.sessionId){await this.selectSession(t.sessionId);return}if(t.type==="browse-sessions"){this.openSessionManager();return}if(t.type==="new-session"){const s=document.getElementById("quickStartCase");if(s&&t.caseName){if(s.tagName==="SELECT"&&typeof s.appendChild=="function"&&!Array.from(s.options||[]).some(n=>n.value===t.caseName)){const n=document.createElement("option");n.value=t.caseName,n.textContent=t.caseName,s.appendChild(n)}typeof this.selectQuickStartCase=="function"?this.selectQuickStartCase(t.caseName):s.value=t.caseName}await this.run()}}},async openSessionManager(){const e=document.getElementById("sessionManagerModal");if(e&&(e.classList.add("active"),this._sessionManagerEscWired||(this._sessionManagerEscWired=!0,e.addEventListener("keydown",s=>{s.key==="Escape"&&(s.preventDefault(),s.stopPropagation(),this.closeSessionManager())}))),!Array.isArray(this.cases)||this.cases.length===0)try{const s=await fetch("/api/cases"),n=s.ok?await s.json():null;this.cases=n?.data||[]}catch{this.cases=this.cases||[]}const t=document.getElementById("sessionManagerSearch");t&&(this._sessionManagerSearchWired||(this._sessionManagerSearchWired=!0,t.addEventListener("input",()=>{const s=t.value.trim();this._debouncedCall("sessionManagerSearch",()=>this._loadSessionManagerList(s),200)})),t.value="",t.focus()),await this._loadSessionManagerList("")},closeSessionManager(){const e=document.getElementById("sessionManagerModal");e&&e.classList.remove("active")},_setSessionManagerMessage(e,t){e.replaceChildren();const s=document.createElement("p");s.className="empty-message",s.textContent=t,e.appendChild(s)},async _loadSessionManagerList(e=""){this._sessionManagerQuery=e;const t=document.getElementById("sessionManagerList");if(t)try{const s="/api/sessions/unified?limit=200"+(e?"&q="+encodeURIComponent(e):""),n=await fetch(s),i=await n.json().catch(()=>null);if(!n.ok||!i||i.success===!1||!i.data){this._setSessionManagerMessage(t,i?.error||`Failed to load sessions (HTTP ${n.status})`);return}const a=i.data.sessions||[];if(t.replaceChildren(),a.length===0){this._setSessionManagerMessage(t,e?"No sessions match your search":"No sessions found");return}for(const r of a){const o={sessionId:r.sessionId,workingDir:r.workingDir||"",sizeBytes:r.sizeBytes??0,lastModified:new Date(r.lastActivityAt??r.createdAt??Date.now()).toISOString(),firstPrompt:r.firstPrompt||r.name||"",gitBranch:r.gitBranch,worktreeName:r.worktreeName,worktreeRepo:r.worktreeRepo},l=!!this.sessions?.has?.(r.sessionId),c=this._buildHistoryItem(o,this.cases,{showViewAll:!1,onActivate:()=>{this.closeSessionManager(),l?this.selectSession(r.sessionId):o.workingDir&&this.resumeHistorySession(r.claudeSessionId||r.sessionId,o.workingDir,void 0,r.mode)}});t.appendChild(c)}}catch(s){console.error("[_loadSessionManagerList]",s),this._setSessionManagerMessage(t,"Failed to load sessions")}},async openAwayDigest(e="since-last-visit"){this.awayDigestRange=e,this._awayDigestLoadedSuccessfully=!1,this._awayDigestSinceLastVisitGeneratedAt=void 0;const t=document.getElementById("awayDigestModal");t&&t.classList.add("active"),this.updateAwayDigestRangeControls(),await this.loadAwayDigest()},closeAwayDigest(){const e=document.getElementById("awayDigestModal"),t=this._awayDigestSinceLastVisitGeneratedAt;if(Number.isFinite(t))try{localStorage.setItem(AWAY_DIGEST_LAST_VIEWED_KEY,String(t))}catch(s){console.warn("Failed to save away digest last-viewed marker:",s)}e&&e.classList.remove("active")},_onSessionListMaybeChanged(){const e=document.getElementById("sessionManagerModal");e&&e.classList.contains("active")&&this._debouncedCall("sessionManagerRefresh",()=>this._loadSessionManagerList(this._sessionManagerQuery||""),400);const t=document.getElementById("welcomeOverlay");t&&t.classList.contains("visible")&&this._debouncedCall("welcomeHistoryRefresh",()=>this.loadHistorySessions(),600)},setAwayDigestRange(e){this.awayDigestRange=e,this._awayDigestLoadedSuccessfully=!1,this.updateAwayDigestRangeControls(),this.loadAwayDigest()},updateAwayDigestRangeControls(){const e=this.awayDigestRange||"since-last-visit";document.querySelectorAll("[data-away-range]").forEach(s=>{s.classList.toggle("active",s.dataset.awayRange===e)});const t=document.getElementById("awayDigestCustomRange");t&&t.classList.toggle("active",e==="custom"),e==="custom"&&this.ensureAwayDigestCustomDefaults()},ensureAwayDigestCustomDefaults(){const e=document.getElementById("awayDigestCustomSince"),t=document.getElementById("awayDigestCustomUntil");if(!e||!t)return;const s=new Date;if(t.value||(t.value=this.formatAwayDigestDateTimeLocal(s)),!e.value){const n=new Date(s.getTime()-36e5);e.value=this.formatAwayDigestDateTimeLocal(n)}},formatAwayDigestDateTimeLocal(e){const t=s=>String(s).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}`},async loadAwayDigest(){const e=document.getElementById("awayDigestSummary"),t=document.getElementById("awayDigestFreshness"),s=document.getElementById("awayDigestSections");e&&(e.innerHTML='<div class="away-digest-loading">Loading digest...</div>'),t&&(t.textContent=""),s&&(s.innerHTML="");try{const n=this.awayDigestRange||"since-last-visit",i=new URLSearchParams({range:n});if(n==="since-last-visit"){const o=this.readAwayDigestLastViewed();Number.isFinite(o)&&i.set("lastViewed",String(o))}if(n==="custom"){this.ensureAwayDigestCustomDefaults();const o=this.readAwayDigestDateTimeInput("awayDigestCustomSince"),l=this.readAwayDigestDateTimeInput("awayDigestCustomUntil");if(!Number.isFinite(o))throw new Error("Choose a custom start time");i.set("since",String(o)),Number.isFinite(l)&&i.set("until",String(l))}const a=await fetch(`/api/away-digest?${i.toString()}`),r=await a.json();if(!a.ok||!r.success)throw new Error(r.error||"Failed to load away digest");this._awayDigestLoadedSuccessfully=!0,this._awayDigestGeneratedAt=r.digest.generatedAt,n==="since-last-visit"&&(this._awayDigestSinceLastVisitGeneratedAt=r.digest.generatedAt),this.renderAwayDigest(r.digest)}catch(n){const i=n instanceof Error?n.message:"Failed to load away digest";console.error("Failed to fetch away digest:",n),e&&(e.innerHTML='<div class="away-digest-load-error">Failed to load away digest</div>'),s&&(s.innerHTML=`<div class="empty-message">${escapeHtml(i)}</div>`),this.showToast(i,"error")}},readAwayDigestLastViewed(){try{const e=localStorage.getItem(AWAY_DIGEST_LAST_VIEWED_KEY),t=Number(e);return Number.isFinite(t)?t:void 0}catch{return}},readAwayDigestDateTimeInput(e){const t=document.getElementById(e);if(!t||!t.value)return;const s=Date.parse(t.value);return Number.isFinite(s)?s:void 0},renderAwayDigest(e){const t=document.getElementById("awayDigestSummary"),s=document.getElementById("awayDigestFreshness"),n=document.getElementById("awayDigestSections");if(!t||!s||!n)return;const i=e.totals.inputTokens||0,a=e.totals.outputTokens||0,r=e.totals.estimatedCost||0;t.innerHTML=`
9
+ `}).join("")},moveCommandPaletteSelection(e){const t=this.commandPaletteItems||this.buildCommandPaletteItems(document.getElementById("commandPaletteSearch")?.value||"");t.length&&(this.commandPaletteActiveIndex=(this.commandPaletteActiveIndex+e+t.length)%t.length,this.renderCommandPalette())},async activateCommandPaletteItem(e=this.commandPaletteActiveIndex||0){const t=(this.commandPaletteItems||[])[e];if(t){if(this.closeCommandPalette(),t.type==="session"&&t.sessionId){await this.selectSession(t.sessionId);return}if(t.type==="browse-sessions"){this.openSessionManager();return}if(t.type==="new-session"){const s=document.getElementById("quickStartCase");if(s&&t.caseName){if(s.tagName==="SELECT"&&typeof s.appendChild=="function"&&!Array.from(s.options||[]).some(n=>n.value===t.caseName)){const n=document.createElement("option");n.value=t.caseName,n.textContent=t.caseName,s.appendChild(n)}typeof this.selectQuickStartCase=="function"?this.selectQuickStartCase(t.caseName):s.value=t.caseName}await this.run()}}},async openSessionManager(){const e=document.getElementById("sessionManagerModal");if(e&&(e.classList.add("active"),this._sessionManagerEscWired||(this._sessionManagerEscWired=!0,e.addEventListener("keydown",s=>{s.key==="Escape"&&(s.preventDefault(),s.stopPropagation(),this.closeSessionManager())}))),!Array.isArray(this.cases)||this.cases.length===0)try{const s=await fetch("/api/cases"),n=s.ok?await s.json():null;this.cases=n?.data||[]}catch{this.cases=this.cases||[]}const t=document.getElementById("sessionManagerSearch");t&&(this._sessionManagerSearchWired||(this._sessionManagerSearchWired=!0,t.addEventListener("input",()=>{const s=t.value.trim();this._debouncedCall("sessionManagerSearch",()=>this._loadSessionManagerList(s),200)})),t.value="",t.focus()),await this._loadSessionManagerList("")},closeSessionManager(){const e=document.getElementById("sessionManagerModal");e&&e.classList.remove("active")},_setSessionManagerMessage(e,t){e.replaceChildren();const s=document.createElement("p");s.className="empty-message",s.textContent=t,e.appendChild(s)},async _loadSessionManagerList(e=""){this._sessionManagerQuery=e;const t=document.getElementById("sessionManagerList");if(t)try{const s="/api/sessions/unified?limit=200"+(e?"&q="+encodeURIComponent(e):""),n=await fetch(s),i=await n.json().catch(()=>null);if(!n.ok||!i||i.success===!1||!i.data){this._setSessionManagerMessage(t,i?.error||`Failed to load sessions (HTTP ${n.status})`);return}const a=i.data.sessions||[];if(t.replaceChildren(),a.length===0){this._setSessionManagerMessage(t,e?"No sessions match your search":"No sessions found");return}for(const r of a){const o={sessionId:r.sessionId,workingDir:r.workingDir||"",sizeBytes:r.sizeBytes??0,lastModified:new Date(r.lastActivityAt??r.createdAt??Date.now()).toISOString(),firstPrompt:r.firstPrompt||r.name||"",gitBranch:r.gitBranch,worktreeName:r.worktreeName,worktreeRepo:r.worktreeRepo},l=!!this.sessions?.has?.(r.sessionId),c=this._buildHistoryItem(o,this.cases,{showViewAll:!1,onActivate:()=>{this.closeSessionManager(),l?this.selectSession(r.sessionId):o.workingDir&&this.resumeHistorySession(r.claudeSessionId||r.sessionId,o.workingDir,void 0,r.mode,r.resumeId)}});t.appendChild(c)}}catch(s){console.error("[_loadSessionManagerList]",s),this._setSessionManagerMessage(t,"Failed to load sessions")}},async openAwayDigest(e="since-last-visit"){this.awayDigestRange=e,this._awayDigestLoadedSuccessfully=!1,this._awayDigestSinceLastVisitGeneratedAt=void 0;const t=document.getElementById("awayDigestModal");t&&t.classList.add("active"),this.updateAwayDigestRangeControls(),await this.loadAwayDigest()},closeAwayDigest(){const e=document.getElementById("awayDigestModal"),t=this._awayDigestSinceLastVisitGeneratedAt;if(Number.isFinite(t))try{localStorage.setItem(AWAY_DIGEST_LAST_VIEWED_KEY,String(t))}catch(s){console.warn("Failed to save away digest last-viewed marker:",s)}e&&e.classList.remove("active")},_onSessionListMaybeChanged(){const e=document.getElementById("sessionManagerModal");e&&e.classList.contains("active")&&this._debouncedCall("sessionManagerRefresh",()=>this._loadSessionManagerList(this._sessionManagerQuery||""),400);const t=document.getElementById("welcomeOverlay");t&&t.classList.contains("visible")&&this._debouncedCall("welcomeHistoryRefresh",()=>this.loadHistorySessions(),600)},setAwayDigestRange(e){this.awayDigestRange=e,this._awayDigestLoadedSuccessfully=!1,this.updateAwayDigestRangeControls(),this.loadAwayDigest()},updateAwayDigestRangeControls(){const e=this.awayDigestRange||"since-last-visit";document.querySelectorAll("[data-away-range]").forEach(s=>{s.classList.toggle("active",s.dataset.awayRange===e)});const t=document.getElementById("awayDigestCustomRange");t&&t.classList.toggle("active",e==="custom"),e==="custom"&&this.ensureAwayDigestCustomDefaults()},ensureAwayDigestCustomDefaults(){const e=document.getElementById("awayDigestCustomSince"),t=document.getElementById("awayDigestCustomUntil");if(!e||!t)return;const s=new Date;if(t.value||(t.value=this.formatAwayDigestDateTimeLocal(s)),!e.value){const n=new Date(s.getTime()-36e5);e.value=this.formatAwayDigestDateTimeLocal(n)}},formatAwayDigestDateTimeLocal(e){const t=s=>String(s).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}`},async loadAwayDigest(){const e=document.getElementById("awayDigestSummary"),t=document.getElementById("awayDigestFreshness"),s=document.getElementById("awayDigestSections");e&&(e.innerHTML='<div class="away-digest-loading">Loading digest...</div>'),t&&(t.textContent=""),s&&(s.innerHTML="");try{const n=this.awayDigestRange||"since-last-visit",i=new URLSearchParams({range:n});if(n==="since-last-visit"){const o=this.readAwayDigestLastViewed();Number.isFinite(o)&&i.set("lastViewed",String(o))}if(n==="custom"){this.ensureAwayDigestCustomDefaults();const o=this.readAwayDigestDateTimeInput("awayDigestCustomSince"),l=this.readAwayDigestDateTimeInput("awayDigestCustomUntil");if(!Number.isFinite(o))throw new Error("Choose a custom start time");i.set("since",String(o)),Number.isFinite(l)&&i.set("until",String(l))}const a=await fetch(`/api/away-digest?${i.toString()}`),r=await a.json();if(!a.ok||!r.success)throw new Error(r.error||"Failed to load away digest");this._awayDigestLoadedSuccessfully=!0,this._awayDigestGeneratedAt=r.digest.generatedAt,n==="since-last-visit"&&(this._awayDigestSinceLastVisitGeneratedAt=r.digest.generatedAt),this.renderAwayDigest(r.digest)}catch(n){const i=n instanceof Error?n.message:"Failed to load away digest";console.error("Failed to fetch away digest:",n),e&&(e.innerHTML='<div class="away-digest-load-error">Failed to load away digest</div>'),s&&(s.innerHTML=`<div class="empty-message">${escapeHtml(i)}</div>`),this.showToast(i,"error")}},readAwayDigestLastViewed(){try{const e=localStorage.getItem(AWAY_DIGEST_LAST_VIEWED_KEY),t=Number(e);return Number.isFinite(t)?t:void 0}catch{return}},readAwayDigestDateTimeInput(e){const t=document.getElementById(e);if(!t||!t.value)return;const s=Date.parse(t.value);return Number.isFinite(s)?s:void 0},renderAwayDigest(e){const t=document.getElementById("awayDigestSummary"),s=document.getElementById("awayDigestFreshness"),n=document.getElementById("awayDigestSections");if(!t||!s||!n)return;const i=e.totals.inputTokens||0,a=e.totals.outputTokens||0,r=e.totals.estimatedCost||0;t.innerHTML=`
10
10
  <div class="away-digest-card">
11
11
  <span class="away-digest-card-label">Needs Attention</span>
12
12
  <span class="away-digest-card-value">${e.totals.needsAttention}</span>
Binary file