@aui.io/apollo 0.1.9 → 0.1.10

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 (147) hide show
  1. package/node_modules/@aui.io/apollo-cli/bin/apollo.js +8 -5
  2. package/node_modules/@aui.io/apollo-cli/dist/src/commands/operate.js +3 -10
  3. package/node_modules/@aui.io/apollo-cli/dist/src/commands/operate.js.map +1 -1
  4. package/node_modules/@aui.io/apollo-cli/package.json +3 -3
  5. package/node_modules/@aui.io/apollo-core/dist/src/api/runtime-api.d.ts +13 -0
  6. package/node_modules/@aui.io/apollo-core/dist/src/api/runtime-api.js +17 -0
  7. package/node_modules/@aui.io/apollo-core/dist/src/api/runtime-api.js.map +1 -1
  8. package/node_modules/@aui.io/apollo-core/dist/src/services/messaging.d.ts +17 -0
  9. package/node_modules/@aui.io/apollo-core/dist/src/services/messaging.js +27 -0
  10. package/node_modules/@aui.io/apollo-core/dist/src/services/messaging.js.map +1 -1
  11. package/node_modules/@aui.io/apollo-core/package.json +1 -1
  12. package/node_modules/@aui.io/apollo-tui/dist/src/actions/ActionPalette.d.ts +13 -0
  13. package/node_modules/@aui.io/apollo-tui/dist/src/actions/ActionPalette.js +47 -0
  14. package/node_modules/@aui.io/apollo-tui/dist/src/actions/ActionPalette.js.map +1 -0
  15. package/node_modules/@aui.io/apollo-tui/dist/src/actions/registry.d.ts +28 -0
  16. package/node_modules/@aui.io/apollo-tui/dist/src/actions/registry.js +219 -0
  17. package/node_modules/@aui.io/apollo-tui/dist/src/actions/registry.js.map +1 -0
  18. package/node_modules/@aui.io/apollo-tui/dist/src/activity/ActivityDrawer.d.ts +8 -0
  19. package/node_modules/@aui.io/apollo-tui/dist/src/activity/ActivityDrawer.js +43 -0
  20. package/node_modules/@aui.io/apollo-tui/dist/src/activity/ActivityDrawer.js.map +1 -0
  21. package/node_modules/@aui.io/apollo-tui/dist/src/activity/ActivitySummary.d.ts +5 -0
  22. package/node_modules/@aui.io/apollo-tui/dist/src/activity/ActivitySummary.js +26 -0
  23. package/node_modules/@aui.io/apollo-tui/dist/src/activity/ActivitySummary.js.map +1 -0
  24. package/node_modules/@aui.io/apollo-tui/dist/src/activity/operationStore.d.ts +67 -0
  25. package/node_modules/@aui.io/apollo-tui/dist/src/activity/operationStore.js +138 -0
  26. package/node_modules/@aui.io/apollo-tui/dist/src/activity/operationStore.js.map +1 -0
  27. package/node_modules/@aui.io/apollo-tui/dist/src/author/AuthorHome.d.ts +27 -0
  28. package/node_modules/@aui.io/apollo-tui/dist/src/author/AuthorHome.js +92 -0
  29. package/node_modules/@aui.io/apollo-tui/dist/src/author/AuthorHome.js.map +1 -0
  30. package/node_modules/@aui.io/apollo-tui/dist/src/author/DiffView.d.ts +46 -0
  31. package/node_modules/@aui.io/apollo-tui/dist/src/author/DiffView.js +87 -0
  32. package/node_modules/@aui.io/apollo-tui/dist/src/author/DiffView.js.map +1 -0
  33. package/node_modules/@aui.io/apollo-tui/dist/src/author/SessionPane.d.ts +15 -0
  34. package/node_modules/@aui.io/apollo-tui/dist/src/author/SessionPane.js +38 -0
  35. package/node_modules/@aui.io/apollo-tui/dist/src/author/SessionPane.js.map +1 -0
  36. package/node_modules/@aui.io/apollo-tui/dist/src/author/ValidationView.d.ts +11 -0
  37. package/node_modules/@aui.io/apollo-tui/dist/src/author/ValidationView.js +34 -0
  38. package/node_modules/@aui.io/apollo-tui/dist/src/author/ValidationView.js.map +1 -0
  39. package/node_modules/@aui.io/apollo-tui/dist/src/author/VersionsView.d.ts +9 -0
  40. package/node_modules/@aui.io/apollo-tui/dist/src/author/VersionsView.js +31 -0
  41. package/node_modules/@aui.io/apollo-tui/dist/src/author/VersionsView.js.map +1 -0
  42. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/claudeCode.d.ts +23 -0
  43. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/claudeCode.js +293 -0
  44. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/claudeCode.js.map +1 -0
  45. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/index.d.ts +4 -0
  46. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/index.js +13 -0
  47. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/index.js.map +1 -0
  48. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/sessions.d.ts +3 -0
  49. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/sessions.js +36 -0
  50. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/sessions.js.map +1 -0
  51. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/types.d.ts +85 -0
  52. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/types.js +11 -0
  53. package/node_modules/@aui.io/apollo-tui/dist/src/author/backend/types.js.map +1 -0
  54. package/node_modules/@aui.io/apollo-tui/dist/src/author/data.d.ts +78 -0
  55. package/node_modules/@aui.io/apollo-tui/dist/src/author/data.js +279 -0
  56. package/node_modules/@aui.io/apollo-tui/dist/src/author/data.js.map +1 -0
  57. package/node_modules/@aui.io/apollo-tui/dist/src/author/session.d.ts +64 -0
  58. package/node_modules/@aui.io/apollo-tui/dist/src/author/session.js +319 -0
  59. package/node_modules/@aui.io/apollo-tui/dist/src/author/session.js.map +1 -0
  60. package/node_modules/@aui.io/apollo-tui/dist/src/author/tree.d.ts +25 -0
  61. package/node_modules/@aui.io/apollo-tui/dist/src/author/tree.js +69 -0
  62. package/node_modules/@aui.io/apollo-tui/dist/src/author/tree.js.map +1 -0
  63. package/node_modules/@aui.io/apollo-tui/dist/src/context/ContextSwitcher.d.ts +23 -0
  64. package/node_modules/@aui.io/apollo-tui/dist/src/context/ContextSwitcher.js +60 -0
  65. package/node_modules/@aui.io/apollo-tui/dist/src/context/ContextSwitcher.js.map +1 -0
  66. package/node_modules/@aui.io/apollo-tui/dist/src/index.d.ts +17 -1
  67. package/node_modules/@aui.io/apollo-tui/dist/src/index.js +22 -1
  68. package/node_modules/@aui.io/apollo-tui/dist/src/index.js.map +1 -1
  69. package/node_modules/@aui.io/apollo-tui/dist/src/keyprobe.d.ts +1 -0
  70. package/node_modules/@aui.io/apollo-tui/dist/src/keyprobe.js +51 -0
  71. package/node_modules/@aui.io/apollo-tui/dist/src/keyprobe.js.map +1 -0
  72. package/node_modules/@aui.io/apollo-tui/dist/src/lib/actions.d.ts +15 -0
  73. package/node_modules/@aui.io/apollo-tui/dist/src/lib/actions.js +111 -19
  74. package/node_modules/@aui.io/apollo-tui/dist/src/lib/actions.js.map +1 -1
  75. package/node_modules/@aui.io/apollo-tui/dist/src/lib/clipboard.d.ts +7 -0
  76. package/node_modules/@aui.io/apollo-tui/dist/src/lib/clipboard.js +33 -0
  77. package/node_modules/@aui.io/apollo-tui/dist/src/lib/clipboard.js.map +1 -0
  78. package/node_modules/@aui.io/apollo-tui/dist/src/lib/commands.d.ts +1 -1
  79. package/node_modules/@aui.io/apollo-tui/dist/src/lib/commands.js +49 -7
  80. package/node_modules/@aui.io/apollo-tui/dist/src/lib/commands.js.map +1 -1
  81. package/node_modules/@aui.io/apollo-tui/dist/src/lib/ide.d.ts +16 -0
  82. package/node_modules/@aui.io/apollo-tui/dist/src/lib/ide.js +39 -0
  83. package/node_modules/@aui.io/apollo-tui/dist/src/lib/ide.js.map +1 -0
  84. package/node_modules/@aui.io/apollo-tui/dist/src/lib/keydiag.d.ts +17 -0
  85. package/node_modules/@aui.io/apollo-tui/dist/src/lib/keydiag.js +76 -0
  86. package/node_modules/@aui.io/apollo-tui/dist/src/lib/keydiag.js.map +1 -0
  87. package/node_modules/@aui.io/apollo-tui/dist/src/lib/keys.d.ts +64 -0
  88. package/node_modules/@aui.io/apollo-tui/dist/src/lib/keys.js +105 -0
  89. package/node_modules/@aui.io/apollo-tui/dist/src/lib/keys.js.map +1 -0
  90. package/node_modules/@aui.io/apollo-tui/dist/src/lib/modes.d.ts +18 -0
  91. package/node_modules/@aui.io/apollo-tui/dist/src/lib/modes.js +24 -0
  92. package/node_modules/@aui.io/apollo-tui/dist/src/lib/modes.js.map +1 -0
  93. package/node_modules/@aui.io/apollo-tui/dist/src/lib/place.d.ts +7 -0
  94. package/node_modules/@aui.io/apollo-tui/dist/src/lib/place.js +17 -1
  95. package/node_modules/@aui.io/apollo-tui/dist/src/lib/place.js.map +1 -1
  96. package/node_modules/@aui.io/apollo-tui/dist/src/lib/scope.d.ts +25 -6
  97. package/node_modules/@aui.io/apollo-tui/dist/src/lib/scope.js +108 -17
  98. package/node_modules/@aui.io/apollo-tui/dist/src/lib/scope.js.map +1 -1
  99. package/node_modules/@aui.io/apollo-tui/dist/src/lib/sheet.d.ts +3 -1
  100. package/node_modules/@aui.io/apollo-tui/dist/src/lib/sheet.js +2 -1
  101. package/node_modules/@aui.io/apollo-tui/dist/src/lib/sheet.js.map +1 -1
  102. package/node_modules/@aui.io/apollo-tui/dist/src/opentui-app.js +1780 -243
  103. package/node_modules/@aui.io/apollo-tui/dist/src/opentui-app.js.map +1 -1
  104. package/node_modules/@aui.io/apollo-tui/dist/src/shell/Breadcrumb.d.ts +15 -0
  105. package/node_modules/@aui.io/apollo-tui/dist/src/shell/Breadcrumb.js +22 -0
  106. package/node_modules/@aui.io/apollo-tui/dist/src/shell/Breadcrumb.js.map +1 -0
  107. package/node_modules/@aui.io/apollo-tui/dist/src/shell/FooterHints.d.ts +8 -0
  108. package/node_modules/@aui.io/apollo-tui/dist/src/shell/FooterHints.js +23 -0
  109. package/node_modules/@aui.io/apollo-tui/dist/src/shell/FooterHints.js.map +1 -0
  110. package/node_modules/@aui.io/apollo-tui/dist/src/shell/ModeNav.d.ts +4 -0
  111. package/node_modules/@aui.io/apollo-tui/dist/src/shell/ModeNav.js +7 -0
  112. package/node_modules/@aui.io/apollo-tui/dist/src/shell/ModeNav.js.map +1 -0
  113. package/node_modules/@aui.io/apollo-tui/dist/src/talk/Composer.d.ts +20 -0
  114. package/node_modules/@aui.io/apollo-tui/dist/src/talk/Composer.js +29 -0
  115. package/node_modules/@aui.io/apollo-tui/dist/src/talk/Composer.js.map +1 -0
  116. package/node_modules/@aui.io/apollo-tui/dist/src/talk/InspectorPane.d.ts +15 -0
  117. package/node_modules/@aui.io/apollo-tui/dist/src/talk/InspectorPane.js +27 -0
  118. package/node_modules/@aui.io/apollo-tui/dist/src/talk/InspectorPane.js.map +1 -0
  119. package/node_modules/@aui.io/apollo-tui/dist/src/talk/TalkView.d.ts +30 -0
  120. package/node_modules/@aui.io/apollo-tui/dist/src/talk/TalkView.js +60 -0
  121. package/node_modules/@aui.io/apollo-tui/dist/src/talk/TalkView.js.map +1 -0
  122. package/node_modules/@aui.io/apollo-tui/dist/src/talk/ThreadsPane.d.ts +17 -0
  123. package/node_modules/@aui.io/apollo-tui/dist/src/talk/ThreadsPane.js +61 -0
  124. package/node_modules/@aui.io/apollo-tui/dist/src/talk/ThreadsPane.js.map +1 -0
  125. package/node_modules/@aui.io/apollo-tui/dist/src/talk/data.d.ts +107 -0
  126. package/node_modules/@aui.io/apollo-tui/dist/src/talk/data.js +235 -0
  127. package/node_modules/@aui.io/apollo-tui/dist/src/talk/data.js.map +1 -0
  128. package/node_modules/@aui.io/apollo-tui/dist/src/theme/tokens.d.ts +8 -0
  129. package/node_modules/@aui.io/apollo-tui/dist/src/theme/tokens.js +9 -0
  130. package/node_modules/@aui.io/apollo-tui/dist/src/theme/tokens.js.map +1 -0
  131. package/node_modules/@aui.io/apollo-tui/dist/src/ui/ConfirmPane.d.ts +4 -0
  132. package/node_modules/@aui.io/apollo-tui/dist/src/ui/ConfirmPane.js +15 -0
  133. package/node_modules/@aui.io/apollo-tui/dist/src/ui/ConfirmPane.js.map +1 -0
  134. package/node_modules/@aui.io/apollo-tui/dist/src/ui/OutputPane.d.ts +5 -0
  135. package/node_modules/@aui.io/apollo-tui/dist/src/ui/OutputPane.js +16 -0
  136. package/node_modules/@aui.io/apollo-tui/dist/src/ui/OutputPane.js.map +1 -0
  137. package/node_modules/@aui.io/apollo-tui/dist/src/ui/PickerPane.d.ts +10 -0
  138. package/node_modules/@aui.io/apollo-tui/dist/src/ui/PickerPane.js +29 -0
  139. package/node_modules/@aui.io/apollo-tui/dist/src/ui/PickerPane.js.map +1 -0
  140. package/node_modules/@aui.io/apollo-tui/dist/src/ui/SheetPane.d.ts +4 -0
  141. package/node_modules/@aui.io/apollo-tui/dist/src/ui/SheetPane.js +22 -0
  142. package/node_modules/@aui.io/apollo-tui/dist/src/ui/SheetPane.js.map +1 -0
  143. package/node_modules/@aui.io/apollo-tui/package.json +2 -2
  144. package/package.json +4 -4
  145. package/node_modules/@aui.io/apollo-tui/dist/src/lib/tabs.d.ts +0 -10
  146. package/node_modules/@aui.io/apollo-tui/dist/src/lib/tabs.js +0 -19
  147. package/node_modules/@aui.io/apollo-tui/dist/src/lib/tabs.js.map +0 -1
