commandmate 0.11.2 → 0.11.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 (136) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +124 -124
  3. package/.next/app-path-routes-manifest.json +25 -25
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/app/update/route.js +1 -1
  9. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update-check/route.js +1 -1
  11. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  85. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  108. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  109. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  111. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  112. package/.next/server/app/page_client-reference-manifest.js +1 -1
  113. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  115. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  116. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  117. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  118. package/.next/server/app/worktrees/[id]/page.js +2 -2
  119. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  120. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  121. package/.next/server/app-paths-manifest.json +25 -25
  122. package/.next/server/chunks/3753.js +5 -5
  123. package/.next/server/chunks/5959.js +1 -1
  124. package/.next/server/middleware-manifest.json +5 -5
  125. package/.next/server/pages/500.html +1 -1
  126. package/.next/server/server-reference-manifest.json +1 -1
  127. package/.next/static/chunks/{6488-d6b669a092a9aeb5.js → 6488-76295bf0184b101f.js} +1 -1
  128. package/.next/static/chunks/app/worktrees/[id]/{page-c6d64057df3a13d8.js → page-9a4ce51e697baac6.js} +1 -1
  129. package/.next/trace +10 -10
  130. package/dist/cli/utils/npx-runner.d.ts +14 -0
  131. package/dist/cli/utils/npx-runner.d.ts.map +1 -1
  132. package/dist/cli/utils/npx-runner.js +20 -0
  133. package/dist/server/src/lib/db/chat-db.js +50 -23
  134. package/package.json +1 -1
  135. /package/.next/static/{Xv8eF6ls3LFny16ZGj4Ij → 0_lnKsT0DH-MnHhnV5n-l}/_buildManifest.js +0 -0
  136. /package/.next/static/{Xv8eF6ls3LFny16ZGj4Ij → 0_lnKsT0DH-MnHhnV5n-l}/_ssgManifest.js +0 -0
@@ -70,6 +70,20 @@ export declare function sanitizeNpxEnv(env?: Record<string, string | undefined>)
70
70
  * @param packageName - Package name (a literal constant, e.g. `commandmate`)
71
71
  * @returns The fetched version, or a classified failure
72
72
  */
73
+ /**
74
+ * Working directory for the npx spawns (Issue #1410).
75
+ *
76
+ * The server — and the detached update process it spawns — run from the npx
77
+ * cache package dir (`~/.npm/_npx/<hash>/node_modules/commandmate`). While
78
+ * `warmNpxLatest` fetches the new version, npx deletes/replaces that dir, so a
79
+ * later npx spawn that inherited it crashes when npm calls `process.cwd()`
80
+ * (`ENOENT: uv_cwd`) during bootstrap, aborting the relaunch after the old
81
+ * server is already stopped. Running the npx spawns from the always-present home
82
+ * directory keeps `process.cwd()` valid regardless of npx cache churn. The
83
+ * relaunched daemon sets its own cwd to the (new) package root, so this does not
84
+ * change where the server ultimately runs.
85
+ */
86
+ export declare function stableNpxCwd(): string;
73
87
  export declare function warmNpxLatest(packageName: string): NpxWarmResult;
74
88
  /**
75
89
  * Relaunch the server as a daemon from the freshly-cached npx version.
@@ -1 +1 @@
1
- {"version":3,"file":"npx-runner.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/npx-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,QAAgB,CAAC;AAEnD,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,MAAM,CAAC,UAAU,CAWnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAoChE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAyCnE"}
1
+ {"version":3,"file":"npx-runner.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/npx-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,QAAgB,CAAC;AAEnD,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,MAAM,CAAC,UAAU,CAWnB;AAED;;;;;;;;;;;GAWG;AACH;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAqChE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CA0CnE"}
@@ -22,9 +22,11 @@
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
23
  exports.NPX_WARMUP_TIMEOUT_MS = void 0;
24
24
  exports.sanitizeNpxEnv = sanitizeNpxEnv;
25
+ exports.stableNpxCwd = stableNpxCwd;
25
26
  exports.warmNpxLatest = warmNpxLatest;
26
27
  exports.spawnNpxDaemon = spawnNpxDaemon;
27
28
  const child_process_1 = require("child_process");
29
+ const os_1 = require("os");
28
30
  /**
29
31
  * Upper bound for the warmup download.
30
32
  *
@@ -70,10 +72,27 @@ function sanitizeNpxEnv(env = process.env) {
70
72
  * @param packageName - Package name (a literal constant, e.g. `commandmate`)
71
73
  * @returns The fetched version, or a classified failure
72
74
  */
