@adhdev/daemon-core 0.8.24 → 0.8.27

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 (34) hide show
  1. package/dist/agent-stream/provider-adapter.d.ts +1 -0
  2. package/dist/boot/daemon-lifecycle.d.ts +2 -0
  3. package/dist/cli-adapters/pty-transport.d.ts +3 -0
  4. package/dist/commands/router.d.ts +24 -0
  5. package/dist/index.js +309 -19
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +309 -19
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/providers/cli-provider-instance.d.ts +1 -0
  10. package/dist/providers/extension-provider-instance.d.ts +7 -0
  11. package/dist/sessions/reconcile.d.ts +22 -0
  12. package/dist/status/normalize.js +14 -2
  13. package/dist/status/normalize.js.map +1 -1
  14. package/dist/status/normalize.mjs +14 -2
  15. package/dist/status/normalize.mjs.map +1 -1
  16. package/dist/status/snapshot.d.ts +0 -2
  17. package/node_modules/@adhdev/session-host-core/dist/index.d.mts +72 -1
  18. package/node_modules/@adhdev/session-host-core/dist/index.d.ts +72 -1
  19. package/node_modules/@adhdev/session-host-core/dist/index.js.map +1 -1
  20. package/node_modules/@adhdev/session-host-core/package.json +1 -1
  21. package/package.json +1 -1
  22. package/src/agent-stream/poller.ts +4 -0
  23. package/src/agent-stream/provider-adapter.ts +30 -1
  24. package/src/boot/daemon-lifecycle.ts +3 -0
  25. package/src/cli-adapters/pty-transport.ts +3 -0
  26. package/src/cli-adapters/session-host-transport.ts +8 -0
  27. package/src/commands/chat-commands.ts +2 -2
  28. package/src/commands/handler.ts +79 -13
  29. package/src/commands/router.ts +132 -0
  30. package/src/providers/cli-provider-instance.ts +29 -1
  31. package/src/providers/extension-provider-instance.ts +24 -1
  32. package/src/sessions/reconcile.ts +85 -0
  33. package/src/status/normalize.ts +19 -2
  34. package/src/status/snapshot.ts +6 -13
@@ -64,6 +64,23 @@ function trimMessageForStatus(message: unknown, stringLimit: number): unknown {
64
64
  return trimStructuredStrings(message, stringLimit);
65
65
  }
66
66
 