@@ -0,0 +1,319 @@
1
+ const UNIT_CAP = 400;
2
+ export function sessionCreate(backend) {
3
+ return { units: [], nextId: 1, turn: 0, running: false, backend };
4
+ }
5
+ function append(session, unit) {
6
+ const next = { ...unit, id: session.nextId, turn: session.turn };
7
+ return {
8
+ ...session,
9
+ nextId: session.nextId + 1,
10
+ units: [...session.units, next].slice(-UNIT_CAP),
11
+ };
12
+ }
13
+ /** A new user instruction starts a turn (appends to the same transcript). */
14
+ export function sessionPrompt(session, text) {
15
+ const started = { ...session, turn: session.turn + 1, running: true };
16
+ return append(started, { kind: "prompt", label: text, body: [] });
17
+ }
18
+ /** Terminal events settle pending work — nothing spins afterwards. */
19
+ function settleUnits(units) {
20
+ return units.map((u) => {
21
+ if (u.kind === "action" && u.status === "running") {
22
+ return { ...u, status: "ok", streaming: false };
23
+ }
24
+ if (u.streaming)
25
+ return { ...u, streaming: false };
26
+ return u;
27
+ });
28
+ }
29
+ /** Append a delta to body lines, splitting embedded newlines. */
30
+ function appendDelta(body, delta) {
31
+ const fragments = delta.split("\n");
32
+ if (body.length === 0)
33
+ return fragments;
34
+ const next = [...body];
35
+ next[next.length - 1] = `${next[next.length - 1]}${fragments[0]}`;
36
+ return [...next, ...fragments.slice(1)];
37
+ }
38
+ /** Replace one unit immutably. */
39
+ function patchUnit(session, index, patch) {
40
+ const units = [...session.units];
41
+ units[index] = { ...units[index], ...patch };
42
+ return { ...session, units };
43
+ }
44
+ function lastIndexBy(units, match) {
45
+ for (let i = units.length - 1; i >= 0; i--) {
46
+ if (match(units[i]))
47
+ return i;
48
+ }
49
+ return -1;
50
+ }
51
+ /**
52
+ * Strip the checkout prefix from event text so tool lines read as repo paths
53
+ * (`bundle/src/program.yaml`, not `/Users/…/agents/x/bundle/src/program.yaml`).
54
+ * Applied at the app seam — works for any backend.
55
+ */
56
+ export function relativizeEvent(event, root) {
57
+ if (!root)
58
+ return event;
59
+ const prefix = root.endsWith("/") ? root : `${root}/`;
60
+ const strip = (text) => text.split(prefix).join("");
61
+ switch (event.type) {
62
+ case "action":
63
+ return {
64
+ ...event,
65
+ label: strip(event.label),
66
+ ...(event.detail !== undefined ? { detail: strip(event.detail) } : {}),
67
+ ...(event.body !== undefined ? { body: event.body.map(strip) } : {}),
68
+ };
69
+ case "action-start":
70
+ return { ...event, label: strip(event.label) };
71
+ case "action-result":
72
+ return { ...event, body: event.body.map(strip) };
73
+ default:
74
+ return event;
75
+ }
76
+ }
77
+ export function sessionEvent(session, event) {
78
+ if (!session.running)
79
+ return session;
80
+ switch (event.type) {
81
+ // Streaming fragments accumulate into a trailing streaming unit; the
82
+ // complete text/action event that follows replaces them (authoritative).
83
+ case "text-delta":
84
+ case "thinking-delta": {
85
+ const kind = event.type === "text-delta" ? "text" : "thinking";
86
+ const last = session.units[session.units.length - 1];
87
+ if (last?.kind === kind && last.streaming) {
88
+ return patchUnit(session, session.units.length - 1, {
89
+ body: appendDelta(last.body, event.text),
90
+ });
91
+ }
92
+ return append(session, {
93
+ kind,
94
+ label: kind === "thinking" ? "thinking" : "",
95
+ body: event.text.split("\n"),
96
+ streaming: true,
97
+ });
98
+ }
99
+ case "action-start":
100
+ return append(session, {
101
+ kind: "action",
102
+ label: event.label,
103
+ body: [],
104
+ status: "running",
105
+ actionId: event.id,
106
+ streaming: true,
107
+ });
108
+ case "text": {
109
+ const streamed = lastIndexBy(session.units, (u) => u.kind === "text" && u.streaming === true);
110
+ if (streamed >= 0) {
111
+ return patchUnit(session, streamed, {
112
+ body: event.text.split("\n"),
113
+ streaming: false,
114
+ });
115
+ }
116
+ return append(session, { kind: "text", label: "", body: event.text.split("\n") });
117
+ }
118
+ case "action": {
119
+ const label = `${event.label}${event.detail ? ` — ${event.detail}` : ""}`;
120
+ if (event.id) {
121
+ const started = lastIndexBy(session.units, (u) => u.actionId === event.id);
122
+ if (started >= 0) {
123
+ return patchUnit(session, started, {
124
+ label,
125
+ body: event.body ?? [],
126
+ streaming: false,
127
+ });
128
+ }
129
+ }
130
+ return append(session, {
131
+ kind: "action",
132
+ label,
133
+ body: event.body ?? [],
134
+ // With a correlation id a result will arrive; without one, nothing is pending.
135
+ status: event.id ? "running" : "ok",
136
+ ...(event.id ? { actionId: event.id } : {}),
137
+ });
138
+ }
139
+ case "action-result": {
140
+ const index = lastIndexBy(session.units, (u) => u.actionId === event.id);
141
+ if (index < 0)
142
+ return session;
143
+ const unit = session.units[index];
144
+ return patchUnit(session, index, {
145
+ status: event.ok ? "ok" : "error",
146
+ streaming: false,
147
+ body: event.body.length > 0
148
+ ? [...unit.body, ...(unit.body.length > 0 ? [""] : []), "→ result:", ...event.body]
149
+ : unit.body,
150
+ });
151
+ }
152
+ case "error":
153
+ return append({ ...session, running: false, units: settleUnits(session.units) }, { kind: "outcome", label: event.message, body: [], status: "error" });
154
+ case "done":
155
+ return append({ ...session, running: false, units: settleUnits(session.units) }, {
156
+ kind: "outcome",
157
+ label: `turn complete${event.summary ? ` · ${event.summary}` : ""}`,
158
+ body: [],
159
+ status: "ok",
160
+ });
161
+ }
162
+ }
163
+ export function sessionCancel(session) {
164
+ if (!session.running)
165
+ return session;
166
+ return append({ ...session, running: false, units: settleUnits(session.units) }, { kind: "outcome", label: "turn cancelled", body: [], status: "cancelled" });
167
+ }
168
+ /** Word-wrap one line to a width; hard-breaks anything unbreakable. */
169
+ export function wrapText(line, width) {
170
+ const max = Math.max(8, width);
171
+ if (line.length <= max)
172
+ return [line];
173
+ const out = [];
174
+ let rest = line;
175
+ while (rest.length > max) {
176
+ let cut = rest.lastIndexOf(" ", max);
177
+ if (cut <= 0)
178
+ cut = max;
179
+ out.push(rest.slice(0, cut));
180
+ rest = rest.slice(cut).trimStart();
181
+ }
182
+ out.push(rest);
183
+ return out;
184
+ }
185
+ const BODY_INDENT = " ";
186
+ /** Marker + glyph for an action unit: expandability and live status. */
187
+ function actionPrefix(unit, expanded) {
188
+ const marker = unit.body.length > 0 ? (expanded ? "▾" : "▸") : " ";
189
+ const glyph = unit.status === "running" ? "⚙" : unit.status === "error" ? "✕" : "⚙";
190
+ return `${marker} ${glyph} `;
191
+ }
192
+ /**
193
+ * Flatten the session into renderable rows. `width` is the usable pane
194
+ * width — rows are pre-wrapped so row counts (and scroll targets) are exact.
195
+ * `queued` prompts (typed while a turn runs) render as dim trailing rows;
196
+ * they become real prompt units when their turn starts.
197
+ */
198
+ export function sessionRows(session, expanded, width, queued = []) {
199
+ const rows = [];
200
+ const bodyWidth = width - BODY_INDENT.length;
201
+ session.units.forEach((unit, index) => {
202
+ const spacerBefore = rows.length > 0 && (unit.kind === "prompt" || unit.kind === "outcome");
203
+ if (spacerBefore) {
204
+ rows.push({ unit: index, isLabel: false, tone: "spacer", text: "" });
205
+ }
206
+ switch (unit.kind) {
207
+ case "prompt": {
208
+ wrapText(`you: ${unit.label}`, width).forEach((text, i) => {
209
+ rows.push({ unit: index, isLabel: i === 0, tone: "prompt", text });
210
+ });
211
+ break;
212
+ }
213
+ case "text": {
214
+ let first = true;
215
+ for (const line of unit.body) {
216
+ for (const text of wrapText(line, width)) {
217
+ rows.push({ unit: index, isLabel: first, tone: "prose", text });
218
+ first = false;
219
+ }
220
+ }
221
+ break;
222
+ }
223
+ case "thinking": {
224
+ const isOpen = expanded.has(unit.id);
225
+ const marker = unit.body.length > 0 ? (isOpen ? "▾" : "▸") : " ";
226
+ rows.push({
227
+ unit: index,
228
+ isLabel: true,
229
+ tone: "thinking",
230
+ text: `${marker} ✻ thinking${unit.streaming ? "…" : ""}`,
231
+ });
232
+ if (isOpen) {
233
+ for (const line of unit.body) {
234
+ for (const text of wrapText(line, bodyWidth)) {
235
+ rows.push({
236
+ unit: index,
237
+ isLabel: false,
238
+ tone: "body",
239
+ text: `${BODY_INDENT}${text}`,
240
+ });
241
+ }
242
+ }
243
+ }
244
+ break;
245
+ }
246
+ case "action": {
247
+ const isOpen = expanded.has(unit.id);
248
+ const prefix = actionPrefix(unit, isOpen);
249
+ const tone = unit.status === "running"
250
+ ? "action-running"
251
+ : unit.status === "error"
252
+ ? "action-error"
253
+ : "action";
254
+ wrapText(`${prefix}${unit.label}`, width).forEach((text, i) => {
255
+ rows.push({ unit: index, isLabel: i === 0, tone, text });
256
+ });
257
+ if (isOpen) {
258
+ for (const line of unit.body) {
259
+ for (const text of wrapText(line, bodyWidth)) {
260
+ rows.push({
261
+ unit: index,
262
+ isLabel: false,
263
+ tone: "body",
264
+ text: `${BODY_INDENT}${text}`,
265
+ });
266
+ }
267
+ }
268
+ }
269
+ break;
270
+ }
271
+ case "outcome": {
272
+ const tone = unit.status === "error"
273
+ ? "outcome-error"
274
+ : unit.status === "cancelled"
275
+ ? "outcome-cancelled"
276
+ : "outcome-ok";
277
+ const glyph = unit.status === "error" ? "✕" : unit.status === "cancelled" ? "◼" : "✓";
278
+ wrapText(`${glyph} ${unit.label}`, width).forEach((text, i) => {
279
+ rows.push({ unit: index, isLabel: i === 0, tone, text });
280
+ });
281
+ if (unit.status === "ok") {
282
+ rows.push({
283
+ unit: index,
284
+ isLabel: false,
285
+ tone: "hint",
286
+ text: "→ d review diff · v validate · p push",
287
+ });
288
+ }
289
+ break;
290
+ }
291
+ }
292
+ });
293
+ // Live indicator while the backend works (before any queued follow-ups).
294
+ if (session.running) {
295
+ rows.push({
296
+ unit: Math.max(0, session.units.length - 1),
297
+ isLabel: false,
298
+ tone: "action-running",
299
+ text: "…",
300
+ });
301
+ }
302
+ // Queued prompts trail the transcript (sent when the running turn ends).
303
+ queued.forEach((text, i) => {
304
+ const virtualUnit = session.units.length + i;
305
+ if (rows.length > 0) {
306
+ rows.push({ unit: virtualUnit, isLabel: false, tone: "spacer", text: "" });
307
+ }
308
+ for (const line of wrapText(`you (queued): ${text}`, width)) {
309
+ rows.push({ unit: virtualUnit, isLabel: false, tone: "queued", text: line });
310
+ }
311
+ });
312
+ return rows;
313
+ }
314
+ /** First row of a unit — the scroll target when the cursor moves. */
315
+ export function unitRowOffset(rows, unitIndex) {
316
+ const at = rows.findIndex((r) => r.unit === unitIndex && r.isLabel);
317
+ return at < 0 ? 0 : at;
318
+ }
319
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/author/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * File tree for the diff/browse sidebar — pure path math, testable.
3
+ * Renders flat path lists as a GitHub-style tree: directories first,
4
+ * single-child directory chains compacted ("a/b/c"), collapsible.
5
+ */
6
+ export interface TreeEntry {
7
+ path: string;
8
+ status?: "A" | "M" | "D";
9
+ }
10
+ export interface TreeRow {
11
+ /** Full relative path of the node (compacted dirs use the deepest path). */
12
+ path: string;
13
+ /** Display label (dir chains compact to "a/b"). */
14
+ label: string;
15
+ depth: number;
16
+ kind: "dir" | "file";
17
+ status?: "A" | "M" | "D" | undefined;
18
+ /** Dirs only: false when the subtree is hidden. */
19
+ expanded?: boolean;
20
+ }
21
+ /**
22
+ * Flatten to visible rows, honoring collapsed dirs. `collapsed` keys are the
23
+ * (compacted) dir paths reported in the returned rows.
24
+ */
25
+ export declare function treeRows(entries: TreeEntry[], collapsed?: ReadonlySet<string>): TreeRow[];
@@ -0,0 +1,69 @@
1
+ /**
2
+ * File tree for the diff/browse sidebar — pure path math, testable.
3
+ * Renders flat path lists as a GitHub-style tree: directories first,
4
+ * single-child directory chains compacted ("a/b/c"), collapsible.
5
+ */
6
+ function makeDir(name, path) {
7
+ return { name, path, dirs: new Map(), files: [] };
8
+ }
9
+ function insert(root, entry) {
10
+ const segments = entry.path.split("/").filter(Boolean);
11
+ let node = root;
12
+ for (let i = 0; i < segments.length - 1; i++) {
13
+ const name = segments[i];
14
+ const dirPath = segments.slice(0, i + 1).join("/");
15
+ let child = node.dirs.get(name);
16
+ if (!child) {
17
+ child = makeDir(name, dirPath);
18
+ node.dirs.set(name, child);
19
+ }
20
+ node = child;
21
+ }
22
+ const name = segments[segments.length - 1];
23
+ if (!name)
24
+ return;
25
+ node.files.push({
26
+ name,
27
+ path: entry.path,
28
+ ...(entry.status ? { status: entry.status } : {}),
29
+ });
30
+ }
31
+ /**
32
+ * Flatten to visible rows, honoring collapsed dirs. `collapsed` keys are the
33
+ * (compacted) dir paths reported in the returned rows.
34
+ */
35
+ export function treeRows(entries, collapsed = new Set()) {
36
+ const root = makeDir("", "");
37
+ for (const entry of entries)
38
+ insert(root, entry);
39
+ const rows = [];
40
+ function emit(node, depth) {
41
+ const dirs = [...node.dirs.values()].sort((a, b) => a.name.localeCompare(b.name));
42
+ for (let dir of dirs) {
43
+ // Compact chains of empty single-subdir directories (GitHub style).
44
+ let label = dir.name;
45
+ while (dir.dirs.size === 1 && dir.files.length === 0) {
46
+ const only = [...dir.dirs.values()][0];
47
+ label = `${label}/${only.name}`;
48
+ dir = only;
49
+ }
50
+ const expanded = !collapsed.has(dir.path);
51
+ rows.push({ path: dir.path, label, depth, kind: "dir", expanded });
52
+ if (expanded)
53
+ emit(dir, depth + 1);
54
+ }
55
+ const files = [...node.files].sort((a, b) => a.name.localeCompare(b.name));
56
+ for (const file of files) {
57
+ rows.push({
58
+ path: file.path,
59
+ label: file.name,
60
+ depth,
61
+ kind: "file",
62
+ ...(file.status ? { status: file.status } : {}),
63
+ });
64
+ }
65
+ }
66
+ emit(root, 0);
67
+ return rows;
68
+ }
69
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/author/tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type ScopeStrip } from "../lib/scope.js";
2
+ /**
3
+ * Ctrl+G context switcher (TUI_DESIGN §10): one place to see and change
4
+ * account / place / target. Enter opens the picker for the highlighted row.
5
+ * Rows lead with human names; the full untruncated id (or path) rides along
6
+ * in a lighter color.
7
+ */
8
+ export interface ContextRow {
9
+ id: "env" | "profile" | "workspace" | "agent" | "project" | "org";
10
+ label: string;
11
+ advanced?: boolean;
12
+ }
13
+ export declare const CONTEXT_ROWS: ContextRow[];
14
+ export interface ContextRowDisplay {
15
+ value: string;
16
+ /** Full id / path — never truncated, rendered faint. */
17
+ detail?: string;
18
+ }
19
+ export declare function contextRowValue(scope: ScopeStrip, id: ContextRow["id"]): ContextRowDisplay;
20
+ export declare function ContextSwitcherPane({ scope, cursor, }: {
21
+ scope: ScopeStrip;
22
+ cursor: number;
23
+ }): import("react").ReactNode;
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
+ import { homeishPath } from "../lib/scope.js";
3
+ import { DIM, FAINT, FG, TEAL, TEAL_DIM } from "../theme/tokens.js";
4
+ export const CONTEXT_ROWS = [
5
+ { id: "env", label: "Environment" },
6
+ { id: "profile", label: "Profile" },
7
+ { id: "workspace", label: "Workspace" },
8
+ { id: "agent", label: "Agent" },
9
+ { id: "project", label: "Project" },
10
+ { id: "org", label: "Organization", advanced: true },
11
+ ];
12
+ export function contextRowValue(scope, id) {
13
+ switch (id) {
14
+ case "env":
15
+ return { value: scope.env };
16
+ case "profile":
17
+ return { value: scope.profile };
18
+ case "workspace":
19
+ return {
20
+ value: scope.workspace,
21
+ ...(scope.workspacePath
22
+ ? { detail: homeishPath(scope.workspacePath) }
23
+ : {}),
24
+ };
25
+ case "agent":
26
+ return {
27
+ value: scope.version !== "—" ? `${scope.agent} @ ${scope.version}` : scope.agent,
28
+ ...(scope.agentId ? { detail: scope.agentId } : {}),
29
+ };
30
+ case "project":
31
+ return {
32
+ value: scope.project,
33
+ ...(scope.projectId ? { detail: scope.projectId } : {}),
34
+ };
35
+ case "org":
36
+ return {
37
+ value: scope.org,
38
+ ...(scope.orgId ? { detail: scope.orgId } : {}),
39
+ };
40
+ }
41
+ }
42
+ export function ContextSwitcherPane({ scope, cursor, }) {
43
+ const width = Math.max(...CONTEXT_ROWS.map((row) => contextRowValue(scope, row.id).value.length));
44
+ return (_jsxs("box", { title: " context ", style: {
45
+ border: true,
46
+ borderStyle: "rounded",
47
+ borderColor: TEAL_DIM,
48
+ flexDirection: "column",
49
+ flexGrow: 1,
50
+ minHeight: 0,
51
+ width: "100%",
52
+ paddingLeft: 1,
53
+ paddingRight: 1,
54
+ }, children: [CONTEXT_ROWS.map((row, i) => {
55
+ const active = i === cursor;
56
+ const { value, detail } = contextRowValue(scope, row.id);
57
+ return (_jsxs("text", { fg: active ? TEAL : FG, style: { flexShrink: 0 }, children: [active ? "› " : " ", row.label.padEnd(14), _jsx("span", { fg: active ? FG : DIM, children: value.padEnd(width + 2) }), detail && detail !== value ? _jsx("span", { fg: FAINT, children: detail }) : null, row.advanced ? _jsx("span", { fg: FAINT, children: " advanced" }) : null] }, row.id));
58
+ }), _jsxs("text", { fg: FAINT, style: { flexShrink: 0 }, children: [" ", "env/profile follow their default workspace \u00B7 workspace enters (chdir)"] })] }));
59
+ }
60
+ //# sourceMappingURL=ContextSwitcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextSwitcher.js","sourceRoot":"","sources":["../../../src/context/ContextSwitcher.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,22 @@
1
1
  export { GlyphController } from "./components/glyph.js";