75
+ /**
76
+ * Working directory for the npx spawns (Issue #1410).
77
+ *
78
+ * The server — and the detached update process it spawns — run from the npx
79
+ * cache package dir (`~/.npm/_npx/<hash>/node_modules/commandmate`). While
80
+ * `warmNpxLatest` fetches the new version, npx deletes/replaces that dir, so a
81
+ * later npx spawn that inherited it crashes when npm calls `process.cwd()`
82
+ * (`ENOENT: uv_cwd`) during bootstrap, aborting the relaunch after the old
83
+ * server is already stopped. Running the npx spawns from the always-present home
84
+ * directory keeps `process.cwd()` valid regardless of npx cache churn. The
85
+ * relaunched daemon sets its own cwd to the (new) package root, so this does not
86
+ * change where the server ultimately runs.
87
+ */
88
+ function stableNpxCwd() {
89
+ return (0, os_1.homedir)();
90
+ }
73
91
  function warmNpxLatest(packageName) {
74
92
  const result = (0, child_process_1.spawnSync)('npx', ['--yes', `${packageName}@latest`, '--version'], {
75
93
  encoding: 'utf-8',
76
94
  timeout: exports.NPX_WARMUP_TIMEOUT_MS,
95
+ cwd: stableNpxCwd(),
77
96
  env: sanitizeNpxEnv(),
78
97
  });
79
98
  if (result.error) {
@@ -115,6 +134,7 @@ function warmNpxLatest(packageName) {
115
134
  function spawnNpxDaemon(packageName) {
116
135
  const result = (0, child_process_1.spawnSync)('npx', ['--yes', `${packageName}@latest`, 'start', '--daemon'], {
117
136
  encoding: 'utf-8',
137
+ cwd: stableNpxCwd(),
118
138
  env: sanitizeNpxEnv(),
119
139
  });
120
140
  const stdout = readStream(result.stdout);
@@ -123,30 +123,57 @@ function updateMessageContent(db, messageId, content, options) {
123
123
  * Get messages for a worktree, optionally filtered by CLI tool
124
124
  */
125
125
  function getMessages(db, worktreeId, options = {}) {
126
- const { before, limit = 50, cliToolId, instanceId, includeArchived = false } = options;
127
- let query = `
128
- SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id, instance_id, archived
129
- FROM chat_messages
130
- WHERE worktree_id = ? AND (? IS NULL OR timestamp < ?)
131
- `;
132
- const params = [worktreeId, before?.getTime() || null, before?.getTime() || null];
133
- // archived filter (default: non-archived only)
134
- if (!includeArchived) {
135
- query += ` ${exports.ACTIVE_FILTER}`;
136
- }
137
- // Issue #868: instance filter takes precedence; otherwise fall back to CLI tool filter.
138
- if (instanceId) {
139
- query += ` AND instance_id = ?`;
140
- params.push(instanceId);
141
- }
142
- else if (cliToolId) {
143
- query += ` AND cli_tool_id = ?`;
144
- params.push(cliToolId);
126
+ const { before, limit = 50, cliToolId, instanceId, includeArchived = false, limitUnit = 'messages' } = options;
127
+ // Build the shared scope clause (worktree + before cursor + archived + instance/cli
128
+ // filter) and its bound params. Used for both the message-unit and pair-unit paths
129
+ // so their filtering stays identical.
130
+ const buildScope = () => {
131
+ let clause = `FROM chat_messages
132
+ WHERE worktree_id = ? AND (? IS NULL OR timestamp < ?)`;
133
+ const params = [worktreeId, before?.getTime() || null, before?.getTime() || null];
134
+ // archived filter (default: non-archived only)
135
+ if (!includeArchived) {
136
+ clause += ` ${exports.ACTIVE_FILTER}`;
137
+ }
138
+ // Issue #868: instance filter takes precedence; otherwise fall back to CLI tool filter.
139
+ if (instanceId) {
140
+ clause += ` AND instance_id = ?`;
141
+ params.push(instanceId);
142
+ }
143
+ else if (cliToolId) {
144
+ clause += ` AND cli_tool_id = ?`;
145
+ params.push(cliToolId);
146
+ }
147
+ return { clause, params };
148
+ };
149
+ const SELECT_COLS = `SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id, instance_id, archived`;
150
+ // Issue #1407: pair-unit paging. Resolve a timestamp cutoff so the newest `limit`
151
+ // user turns are fully included (with all their assistant rows). This keeps the
152
+ // rendered conversation-pair count equal to `limit` even when a single turn emits
153
+ // many assistant rows (codex prompts/intermediate outputs). Falls back to
154
+ // message-unit paging when no user messages exist in scope.
155
+ if (limitUnit === 'pairs') {
156
+ const scope = buildScope();
157
+ const cutoffRow = db
158
+ .prepare(`SELECT MIN(timestamp) AS cutoff FROM (
159
+ SELECT timestamp ${scope.clause} AND role = 'user'
160
+ ORDER BY timestamp DESC LIMIT ?
161
+ )`)
162
+ .get(...scope.params, limit);
163
+ const cutoff = cutoffRow?.cutoff ?? null;
164
+ if (cutoff !== null) {
165
+ const full = buildScope();
166
+ const rows = db
167
+ .prepare(`${SELECT_COLS} ${full.clause} AND timestamp >= ? ORDER BY timestamp DESC`)
168
+ .all(...full.params, cutoff);
169
+ return rows.map(mapChatMessage);
170
+ }
171
+ // No user messages in scope → fall through to message-unit behavior below.
145
172
  }
146
- query += ` ORDER BY timestamp DESC LIMIT ?`;
147
- params.push(limit);
148
- const stmt = db.prepare(query);
149
- const rows = stmt.all(...params);
173
+ const scope = buildScope();
174
+ const rows = db
175
+ .prepare(`${SELECT_COLS} ${scope.clause} ORDER BY timestamp DESC LIMIT ?`)
176
+ .all(...scope.params, limit);
150
177
  return rows.map(mapChatMessage);
151
178
  }
152
179
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.11.2",
3
+ "version": "0.11.4",
4
4
  "description": "A local control plane for agent CLIs — orchestration and visibility for Claude Code, Codex, Gemini CLI, and more across Git worktrees",
5
5
  "keywords": [
6
6
  "claude-code",