@sagmans/dsh-tui 0.2.0 → 0.4.0

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 (174) hide show
  1. package/README.md +282 -25
  2. package/cordis.patch.yml +14 -0
  3. package/lib/agent/model.d.ts +26 -0
  4. package/lib/agent/model.d.ts.map +1 -1
  5. package/lib/agent/model.js +41 -0
  6. package/lib/agent/model.js.map +1 -1
  7. package/lib/agent/projections.d.ts +22 -6
  8. package/lib/agent/projections.d.ts.map +1 -1
  9. package/lib/agent/projections.js +21 -10
  10. package/lib/agent/projections.js.map +1 -1
  11. package/lib/agent/prompt-history.d.ts +89 -0
  12. package/lib/agent/prompt-history.d.ts.map +1 -0
  13. package/lib/agent/prompt-history.js +380 -0
  14. package/lib/agent/prompt-history.js.map +1 -0
  15. package/lib/agent/status.d.ts +16 -0
  16. package/lib/agent/status.d.ts.map +1 -1
  17. package/lib/agent/status.js +3 -0
  18. package/lib/agent/status.js.map +1 -1
  19. package/lib/cards.d.ts +1 -1
  20. package/lib/cards.d.ts.map +1 -1
  21. package/lib/cards.js +4 -3
  22. package/lib/cards.js.map +1 -1
  23. package/lib/gates.d.ts +145 -2
  24. package/lib/gates.d.ts.map +1 -1
  25. package/lib/gates.js +335 -40
  26. package/lib/gates.js.map +1 -1
  27. package/lib/herdr/client.d.ts +57 -0
  28. package/lib/herdr/client.d.ts.map +1 -0
  29. package/lib/herdr/client.js +218 -0
  30. package/lib/herdr/client.js.map +1 -0
  31. package/lib/herdr/constants.d.ts +93 -0
  32. package/lib/herdr/constants.d.ts.map +1 -0
  33. package/lib/herdr/constants.js +79 -0
  34. package/lib/herdr/constants.js.map +1 -0
  35. package/lib/herdr/reporter.d.ts +60 -0
  36. package/lib/herdr/reporter.d.ts.map +1 -0
  37. package/lib/herdr/reporter.js +217 -0
  38. package/lib/herdr/reporter.js.map +1 -0
  39. package/lib/herdr/state.d.ts +57 -0
  40. package/lib/herdr/state.d.ts.map +1 -0
  41. package/lib/herdr/state.js +62 -0
  42. package/lib/herdr/state.js.map +1 -0
  43. package/lib/index.d.ts.map +1 -1
  44. package/lib/index.js +631 -118
  45. package/lib/index.js.map +1 -1
  46. package/lib/input/actions.d.ts +136 -0
  47. package/lib/input/actions.d.ts.map +1 -0
  48. package/lib/input/actions.js +743 -0
  49. package/lib/input/actions.js.map +1 -0
  50. package/lib/input/ghost.d.ts +46 -0
  51. package/lib/input/ghost.d.ts.map +1 -0
  52. package/lib/input/ghost.js +58 -0
  53. package/lib/input/ghost.js.map +1 -0
  54. package/lib/input/keymap-settings.d.ts +21 -0
  55. package/lib/input/keymap-settings.d.ts.map +1 -0
  56. package/lib/input/keymap-settings.js +28 -0
  57. package/lib/input/keymap-settings.js.map +1 -0
  58. package/lib/input/keymap.d.ts +91 -0
  59. package/lib/input/keymap.d.ts.map +1 -0
  60. package/lib/input/keymap.js +172 -0
  61. package/lib/input/keymap.js.map +1 -0
  62. package/lib/input/match.d.ts +10 -0
  63. package/lib/input/match.d.ts.map +1 -0
  64. package/lib/input/match.js +83 -0
  65. package/lib/input/match.js.map +1 -0
  66. package/lib/input/submission.d.ts +29 -1
  67. package/lib/input/submission.d.ts.map +1 -1
  68. package/lib/input/submission.js +33 -2
  69. package/lib/input/submission.js.map +1 -1
  70. package/lib/input.d.ts +17 -0
  71. package/lib/input.d.ts.map +1 -0
  72. package/lib/input.js +27 -0
  73. package/lib/input.js.map +1 -0
  74. package/lib/keys-command.d.ts +16 -0
  75. package/lib/keys-command.d.ts.map +1 -0
  76. package/lib/keys-command.js +60 -0
  77. package/lib/keys-command.js.map +1 -0
  78. package/lib/queue.d.ts +6 -0
  79. package/lib/queue.d.ts.map +1 -0
  80. package/lib/queue.js +68 -0
  81. package/lib/queue.js.map +1 -0
  82. package/lib/settings-notice.d.ts +19 -0
  83. package/lib/settings-notice.d.ts.map +1 -0
  84. package/lib/settings-notice.js +30 -0
  85. package/lib/settings-notice.js.map +1 -0
  86. package/lib/stash/lock.d.ts +72 -0
  87. package/lib/stash/lock.d.ts.map +1 -0
  88. package/lib/stash/lock.js +374 -0
  89. package/lib/stash/lock.js.map +1 -0
  90. package/lib/stash/paths.d.ts +22 -0
  91. package/lib/stash/paths.d.ts.map +1 -0
  92. package/lib/stash/paths.js +83 -0
  93. package/lib/stash/paths.js.map +1 -0
  94. package/lib/stash/private-fs.d.ts +61 -0
  95. package/lib/stash/private-fs.d.ts.map +1 -0
  96. package/lib/stash/private-fs.js +379 -0
  97. package/lib/stash/private-fs.js.map +1 -0
  98. package/lib/stash/schema.d.ts +57 -0
  99. package/lib/stash/schema.d.ts.map +1 -0
  100. package/lib/stash/schema.js +127 -0
  101. package/lib/stash/schema.js.map +1 -0
  102. package/lib/stash/store.d.ts +92 -0
  103. package/lib/stash/store.d.ts.map +1 -0
  104. package/lib/stash/store.js +262 -0
  105. package/lib/stash/store.js.map +1 -0
  106. package/lib/stash.d.ts +91 -0
  107. package/lib/stash.d.ts.map +1 -0
  108. package/lib/stash.js +296 -0
  109. package/lib/stash.js.map +1 -0
  110. package/lib/theme-settings.d.ts +72 -8
  111. package/lib/theme-settings.d.ts.map +1 -1
  112. package/lib/theme-settings.js +125 -5
  113. package/lib/theme-settings.js.map +1 -1
  114. package/lib/theme-tokens.d.ts +4 -4
  115. package/lib/theme-tokens.d.ts.map +1 -1
  116. package/lib/theme-tokens.js +39 -5
  117. package/lib/theme-tokens.js.map +1 -1
  118. package/lib/todo-guard.d.ts +116 -0
  119. package/lib/todo-guard.d.ts.map +1 -0
  120. package/lib/todo-guard.js +259 -0
  121. package/lib/todo-guard.js.map +1 -0
  122. package/lib/ui/editor.d.ts +58 -1
  123. package/lib/ui/editor.d.ts.map +1 -1
  124. package/lib/ui/editor.js +174 -19
  125. package/lib/ui/editor.js.map +1 -1
  126. package/lib/ui/frame.d.ts +54 -0
  127. package/lib/ui/frame.d.ts.map +1 -0
  128. package/lib/ui/frame.js +79 -0
  129. package/lib/ui/frame.js.map +1 -0
  130. package/lib/ui/gate-input.d.ts +20 -0
  131. package/lib/ui/gate-input.d.ts.map +1 -0
  132. package/lib/ui/gate-input.js +96 -0
  133. package/lib/ui/gate-input.js.map +1 -0
  134. package/lib/ui/history-picker.d.ts +15 -0
  135. package/lib/ui/history-picker.d.ts.map +1 -0
  136. package/lib/ui/history-picker.js +26 -0
  137. package/lib/ui/history-picker.js.map +1 -0
  138. package/lib/ui/markdown.d.ts +11 -2
  139. package/lib/ui/markdown.d.ts.map +1 -1
  140. package/lib/ui/markdown.js +25 -6
  141. package/lib/ui/markdown.js.map +1 -1
  142. package/lib/ui/mermaid.d.ts +44 -0
  143. package/lib/ui/mermaid.d.ts.map +1 -0
  144. package/lib/ui/mermaid.js +178 -0
  145. package/lib/ui/mermaid.js.map +1 -0
  146. package/lib/ui/picker.d.ts +40 -8
  147. package/lib/ui/picker.d.ts.map +1 -1
  148. package/lib/ui/picker.js +79 -24
  149. package/lib/ui/picker.js.map +1 -1
  150. package/lib/ui/prompt.d.ts +32 -0
  151. package/lib/ui/prompt.d.ts.map +1 -0
  152. package/lib/ui/prompt.js +49 -0
  153. package/lib/ui/prompt.js.map +1 -0
  154. package/lib/ui/queue.d.ts +24 -0
  155. package/lib/ui/queue.d.ts.map +1 -0
  156. package/lib/ui/queue.js +57 -0
  157. package/lib/ui/queue.js.map +1 -0
  158. package/lib/ui/stash-picker.d.ts +43 -0
  159. package/lib/ui/stash-picker.d.ts.map +1 -0
  160. package/lib/ui/stash-picker.js +78 -0
  161. package/lib/ui/stash-picker.js.map +1 -0
  162. package/lib/ui/status.d.ts +6 -0
  163. package/lib/ui/status.d.ts.map +1 -1
  164. package/lib/ui/status.js +15 -0
  165. package/lib/ui/status.js.map +1 -1
  166. package/lib/ui/view.d.ts +22 -2
  167. package/lib/ui/view.d.ts.map +1 -1
  168. package/lib/ui/view.js +84 -24
  169. package/lib/ui/view.js.map +1 -1
  170. package/lib/work.d.ts +51 -1
  171. package/lib/work.d.ts.map +1 -1
  172. package/lib/work.js +53 -1
  173. package/lib/work.js.map +1 -1
  174. package/package.json +7 -2
