@agentdeck/shared 0.2.0 → 0.2.3

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 (99) hide show
  1. package/dist/adapter.d.ts +3 -1
  2. package/dist/adapter.d.ts.map +1 -1
  3. package/dist/adapter.js +24 -0
  4. package/dist/adapter.js.map +1 -1
  5. package/dist/command-builders.d.ts +7 -2
  6. package/dist/command-builders.d.ts.map +1 -1
  7. package/dist/command-builders.js +17 -2
  8. package/dist/command-builders.js.map +1 -1
  9. package/dist/connection-status.d.ts +42 -0
  10. package/dist/connection-status.d.ts.map +1 -0
  11. package/dist/connection-status.js +52 -0
  12. package/dist/connection-status.js.map +1 -0
  13. package/dist/d200h-layout.d.ts +131 -0
  14. package/dist/d200h-layout.d.ts.map +1 -0
  15. package/dist/d200h-layout.js +627 -0
  16. package/dist/d200h-layout.js.map +1 -0
  17. package/dist/design-tokens.d.ts +259 -0
  18. package/dist/design-tokens.d.ts.map +1 -0
  19. package/dist/design-tokens.js +156 -0
  20. package/dist/design-tokens.js.map +1 -0
  21. package/dist/eval-schema.d.ts +26 -2
  22. package/dist/eval-schema.d.ts.map +1 -1
  23. package/dist/eval-schema.js.map +1 -1
  24. package/dist/format-utils.d.ts +25 -0
  25. package/dist/format-utils.d.ts.map +1 -1
  26. package/dist/format-utils.js +45 -0
  27. package/dist/format-utils.js.map +1 -1
  28. package/dist/gateway-protocol.d.ts +1 -1
  29. package/dist/gateway-protocol.js +1 -1
  30. package/dist/index.d.ts +8 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +8 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/llm-settings.d.ts +3 -3
  35. package/dist/llm-settings.d.ts.map +1 -1
  36. package/dist/llm-settings.js +3 -3
  37. package/dist/llm-settings.js.map +1 -1
  38. package/dist/net-utils.d.ts +2 -1
  39. package/dist/net-utils.d.ts.map +1 -1
  40. package/dist/net-utils.js +100 -3
  41. package/dist/net-utils.js.map +1 -1
  42. package/dist/pricing.d.ts +45 -0
  43. package/dist/pricing.d.ts.map +1 -0
  44. package/dist/pricing.js +93 -0
  45. package/dist/pricing.js.map +1 -0
  46. package/dist/protocol.d.ts +175 -5
  47. package/dist/protocol.d.ts.map +1 -1
  48. package/dist/protocol.js +11 -1
  49. package/dist/protocol.js.map +1 -1
  50. package/dist/sample.d.ts +152 -0
  51. package/dist/sample.d.ts.map +1 -0
  52. package/dist/sample.js +22 -0
  53. package/dist/sample.js.map +1 -0
  54. package/dist/session-utils.d.ts +82 -2
  55. package/dist/session-utils.d.ts.map +1 -1
  56. package/dist/session-utils.js +205 -10
  57. package/dist/session-utils.js.map +1 -1
  58. package/dist/state-colors.d.ts.map +1 -1
  59. package/dist/state-colors.js +2 -0
  60. package/dist/state-colors.js.map +1 -1
  61. package/dist/states.d.ts +1 -0
  62. package/dist/states.d.ts.map +1 -1
  63. package/dist/states.js +6 -1
  64. package/dist/states.js.map +1 -1
  65. package/dist/svg-renderers/agent-logos.d.ts +17 -5
  66. package/dist/svg-renderers/agent-logos.d.ts.map +1 -1
  67. package/dist/svg-renderers/agent-logos.js +177 -39
  68. package/dist/svg-renderers/agent-logos.js.map +1 -1
  69. package/dist/svg-renderers/session-slot-renderer.d.ts +59 -6
  70. package/dist/svg-renderers/session-slot-renderer.d.ts.map +1 -1
  71. package/dist/svg-renderers/session-slot-renderer.js +398 -209
  72. package/dist/svg-renderers/session-slot-renderer.js.map +1 -1
  73. package/dist/svg-renderers/text-utils.d.ts +14 -0
  74. package/dist/svg-renderers/text-utils.d.ts.map +1 -1
  75. package/dist/svg-renderers/text-utils.js +34 -0
  76. package/dist/svg-renderers/text-utils.js.map +1 -1
  77. package/dist/telemetry-envelope.d.ts +1 -1
  78. package/dist/telemetry-envelope.d.ts.map +1 -1
  79. package/dist/timeline-icons.d.ts +70 -0
  80. package/dist/timeline-icons.d.ts.map +1 -0
  81. package/dist/timeline-icons.js +161 -0
  82. package/dist/timeline-icons.js.map +1 -0
  83. package/dist/timeline-label.d.ts +38 -0
  84. package/dist/timeline-label.d.ts.map +1 -0
  85. package/dist/timeline-label.js +95 -0
  86. package/dist/timeline-label.js.map +1 -0
  87. package/dist/timeline-markdown.d.ts +80 -0
  88. package/dist/timeline-markdown.d.ts.map +1 -0
  89. package/dist/timeline-markdown.js +221 -0
  90. package/dist/timeline-markdown.js.map +1 -0
  91. package/dist/timeline-summarizer.d.ts +24 -0
  92. package/dist/timeline-summarizer.d.ts.map +1 -1
  93. package/dist/timeline-summarizer.js +55 -13
  94. package/dist/timeline-summarizer.js.map +1 -1
  95. package/dist/timeline.d.ts +72 -2
  96. package/dist/timeline.d.ts.map +1 -1
  97. package/dist/timeline.js +187 -10
  98. package/dist/timeline.js.map +1 -1
  99. package/package.json +1 -1