2
2
  export { GlyphSimulator, IDLE_CONFIG, WORKING_CONFIG, renderGlyphFrame, seedFromString, stepAttractor, } from "./lib/attractor.js";
3
3
  export { SLASH_COMMANDS, filterCommands, helpLines, resolveCommand, } from "./lib/commands.js";
4
- export { TABS } from "./lib/tabs.js";
4
+ export { MODES, modeByIndex, modeForJumpTab, otherMode } from "./lib/modes.js";
5
+ export { actionByAlias, buildActionRegistry, scoreAction, searchActions, } from "./actions/registry.js";
6
+ export { matchActivity, matchContext, matchCtrlC, matchHorizontal, matchModeJump, matchModeToggle, matchNewThread, matchPage, matchPalette, matchTalkTarget, matchTurnDebug, matchTurnTrace, } from "./lib/keys.js";
7
+ export { agentOrdinal, beginSend, cancelSend, composerDisabledReason, composerHeight, COMPOSER_KEY_BINDINGS, hasPendingSend, inspectorMeta, lastAgentTurnIndex, messagesToTurns, settleSend, talkLayout, talkRows, threadSummaries, turnRowOffset, } from "./talk/data.js";
8
+ export { threadsRowCount, NEW_THREAD_ROW } from "./talk/ThreadsPane.js";
9
+ export { clipboardCommandFor } from "./lib/clipboard.js";
10
+ export { OperationStore, OPERATION_GLYPH, formatElapsed, isOperationCommand, latestOperation, orderedOperations, } from "./activity/operationStore.js";
5
11
  export { effectivePickerFilter, filterPickerItems, resolvePickerAnswer, } from "./lib/picker.js";