package/lib/stash.js ADDED
@@ -0,0 +1,296 @@
1
+ // User-facing prompt-stash operations, independent of the terminal surface.
2
+ //
3
+ // Every command funnels through one serial queue, so a chord and a typed command
4
+ // can never interleave a read-modify-write on the same bank. The surface is
5
+ // reached through a small host seam, which keeps these operations testable
6
+ // without a terminal and keeps the editor's own text rules — an expanded paste
7
+ // and an empty bar — in exactly one place.
8
+ import { FileTooLargeError } from "./stash/private-fs.js";
9
+ import { StashCommittedError } from "./stash/lock.js";
10
+ import { resolveStashPaths, stashBaseDir } from "./stash/paths.js";
11
+ import { loadStashStore, UnsupportedStashSchemaError, } from "./stash/store.js";
12
+ const EDITOR_BLOCKED_MESSAGE = 'clear or stash the current draft before applying or popping';
13
+ const EDITOR_BUSY_MESSAGE = 'the prompt bar is answering a question; finish or cancel it first';
14
+ const NOTHING_TO_STASH_MESSAGE = 'nothing to stash';
15
+ const NO_DRAFTS_MESSAGE = 'no stashed drafts';
16
+ const CORRUPT_RECOVERY_MESSAGE = 'corrupt stash data was quarantined to';
17
+ const CORRUPT_RECOVERY_UNSYNCED_MESSAGE = ' (its directory could not be synced, so the copy may not survive a crash)';
18
+ const stashedMessage = (index) => `Stashed [${index}]`;
19
+ const appliedMessage = (index) => `Applied [${index}]`;
20
+ const poppedMessage = (index) => `Popped [${index}]`;
21
+ const droppedMessage = (index) => `Dropped [${index}]`;
22
+ const clearedMessage = (count) => `Cleared ${count} draft${count === 1 ? '' : 's'}`;
23
+ const selectorMissingMessage = (selector) => `no stash matching "${selector}"`;
24
+ const committedMessage = (error, done) => error.releaseFailure === undefined
25
+ ? `${done}, but the ${error.failure.phase} step failed`
26
+ : `${done}, but the ${error.failure.phase} and ${error.releaseFailure.phase} steps failed`;
27
+ const removalFailedMessage = (error, done) => `${done}, but removing the entry failed: ${error instanceof Error ? error.message : 'unknown error'}`;
28
+ function describeFailure(error) {
29
+ const detail = error instanceof Error ? error.message : 'unknown error';
30
+ return error instanceof UnsupportedStashSchemaError || error instanceof FileTooLargeError
31
+ ? `stash unavailable: ${detail}`
32
+ : `stash failed: ${detail}`;
33
+ }
34
+ export class PromptStash {
35
+ host;
36
+ options;
37
+ paths;
38
+ now;
39
+ write;
40
+ store;
41
+ count = 0;
42
+ /** The queue a second command waits behind, so writes never interleave. */
43
+ tail = Promise.resolve();
44
+ constructor(host, options) {
45
+ this.host = host;
46
+ this.options = options;
47
+ this.paths = resolveStashPaths(options.cwd, options.baseDir ?? stashBaseDir());
48
+ this.now = options.now;
49
+ this.write = options.write;
50
+ }
51
+ /** How many drafts this directory holds, as last read. */
52
+ get entryCount() {
53
+ return this.count;
54
+ }
55
+ /** Load the bank once at startup so the status count is real before a command. */
56
+ async open() {
57
+ try {
58
+ await this.ensure();
59
+ }
60
+ catch (error) {
61
+ this.host.notice(describeFailure(error));
62
+ }
63
+ this.sync();
64
+ }
65
+ /**
66
+ * Persist the draft the reader is looking at, or the one named on the command
67
+ * line.
68
+ *
69
+ * An argument is written into the editor before the write is attempted —
70
+ * before the bank is even opened — because the command line it came from is
71
+ * already gone: a refused write has to leave the draft where the reader can
72
+ * retry it instead of losing the only copy. A command that names nothing — the
73
+ * chord, or a bare `/stash` — parks whatever the bar is holding.
74
+ */
75
+ stashEditor(typed) {
76
+ const named = typed !== undefined && typed.trim() !== '';
77
+ // The draft goes back into the bar before anything can fail, including
78
+ // opening the bank: the command line it was typed on is already gone, so
79
+ // this is the only copy until a write lands.
80
+ if (named && this.host.editorIsAvailable())
81
+ this.host.setEditorText(typed);
82
+ return this.run(async (store) => {
83
+ if (!this.editorIsAvailable())
84
+ return;
85
+ const text = named ? typed : this.host.getEditorText();
86
+ if (text.trim() === '') {
87
+ this.host.notice(NOTHING_TO_STASH_MESSAGE);
88
+ return;
89
+ }
90
+ let resolved;
91
+ let warning;
92
+ try {
93
+ resolved = await store.add({ text });
94
+ }
95
+ catch (error) {
96
+ if (!(error instanceof StashCommittedError))
97
+ throw error;
98
+ // The draft is on disk; only the step after the write failed. Reporting
99
+ // a failure here would invite a retry that stashes the same draft twice.
100
+ resolved = error.result;
101
+ warning = committedMessage(error, stashedMessage(resolved.index));
102
+ }
103
+ // Only clear what was actually persisted, and only while the bar is still
104
+ // the reader's: a question can borrow it during the write, and clearing
105
+ // there would erase the answer instead of the draft that was parked.
106
+ if (this.host.editorIsAvailable() && this.host.getEditorText() === text)
107
+ this.host.setEditorText('');
108
+ this.host.notice(warning ?? stashedMessage(resolved.index));
109
+ });
110
+ }
111
+ /** Put a draft in an empty editor without removing it. */
112
+ apply(selector) {
113
+ return this.run(async (store) => {
114
+ await store.refresh();
115
+ if (!this.editorIsReady())
116
+ return;
117
+ const resolved = store.find(selector);
118
+ if (resolved === undefined) {
119
+ this.host.notice(this.missingMessage(selector));
120
+ return;
121
+ }
122
+ this.host.setEditorText(resolved.entry.text);
123
+ this.host.notice(appliedMessage(resolved.index));
124
+ });
125
+ }
126
+ /** Put a draft in an empty editor and remove it from the bank. */
127
+ pop(selector) {
128
+ return this.run(async (store) => {
129
+ // Re-read before resolving so "newest" is newest on disk, not newest as of
130
+ // the last command; the removal re-reads again under the lock.
131
+ await store.refresh();
132
+ await this.popFrom(store, selector);
133
+ });
134
+ }
135
+ /** Open the list and pop whatever the reader takes. */
136
+ list(cwdLabel) {
137
+ return this.run(async (store) => {
138
+ await store.refresh();
139
+ if (store.entryCount === 0) {
140
+ this.host.notice(NO_DRAFTS_MESSAGE);
141
+ return;
142
+ }
143
+ // The list is handed each entry with the index the bank gives it, so the
144
+ // row a reader picks and the selector they could have typed agree.
145
+ const rows = store.entries.map((entry, index) => ({ entry, index }));
146
+ const picked = await this.host.pick(rows, cwdLabel);
147
+ if (picked === undefined)
148
+ return;
149
+ await this.popFrom(store, picked);
150
+ });
151
+ }
152
+ /** Delete one draft without using it. */
153
+ drop(selector) {
154
+ return this.run(async (store) => {
155
+ let resolved;
156
+ let warning;
157
+ try {
158
+ resolved = await store.drop(selector);
159
+ }
160
+ catch (error) {
161
+ if (!(error instanceof StashCommittedError))
162
+ throw error;
163
+ resolved = error.result;
164
+ if (resolved === undefined)
165
+ return;
166
+ warning = committedMessage(error, droppedMessage(resolved.index));
167
+ }
168
+ if (resolved === undefined) {
169
+ this.host.notice(this.missingMessage(selector));
170
+ return;
171
+ }
172
+ this.host.notice(warning ?? droppedMessage(resolved.index));
173
+ });
174
+ }
175
+ /** Confirm, then delete every draft the confirmation named. */
176
+ clear() {
177
+ return this.run(async (store) => {
178
+ await store.refresh();
179
+ const count = store.entryCount;
180
+ if (count === 0) {
181
+ this.host.notice(NO_DRAFTS_MESSAGE);
182
+ return;
183
+ }
184
+ // The ids the reader was shown, not the ids on disk afterwards: another
185
+ // surface can stash while the dialog is open, and those drafts were never
186
+ // part of what this confirmation agreed to delete.
187
+ const confirmedIds = store.entries.map(entry => entry.id);
188
+ if (!(await this.host.confirm(confirmedIds.length)))
189
+ return;
190
+ let removed = confirmedIds.length;
191
+ let warning;
192
+ try {
193
+ removed = await store.clear(confirmedIds);
194
+ }
195
+ catch (error) {
196
+ if (!(error instanceof StashCommittedError))
197
+ throw error;
198
+ removed = error.result;
199
+ warning = committedMessage(error, clearedMessage(removed));
200
+ }
201
+ this.host.notice(warning ?? clearedMessage(removed));
202
+ });
203
+ }
204
+ /**
205
+ * Put one entry in an empty editor, then remove it.
206
+ *
207
+ * The editor is filled before the entry is removed, so a crash between the two
208
+ * leaves the draft in the bank rather than only in a terminal that is gone.
209
+ */
210
+ async popFrom(store, selector) {
211
+ if (!this.editorIsReady())
212
+ return;
213
+ const resolved = store.find(selector);
214
+ if (resolved === undefined) {
215
+ this.host.notice(this.missingMessage(selector));
216
+ return;
217
+ }
218
+ this.host.setEditorText(resolved.entry.text);
219
+ try {
220
+ const removed = await store.removeById(resolved.entry.id);
221
+ this.host.notice(poppedMessage(removed?.index ?? resolved.index));
222
+ }
223
+ catch (error) {
224
+ if (error instanceof StashCommittedError) {
225
+ this.host.notice(committedMessage(error, poppedMessage(resolved.index)));
226
+ return;
227
+ }
228
+ this.host.notice(removalFailedMessage(error, poppedMessage(resolved.index)));
229
+ }
230
+ }
231
+ editorIsReady() {
232
+ if (!this.editorIsAvailable())
233
+ return false;
234
+ if (this.host.getEditorText().trim() === '')
235
+ return true;
236
+ this.host.notice(EDITOR_BLOCKED_MESSAGE);
237
+ return false;
238
+ }
239
+ /**
240
+ * Whether the bar is the reader's to write in.
241
+ *
242
+ * A question borrows the bar and empties it, so an empty check alone would
243
+ * let a pop write the draft into an answer, and the draft's only other copy is
244
+ * deleted right afterwards.
245
+ */
246
+ editorIsAvailable() {
247
+ if (this.host.editorIsAvailable())
248
+ return true;
249
+ this.host.notice(EDITOR_BUSY_MESSAGE);
250
+ return false;
251
+ }
252
+ missingMessage(selector) {
253
+ const trimmed = selector?.trim();
254
+ return trimmed === undefined || trimmed === ''
255
+ ? NO_DRAFTS_MESSAGE
256
+ : selectorMissingMessage(trimmed);
257
+ }
258
+ async ensure() {
259
+ if (this.store !== undefined)
260
+ return this.store;
261
+ const store = await loadStashStore(this.paths, this.now, this.write);
262
+ this.store = store;
263
+ return store;
264
+ }
265
+ run(operation) {
266
+ return this.enqueue(async () => {
267
+ try {
268
+ await operation(await this.ensure());
269
+ }
270
+ catch (error) {
271
+ this.host.notice(describeFailure(error));
272
+ }
273
+ finally {
274
+ this.sync();
275
+ }
276
+ });
277
+ }
278
+ enqueue(operation) {
279
+ const run = this.tail.then(operation, operation);
280
+ this.tail = run.catch(() => undefined);
281
+ return run;
282
+ }
283
+ /** Publish the bank's size and any quarantine the last read produced. */
284
+ sync() {
285
+ if (this.store !== undefined) {
286
+ this.count = this.store.entryCount;
287
+ const quarantine = this.store.takeQuarantine();
288
+ if (quarantine !== undefined) {
289
+ const durability = quarantine.syncFailed ? CORRUPT_RECOVERY_UNSYNCED_MESSAGE : '';
290
+ this.host.notice(`${CORRUPT_RECOVERY_MESSAGE} ${quarantine.path}${durability}`);
291
+ }
292
+ }
293
+ this.host.render();
294
+ }
295
+ }
296
+ //# sourceMappingURL=stash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stash.js","sourceRoot":"","sources":["../src/stash.ts"],"names":[],"mappings":"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"}