67
+ /**
68
+ * Collapse timestamp / createdAt into receivedAt so downstream consumers
69
+ * only ever need to read a single canonical time field.
70
+ */
71
+ function normalizeMessageTime(message: unknown): unknown {
72
+ if (!message || typeof message !== 'object') return message;
73
+ const msg = message as Record<string, unknown>;
74
+ if (msg.receivedAt == null) {
75
+ const fallback = msg.timestamp ?? msg.createdAt;
76
+ if (fallback != null) {
77
+ const ts = typeof fallback === 'string' ? Date.parse(fallback as string) : Number(fallback);
78
+ if (Number.isFinite(ts) && ts > 0) msg.receivedAt = ts;
79
+ }
80
+ }
81
+ return msg;
82
+ }
83
+
67
84
  function trimMessagesForStatus(messages: unknown[] | null | undefined): unknown[] {
68
85
  if (!Array.isArray(messages) || messages.length === 0) return [];
69
86
 
@@ -72,11 +89,11 @@ function trimMessagesForStatus(messages: unknown[] | null | undefined): unknown[
72
89
  let totalBytes = 0;
73
90
 
74
91
  for (let i = recent.length - 1; i >= 0; i -= 1) {
75
- let normalized = trimMessageForStatus(recent[i], STATUS_ACTIVE_CHAT_STRING_LIMIT);
92
+ let normalized = normalizeMessageTime(trimMessageForStatus(recent[i], STATUS_ACTIVE_CHAT_STRING_LIMIT));
76
93
  let size = estimateBytes(normalized);
77
94
 
78
95
  if (size > STATUS_ACTIVE_CHAT_TOTAL_BYTES_LIMIT) {
79
- normalized = trimMessageForStatus(recent[i], STATUS_ACTIVE_CHAT_FALLBACK_STRING_LIMIT);
96
+ normalized = normalizeMessageTime(trimMessageForStatus(recent[i], STATUS_ACTIVE_CHAT_FALLBACK_STRING_LIMIT));
80
97
  size = estimateBytes(normalized);
81
98
  }
82
99
 
@@ -95,17 +95,12 @@ function parseMessageTime(value: unknown): number {
95
95
 
96
96
  function getSessionMessageUpdatedAt(session: {
97
97
  activeChat?: {
98
- messages?: Array<{ timestamp?: number | string; receivedAt?: number | string; createdAt?: number | string }> | null
98
+ messages?: Array<{ receivedAt?: number | string }> | null
99
99
  } | null
100
100
  }) {
101
101
  const lastMessage = session.activeChat?.messages?.at?.(-1);
102
102
  if (!lastMessage) return 0;
103
- return (
104
- parseMessageTime(lastMessage.timestamp)
105
- || parseMessageTime(lastMessage.receivedAt)
106
- || parseMessageTime(lastMessage.createdAt)
107
- || 0
108
- );
103
+ return parseMessageTime(lastMessage.receivedAt) || 0;
109
104
  }
110
105
 
111
106
  export function getSessionCompletionMarker(session: {
@@ -114,9 +109,7 @@ export function getSessionCompletionMarker(session: {
114
109
  role?: string;
115
110
  id?: string;
116
111
  index?: number;
117
- timestamp?: number | string;
118
112
  receivedAt?: number | string;
119
- createdAt?: number | string;
120
113
  _turnKey?: string;
121
114
  }> | null
122
115
  } | null
@@ -124,17 +117,17 @@ export function getSessionCompletionMarker(session: {
124
117
  const lastMessage = session.activeChat?.messages?.at?.(-1) as any;
125
118
  if (!lastMessage) return '';
126
119
  const role = typeof lastMessage.role === 'string' ? lastMessage.role : '';
127
- if (role === 'user' || role === 'human') return '';
120
+ if (role === 'user' || role === 'human' || role === 'system') return '';
128
121
  if (typeof lastMessage._turnKey === 'string' && lastMessage._turnKey) return `turn:${lastMessage._turnKey}`;
129
122
  if (typeof lastMessage.id === 'string' && lastMessage.id) return `id:${lastMessage.id}`;
130
123
  if (typeof lastMessage.index === 'number' && Number.isFinite(lastMessage.index)) return `idx:${lastMessage.index}`;
131
- const timestamp = parseMessageTime(lastMessage.timestamp) || parseMessageTime(lastMessage.receivedAt) || parseMessageTime(lastMessage.createdAt);
124
+ const timestamp = parseMessageTime(lastMessage.receivedAt);
132
125
  return timestamp > 0 ? `ts:${timestamp}` : '';
133
126
  }
134
127
 
135
128
  function getSessionLastUsedAt(session: {
136
129
  activeChat?: {
137
- messages?: Array<{ timestamp?: number | string; receivedAt?: number | string; createdAt?: number | string }> | null
130
+ messages?: Array<{ receivedAt?: number | string }> | null
138
131
  } | null
139
132
  lastUpdated?: number
140
133
  }) {
@@ -171,7 +164,7 @@ function getUnreadState(
171
164
  }
172
165
  const unread = completionMarker
173
166
  ? completionMarker !== seenCompletionMarker
174
- : hasContentChange && lastUsedAt > lastSeenAt && lastRole !== 'user' && lastRole !== 'human';
167
+ : hasContentChange && lastUsedAt > lastSeenAt && lastRole !== 'user' && lastRole !== 'human' && lastRole !== 'system';
175
168
  return { unread, inboxBucket: unread ? 'task_complete' : 'idle' };
176
169
  }
177
170