12
+ export { KNOWN_IDES, detectIdes, ideTargetDir } from "./lib/ide.js";
13
+ export { changeEntries, changesSummary, defaultDiffStyle, diffLines, fileContentDiff, formatVersionRow, listPlaceFiles, readPlaceFile, relativeTime, splitRows, validationSummary, } from "./author/data.js";
14
+ export { treeRows } from "./author/tree.js";
15
+ export { AUTHOR_BACKENDS, resolveAuthorBackend, } from "./author/backend/index.js";
16
+ export { CLAUDE_ALLOWED_TOOLS, claudeArgs, claudeCodeBackend, cleanVersionOutput, parseClaudeLine, summarizeToolUse, } from "./author/backend/claudeCode.js";
17
+ export { agentDirName, applyNames, clearScopeNameCache, homeishPath, scopeFromContext, } from "./lib/scope.js";
18
+ export { contextRowValue, CONTEXT_ROWS } from "./context/ContextSwitcher.js";
19
+ export { defaultSessionsFile, loadSessions, saveSession, } from "./author/backend/sessions.js";
20
+ export { relativizeEvent, sessionCancel, sessionCreate, sessionEvent, sessionPrompt, sessionRows, unitRowOffset, wrapText, } from "./author/session.js";
21
+ export { describeKey, matchedBindings, probeLine, rawHex, } from "./lib/keydiag.js";
6
22
  export declare function main(argv?: string[]): Promise<number>;