@@ -11,13 +11,44 @@ export type SessionTier = 'attention' | 'active' | 'idle';
11
11
  export declare function sessionTier(state: string | undefined): SessionTier;
12
12
  /**
13
13
  * Rank agent types for stable ordering.
14
- * openclaw=0 (always first), claude-code=1, codex-cli=2, opencode=3, others=4.
14
+ * openclaw=0 (always first), claude-code=1, codex-cli=2, codex-app=3, opencode=4, antigravity=5, others=6.
15
15
  */
16
16
  export declare function agentTypeRank(agentType: string | undefined): number;
17
+ export declare function naturalLabelCompare(a: string | undefined, b: string | undefined): number;
18
+ export interface GatewayVisibilityFlags {
19
+ /** TCP port 18789 reachable — a topology hint only, NOT proof commands route. */
20
+ gatewayAvailable?: boolean;
21
+ /** Gateway WS handshake + auth succeeded — proof commands can route. */
22
+ gatewayConnected?: boolean;
23
+ /** `openclaw doctor`/health reports an error. */
24
+ gatewayHasError?: boolean;
25
+ }
26
+ /**
27
+ * SSOT: the daemon injects the virtual `openclaw` session iff this holds.
28
+ *
29
+ * "Active" = authenticated / can-route = the Gateway WS handshake+auth
30
+ * succeeded (`gatewayConnected`). Reachability (`gatewayAvailable`) and health
31
+ * (`gatewayHasError`) are topology/status hints only and MUST NOT materialize a
32
+ * session — surfacing them as a session is what made OpenClaw "stick" on
33
+ * devices after it was effectively off.
34
+ *
35
+ * Hand-mirrored in Swift `DashboardDataRules.isOpenClawSessionActive`
36
+ * (apple/AgentDeck/Model/Protocol.swift) and Kotlin `isOpenClawSessionActive`
37
+ * (android/.../ui/eink/EinkFormatUtils.kt) — keep all three in lockstep.
38
+ */
39
+ export declare function isOpenClawSessionActive(flags: GatewayVisibilityFlags): boolean;
40
+ /**
41
+ * Consumer SSOT: render OpenClaw iff the daemon actually emitted the session.
42
+ * Consumers must NOT re-derive OpenClaw visibility from raw gateway flags;
43
+ * the daemon source is the single authority. Hand-mirrored in Swift/Kotlin.
44
+ */
45
+ export declare function hasOpenClawSession<T extends {
46
+ agentType?: string;
47
+ }>(sessions: readonly T[]): boolean;
17
48
  /**
18
49
  * Sort sessions with stable ordering that does NOT jump on state changes.
19
50
  *
20
- * Order: agentType (openclaw first → claude-code → codex → opencode)
51
+ * Order: agentType (openclaw first → claude-code → codex → opencode → antigravity)
21
52
  * → projectName alphabetically
22
53
  * → startedAt ascending (oldest first) for stability
23
54
  * → id as final tiebreaker
@@ -31,6 +62,23 @@ export declare function sortSessions<T extends {
31
62
  startedAt?: string;
32
63
  id?: string;
33
64
  }>(sessions: T[]): T[];
65
+ export interface FoldableSession {
66
+ id: string;
67
+ projectName?: string;
68
+ agentType?: string;
69
+ state?: string;
70
+ startedAt?: string;
71
+ currentTool?: string;
72
+ groupSize?: number;
73
+ foldedSessionIds?: string[];
74
+ }
75
+ /**
76
+ * Collapse Codex companion-task rows for the same project into one display
77
+ * session. Raw rows remain authoritative inside the daemon; every user-facing
78
+ * surface should count this folded shape so completed one-turn Codex threads do
79
+ * not look like simultaneously running sessions.
80
+ */
81
+ export declare function foldCodexSessionsForDisplay<T extends FoldableSession>(sessions: T[]): T[];
34
82
  export interface SessionDisplayInfo {
35
83
  /** Original session (unmodified) */
36
84
  session: {
@@ -59,4 +107,36 @@ export declare function assignDisplayNames<T extends {
59
107
  }>(sessions: T[]): (SessionDisplayInfo & {
60
108
  session: T;
61
109
  })[];
110
+ /**
111
+ * Normalize a project name for grouping: strip any path to the basename and
112
+ * drop a trailing " #N" duplicate suffix so "Foo #1" / "Foo #2" compare equal.
113
+ * Mirrors office.cpp `normProject`.
114
+ */
115
+ export declare function normalizeProjectForGrouping(project: string | undefined): string;
116
+ /**
117
+ * When two normalized project names belong to the same work group, return the
118
+ * shared group key (the common stem); otherwise null. Mirrors office.cpp
119
+ * `sameProjectGroup`:
120
+ * - exact (case-insensitive) match → group
121
+ * - one extends the other at a delimiter ("foo-bar" + "foo-bar-1") or they
122
+ * diverge after a shared delimiter-aligned stem ("…-broken-a" + "…-broken-b")
123
+ * - conservative: only long multi-token stems fuse (stem ≥ 14 chars with
124
+ * ≥ 2 delimiters on both sides), so short siblings like "agentdeck-ios" /
125
+ * "agentdeck-android" stay separate.
126
+ */
127
+ export declare function projectGroupKey(a: string, b: string): string | null;
128
+ export interface ProjectGroup<T> {
129
+ /** Group label — the shared stem, or the (normalized) project name for singletons. */
130
+ key: string;
131
+ /** True when ≥2 members fused (render a group header); singletons render flat. */
132
+ grouped: boolean;
133
+ members: T[];
134
+ }
135
+ /**
136
+ * Cluster an ordered session list into project groups, preserving the input
137
+ * order (first member's position anchors the group; members keep relative
138
+ * order). Greedy pairwise fusion with a growing group key, exactly like the
139
+ * office.cpp huddle builder.
140
+ */
141
+ export declare function groupSessionsByProject<T>(items: readonly T[], projectOf: (item: T) => string | undefined): ProjectGroup<T>[];
62
142
  //# sourceMappingURL=session-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-utils.d.ts","sourceRoot":"","sources":["../src/session-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAU3D;AAID,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAWlE;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQnE;AAID;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAsBxJ;AAID,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACzG,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAClH,QAAQ,EAAE,CAAC,EAAE,GACZ,CAAC,kBAAkB,GAAG;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC,EAAE,CAsBzC"}
1
+ {"version":3,"file":"session-utils.d.ts","sourceRoot":"","sources":["../src/session-utils.ts"],"names":[],"mappings":"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"}
@@ -33,22 +33,51 @@ export function sessionTier(state) {
33
33
  // ===== Agent Type Ranking (stable ordering by agent kind) =====
34
34
  /**
35
35
  * Rank agent types for stable ordering.
36
- * openclaw=0 (always first), claude-code=1, codex-cli=2, opencode=3, others=4.
36
+ * openclaw=0 (always first), claude-code=1, codex-cli=2, codex-app=3, opencode=4, antigravity=5, others=6.
37
37
  */
38
38
  export function agentTypeRank(agentType) {
39
39
  switch (agentType) {
40
40
  case 'openclaw': return 0;
41
41
  case 'claude-code': return 1;
42
42
  case 'codex-cli': return 2;
43
- case 'opencode': return 3;
44
- default: return 4;
43
+ case 'codex-app': return 3;
44
+ case 'opencode': return 4;
45
+ case 'antigravity': return 5;
46
+ default: return 6;
45
47
  }
46
48
  }
49
+ export function naturalLabelCompare(a, b) {
50
+ return (a || '').localeCompare(b || '', undefined, { numeric: true, sensitivity: 'base' });
51
+ }
52
+ /**
53
+ * SSOT: the daemon injects the virtual `openclaw` session iff this holds.
54
+ *
55
+ * "Active" = authenticated / can-route = the Gateway WS handshake+auth
56
+ * succeeded (`gatewayConnected`). Reachability (`gatewayAvailable`) and health
57
+ * (`gatewayHasError`) are topology/status hints only and MUST NOT materialize a
58
+ * session — surfacing them as a session is what made OpenClaw "stick" on
59
+ * devices after it was effectively off.
60
+ *
61
+ * Hand-mirrored in Swift `DashboardDataRules.isOpenClawSessionActive`
62
+ * (apple/AgentDeck/Model/Protocol.swift) and Kotlin `isOpenClawSessionActive`
63
+ * (android/.../ui/eink/EinkFormatUtils.kt) — keep all three in lockstep.
64
+ */
65
+ export function isOpenClawSessionActive(flags) {
66
+ return flags.gatewayConnected === true;
67
+ }
68
+ /**
69
+ * Consumer SSOT: render OpenClaw iff the daemon actually emitted the session.
70
+ * Consumers must NOT re-derive OpenClaw visibility from raw gateway flags;
71
+ * the daemon source is the single authority. Hand-mirrored in Swift/Kotlin.
72
+ */
73
+ export function hasOpenClawSession(sessions) {
74
+ return sessions.some(s => s.agentType === 'openclaw');
75
+ }
47
76
  // ===== Sorting =====
48
77
  /**
49
78
  * Sort sessions with stable ordering that does NOT jump on state changes.
50
79
  *
51
- * Order: agentType (openclaw first → claude-code → codex → opencode)
80
+ * Order: agentType (openclaw first → claude-code → codex → opencode → antigravity)
52
81
  * → projectName alphabetically
53
82
  * → startedAt ascending (oldest first) for stability
54
83
  * → id as final tiebreaker
@@ -61,11 +90,11 @@ export function sortSessions(sessions) {
61
90
  const typeRank = agentTypeRank(a.agentType) - agentTypeRank(b.agentType);
62
91
  if (typeRank !== 0)
63
92
  return typeRank;
64
- // 2. Project name alphabetically (case-insensitive must match Swift
65
- // DashboardDataRules.sortSessionPayloads' localizedCaseInsensitiveCompare
66
- // and Android EinkAgentColumn / SessionListPanel sort, otherwise mixed-case
67
- // project names render in different order on Stream Deck vs. Apple/Android.)
68
- const nameCompare = (a.projectName || '').localeCompare(b.projectName || '', undefined, { sensitivity: 'base' });
93
+ // 2. Project name alphabetically with numeric chunks (Agent 2 before
94
+ // Agent 10). Must match Swift DashboardDataRules.naturalLabelCompare
95
+ // and Android naturalLabelCompare, otherwise numbered sessions render
96
+ // in different order on Stream Deck vs. Apple/Android.
97
+ const nameCompare = naturalLabelCompare(a.projectName, b.projectName);
69
98
  if (nameCompare !== 0)
70
99
  return nameCompare;
71
100
  // 3. Start time ascending (oldest first = stable position)
@@ -75,8 +104,72 @@ export function sortSessions(sessions) {
75
104
  return diff;
76
105
  }
77
106
  // 4. Session ID as final tiebreaker
78
- return (a.id || '').localeCompare(b.id || '');
107
+ return naturalLabelCompare(a.id, b.id);
108
+ });
109
+ }
110
+ /**
111
+ * Collapse Codex companion-task rows for the same project into one display
112
+ * session. Raw rows remain authoritative inside the daemon; every user-facing
113
+ * surface should count this folded shape so completed one-turn Codex threads do
114
+ * not look like simultaneously running sessions.
115
+ */
116
+ export function foldCodexSessionsForDisplay(sessions) {
117
+ const passthrough = [];
118
+ const codexByProject = new Map();
119
+ for (const session of sessions) {
120
+ const project = session.projectName?.trim();
121
+ if (!isCodexSession(session) || !project) {
122
+ passthrough.push(session);
123
+ continue;
124
+ }
125
+ const key = `${codexDisplayKind(session)}:${project.toLocaleLowerCase()}`;
126
+ const group = codexByProject.get(key);
127
+ if (group)
128
+ group.push(session);
129
+ else
130
+ codexByProject.set(key, [session]);
131
+ }
132
+ for (const group of codexByProject.values()) {
133
+ passthrough.push(foldCodexProjectGroup(group));
134
+ }
135
+ return passthrough;
136
+ }
137
+ function isCodexSession(session) {
138
+ return session.agentType === 'codex-cli' || session.agentType === 'codex-app' || session.id.startsWith('codex:');
139
+ }
140
+ function codexDisplayKind(session) {
141
+ return session.agentType === 'codex-app' ? 'codex-app' : 'codex-cli';
142
+ }
143
+ function foldCodexProjectGroup(group) {
144
+ if (group.length <= 1)
145
+ return group[0];
146
+ const ranked = [...group].sort((a, b) => {
147
+ const rankDiff = stateRank(a.state) - stateRank(b.state);
148
+ if (rankDiff !== 0)
149
+ return rankDiff;
150
+ const aStarted = a.startedAt ? new Date(a.startedAt).getTime() : Number.NEGATIVE_INFINITY;
151
+ const bStarted = b.startedAt ? new Date(b.startedAt).getTime() : Number.NEGATIVE_INFINITY;
152
+ if (aStarted !== bStarted)
153
+ return bStarted - aStarted;
154
+ return a.id.localeCompare(b.id);
79
155
  });
156
+ const representative = ranked[0];
157
+ const foldedIds = group.flatMap(s => s.foldedSessionIds ?? [s.id]);
158
+ const groupSize = group.reduce((total, s) => total + (s.groupSize ?? 1), 0);
159
+ const currentTool = ranked.find(s => stateRank(s.state) === 0 && s.currentTool?.trim())?.currentTool;
160
+ const folded = {
161
+ ...representative,
162
+ state: ranked[0].state,
163
+ groupSize,
164
+ foldedSessionIds: foldedIds,
165
+ };
166
+ if (currentTool) {
167
+ folded.currentTool = currentTool;
168
+ }
169
+ else {
170
+ delete folded.currentTool;
171
+ }
172
+ return folded;
80
173
  }
81
174
  /**
82
175
  * Assign display names with #N suffixes for duplicate (projectName, agentType) tuples.
@@ -106,4 +199,106 @@ export function assignDisplayNames(sessions) {
106
199
  };
107
200
  });
108
201
  }
202
+ // ===== Project-Prefix Grouping (IPS10 office huddle port) =====
203
+ //
204
+ // The IPS10 terrarium (esp32/src/ui/terrarium/office.cpp — normProject /
205
+ // sameProjectGroup) clusters sessions whose project names share a long
206
+ // delimiter-aligned prefix into one "work huddle": worktree/task folders like
207
+ // `xteink-x3-x4-japanese-broken-claude-glm` / `…-broken-codex` read as one
208
+ // unit of work, not N unrelated sessions. This is the SSOT port so the other
209
+ // dashboards' session lists (Android tablet SessionListPanel.kt, Apple
210
+ // SessionListPanel.swift — hand-mirrored, keep in lockstep) group the same way.
211
+ function isProjectDelim(c) {
212
+ return c === '-' || c === '_' || c === ' ' || c === '.';
213
+ }
214
+ function trimProjectTail(s) {
215
+ let n = s.length;
216
+ while (n > 0 && (isProjectDelim(s[n - 1]) || s[n - 1] === '#'))
217
+ n--;
218
+ return s.slice(0, n);
219
+ }
220
+ function projectDelimCount(s, len) {
221
+ let count = 0;
222
+ for (let i = 0; i < len && i < s.length; i++)
223
+ if (isProjectDelim(s[i]))
224
+ count++;
225
+ return count;
226
+ }
227
+ /**
228
+ * Normalize a project name for grouping: strip any path to the basename and
229
+ * drop a trailing " #N" duplicate suffix so "Foo #1" / "Foo #2" compare equal.
230
+ * Mirrors office.cpp `normProject`.
231
+ */
232
+ export function normalizeProjectForGrouping(project) {
233
+ const raw = (project || '').trim();
234
+ const base = raw.split('/').filter(Boolean).pop() || raw;
235
+ const m = base.match(/^(.*?)\s*#\d+$/);
236
+ return trimProjectTail(m ? m[1] : base);
237
+ }
238
+ /**
239
+ * When two normalized project names belong to the same work group, return the
240
+ * shared group key (the common stem); otherwise null. Mirrors office.cpp
241
+ * `sameProjectGroup`:
242
+ * - exact (case-insensitive) match → group
243
+ * - one extends the other at a delimiter ("foo-bar" + "foo-bar-1") or they
244
+ * diverge after a shared delimiter-aligned stem ("…-broken-a" + "…-broken-b")
245
+ * - conservative: only long multi-token stems fuse (stem ≥ 14 chars with
246
+ * ≥ 2 delimiters on both sides), so short siblings like "agentdeck-ios" /
247
+ * "agentdeck-android" stay separate.
248
+ */
249
+ export function projectGroupKey(a, b) {
250
+ let i = 0;
251
+ let lastDelim = -1;
252
+ const n = Math.min(a.length, b.length);
253
+ while (i < n && a[i].toLowerCase() === b[i].toLowerCase()) {
254
+ if (isProjectDelim(a[i]))
255
+ lastDelim = i;
256
+ i++;
257
+ }
258
+ if (i === a.length && i === b.length)
259
+ return a;
260
+ let stemLen = -1;
261
+ if (i === a.length && i < b.length && isProjectDelim(b[i]))
262
+ stemLen = i;
263
+ else if (i === b.length && i < a.length && isProjectDelim(a[i]))
264
+ stemLen = i;
265
+ else if (lastDelim > 0)
266
+ stemLen = lastDelim;
267
+ if (stemLen < 14 || projectDelimCount(a, stemLen) < 2 || projectDelimCount(b, stemLen) < 2) {
268
+ return null;
269
+ }
270
+ const key = trimProjectTail(a.slice(0, stemLen));
271
+ return key.length > 0 ? key : null;
272
+ }
273
+ /**
274
+ * Cluster an ordered session list into project groups, preserving the input
275
+ * order (first member's position anchors the group; members keep relative
276
+ * order). Greedy pairwise fusion with a growing group key, exactly like the
277
+ * office.cpp huddle builder.
278
+ */
279
+ export function groupSessionsByProject(items, projectOf) {
280
+ const groups = [];
281
+ const done = new Array(items.length).fill(false);
282
+ for (let a = 0; a < items.length; a++) {
283
+ if (done[a])
284
+ continue;
285
+ const na = normalizeProjectForGrouping(projectOf(items[a]));
286
+ let key = na;
287
+ const members = [items[a]];
288
+ done[a] = true;
289
+ for (let b = a + 1; b < items.length; b++) {
290
+ if (done[b])
291
+ continue;
292
+ const nb = normalizeProjectForGrouping(projectOf(items[b]));
293
+ const nextKey = projectGroupKey(key, nb) ?? projectGroupKey(na, nb);
294
+ if (nextKey) {
295
+ key = nextKey;
296
+ members.push(items[b]);
297
+ done[b] = true;
298
+ }
299
+ }
300
+ groups.push({ key, grouped: members.length > 1, members });
301
+ }
302
+ return groups;
303
+ }
109
304
  //# sourceMappingURL=session-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-utils.js","sourceRoot":"","sources":["../src/session-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-utils.js","sourceRoot":"","sources":["../src/session-utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-colors.d.ts","sourceRoot":"","sources":["../src/state-colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKpC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAO9C,CAAC;AAEF,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG5D;AAID,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMrD,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAErE;AAID,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3D"}
1
+ {"version":3,"file":"state-colors.d.ts","sourceRoot":"","sources":["../src/state-colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKpC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAO9C,CAAC;AAEF,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG5D;AAID,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQrD,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAErE;AAID,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3D"}
@@ -25,7 +25,9 @@ export const AGENT_BRAND_COLORS = {
25
25
  'claude-code': '#C07058', // terracotta
26
26
  'openclaw': '#ff4d4d', // red
27
27
  'codex-cli': '#6366f1', // indigo
28
+ 'codex-app': '#6366f1', // indigo
28
29
  'opencode': '#F1ECEC', // cream
30
+ 'antigravity': '#5F6368', // Google gray
29
31
  'monitor': '#94a3b8', // slate
30
32
  };
31
33
  /** Get agent brand color. Falls back to slate for unknown types. */
@@ -1 +1 @@
1
- {"version":3,"file":"state-colors.js","sourceRoot":"","sources":["../src/state-colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,2BAA2B;AAE3B,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,CAAC,KAAK,CAAC,IAAI,CAAC,EAAiB,SAAS,EAAG,QAAQ;IACjD,CAAC,KAAK,CAAC,UAAU,CAAC,EAAW,SAAS,EAAG,OAAO;IAChD,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAG,QAAQ;IACjD,CAAC,KAAK,CAAC,eAAe,CAAC,EAAM,SAAS,EAAG,QAAQ;IACjD,CAAC,KAAK,CAAC,aAAa,CAAC,EAAQ,SAAS,EAAG,QAAQ;IACjD,CAAC,KAAK,CAAC,YAAY,CAAC,EAAS,SAAS,EAAG,OAAO;CACjD,CAAC;AAEF,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,KAAyB;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpD,OAAQ,YAAuC,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrF,CAAC;AAED,yDAAyD;AAEzD,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,aAAa,EAAE,SAAS,EAAG,aAAa;IACxC,UAAU,EAAK,SAAS,EAAG,MAAM;IACjC,WAAW,EAAI,SAAS,EAAG,SAAS;IACpC,UAAU,EAAK,SAAS,EAAG,QAAQ;IACnC,SAAS,EAAM,SAAS,EAAG,QAAQ;CACpC,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,eAAe,CAAC,SAA6B;IAC3D,OAAO,kBAAkB,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;AAC1D,CAAC;AAED,8BAA8B;AAE9B,mEAAmE;AACnE,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAa;IACjD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACtH,CAAC"}
1
+ {"version":3,"file":"state-colors.js","sourceRoot":"","sources":["../src/state-colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,2BAA2B;AAE3B,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,CAAC,KAAK,CAAC,IAAI,CAAC,EAAiB,SAAS,EAAG,QAAQ;IACjD,CAAC,KAAK,CAAC,UAAU,CAAC,EAAW,SAAS,EAAG,OAAO;IAChD,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAG,QAAQ;IACjD,CAAC,KAAK,CAAC,eAAe,CAAC,EAAM,SAAS,EAAG,QAAQ;IACjD,CAAC,KAAK,CAAC,aAAa,CAAC,EAAQ,SAAS,EAAG,QAAQ;IACjD,CAAC,KAAK,CAAC,YAAY,CAAC,EAAS,SAAS,EAAG,OAAO;CACjD,CAAC;AAEF,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,KAAyB;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpD,OAAQ,YAAuC,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrF,CAAC;AAED,yDAAyD;AAEzD,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,aAAa,EAAE,SAAS,EAAG,aAAa;IACxC,UAAU,EAAK,SAAS,EAAG,MAAM;IACjC,WAAW,EAAI,SAAS,EAAG,SAAS;IACpC,WAAW,EAAI,SAAS,EAAG,SAAS;IACpC,UAAU,EAAK,SAAS,EAAG,QAAQ;IACnC,aAAa,EAAE,SAAS,EAAG,cAAc;IACzC,SAAS,EAAM,SAAS,EAAG,QAAQ;CACpC,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,eAAe,CAAC,SAA6B;IAC3D,OAAO,kBAAkB,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;AAC1D,CAAC;AAED,8BAA8B;AAE9B,mEAAmE;AACnE,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAa;IACjD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACtH,CAAC"}
package/dist/states.d.ts CHANGED
@@ -27,6 +27,7 @@ export interface PromptOption {
27
27
  shortcut?: string;
28
28
  recommended?: boolean;
29
29
  selected?: boolean;
30
+ kind?: 'choice' | 'freeform_input';
30
31
  }
31
32
  export interface StateSnapshot {
32
33
  state: State;
@@ -1 +1 @@
1
- {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../src/states.ts"],"names":[],"mappings":"AAAA,oBAAY,KAAK;IACf,YAAY,iBAAiB;IAC7B,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,mBAAmB,wBAAwB;IAC3C,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;CAChC;AAED,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,YAAY,gBAAgB;IAC5B,QAAQ,YAAY;IACpB,kBAAkB,sBAAsB;CACzC;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,GAAG,GAAG,CAAC;IAClB,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,eAAO,MAAM,WAAW,EAAE,eAAe,EA4BxC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,OAAO,eAAe,EAAE,WAAW,CAAC;IACjD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
1
+ {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../src/states.ts"],"names":[],"mappings":"AAAA,oBAAY,KAAK;IACf,YAAY,iBAAiB;IAC7B,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,mBAAmB,wBAAwB;IAC3C,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;CAChC;AAED,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,YAAY,gBAAgB;IAC5B,QAAQ,YAAY;IACpB,kBAAkB,sBAAsB;CACzC;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,GAAG,GAAG,CAAC;IAClB,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,eAAO,MAAM,WAAW,EAAE,eAAe,EAiCxC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,OAAO,eAAe,EAAE,WAAW,CAAC;IACjD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
package/dist/states.js CHANGED
@@ -39,7 +39,12 @@ export const transitions = [
39
39
  { from: State.AWAITING_PERMISSION, to: State.PROCESSING, trigger: 'spinner_start', source: 'pty' },
40
40
  { from: State.AWAITING_OPTION, to: State.PROCESSING, trigger: 'spinner_start', source: 'pty' },
41
41
  { from: State.AWAITING_DIFF, to: State.PROCESSING, trigger: 'spinner_start', source: 'pty' },
42
- // stuck_timeout only for PROCESSING AWAITING_* wait indefinitely for user response
42
+ // stuck_timeout: only PROCESSING recovers after STUCK_TIMEOUT_MS (Claude hung).
43
+ // AWAITING_* intentionally have NO wall-clock backstop — an unanswered prompt
44
+ // is a genuine, indefinitely-valid wait (the user may be away); it only leaves
45
+ // via a real signal (spinner_start / idle_detected / user response / stop), and
46
+ // a truly-dead session is reaped by liveness, not a timer. A blind awaiting
47
+ // timer wrongly forced real prompts to IDLE and vanished them from dashboards.
43
48
  { from: State.PROCESSING, to: State.IDLE, trigger: 'stuck_timeout', source: 'internal' },
44
49
  { from: '*', to: State.DISCONNECTED, trigger: 'session_end', source: 'hook' },
45
50
  { from: '*', to: State.IDLE, trigger: 'interrupt', source: 'user' },
@@ -1 +1 @@
1
- {"version":3,"file":"states.js","sourceRoot":"","sources":["../src/states.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"states.js","sourceRoot":"","sources":["../src/states.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,KAOX;AAPD,WAAY,KAAK;IACf,sCAA6B,CAAA;IAC7B,sBAAa,CAAA;IACb,kCAAyB,CAAA;IACzB,oDAA2C,CAAA;IAC3C,4CAAmC,CAAA;IACnC,wCAA+B,CAAA;AACjC,CAAC,EAPW,KAAK,KAAL,KAAK,QAOhB;AAED,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,+BAAa,CAAA;IACb,8CAA4B,CAAA;IAC5B,sCAAoB,CAAA;IACpB,0DAAwC,CAAA;AAC1C,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAWD,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE;IACtF,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE;IACzF,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IACnF,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;IAC3E,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IACnF,EAAE,IAAI,EAAE,KAAK,CAAC,mBAAmB,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IAC5F,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IACxF,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IACtF,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE;IACtG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE;IAChG,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,KAAK,EAAE;IACnG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,KAAK,EAAE;IAC7F,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE;IAC/F,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE;IACzF,EAAE,IAAI,EAAE,KAAK,CAAC,mBAAmB,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE;IACnG,EAAE,IAAI,EAAE,KAAK,CAAC,mBAAmB,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE;IACpG,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE;IAChG,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE;IAC7F,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE;IAC9F,8FAA8F;IAC9F,EAAE,IAAI,EAAE,KAAK,CAAC,mBAAmB,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IAClG,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IAC9F,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IAC5F,gFAAgF;IAChF,8EAA8E;IAC9E,+EAA+E;IAC/E,gFAAgF;IAChF,4EAA4E;IAC5E,+EAA+E;IAC/E,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE;IACxF,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE;IAC7E,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE;CACpE,CAAC"}
@@ -1,12 +1,17 @@
1
1
  /**
2
- * Agent logo SVG paths for icon and watermark rendering on session buttons.
2
+ * Agent creature SVG fragments for session buttons.
3
3
  *
4
- * Each logo is a centered path designed for a 144x144 button canvas.
5
- * Two rendering modes:
6
- * agentLogoIcon() — prominent icon at top of button (primary identification)
7
- * agentLogoWatermark() — low-opacity background mark
4
+ * The exported names are kept for plugin compatibility, but the rendered
5
+ * marks are the same AgentDeck creature language used by the terrarium:
6
+ * Claude = robot, Codex = cloud prompt, OpenClaw = crayfish, OpenCode =
7
+ * nested-square floater, Antigravity = peak/arc mark.
8
8
  */
9
9
  import type { AgentType } from '../adapter.js';
10
+ export declare const ROBOT_CREATURE_PATH = "M20.998 10.949H24v3.102h-3v3.028h-1.487V20H18v-2.921h-1.487V20H15v-2.921H9V20H7.488v-2.921H6V20H4.487v-2.921H3V14.05H0v-3.1h3V5h17.998v5.949zM6 10.949h1.488V8.102H6v2.847zm10.51 0H18V8.102h-1.49v2.847z";
11
+ /** OpenCode mark (design/brand/opencode.svg): hollow nested-square ring. */
12
+ export declare const OPENCODE_RING_PATH = "M16 6H8v12h8V6zm4 16H4V2h16v20z";
13
+ /** Antigravity mark (design/brand/antigravity.svg): peak/arc. */
14
+ export declare const ANTIGRAVITY_PATH = "M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z";
10
15
  /** Claude Code creature asset: assets/logos/claude.svg. viewBox 0 0 24 24. */
11
16
  export declare const CLAUDE_LOGO_PATH = "M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z";
12
17
  /** Legacy OpenClaw paths kept for the Gateway preset mini-browser icon. */
@@ -17,6 +22,13 @@ export declare const OC_CLAW_R = "M100 45 C115 40 120 50 115 60 C110 70 100 65 9
17
22
  export declare const CODEX_LOGO_PATH = "M8.086.457a6.105 6.105 0 013.046-.415c1.333.153 2.521.72 3.564 1.7a.117.117 0 00.107.029c1.408-.346 2.762-.224 4.061.366l.063.03.154.076c1.357.703 2.33 1.77 2.918 3.198.278.679.418 1.388.421 2.126a5.655 5.655 0 01-.18 1.631.167.167 0 00.04.155 5.982 5.982 0 011.578 2.891c.385 1.901-.01 3.615-1.183 5.14l-.182.22a6.063 6.063 0 01-2.934 1.851.162.162 0 00-.108.102c-.255.736-.511 1.364-.987 1.992-1.199 1.582-2.962 2.462-4.948 2.451-1.583-.008-2.986-.587-4.21-1.736a.145.145 0 00-.14-.032c-.518.167-1.04.191-1.604.185a5.924 5.924 0 01-2.595-.622 6.058 6.058 0 01-2.146-1.781c-.203-.269-.404-.522-.551-.821a7.74 7.74 0 01-.495-1.283 6.11 6.11 0 01-.017-3.064.166.166 0 00.008-.074.115.115 0 00-.037-.064 5.958 5.958 0 01-1.38-2.202 5.196 5.196 0 01-.333-1.589 6.915 6.915 0 01.188-2.132c.45-1.484 1.309-2.648 2.577-3.493.282-.188.55-.334.802-.438.286-.12.573-.22.861-.304a.129.129 0 00.087-.087A6.016 6.016 0 015.635 2.31C6.315 1.464 7.132.846 8.086.457zm-.804 7.85a.848.848 0 00-1.473.842l1.694 2.965-1.688 2.848a.849.849 0 001.46.864l1.94-3.272a.849.849 0 00.007-.854l-1.94-3.393zm5.446 6.24a.849.849 0 000 1.695h4.848a.849.849 0 000-1.696h-4.848z";
18
23
  /** OpenClaw creature asset: assets/logos/openclaw.svg. viewBox 0 0 24 24. */
19
24
  export declare const OPENCLAW_LOGO_PATHS: string[];
25
+ /**
26
+ * Render the agent's canonical brand mark as a 1-bit glyph: the path(s) filled
27
+ * with `ink` (evenodd so in-path holes — robot eyes, opencode ring, codex prompt —
28
+ * read as paper), plus any separate `paper` eye cutouts. 24-unit viewBox scaled to
29
+ * `size`, centered on (cx,cy). Used by the TRMNL e-ink layout; mirrored in Swift.
30
+ */
31
+ export declare function agentGlyphMono(agent: string, cx: number, cy: number, size: number, ink: string, paper: string): string;
20
32
  /**
21
33
  * Render agent logo as a visible icon at top-center of button.
22
34
  * Uses agent brand color (not state color) for consistent identification.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-logos.d.ts","sourceRoot":"","sources":["../../src/svg-renderers/agent-logos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,g+CACk8C,CAAC;AAEh+C,2EAA2E;AAC3E,eAAO,MAAM,OAAO,kKAC6I,CAAC;AAClK,eAAO,MAAM,SAAS,kEAC2C,CAAC;AAClE,eAAO,MAAM,SAAS,4EACqD,CAAC;AAE5E,uFAAuF;AACvF,eAAO,MAAM,eAAe,goCACmmC,CAAC;AAEhoC,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,UAM/B,CAAC;AAkBF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,IAAI,SAAK,EACT,OAAO,SAAM,EACb,EAAE,SAAK,EACP,EAAE,SAAgB,GACjB,MAAM,CAwBR;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,SAAO,GACb,MAAM,CAyBR"}
1
+ {"version":3,"file":"agent-logos.d.ts","sourceRoot":"","sources":["../../src/svg-renderers/agent-logos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM/C,eAAO,MAAM,mBAAmB,8MAC6K,CAAC;AAE9M,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AAEpE,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,oNACsL,CAAC;AAEpN,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,g+CACk8C,CAAC;AAEh+C,2EAA2E;AAC3E,eAAO,MAAM,OAAO,kKAC6I,CAAC;AAClK,eAAO,MAAM,SAAS,kEAC2C,CAAC;AAClE,eAAO,MAAM,SAAS,4EACqD,CAAC;AAE5E,uFAAuF;AACvF,eAAO,MAAM,eAAe,goCACmmC,CAAC;AAEhoC,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,UAM/B,CAAC;AA6JF;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,MAAM,CASR;AAID;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,IAAI,SAAK,EACT,OAAO,SAAM,EACb,EAAE,SAAK,EACP,EAAE,SAAgB,GACjB,MAAM,CAgBR;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,SAAO,GACb,MAAM,CAkBR"}