@sagmans/dsh-tui 0.7.0 → 0.9.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 (242) hide show
  1. package/.agents/skills/dsh-tui-dogfood/SKILL.md +5 -1
  2. package/.agents/skills/dsh-tui-dogfood/scripts/run-plugin-from-worktree.sh +26 -2
  3. package/.agents/skills/dsh-tui-update-models/SKILL.md +95 -17
  4. package/.agents/skills/dsh-tui-update-models/references/model-wiring.md +158 -28
  5. package/.agents/skills/dsh-tui-update-models/scripts/dump-model-catalog.mjs +152 -16
  6. package/README.md +117 -53
  7. package/lib/agent/history.d.ts +0 -2
  8. package/lib/agent/history.d.ts.map +1 -1
  9. package/lib/agent/history.js +1 -1
  10. package/lib/agent/history.js.map +1 -1
  11. package/lib/agent/host.d.ts +0 -25
  12. package/lib/agent/host.d.ts.map +1 -1
  13. package/lib/agent/host.js +2 -2
  14. package/lib/agent/host.js.map +1 -1
  15. package/lib/agent/model.d.ts +38 -6
  16. package/lib/agent/model.d.ts.map +1 -1
  17. package/lib/agent/model.js +38 -14
  18. package/lib/agent/model.js.map +1 -1
  19. package/lib/agent/prompt-history.d.ts +7 -12
  20. package/lib/agent/prompt-history.d.ts.map +1 -1
  21. package/lib/agent/prompt-history.js +10 -31
  22. package/lib/agent/prompt-history.js.map +1 -1
  23. package/lib/cards/composition.d.ts +1 -1
  24. package/lib/cards/composition.d.ts.map +1 -1
  25. package/lib/cards/composition.js +7 -0
  26. package/lib/cards/composition.js.map +1 -1
  27. package/lib/cards/presenter.d.ts.map +1 -1
  28. package/lib/cards/presenter.js +32 -2
  29. package/lib/cards/presenter.js.map +1 -1
  30. package/lib/cards.d.ts +27 -2
  31. package/lib/cards.d.ts.map +1 -1
  32. package/lib/cards.js +17 -3
  33. package/lib/cards.js.map +1 -1
  34. package/lib/compat/probe.js +1 -1
  35. package/lib/compat/probe.js.map +1 -1
  36. package/lib/config.d.ts +10 -0
  37. package/lib/config.d.ts.map +1 -1
  38. package/lib/config.js +18 -0
  39. package/lib/config.js.map +1 -1
  40. package/lib/contracts.d.ts +2 -0
  41. package/lib/contracts.d.ts.map +1 -1
  42. package/lib/export.d.ts +12 -0
  43. package/lib/export.d.ts.map +1 -1
  44. package/lib/export.js +34 -3
  45. package/lib/export.js.map +1 -1
  46. package/lib/herdr/client.d.ts +8 -9
  47. package/lib/herdr/client.d.ts.map +1 -1
  48. package/lib/herdr/client.js +14 -2
  49. package/lib/herdr/client.js.map +1 -1
  50. package/lib/herdr/constants.d.ts +18 -0
  51. package/lib/herdr/constants.d.ts.map +1 -1
  52. package/lib/herdr/constants.js +18 -0
  53. package/lib/herdr/constants.js.map +1 -1
  54. package/lib/herdr/reporter.d.ts +20 -4
  55. package/lib/herdr/reporter.d.ts.map +1 -1
  56. package/lib/herdr/reporter.js +70 -20
  57. package/lib/herdr/reporter.js.map +1 -1
  58. package/lib/herdr/state.d.ts +10 -10
  59. package/lib/herdr/state.d.ts.map +1 -1
  60. package/lib/herdr/state.js +22 -5
  61. package/lib/herdr/state.js.map +1 -1
  62. package/lib/identity.d.ts +0 -2
  63. package/lib/identity.d.ts.map +1 -1
  64. package/lib/identity.js +0 -1
  65. package/lib/identity.js.map +1 -1
  66. package/lib/index.d.ts +1 -4
  67. package/lib/index.d.ts.map +1 -1
  68. package/lib/index.js +15 -5
  69. package/lib/index.js.map +1 -1
  70. package/lib/input/keymap.d.ts +1 -7
  71. package/lib/input/keymap.d.ts.map +1 -1
  72. package/lib/input/keymap.js +3 -11
  73. package/lib/input/keymap.js.map +1 -1
  74. package/lib/input/submission.js +2 -2
  75. package/lib/input/submission.js.map +1 -1
  76. package/lib/install-skills.d.ts +20 -1
  77. package/lib/install-skills.d.ts.map +1 -1
  78. package/lib/install-skills.js +84 -9
  79. package/lib/install-skills.js.map +1 -1
  80. package/lib/model-list.d.ts.map +1 -1
  81. package/lib/model-list.js +17 -5
  82. package/lib/model-list.js.map +1 -1
  83. package/lib/queue.d.ts +0 -2
  84. package/lib/queue.d.ts.map +1 -1
  85. package/lib/queue.js +1 -1
  86. package/lib/queue.js.map +1 -1
  87. package/lib/settings-notice.d.ts +10 -1
  88. package/lib/settings-notice.d.ts.map +1 -1
  89. package/lib/settings-notice.js +17 -7
  90. package/lib/settings-notice.js.map +1 -1
  91. package/lib/spacing.d.ts +40 -0
  92. package/lib/spacing.d.ts.map +1 -0
  93. package/lib/spacing.js +54 -0
  94. package/lib/spacing.js.map +1 -0
  95. package/lib/stash/paths.d.ts +19 -10
  96. package/lib/stash/paths.d.ts.map +1 -1
  97. package/lib/stash/paths.js +52 -23
  98. package/lib/stash/paths.js.map +1 -1
  99. package/lib/stash/schema.d.ts +13 -12
  100. package/lib/stash/schema.d.ts.map +1 -1
  101. package/lib/stash/schema.js +11 -9
  102. package/lib/stash/schema.js.map +1 -1
  103. package/lib/stash/store.d.ts.map +1 -1
  104. package/lib/stash/store.js +9 -19
  105. package/lib/stash/store.js.map +1 -1
  106. package/lib/stash.d.ts +17 -10
  107. package/lib/stash.d.ts.map +1 -1
  108. package/lib/stash.js +31 -20
  109. package/lib/stash.js.map +1 -1
  110. package/lib/subagents.d.ts +0 -4
  111. package/lib/subagents.d.ts.map +1 -1
  112. package/lib/subagents.js +2 -2
  113. package/lib/subagents.js.map +1 -1
  114. package/lib/surface/appearance.d.ts +3 -0
  115. package/lib/surface/appearance.d.ts.map +1 -1
  116. package/lib/surface/appearance.js +5 -0
  117. package/lib/surface/appearance.js.map +1 -1
  118. package/lib/surface/background-work.d.ts +2 -0
  119. package/lib/surface/background-work.d.ts.map +1 -1
  120. package/lib/surface/background-work.js +45 -3
  121. package/lib/surface/background-work.js.map +1 -1
  122. package/lib/surface/commands.d.ts +2 -0
  123. package/lib/surface/commands.d.ts.map +1 -1
  124. package/lib/surface/commands.js +32 -6
  125. package/lib/surface/commands.js.map +1 -1
  126. package/lib/surface/modal-input.d.ts +3 -2
  127. package/lib/surface/modal-input.d.ts.map +1 -1
  128. package/lib/surface/modal-input.js +25 -8
  129. package/lib/surface/modal-input.js.map +1 -1
  130. package/lib/surface/model-choice.d.ts.map +1 -1
  131. package/lib/surface/model-choice.js +18 -18
  132. package/lib/surface/model-choice.js.map +1 -1
  133. package/lib/surface/preset-choice.d.ts.map +1 -1
  134. package/lib/surface/preset-choice.js +18 -10
  135. package/lib/surface/preset-choice.js.map +1 -1
  136. package/lib/surface/prompt-memory.d.ts +3 -1
  137. package/lib/surface/prompt-memory.d.ts.map +1 -1
  138. package/lib/surface/prompt-memory.js +10 -11
  139. package/lib/surface/prompt-memory.js.map +1 -1
  140. package/lib/surface/session-lifecycle.d.ts +6 -1
  141. package/lib/surface/session-lifecycle.d.ts.map +1 -1
  142. package/lib/surface/session-lifecycle.js +30 -8
  143. package/lib/surface/session-lifecycle.js.map +1 -1
  144. package/lib/surface/session-view.d.ts.map +1 -1
  145. package/lib/surface/session-view.js +1 -3
  146. package/lib/surface/session-view.js.map +1 -1
  147. package/lib/surface/staged-turns.d.ts +0 -2
  148. package/lib/surface/staged-turns.d.ts.map +1 -1
  149. package/lib/surface/staged-turns.js +37 -6
  150. package/lib/surface/staged-turns.js.map +1 -1
  151. package/lib/terminal/external-editor.d.ts +16 -0
  152. package/lib/terminal/external-editor.d.ts.map +1 -1
  153. package/lib/terminal/external-editor.js +38 -6
  154. package/lib/terminal/external-editor.js.map +1 -1
  155. package/lib/terminal/host-writes.d.ts +15 -2
  156. package/lib/terminal/host-writes.d.ts.map +1 -1
  157. package/lib/terminal/host-writes.js +10 -1
  158. package/lib/terminal/host-writes.js.map +1 -1
  159. package/lib/terminal/restore.d.ts +1 -2
  160. package/lib/terminal/restore.d.ts.map +1 -1
  161. package/lib/terminal/restore.js +1 -9
  162. package/lib/terminal/restore.js.map +1 -1
  163. package/lib/terminal/signals.d.ts +0 -1
  164. package/lib/terminal/signals.d.ts.map +1 -1
  165. package/lib/terminal/signals.js +1 -1
  166. package/lib/terminal/signals.js.map +1 -1
  167. package/lib/terminal/title.d.ts.map +1 -1
  168. package/lib/terminal/title.js +14 -3
  169. package/lib/terminal/title.js.map +1 -1
  170. package/lib/terminal/warning-screen.d.ts.map +1 -1
  171. package/lib/terminal/warning-screen.js +12 -1
  172. package/lib/terminal/warning-screen.js.map +1 -1
  173. package/lib/theme-capability.d.ts +0 -2
  174. package/lib/theme-capability.d.ts.map +1 -1
  175. package/lib/theme-capability.js +1 -1
  176. package/lib/theme-capability.js.map +1 -1
  177. package/lib/theme-defaults.d.ts.map +1 -1
  178. package/lib/theme-defaults.js +7 -0
  179. package/lib/theme-defaults.js.map +1 -1
  180. package/lib/theme-files.d.ts +1 -1
  181. package/lib/theme-files.d.ts.map +1 -1
  182. package/lib/theme-files.js +1 -1
  183. package/lib/theme-files.js.map +1 -1
  184. package/lib/theme-schema.d.ts +6 -6
  185. package/lib/theme-settings.d.ts +13 -8
  186. package/lib/theme-settings.d.ts.map +1 -1
  187. package/lib/theme-settings.js +17 -3
  188. package/lib/theme-settings.js.map +1 -1
  189. package/lib/theme-tokens.d.ts +1 -1
  190. package/lib/theme-tokens.d.ts.map +1 -1
  191. package/lib/theme-tokens.js +7 -2
  192. package/lib/theme-tokens.js.map +1 -1
  193. package/lib/transcript.d.ts +2 -2
  194. package/lib/transcript.d.ts.map +1 -1
  195. package/lib/transcript.js +9 -4
  196. package/lib/transcript.js.map +1 -1
  197. package/lib/ui/dock.d.ts +2 -0
  198. package/lib/ui/dock.d.ts.map +1 -1
  199. package/lib/ui/dock.js +18 -3
  200. package/lib/ui/dock.js.map +1 -1
  201. package/lib/ui/gap.d.ts +28 -0
  202. package/lib/ui/gap.d.ts.map +1 -0
  203. package/lib/ui/gap.js +47 -0
  204. package/lib/ui/gap.js.map +1 -0
  205. package/lib/ui/gutter.d.ts +25 -0
  206. package/lib/ui/gutter.d.ts.map +1 -0
  207. package/lib/ui/gutter.js +31 -0
  208. package/lib/ui/gutter.js.map +1 -0
  209. package/lib/ui/layout.d.ts +13 -1
  210. package/lib/ui/layout.d.ts.map +1 -1
  211. package/lib/ui/layout.js +32 -6
  212. package/lib/ui/layout.js.map +1 -1
  213. package/lib/ui/queue.d.ts +0 -4
  214. package/lib/ui/queue.d.ts.map +1 -1
  215. package/lib/ui/queue.js +2 -2
  216. package/lib/ui/queue.js.map +1 -1
  217. package/lib/ui/rows.d.ts +0 -8
  218. package/lib/ui/rows.d.ts.map +1 -1
  219. package/lib/ui/rows.js +1 -9
  220. package/lib/ui/rows.js.map +1 -1
  221. package/lib/ui/stash-picker.d.ts +2 -2
  222. package/lib/ui/stash-picker.d.ts.map +1 -1
  223. package/lib/ui/stash-picker.js +3 -3
  224. package/lib/ui/stash-picker.js.map +1 -1
  225. package/lib/ui/view/gate-card.d.ts.map +1 -1
  226. package/lib/ui/view/gate-card.js +4 -1
  227. package/lib/ui/view/gate-card.js.map +1 -1
  228. package/lib/ui/view/tool-card.d.ts +17 -2
  229. package/lib/ui/view/tool-card.d.ts.map +1 -1
  230. package/lib/ui/view/tool-card.js +40 -8
  231. package/lib/ui/view/tool-card.js.map +1 -1
  232. package/lib/ui/view/transcript-message.d.ts +3 -0
  233. package/lib/ui/view/transcript-message.d.ts.map +1 -1
  234. package/lib/ui/view/transcript-message.js +8 -1
  235. package/lib/ui/view/transcript-message.js.map +1 -1
  236. package/lib/ui/view.d.ts +36 -9
  237. package/lib/ui/view.d.ts.map +1 -1
  238. package/lib/ui/view.js +90 -32
  239. package/lib/ui/view.js.map +1 -1
  240. package/package.json +3 -1
  241. package/themes/deepseek-blue.yaml +3 -0
  242. package/themes/violet-orbit.yaml +16 -9