@@ -3,8 +3,24 @@ import { fileURLToPath } from "node:url";
3
3
  export { GlyphController } from "./components/glyph.js";
4
4
  export { GlyphSimulator, IDLE_CONFIG, WORKING_CONFIG, renderGlyphFrame, seedFromString, stepAttractor, } from "./lib/attractor.js";
5
5
  export { SLASH_COMMANDS, filterCommands, helpLines, resolveCommand, } from "./lib/commands.js";
6
- export { TABS } from "./lib/tabs.js";
6
+ export { MODES, modeByIndex, modeForJumpTab, otherMode } from "./lib/modes.js";
7
+ export { actionByAlias, buildActionRegistry, scoreAction, searchActions, } from "./actions/registry.js";
8
+ export { matchActivity, matchContext, matchCtrlC, matchHorizontal, matchModeJump, matchModeToggle, matchNewThread, matchPage, matchPalette, matchTalkTarget, matchTurnDebug, matchTurnTrace, } from "./lib/keys.js";
9
+ export { agentOrdinal, beginSend, cancelSend, composerDisabledReason, composerHeight, COMPOSER_KEY_BINDINGS, hasPendingSend, inspectorMeta, lastAgentTurnIndex, messagesToTurns, settleSend, talkLayout, talkRows, threadSummaries, turnRowOffset, } from "./talk/data.js";
10
+ export { threadsRowCount, NEW_THREAD_ROW } from "./talk/ThreadsPane.js";
11
+ export { clipboardCommandFor } from "./lib/clipboard.js";
12
+ export { OperationStore, OPERATION_GLYPH, formatElapsed, isOperationCommand, latestOperation, orderedOperations, } from "./activity/operationStore.js";
7
13
  export { effectivePickerFilter, filterPickerItems, resolvePickerAnswer, } from "./lib/picker.js";
