@adhdev/daemon-core 0.9.76-rc.21 → 0.9.76-rc.22

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adhdev/daemon-core",
3
- "version": "0.9.76-rc.21",
3
+ "version": "0.9.76-rc.22",
4
4
  "description": "ADHDev daemon core — CDP, IDE detection, providers, command execution",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -152,6 +152,7 @@ const FAILURE_REASONS = new Set<GitFailureReason>([
152
152
  'dirty_index_required',
153
153
  'conflict',
154
154
  'invalid_args',
155
+ 'nothing_to_commit',
155
156
  'git_command_failed',
156
157
  ]);
157
158
 
@@ -454,7 +455,10 @@ async function gitCheckpoint(
454
455
  } catch (err: any) {
455
456
  const output = (err?.stdout || '') + (err?.stderr || '');
456
457
  if (/nothing to commit/i.test(output)) {
457
- throw new GitCommandError('git_command_failed', 'Nothing to commit');
458
+ throw new GitCommandError('nothing_to_commit', 'Nothing to commit — working tree is clean.', {
459
+ stdout: err?.stdout,
460
+ stderr: err?.stderr,
461
+ });
458
462
  }
459
463
  throw err;
460
464
  }
@@ -14,6 +14,7 @@ export type GitFailureReason =
14
14
  | 'dirty_index_required'
15
15
  | 'conflict'
16
16
  | 'invalid_args'
17
+ | 'nothing_to_commit'
17
18
  | 'git_command_failed';
18
19
 
19
20
  export interface GitRepoIdentity {
@@ -985,12 +985,33 @@ export class CliProviderInstance implements ProviderInstance {
985
985
  private mergeConversationMessages(parsedMessages: any[]): ChatMessage[] {
986
986
  if (this.runtimeMessages.length === 0) return normalizeChatMessages(parsedMessages);
987
987
 
988
- return normalizeChatMessages([...parsedMessages, ...this.runtimeMessages.map((entry) => entry.message)]
989
- .map((message, index) => ({ message, index }))
988
+ type MergeEntry = { message: ChatMessage; index: number; source: 'parsed' | 'runtime' };
989
+ const parsedEntries: MergeEntry[] = parsedMessages.map((message, index) => ({
990
+ message,
991
+ index,
992
+ source: 'parsed',
993
+ }));
994
+ const runtimeEntries: MergeEntry[] = this.runtimeMessages.map((entry, index) => ({
995
+ message: entry.message,
996
+ index: parsedMessages.length + index,
997
+ source: 'runtime',
998
+ }));
999
+ const getTime = (message: ChatMessage): number => {
1000
+ const value = typeof message.receivedAt === 'number'
1001
+ ? message.receivedAt
1002
+ : typeof message.timestamp === 'number'
1003
+ ? message.timestamp
1004
+ : 0;
1005
+ return Number.isFinite(value) && value > 0 ? value : 0;
1006
+ };
1007
+
1008
+ return normalizeChatMessages([...parsedEntries, ...runtimeEntries]
990
1009
  .sort((a, b) => {
991
- const aTime = a.message.receivedAt || a.message.timestamp || 0;
992
- const bTime = b.message.receivedAt || b.message.timestamp || 0;
993
- if (aTime !== bTime) return aTime - bTime;
1010
+ const aTime = getTime(a.message);
1011
+ const bTime = getTime(b.message);
1012
+ if (aTime && bTime && aTime !== bTime) return aTime - bTime;
1013
+ if (aTime && !bTime && a.source === 'runtime' && b.source === 'parsed') return -1;
1014
+ if (!aTime && bTime && a.source === 'parsed' && b.source === 'runtime') return 1;
994
1015
  return a.index - b.index;
995
1016
  })
996
1017
  .map((entry) => entry.message));