@@ -28,9 +28,9 @@ export const LOCAL_COMMAND_DESCRIPTIONS = {
28
28
  '/stash': 'store the draft typed after it; ctrl+x then s parks the editor',
29
29
  '/stash-pop': 'put a stashed draft (newest by default) into the editor and remove it',
30
30
  '/stash-apply': 'put a stashed draft (newest by default) into the editor and keep it',
31
- '/stash-list': "open this session's stashes; enter pops one",
31
+ '/stash-list': 'open the current stash bank; enter pops one',
32
32
  '/stash-drop': 'delete a stashed draft (newest by default) without using it',
33
- '/stash-clear': 'delete every draft stashed in this session after a confirmation',
33
+ '/stash-clear': 'delete every draft in the current stash bank after a confirmation',
34
34
  '/quit': 'leave and print the resume command',
35
35
  '/exit': 'leave and print the resume command',
36
36
  };
@@ -1 +1 @@
1
- {"version":3,"file":"submission.js","sourceRoot":"","sources":["../../src/input/submission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"submission.js","sourceRoot":"","sources":["../../src/input/submission.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ /** The command a drift notice names, so the line it prints is the line that runs. */
2
+ export declare const SKILL_UPDATE_COMMAND = "dsh --profile tui install-skills --update";
1
3
  export declare class SkillAlreadyExistsError extends Error {
2
4
  readonly destination: string;
3
5
  constructor(destination: string);
@@ -7,7 +9,24 @@ export declare class SkillAlreadyExistsError extends Error {
7
9
  * listed: a skill a reader can see here is one `install-skills` installs, and
8
10
  * adding another never means editing the installer.
9
11
  */
10
- export declare function bundledSkillNames(): string[];
12
+ export declare function bundledSkillNames(bundled?: string): string[];
13
+ /**
14
+ * The installed copies that no longer match what this package ships.
15
+ *
16
+ * Content only, over the bundled file set. The installer chmods its own
17
+ * helpers, so a mode difference is its doing rather than drift, and a file a
18
+ * reader added beside a skill is theirs: one startup line can explain neither,
19
+ * and a line that cries wolf gets read past when it matters.
20
+ */
21
+ export declare function driftedSkillNames(home?: string, bundled?: string): string[];
22
+ /**
23
+ * The one line a startup can spare for an installed skill this build has moved
24
+ * past, or `undefined` when every installed copy still matches.
25
+ *
26
+ * Silence on any failure: a notice is a courtesy, and an unreadable home must
27
+ * not cost a reader the session they launched.
28
+ */
29
+ export declare function describeSkillDrift(home?: string, bundled?: string): string | undefined;
11
30
  /** Install one bundled skill, or replace the installed copy when `update`. */
12
31
  export declare function installBundledSkill(name: string, home?: string, update?: boolean): string;
13
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"install-skills.d.ts","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"AAWA,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM;gBAAnB,WAAW,EAAE,MAAM;CAGzC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAS5C;AA8GD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,EAAE,MAAM,UAAQ,GAAG,MAAM,CAElG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAkB,EAAE,MAAM,UAAQ,EAAE,KAAK,GAAE,SAAS,MAAM,EAAwB,GAAG,MAAM,EAAE,CA0BvI"}
1
+ {"version":3,"file":"install-skills.d.ts","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"AAaA,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,8CAA8C,CAAA;AAQ/E,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM;gBAAnB,WAAW,EAAE,MAAM;CAGzC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAoB,GAAG,MAAM,EAAE,CASzE;AAuBD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAkB,EAAE,OAAO,GAAE,MAAoB,GAAG,MAAM,EAAE,CAenG;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAkB,EAAE,OAAO,GAAE,MAAoB,GAAG,MAAM,GAAG,SAAS,CAS9G;AA8GD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,EAAE,MAAM,UAAQ,GAAG,MAAM,CAElG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAkB,EAAE,MAAM,UAAQ,EAAE,KAAK,GAAE,SAAS,MAAM,EAAwB,GAAG,MAAM,EAAE,CAyBvI"}
@@ -1,12 +1,22 @@
1
- import { chmodSync, cpSync, lstatSync, mkdirSync, mkdtempSync, readdirSync, renameSync, rmSync } from 'node:fs';
1
+ import { chmodSync, cpSync, lstatSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, renameSync, rmSync } from 'node:fs';
2
2
  import { homedir } from 'node:os';
3
3
  import { dirname, join } from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  const PACKAGE_ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
6
6
  const SKILLS_ROOT = join(PACKAGE_ROOT, '.agents', 'skills');
7
+ /** The user skill root, spelled once: the installer writes it and the drift check reads it. */
8
+ const AGENTS_DIRECTORY = '.agents';
9
+ const SKILLS_DIRECTORY = 'skills';
7
10
  /** A bundled helper must keep its execute bit once the archive has stripped it. */
8
11
  const HELPER_EXTENSIONS = ['.sh', '.mjs'];
9
12
  const EXECUTABLE_MODE = 0o755;
13
+ /** The command a drift notice names, so the line it prints is the line that runs. */
14
+ export const SKILL_UPDATE_COMMAND = 'dsh --profile tui install-skills --update';
15
+ /** Separator the surface's own notices use, so a drift line reads like the rest. */
16
+ const NOTICE_SEPARATOR = ' · ';
17
+ function installedSkillsRoot(home) {
18
+ return join(home, AGENTS_DIRECTORY, SKILLS_DIRECTORY);
19
+ }
10
20
  export class SkillAlreadyExistsError extends Error {
11
21
  destination;
12
22
  constructor(destination) {
@@ -19,18 +29,84 @@ export class SkillAlreadyExistsError extends Error {
19
29
  * listed: a skill a reader can see here is one `install-skills` installs, and
20
30
  * adding another never means editing the installer.
21
31
  */
22
- export function bundledSkillNames() {
23
- const root = lstatSync(SKILLS_ROOT);
32
+ export function bundledSkillNames(bundled = SKILLS_ROOT) {
33
+ const root = lstatSync(bundled);
24
34
  if (!root.isDirectory() || root.isSymbolicLink())
25
- throw new Error(`invalid bundled skills: ${SKILLS_ROOT}`);
26
- const names = readdirSync(SKILLS_ROOT, { withFileTypes: true })
35
+ throw new Error(`invalid bundled skills: ${bundled}`);
36
+ const names = readdirSync(bundled, { withFileTypes: true })
27
37
  .filter(entry => entry.isDirectory() && !entry.isSymbolicLink())
28
38
  .map(entry => entry.name)
29
39
  .sort();
30
40
  if (names.length === 0)
31
- throw new Error(`no bundled skills: ${SKILLS_ROOT}`);
41
+ throw new Error(`no bundled skills: ${bundled}`);
32
42
  return names;
33
43
  }
44
+ /** Every regular file a skill directory carries, keyed by its relative path. */
45
+ function skillFiles(root) {
46
+ const files = new Map();
47
+ const walk = (directory, prefix) => {
48
+ for (const entry of readdirSync(directory, { withFileTypes: true })) {
49
+ const relative = prefix === '' ? entry.name : prefix + '/' + entry.name;
50
+ const path = join(directory, entry.name);
51
+ if (entry.isDirectory()) {
52
+ walk(path, relative);
53
+ continue;
54
+ }
55
+ // A symlinked member is not content this package shipped, and following
56
+ // one would read whatever it happens to point at.
57
+ if (!entry.isFile())
58
+ continue;
59
+ files.set(relative, readFileSync(path));
60
+ }
61
+ };
62
+ walk(root, '');
63
+ return files;
64
+ }
65
+ /**
66
+ * The installed copies that no longer match what this package ships.
67
+ *
68
+ * Content only, over the bundled file set. The installer chmods its own
69
+ * helpers, so a mode difference is its doing rather than drift, and a file a
70
+ * reader added beside a skill is theirs: one startup line can explain neither,
71
+ * and a line that cries wolf gets read past when it matters.
72
+ */
73
+ export function driftedSkillNames(home = homedir(), bundled = SKILLS_ROOT) {
74
+ const skills = installedSkillsRoot(home);
75
+ return bundledSkillNames(bundled).filter(name => {
76
+ const destination = join(skills, name);
77
+ const entry = lstatSync(destination, { throwIfNoEntry: false });
78
+ // Never installed is not drift - a first install is that command's own
79
+ // prompt - and a symlinked copy is one the installer refuses to replace.
80
+ if (entry === undefined || entry.isSymbolicLink() || !entry.isDirectory())
81
+ return false;
82
+ const installed = skillFiles(destination);
83
+ for (const [path, content] of skillFiles(join(bundled, name))) {
84
+ const current = installed.get(path);
85
+ if (current === undefined || !current.equals(content))
86
+ return true;
87
+ }
88
+ return false;
89
+ });
90
+ }
91
+ /**
92
+ * The one line a startup can spare for an installed skill this build has moved
93
+ * past, or `undefined` when every installed copy still matches.
94
+ *
95
+ * Silence on any failure: a notice is a courtesy, and an unreadable home must
96
+ * not cost a reader the session they launched.
97
+ */
98
+ export function describeSkillDrift(home = homedir(), bundled = SKILLS_ROOT) {
99
+ try {
100
+ const drifted = driftedSkillNames(home, bundled);
101
+ if (drifted.length === 0)
102
+ return undefined;
103
+ return `bundled skills changed since they were installed: ${drifted.join(NOTICE_SEPARATOR)}`
104
+ + `${NOTICE_SEPARATOR}run ${SKILL_UPDATE_COMMAND}`;
105
+ }
106
+ catch {
107
+ return undefined;
108
+ }
109
+ }
34
110
  /** Avoid writing through a pre-existing symlink into an unexpected directory. */
35
111
  function ensureDirectory(path) {
36
112
  try {
@@ -166,9 +242,8 @@ export function installBundledSkill(name, home = homedir(), update = false) {
166
242
  */
167
243
  export function installBundledSkills(home = homedir(), update = false, names = bundledSkillNames()) {
168
244
  ensureDirectory(home);
169
- const agents = join(home, '.agents');
170
- ensureDirectory(agents);
171
- const skills = join(agents, 'skills');
245
+ ensureDirectory(join(home, AGENTS_DIRECTORY));
246
+ const skills = installedSkillsRoot(home);
172
247
  ensureDirectory(skills);
173
248
  const destinations = names.map(name => join(skills, name));
174
249
  for (const destination of destinations) {
@@ -1 +1 @@
1
- {"version":3,"file":"install-skills.js","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-skills.js","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-list.d.ts","sourceRoot":"","sources":["../src/model-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAclD;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,IAAI,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACtE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;CAC9F;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQjF;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5F"}
1
+ {"version":3,"file":"model-list.d.ts","sourceRoot":"","sources":["../src/model-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AA2BlD;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,IAAI,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACtE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;CAC9F;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQjF;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5F"}
package/lib/model-list.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createModelCatalog } from "./agent/model.js";
1
+ import { MODEL_CATALOG_GAP_CAUSE, readModelCatalog } from "./agent/model.js";
2
2
  /**
3
3
  * Column separator between the route and the display name.
4
4
  *
@@ -8,6 +8,18 @@ import { createModelCatalog } from "./agent/model.js";
8
8
  const FIELD_SEPARATOR = '\t';
9
9
  /** Prefix every refusal carries, so a piped run names the command that failed. */
10
10
  const FAILURE_PREFIX = 'dsh --profile tui list-models: ';
11
+ /**
12
+ * One refusal per cause of an absent catalog.
13
+ *
14
+ * The reader acts on this line, and the two causes ask for opposite things: an
15
+ * absent service is a plugin to mount, while one that cannot list providers is
16
+ * already mounted and only older than the model directory this command reads.
17
+ */
18
+ const CATALOG_GAP_MESSAGES = {
19
+ no_llm_service: `${MODEL_CATALOG_GAP_CAUSE.no_llm_service}, so models cannot be listed`,
20
+ llm_without_provider_listing: `${MODEL_CATALOG_GAP_CAUSE.llm_without_provider_listing}, so models cannot be listed; `
21
+ + 'it predates the model directory this command reads',
22
+ };
11
23
  /**
12
24
  * Format one line per reachable route, in the picker's own order.
13
25
  *
@@ -37,14 +49,14 @@ export async function runModelList(ctx, exit) {
37
49
  process.stderr.write(`${FAILURE_PREFIX}${message}\n`);
38
50
  exit(1);
39
51
  };
40
- const catalog = createModelCatalog(ctx);
41
- if (catalog === undefined) {
42
- fail('this profile has no llm service, so models cannot be listed');
52
+ const reading = readModelCatalog(ctx);
53
+ if (reading.kind === 'gap') {
54
+ fail(CATALOG_GAP_MESSAGES[reading.gap]);
43
55
  return;
44
56
  }
45
57
  let lines;
46
58
  try {
47
- lines = await modelListLines(catalog);
59
+ lines = await modelListLines(reading.catalog);
48
60
  }
49
61
  catch (error) {
50
62
  fail(`could not list models: ${error instanceof Error ? error.message : String(error)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"model-list.js","sourceRoot":"","sources":["../src/model-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD;;;;;GAKG;AACH,MAAM,eAAe,GAAG,IAAI,CAAA;AAE5B,kFAAkF;AAClF,MAAM,cAAc,GAAG,iCAAiC,CAAA;AAexD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAyB;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,eAAe,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAY,EAAE,IAA4B;IAC3E,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,GAAG,OAAO,IAAI,CAAC,CAAA;QACrD,IAAI,CAAC,CAAC,CAAC,CAAA;IACT,CAAC,CAAA;IACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,6DAA6D,CAAC,CAAA;QACnE,OAAM;IACR,CAAC;IACD,IAAI,KAAe,CAAA;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACxF,OAAM;IACR,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,2CAA2C,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,CAAC,CAAC,CAAA;AACT,CAAC"}
1
+ {"version":3,"file":"model-list.js","sourceRoot":"","sources":["../src/model-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAwB,MAAM,kBAAkB,CAAA;AAElG;;;;;GAKG;AACH,MAAM,eAAe,GAAG,IAAI,CAAA;AAE5B,kFAAkF;AAClF,MAAM,cAAc,GAAG,iCAAiC,CAAA;AAExD;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAoC;IAC5D,cAAc,EAAE,GAAG,uBAAuB,CAAC,cAAc,8BAA8B;IACvF,4BAA4B,EAAE,GAAG,uBAAuB,CAAC,4BAA4B,gCAAgC;UACjH,oDAAoD;CACzD,CAAA;AAeD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAyB;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,eAAe,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAY,EAAE,IAA4B;IAC3E,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,GAAG,OAAO,IAAI,CAAC,CAAA;QACrD,IAAI,CAAC,CAAC,CAAC,CAAA;IACT,CAAC,CAAA;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QACvC,OAAM;IACR,CAAC;IACD,IAAI,KAAe,CAAA;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACxF,OAAM;IACR,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,2CAA2C,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,CAAC,CAAC,CAAA;AACT,CAAC"}
package/lib/queue.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
- /** The reader's own prompts still waiting in one inbox projection state. */
3
- export declare function promptsOf(state: unknown): readonly string[];
4
2
  /** The prompts one session's agent has not taken yet. */
5
3
  export declare function pendingPrompts(ctx: Context, session: unknown): readonly string[];
6
4
  //# sourceMappingURL=queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAmDlD,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAc3D;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAEhF"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAoElD,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAEhF"}
package/lib/queue.js CHANGED
@@ -43,7 +43,7 @@ function textOf(message) {
43
43
  return texts.length === 0 ? NO_TEXT : texts.join('\n');
44
44
  }
45
45
  /** The reader's own prompts still waiting in one inbox projection state. */
46
- export function promptsOf(state) {
46
+ function promptsOf(state) {
47
47
  const inbox = asRecord(state);
48
48
  if (inbox === undefined)
49
49
  return [];
package/lib/queue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD;;;;;;;;;GASG;AAEH,2FAA2F;AAC3F,MAAM,OAAO,GAAG,WAAW,CAAA;AAE3B;;;;;GAKG;AACH,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,WAAW,CAAU,CAAA;AAEnD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,SAAS,CAAA;AACnG,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,OAAgC;IACjD,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,MAAM,CAAA;AAClD,CAAC;AAED,8FAA8F;AAC9F,SAAS,MAAM,CAAC,OAAgC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IACpE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAQ;QACxE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACxD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAClC,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,SAAQ;QACrC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC/B,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,SAAQ;YAC1D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,GAAY,EAAE,OAAgB;IAC3D,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AACvF,CAAC"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD;;;;;;;;;GASG;AAEH,2FAA2F;AAC3F,MAAM,OAAO,GAAG,WAAW,CAAA;AAE3B;;;;;GAKG;AACH,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,WAAW,CAAU,CAAA;AAEnD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,SAAS,CAAA;AACnG,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,OAAgC;IACjD,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,MAAM,CAAA;AAClD,CAAC;AAED,8FAA8F;AAC9F,SAAS,MAAM,CAAC,OAAgC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IACpE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAQ;QACxE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACxD,CAAC;AAED,4EAA4E;AAC5E,SAAS,SAAS,CAAC,KAAc;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAClC,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,SAAQ;QACrC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC/B,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,SAAQ;YAC1D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,GAAY,EAAE,OAAgB;IAC3D,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AACvF,CAAC"}
@@ -4,7 +4,11 @@ export type NoticeSink = (message: string) => void;
4
4
  export interface DeferredNotice {
5
5
  /** Print through `sink` from now on, starting with anything held back. */
6
6
  open(sink: NoticeSink): void;
7
- /** Print the notice now, or hold it until {@link DeferredNotice.open}. */
7
+ /**
8
+ * Print the notice now, or hold it until {@link DeferredNotice.open}.
9
+ *
10
+ * A message the notice just carried is dropped rather than posted again.
11
+ */
8
12
  post(message: string): void;
9
13
  }
10
14
  /**
@@ -19,6 +23,11 @@ export interface DeferredNotice {
19
23
  * wrong at once — a refused section and the themes beside it — and showing one of
20
24
  * them would leave the reader fixing what they were told about while the rest
21
25
  * waited for a restart.
26
+ *
27
+ * A message repeating the one before it is dropped, because one write can be read
28
+ * twice: the settings service reports a section and the document it came from
29
+ * separately, and the reader watching a broken file would otherwise watch the same
30
+ * refusal collect a row per read until the transcript had nothing else on it.
22
31
  */
23
32
  export declare function createDeferredNotice(): DeferredNotice;
24
33
  //# sourceMappingURL=settings-notice.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-notice.d.ts","sourceRoot":"","sources":["../src/settings-notice.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAElD,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IAC5B,0EAA0E;IAC1E,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAgBrD"}
1
+ {"version":3,"file":"settings-notice.d.ts","sourceRoot":"","sources":["../src/settings-notice.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAElD,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IAC5B;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAoBrD"}
@@ -10,23 +10,33 @@
10
10
  * wrong at once — a refused section and the themes beside it — and showing one of
11
11
  * them would leave the reader fixing what they were told about while the rest
12
12
  * waited for a restart.
13
+ *
14
+ * A message repeating the one before it is dropped, because one write can be read
15
+ * twice: the settings service reports a section and the document it came from
16
+ * separately, and the reader watching a broken file would otherwise watch the same
17
+ * refusal collect a row per read until the transcript had nothing else on it.
13
18
  */
14
19
  export function createDeferredNotice() {
15
20
  let sink;
16
21
  const held = [];
22
+ let last;
23
+ const post = (message) => {
24
+ if (message === last)
25
+ return;
26
+ last = message;
27
+ if (sink === undefined) {
28
+ held.push(message);
29
+ return;
30
+ }
31
+ sink(message);
32
+ };
17
33
  return {
18
34
  open(next) {
19
35
  sink = next;
20
36
  for (const message of held.splice(0))
21
37
  next(message);
22
38
  },
23
- post(message) {
24
- if (sink === undefined) {
25
- held.push(message);
26
- return;
27
- }
28
- sink(message);
29
- },
39
+ post,
30
40
  };
31
41
  }
32
42
  //# sourceMappingURL=settings-notice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-notice.js","sourceRoot":"","sources":["../src/settings-notice.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,IAA4B,CAAA;IAChC,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,OAAO;QACL,IAAI,CAAC,IAAI;YACP,IAAI,GAAG,IAAI,CAAA;YACX,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACrD,CAAC;QACD,IAAI,CAAC,OAAO;YACV,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAClB,OAAM;YACR,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,CAAA;QACf,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"settings-notice.js","sourceRoot":"","sources":["../src/settings-notice.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,IAA4B,CAAA;IAChC,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,IAAI,IAAwB,CAAA;IAC5B,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;QACrC,IAAI,OAAO,KAAK,IAAI;YAAE,OAAM;QAC5B,IAAI,GAAG,OAAO,CAAA;QACd,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAClB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,CAAA;IACf,CAAC,CAAA;IACD,OAAO;QACL,IAAI,CAAC,IAAI;YACP,IAAI,GAAG,IAAI,CAAA;YACX,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACrD,CAAC;QACD,IAAI;KACL,CAAA;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The air the surface keeps around what it shows.
3
+ *
4
+ * A token names a shade or a glyph, so how much room a message is given is not
5
+ * something a theme can carry: it is layout the reader tunes once for their own
6
+ * terminal, and the same read feeds the surface's own edges and every gap
7
+ * between the things it draws.
8
+ */
9
+ /** What one gap or edge may ask for, in rows or columns. */
10
+ export interface Spacing {
11
+ /** Columns of air at the surface's left and right edges. */
12
+ readonly padding: number;
13
+ /** Blank rows above and below a prompt or a reply card. */
14
+ readonly messages: number;
15
+ /** Blank rows where a step of a turn opens, so a thought and the calls it made read as one group. */
16
+ readonly steps: number;
17
+ }
18
+ /**
19
+ * The widest gap or edge the reader may ask for.
20
+ *
21
+ * Past a few rows the break stops reading as air between two things and starts
22
+ * reading as a hole the reader has to scroll past on every message.
23
+ */
24
+ export declare const MAX_SPACING = 3;
25
+ /**
26
+ * The shipped spacing: one column at the edges and one row at a break.
27
+ *
28
+ * Framed objects that touch the terminal's edge, or each other, read as one
29
+ * wall of rows; a single column and a single row are what separate them
30
+ * without spending the rows a message needs to be read in.
31
+ */
32
+ export declare const DEFAULT_SPACING: Spacing;
33
+ /**
34
+ * The `spacing:` block as the reader wrote it.
35
+ *
36
+ * Absent fields keep the shipped value, so a reader who wants only the gaps
37
+ * turned off writes one line rather than the whole block.
38
+ */
39
+ export declare function parseSpacing(raw: unknown): Spacing;
40
+ //# sourceMappingURL=spacing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacing.d.ts","sourceRoot":"","sources":["../src/spacing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,4DAA4D;AAC5D,MAAM,WAAW,OAAO;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,qGAAqG;IACrG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,IAAI,CAAA;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,OAA+C,CAAA;AAa7E;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAWlD"}
package/lib/spacing.js ADDED
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The air the surface keeps around what it shows.
3
+ *
4
+ * A token names a shade or a glyph, so how much room a message is given is not
5
+ * something a theme can carry: it is layout the reader tunes once for their own
6
+ * terminal, and the same read feeds the surface's own edges and every gap
7
+ * between the things it draws.
8
+ */
9
+ /**
10
+ * The widest gap or edge the reader may ask for.
11
+ *
12
+ * Past a few rows the break stops reading as air between two things and starts
13
+ * reading as a hole the reader has to scroll past on every message.
14
+ */
15
+ export const MAX_SPACING = 3;
16
+ /**
17
+ * The shipped spacing: one column at the edges and one row at a break.
18
+ *
19
+ * Framed objects that touch the terminal's edge, or each other, read as one
20
+ * wall of rows; a single column and a single row are what separate them
21
+ * without spending the rows a message needs to be read in.
22
+ */
23
+ export const DEFAULT_SPACING = { padding: 1, messages: 1, steps: 1 };
24
+ /** The fields the `spacing:` block declares, so a misspelling is refused rather than ignored. */
25
+ const SPACING_FIELDS = new Set(['padding', 'messages', 'steps']);
26
+ /** One count as the reader wrote it. */
27
+ function count(value, field) {
28
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0 || value > MAX_SPACING) {
29
+ throw new Error('spacing.' + field + ' must be an integer between 0 and ' + MAX_SPACING);
30
+ }
31
+ return value;
32
+ }
33
+ /**
34
+ * The `spacing:` block as the reader wrote it.
35
+ *
36
+ * Absent fields keep the shipped value, so a reader who wants only the gaps
37
+ * turned off writes one line rather than the whole block.
38
+ */
39
+ export function parseSpacing(raw) {
40
+ if (raw === undefined)
41
+ return DEFAULT_SPACING;
42
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
43
+ throw new Error('spacing must be a mapping of counts');
44
+ const block = raw;
45
+ const stray = Object.keys(block).filter(field => !SPACING_FIELDS.has(field));
46
+ if (stray.length > 0)
47
+ throw new Error('unknown spacing field' + (stray.length === 1 ? '' : 's') + ': ' + stray.join(', '));
48
+ return {
49
+ padding: block.padding === undefined ? DEFAULT_SPACING.padding : count(block.padding, 'padding'),
50
+ messages: block.messages === undefined ? DEFAULT_SPACING.messages : count(block.messages, 'messages'),
51
+ steps: block.steps === undefined ? DEFAULT_SPACING.steps : count(block.steps, 'steps'),
52
+ };
53
+ }
54
+ //# sourceMappingURL=spacing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacing.js","sourceRoot":"","sources":["../src/spacing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAA;AAE5B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAY,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;AAE7E,iGAAiG;AACjG,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;AAErF,wCAAwC;AACxC,SAAS,KAAK,CAAC,KAAc,EAAE,KAAa;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,WAAW,EAAE,CAAC;QAClG,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,GAAG,oCAAoC,GAAG,WAAW,CAAC,CAAA;IAC1F,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,eAAe,CAAA;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACzH,MAAM,KAAK,GAAG,GAA8B,CAAA;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1H,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;QAChG,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC;QACrG,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;KACvF,CAAA;AACH,CAAC"}
@@ -1,22 +1,31 @@
1
- /** The stash file for one session. */
1
+ /** Environment variable that moves the harness home, matching the launcher. */
2
+ export declare const DSH_HOME_ENV = "DSH_HOME";
3
+ /** A bank follows the current directory by default; session mode keeps drafts private to one session. */
4
+ export declare const DEFAULT_STASH_SCOPE: "path";
5
+ export declare const STASH_SCOPES: readonly ["path", "session"];
6
+ export type StashScope = typeof STASH_SCOPES[number];
7
+ /** The stash file for one scope owner. */
2
8
  export interface StashPaths {
3
- /** The exact session this bank belongs to. */
9
+ /** Exact scope owner, retained in the on-disk sessionId field. */
4
10
  readonly sessionId: string;
5
- /** Flattened session id, used as the on-disk key. */
11
+ /** Flattened owner id, used as the on-disk key. */
6
12
  readonly key: string;
7
- /** JSON file holding this session's stash entries. */
13
+ /** JSON file holding this bank's stash entries. */
8
14
  readonly file: string;
9
15
  }
10
- export declare function sanitizeSessionId(sessionId: string): string;
16
+ export declare function sanitizeSessionId(sessionId: string, version?: string): string;
11
17
  /**
12
18
  * The directory the harness keeps its own state in.
13
19
  *
14
- * DSH_HOME is the one thing that moves that directory, and it is resolved the
15
- * same way the settings document resolves it, so a scratch home keeps stash data
16
- * out of a reader's real home during a test run.
20
+ * DSH_HOME is the one thing that moves that directory, so every reader resolves it
21
+ * here: the stash bank, the themes, and the prompt history all write under the
22
+ * answer, and a scratch home only keeps state out of a reader's real home while
23
+ * they agree on it. A blank override is treated as unset, because resolving to the
24
+ * working directory would scatter private state into whatever tree the reader
25
+ * happened to start from.
17
26
  */
18
27
  export declare function dshHomeDir(env?: NodeJS.ProcessEnv, home?: string): string;
19
- /** The root every session's stash file sits under. */
28
+ /** The root every bank's stash file sits under. */
20
29
  export declare function stashBaseDir(env?: NodeJS.ProcessEnv, home?: string): string;
21
- export declare function resolveStashPaths(sessionId: string, baseDir?: string): StashPaths;
30
+ export declare function resolveStashPaths(sessionId: string, baseDir?: string, scope?: StashScope): StashPaths;
22
31
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/stash/paths.ts"],"names":[],"mappings":"AA0CA,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAuBD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAGjG;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAEnG;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,MAAuB,GAAG,UAAU,CAGjG"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/stash/paths.ts"],"names":[],"mappings":"AAgBA,+EAA+E;AAC/E,eAAO,MAAM,YAAY,aAAa,CAAA;AAKtC,yGAAyG;AACzG,eAAO,MAAM,mBAAmB,EAAG,MAAe,CAAA;AAClD,eAAO,MAAM,YAAY,8BAA4C,CAAA;AACrE,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAA;AA4BpD,0CAA0C;AAC1C,MAAM,WAAW,UAAU;IACzB,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAuBD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,MAAmC,GAAG,MAAM,CAOzG;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAIjG;AAkBD,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAEnG;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,MAAuB,EAAE,KAAK,GAAE,UAAsB,GAAG,UAAU,CAGhI"}