14
+ export { KNOWN_IDES, detectIdes, ideTargetDir } from "./lib/ide.js";
15
+ export { changeEntries, changesSummary, defaultDiffStyle, diffLines, fileContentDiff, formatVersionRow, listPlaceFiles, readPlaceFile, relativeTime, splitRows, validationSummary, } from "./author/data.js";
16
+ export { treeRows } from "./author/tree.js";
17
+ export { AUTHOR_BACKENDS, resolveAuthorBackend, } from "./author/backend/index.js";
18
+ export { CLAUDE_ALLOWED_TOOLS, claudeArgs, claudeCodeBackend, cleanVersionOutput, parseClaudeLine, summarizeToolUse, } from "./author/backend/claudeCode.js";
19
+ export { agentDirName, applyNames, clearScopeNameCache, homeishPath, scopeFromContext, } from "./lib/scope.js";
20
+ export { contextRowValue, CONTEXT_ROWS } from "./context/ContextSwitcher.js";
21
+ export { defaultSessionsFile, loadSessions, saveSession, } from "./author/backend/sessions.js";
22
+ export { relativizeEvent, sessionCancel, sessionCreate, sessionEvent, sessionPrompt, sessionRows, unitRowOffset, wrapText, } from "./author/session.js";
23
+ export { describeKey, matchedBindings, probeLine, rawHex, } from "./lib/keydiag.js";
8
24
  export async function main(argv = []) {
9
25
  if (!process.stdin.isTTY || !process.stdout.isTTY) {
10
26
  process.stderr.write("apollo TUI requires a TTY. Use apollo <command> for scripting.\n");
@@ -15,6 +31,11 @@ export async function main(argv = []) {
15
31
  if (typeof process.versions.bun !== "string") {
16
32
  return respawnUnderBun(argv);
17
33
  }
34
+ // Keybinding probe: shows what this terminal sends for each chord.
35
+ if (argv.includes("--keys")) {
36
+ const { runKeyProbe } = await import("./keyprobe.js");
37
+ return await runKeyProbe();
38
+ }
18
39
  try {
19
40
  const { runOpenTui } = await import("./opentui-app.js");
20
41
  return await runOpenTui();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,cAAc,EACd,SAAS,EACT,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAiB,EAAE;IAC5C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACzF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,6EAA6E;IAC7E,uEAAuE;IACvE,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACxD,OAAO,MAAM,UAAU,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;YAC/F,oFAAoF,CACvF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAc;IACrC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;YACjD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6DAA6D;oBAC3D,wEAAwE,CAC3E,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runKeyProbe(): Promise<number>;