@namzu/cli 29.1.0 → 32.0.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 (311) hide show
  1. package/CHANGELOG.md +296 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +5 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/acp.d.ts +20 -2
  6. package/dist/commands/acp.d.ts.map +1 -1
  7. package/dist/commands/acp.js +42 -5
  8. package/dist/commands/acp.js.map +1 -1
  9. package/dist/commands/drain.d.ts.map +1 -1
  10. package/dist/commands/drain.js +2 -1
  11. package/dist/commands/drain.js.map +1 -1
  12. package/dist/commands/exec-json.d.ts.map +1 -1
  13. package/dist/commands/exec-json.js +24 -1
  14. package/dist/commands/exec-json.js.map +1 -1
  15. package/dist/commands/exec.d.ts.map +1 -1
  16. package/dist/commands/exec.js +5 -1
  17. package/dist/commands/exec.js.map +1 -1
  18. package/dist/commands/prior-messages.d.ts.map +1 -1
  19. package/dist/commands/prior-messages.js +42 -2
  20. package/dist/commands/prior-messages.js.map +1 -1
  21. package/dist/commands/schedule.d.ts.map +1 -1
  22. package/dist/commands/schedule.js +7 -5
  23. package/dist/commands/schedule.js.map +1 -1
  24. package/dist/config/composer-triggers.d.ts +41 -0
  25. package/dist/config/composer-triggers.d.ts.map +1 -0
  26. package/dist/config/composer-triggers.js +80 -0
  27. package/dist/config/composer-triggers.js.map +1 -0
  28. package/dist/config/load.d.ts.map +1 -1
  29. package/dist/config/load.js +58 -0
  30. package/dist/config/load.js.map +1 -1
  31. package/dist/config/schema.d.ts +34 -0
  32. package/dist/config/schema.d.ts.map +1 -1
  33. package/dist/config/schema.js.map +1 -1
  34. package/dist/context/doctrine.d.ts +3 -3
  35. package/dist/context/doctrine.d.ts.map +1 -1
  36. package/dist/context/doctrine.js +3 -3
  37. package/dist/context/doctrine.js.map +1 -1
  38. package/dist/context/environment.d.ts +26 -3
  39. package/dist/context/environment.d.ts.map +1 -1
  40. package/dist/context/environment.js +68 -9
  41. package/dist/context/environment.js.map +1 -1
  42. package/dist/context/runtime-message.d.ts.map +1 -1
  43. package/dist/context/runtime-message.js +4 -0
  44. package/dist/context/runtime-message.js.map +1 -1
  45. package/dist/integrations/mcp/servers.d.ts +72 -5
  46. package/dist/integrations/mcp/servers.d.ts.map +1 -1
  47. package/dist/integrations/mcp/servers.js +144 -23
  48. package/dist/integrations/mcp/servers.js.map +1 -1
  49. package/dist/integrations/notifications/desktop.d.ts +2 -0
  50. package/dist/integrations/notifications/desktop.d.ts.map +1 -1
  51. package/dist/integrations/notifications/desktop.js +6 -5
  52. package/dist/integrations/notifications/desktop.js.map +1 -1
  53. package/dist/integrations/plugins/runtime.d.ts +10 -2
  54. package/dist/integrations/plugins/runtime.d.ts.map +1 -1
  55. package/dist/integrations/plugins/runtime.js +16 -29
  56. package/dist/integrations/plugins/runtime.js.map +1 -1
  57. package/dist/integrations/providers/harness-credentials.d.ts +9 -4
  58. package/dist/integrations/providers/harness-credentials.d.ts.map +1 -1
  59. package/dist/integrations/providers/harness-credentials.js +16 -8
  60. package/dist/integrations/providers/harness-credentials.js.map +1 -1
  61. package/dist/integrations/resident/session-step.d.ts.map +1 -1
  62. package/dist/integrations/resident/session-step.js +2 -1
  63. package/dist/integrations/resident/session-step.js.map +1 -1
  64. package/dist/integrations/sessions/store.d.ts.map +1 -1
  65. package/dist/integrations/sessions/store.js +20 -2
  66. package/dist/integrations/sessions/store.js.map +1 -1
  67. package/dist/integrations/subagents/NamzuCliAgent.d.ts +8 -0
  68. package/dist/integrations/subagents/NamzuCliAgent.d.ts.map +1 -0
  69. package/dist/integrations/subagents/NamzuCliAgent.js +9 -0
  70. package/dist/integrations/subagents/NamzuCliAgent.js.map +1 -0
  71. package/dist/integrations/subagents/runtime.d.ts +5 -4
  72. package/dist/integrations/subagents/runtime.d.ts.map +1 -1
  73. package/dist/integrations/subagents/runtime.js +46 -11
  74. package/dist/integrations/subagents/runtime.js.map +1 -1
  75. package/dist/integrations/web/open-url.d.ts +24 -0
  76. package/dist/integrations/web/open-url.d.ts.map +1 -0
  77. package/dist/integrations/web/open-url.js +73 -0
  78. package/dist/integrations/web/open-url.js.map +1 -0
  79. package/dist/integrations/web/search.d.ts.map +1 -1
  80. package/dist/integrations/web/search.js +8 -6
  81. package/dist/integrations/web/search.js.map +1 -1
  82. package/dist/permissions/rules.d.ts +5 -1
  83. package/dist/permissions/rules.d.ts.map +1 -1
  84. package/dist/permissions/rules.js +85 -3
  85. package/dist/permissions/rules.js.map +1 -1
  86. package/dist/schedule/build.d.ts +26 -2
  87. package/dist/schedule/build.d.ts.map +1 -1
  88. package/dist/schedule/build.js +139 -20
  89. package/dist/schedule/build.js.map +1 -1
  90. package/dist/schedule/changes.d.ts +6 -0
  91. package/dist/schedule/changes.d.ts.map +1 -1
  92. package/dist/schedule/changes.js +23 -0
  93. package/dist/schedule/changes.js.map +1 -1
  94. package/dist/schedule/commands/add.d.ts +1 -1
  95. package/dist/schedule/commands/add.d.ts.map +1 -1
  96. package/dist/schedule/commands/add.js +188 -54
  97. package/dist/schedule/commands/add.js.map +1 -1
  98. package/dist/schedule/commands/lifecycle.d.ts.map +1 -1
  99. package/dist/schedule/commands/lifecycle.js +2 -1
  100. package/dist/schedule/commands/lifecycle.js.map +1 -1
  101. package/dist/schedule/commands/list.d.ts +2 -0
  102. package/dist/schedule/commands/list.d.ts.map +1 -1
  103. package/dist/schedule/commands/list.js +69 -20
  104. package/dist/schedule/commands/list.js.map +1 -1
  105. package/dist/schedule/daemon/daemon.d.ts +1 -1
  106. package/dist/schedule/daemon/daemon.d.ts.map +1 -1
  107. package/dist/schedule/daemon/daemon.js +22 -5
  108. package/dist/schedule/daemon/daemon.js.map +1 -1
  109. package/dist/schedule/daemon/notify.d.ts +29 -2
  110. package/dist/schedule/daemon/notify.d.ts.map +1 -1
  111. package/dist/schedule/daemon/notify.js +71 -2
  112. package/dist/schedule/daemon/notify.js.map +1 -1
  113. package/dist/schedule/env.d.ts +8 -4
  114. package/dist/schedule/env.d.ts.map +1 -1
  115. package/dist/schedule/env.js +13 -6
  116. package/dist/schedule/env.js.map +1 -1
  117. package/dist/schedule/fire/calls.d.ts +49 -0
  118. package/dist/schedule/fire/calls.d.ts.map +1 -0
  119. package/dist/schedule/fire/calls.js +114 -0
  120. package/dist/schedule/fire/calls.js.map +1 -0
  121. package/dist/schedule/fire/fire.d.ts +1 -1
  122. package/dist/schedule/fire/fire.d.ts.map +1 -1
  123. package/dist/schedule/fire/fire.js +209 -15
  124. package/dist/schedule/fire/fire.js.map +1 -1
  125. package/dist/schedule/fire/result.d.ts +1 -1
  126. package/dist/schedule/fire/result.d.ts.map +1 -1
  127. package/dist/schedule/fire/result.js +2 -1
  128. package/dist/schedule/fire/result.js.map +1 -1
  129. package/dist/schedule/fire/run-script.d.ts +46 -0
  130. package/dist/schedule/fire/run-script.d.ts.map +1 -0
  131. package/dist/schedule/fire/run-script.js +81 -0
  132. package/dist/schedule/fire/run-script.js.map +1 -0
  133. package/dist/schedule/fire/unattended-note.d.ts +8 -0
  134. package/dist/schedule/fire/unattended-note.d.ts.map +1 -1
  135. package/dist/schedule/fire/unattended-note.js +5 -0
  136. package/dist/schedule/fire/unattended-note.js.map +1 -1
  137. package/dist/schedule/fire/wake-gate.d.ts +39 -0
  138. package/dist/schedule/fire/wake-gate.d.ts.map +1 -0
  139. package/dist/schedule/fire/wake-gate.js +90 -0
  140. package/dist/schedule/fire/wake-gate.js.map +1 -0
  141. package/dist/schedule/floor.d.ts +28 -8
  142. package/dist/schedule/floor.d.ts.map +1 -1
  143. package/dist/schedule/floor.js +624 -114
  144. package/dist/schedule/floor.js.map +1 -1
  145. package/dist/schedule/policy.d.ts +40 -0
  146. package/dist/schedule/policy.d.ts.map +1 -1
  147. package/dist/schedule/policy.js +36 -0
  148. package/dist/schedule/policy.js.map +1 -1
  149. package/dist/schedule/script-check.d.ts +53 -0
  150. package/dist/schedule/script-check.d.ts.map +1 -0
  151. package/dist/schedule/script-check.js +145 -0
  152. package/dist/schedule/script-check.js.map +1 -0
  153. package/dist/schedule/script-shell.d.ts +3 -0
  154. package/dist/schedule/script-shell.d.ts.map +1 -0
  155. package/dist/schedule/script-shell.js +5 -0
  156. package/dist/schedule/script-shell.js.map +1 -0
  157. package/dist/schedule/service/index.d.ts +1 -1
  158. package/dist/schedule/service/index.d.ts.map +1 -1
  159. package/dist/schedule/service/index.js +20 -11
  160. package/dist/schedule/service/index.js.map +1 -1
  161. package/dist/schedule/service/manifest.js +1 -1
  162. package/dist/schedule/service/manifest.js.map +1 -1
  163. package/dist/schedule/service/windows-task.d.ts +7 -0
  164. package/dist/schedule/service/windows-task.d.ts.map +1 -1
  165. package/dist/schedule/service/windows-task.js +65 -0
  166. package/dist/schedule/service/windows-task.js.map +1 -1
  167. package/dist/schedule/service/wsl.d.ts +13 -1
  168. package/dist/schedule/service/wsl.d.ts.map +1 -1
  169. package/dist/schedule/service/wsl.js +16 -6
  170. package/dist/schedule/service/wsl.js.map +1 -1
  171. package/dist/schedule/store/atomic.d.ts +5 -2
  172. package/dist/schedule/store/atomic.d.ts.map +1 -1
  173. package/dist/schedule/store/atomic.js +7 -4
  174. package/dist/schedule/store/atomic.js.map +1 -1
  175. package/dist/schedule/store/claims.js +1 -1
  176. package/dist/schedule/store/claims.js.map +1 -1
  177. package/dist/schedule/store/history.d.ts +1 -1
  178. package/dist/schedule/store/history.d.ts.map +1 -1
  179. package/dist/schedule/store/history.js +4 -1
  180. package/dist/schedule/store/history.js.map +1 -1
  181. package/dist/schedule/store/jobs.d.ts +19 -3
  182. package/dist/schedule/store/jobs.d.ts.map +1 -1
  183. package/dist/schedule/store/jobs.js +83 -16
  184. package/dist/schedule/store/jobs.js.map +1 -1
  185. package/dist/schedule/store/state.js +1 -1
  186. package/dist/schedule/store/state.js.map +1 -1
  187. package/dist/schedule/types.d.ts +98 -6
  188. package/dist/schedule/types.d.ts.map +1 -1
  189. package/dist/schedule/types.js +25 -1
  190. package/dist/schedule/types.js.map +1 -1
  191. package/dist/schedule/visible-source.d.ts +18 -0
  192. package/dist/schedule/visible-source.d.ts.map +1 -0
  193. package/dist/schedule/visible-source.js +59 -0
  194. package/dist/schedule/visible-source.js.map +1 -0
  195. package/dist/skills/directory.d.ts +38 -0
  196. package/dist/skills/directory.d.ts.map +1 -0
  197. package/dist/skills/directory.js +51 -0
  198. package/dist/skills/directory.js.map +1 -0
  199. package/dist/test-support/toolset.d.ts +23 -0
  200. package/dist/test-support/toolset.d.ts.map +1 -0
  201. package/dist/test-support/toolset.js +27 -0
  202. package/dist/test-support/toolset.js.map +1 -0
  203. package/dist/tui/App.d.ts.map +1 -1
  204. package/dist/tui/App.js +343 -64
  205. package/dist/tui/App.js.map +1 -1
  206. package/dist/tui/ChoicePicker.d.ts +2 -0
  207. package/dist/tui/ChoicePicker.d.ts.map +1 -1
  208. package/dist/tui/ChoicePicker.js +10 -2
  209. package/dist/tui/ChoicePicker.js.map +1 -1
  210. package/dist/tui/Composer.d.ts +62 -3
  211. package/dist/tui/Composer.d.ts.map +1 -1
  212. package/dist/tui/Composer.js +162 -25
  213. package/dist/tui/Composer.js.map +1 -1
  214. package/dist/tui/ComposerFrame.d.ts +1 -1
  215. package/dist/tui/ComposerFrame.js +3 -3
  216. package/dist/tui/ComposerFrame.js.map +1 -1
  217. package/dist/tui/EffortSlider.d.ts +8 -9
  218. package/dist/tui/EffortSlider.d.ts.map +1 -1
  219. package/dist/tui/EffortSlider.js +15 -12
  220. package/dist/tui/EffortSlider.js.map +1 -1
  221. package/dist/tui/PermissionOverlay.d.ts +13 -1
  222. package/dist/tui/PermissionOverlay.d.ts.map +1 -1
  223. package/dist/tui/PermissionOverlay.js +26 -4
  224. package/dist/tui/PermissionOverlay.js.map +1 -1
  225. package/dist/tui/StatusBar.d.ts +12 -12
  226. package/dist/tui/StatusBar.d.ts.map +1 -1
  227. package/dist/tui/StatusBar.js +15 -15
  228. package/dist/tui/StatusBar.js.map +1 -1
  229. package/dist/tui/agent.d.ts +73 -12
  230. package/dist/tui/agent.d.ts.map +1 -1
  231. package/dist/tui/agent.js +430 -180
  232. package/dist/tui/agent.js.map +1 -1
  233. package/dist/tui/hypermode.d.ts +37 -0
  234. package/dist/tui/hypermode.d.ts.map +1 -0
  235. package/dist/tui/hypermode.js +58 -0
  236. package/dist/tui/hypermode.js.map +1 -0
  237. package/dist/tui/open-browser.d.ts +29 -1
  238. package/dist/tui/open-browser.d.ts.map +1 -1
  239. package/dist/tui/open-browser.js +83 -11
  240. package/dist/tui/open-browser.js.map +1 -1
  241. package/dist/tui/permission-review.d.ts +11 -2
  242. package/dist/tui/permission-review.d.ts.map +1 -1
  243. package/dist/tui/permission-review.js +176 -19
  244. package/dist/tui/permission-review.js.map +1 -1
  245. package/dist/tui/schedule/host-commands.d.ts.map +1 -1
  246. package/dist/tui/schedule/host-commands.js +95 -33
  247. package/dist/tui/schedule/host-commands.js.map +1 -1
  248. package/dist/tui/schedule/integration.d.ts +6 -2
  249. package/dist/tui/schedule/integration.d.ts.map +1 -1
  250. package/dist/tui/schedule/integration.js +3 -1
  251. package/dist/tui/schedule/integration.js.map +1 -1
  252. package/dist/tui/schedule/resume.d.ts.map +1 -1
  253. package/dist/tui/schedule/resume.js +10 -1
  254. package/dist/tui/schedule/resume.js.map +1 -1
  255. package/dist/tui/schedule/tool-host.d.ts +18 -1
  256. package/dist/tui/schedule/tool-host.d.ts.map +1 -1
  257. package/dist/tui/schedule/tool-host.js +384 -84
  258. package/dist/tui/schedule/tool-host.js.map +1 -1
  259. package/dist/tui/slashCommands.d.ts +23 -5
  260. package/dist/tui/slashCommands.d.ts.map +1 -1
  261. package/dist/tui/slashCommands.js +80 -31
  262. package/dist/tui/slashCommands.js.map +1 -1
  263. package/dist/tui/theme.d.ts +10 -4
  264. package/dist/tui/theme.d.ts.map +1 -1
  265. package/dist/tui/theme.js +4 -3
  266. package/dist/tui/theme.js.map +1 -1
  267. package/dist/tui/triggers/analyze.d.ts +57 -0
  268. package/dist/tui/triggers/analyze.d.ts.map +1 -0
  269. package/dist/tui/triggers/analyze.js +221 -0
  270. package/dist/tui/triggers/analyze.js.map +1 -0
  271. package/dist/tui/triggers/context-text.d.ts +21 -0
  272. package/dist/tui/triggers/context-text.d.ts.map +1 -0
  273. package/dist/tui/triggers/context-text.js +44 -0
  274. package/dist/tui/triggers/context-text.js.map +1 -0
  275. package/dist/tui/triggers/copy.d.ts +38 -0
  276. package/dist/tui/triggers/copy.d.ts.map +1 -0
  277. package/dist/tui/triggers/copy.js +163 -0
  278. package/dist/tui/triggers/copy.js.map +1 -0
  279. package/dist/tui/triggers/detect.d.ts +83 -0
  280. package/dist/tui/triggers/detect.d.ts.map +1 -0
  281. package/dist/tui/triggers/detect.js +295 -0
  282. package/dist/tui/triggers/detect.js.map +1 -0
  283. package/dist/tui/triggers/fold.d.ts +34 -0
  284. package/dist/tui/triggers/fold.d.ts.map +1 -0
  285. package/dist/tui/triggers/fold.js +44 -0
  286. package/dist/tui/triggers/fold.js.map +1 -0
  287. package/dist/tui/triggers/pattern.d.ts +66 -0
  288. package/dist/tui/triggers/pattern.d.ts.map +1 -0
  289. package/dist/tui/triggers/pattern.js +243 -0
  290. package/dist/tui/triggers/pattern.js.map +1 -0
  291. package/dist/tui/triggers/provenance.d.ts +58 -0
  292. package/dist/tui/triggers/provenance.d.ts.map +1 -0
  293. package/dist/tui/triggers/provenance.js +98 -0
  294. package/dist/tui/triggers/provenance.js.map +1 -0
  295. package/dist/tui/triggers/registry.d.ts +113 -0
  296. package/dist/tui/triggers/registry.d.ts.map +1 -0
  297. package/dist/tui/triggers/registry.js +164 -0
  298. package/dist/tui/triggers/registry.js.map +1 -0
  299. package/dist/tui/triggers/setting.d.ts +18 -0
  300. package/dist/tui/triggers/setting.d.ts.map +1 -0
  301. package/dist/tui/triggers/setting.js +61 -0
  302. package/dist/tui/triggers/setting.js.map +1 -0
  303. package/dist/tui/triggers/verbs.d.ts +29 -0
  304. package/dist/tui/triggers/verbs.d.ts.map +1 -0
  305. package/dist/tui/triggers/verbs.js +140 -0
  306. package/dist/tui/triggers/verbs.js.map +1 -0
  307. package/dist/tui/types.d.ts +3 -1
  308. package/dist/tui/types.d.ts.map +1 -1
  309. package/package.json +12 -12
  310. package/skills/README.md +5 -0
  311. package/skills/schedule-task/SKILL.md +123 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/tui/triggers/copy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Which composer triggers a draft names, and in what state.
3
+ *
4
+ * Pure and local: no model call, no clock, no file. The Composer calls it on
5
+ * every render (memoised) and once more at submit.
6
+ *
7
+ * A match is **strict** when it stands where a request stands:
8
+ * - a keyword is the first or last word of its clause;
9
+ * - an English phrase starts and ends at clause edges (a conjunction such as
10
+ * `and`, `then`, `ve`, `sonra` counts as an edge); a Turkish phrase, whose
11
+ * verb comes last, has to end at one;
12
+ * - in a clause that ends with `?`, a match is strict only with a request
13
+ * frame: `please`, `can/could/would/will you`, or a polite Turkish form
14
+ * (`kaydeder misin`, `kaydedebilir misin`, `kaydedelim mi`) — so "how do I
15
+ * … and save it as a skill?" and "what is hypermode?" are talk, not asks;
16
+ * - a phrase followed by `:` is a label ("skill olarak kaydet: bu ne?");
17
+ * - an English negation (`not`, `don't`, `never`, `no`, `without`, …) up to
18
+ * three words before a match in its clause cancels it, except `don't forget`;
19
+ * - a keyword next to a word about words (`keyword`, `mode`, `kelimesi`, …)
20
+ * is being talked about.
21
+ *
22
+ * A strict match of a trigger whose arming is `arm`, made only of characters
23
+ * the operator typed here, is **armed**. Everything else that matches is a
24
+ * **suggestion**: offered in the tag row, armed only with Alt+W. Nothing in
25
+ * code, quotes, URLs, paths, mentions or `>` lines matches at all, and a draft
26
+ * that starts with `/`, `!` or `#` is a command, never scanned.
27
+ */
28
+ import { type MatchStats } from './pattern.js';
29
+ import type { TriggerId, TriggerRegistry } from './registry.js';
30
+ /** Past this many UTF-16 code units a draft is not scanned; the row says so. */
31
+ export declare const MAX_SCANNED_DRAFT = 65536;
32
+ export type TriggerState = 'armed' | 'suggested' | 'dropped' | 'unavailable';
33
+ export interface TriggerHit {
34
+ readonly id: TriggerId;
35
+ readonly label: string;
36
+ /** Draft offsets of the words that named it. */
37
+ readonly start: number;
38
+ readonly end: number;
39
+ readonly state: TriggerState;
40
+ /** Why it cannot apply now, for `unavailable`. */
41
+ readonly reason?: string;
42
+ readonly scope: 'turn' | 'after-turn';
43
+ /** Identifies this hit for Alt+W: the trigger and where its words start. */
44
+ readonly key: string;
45
+ }
46
+ export interface Detection {
47
+ /** One hit per trigger, in draft order. */
48
+ readonly hits: readonly TriggerHit[];
49
+ /** The draft is nothing but armed triggers and filler words (`please`, `bunu`, …). */
50
+ readonly onlyTriggers: boolean;
51
+ /** Set when the draft was too long to scan. */
52
+ readonly paused?: 'too-long';
53
+ }
54
+ /** What the session is like right now, for availability. */
55
+ export interface TriggerContext {
56
+ readonly permissionMode: string;
57
+ /** Hypermode is already on for the session. */
58
+ readonly sessionHypermode: boolean;
59
+ /** The model publishes an exact effort menu. */
60
+ readonly effortMenu: boolean;
61
+ /** The session can delegate (`Agent` is not withheld). */
62
+ readonly agentTool: boolean;
63
+ /** The `skill-creator` skill is usable by the model. */
64
+ readonly skillCreator: boolean;
65
+ /** The `schedule` tool is mounted. */
66
+ readonly scheduleTool: boolean;
67
+ }
68
+ export interface DetectOptions {
69
+ /** Draft ranges that were not typed key by key here (pasted, recalled, …). */
70
+ readonly nonTyped?: readonly (readonly [number, number])[];
71
+ /** Alt+W decisions, by hit key. */
72
+ readonly overrides?: ReadonlyMap<string, 'dropped' | 'armed'>;
73
+ /** Show suggestions. `false` hides every hit that is not armed by text or by hand. */
74
+ readonly suggest?: boolean;
75
+ readonly stats?: MatchStats;
76
+ }
77
+ export declare const EMPTY_DETECTION: Detection;
78
+ /** Whether a draft is a command the triggers never read: `/…`, `!…`, `#…`. */
79
+ export declare function isCommandDraft(draft: string): boolean;
80
+ export declare function detectTriggers(draft: string, registry: TriggerRegistry, context: TriggerContext, options?: DetectOptions): Detection;
81
+ /** Why a trigger cannot apply in this session right now, or undefined when it can. */
82
+ export declare function unavailable(id: TriggerId, context: TriggerContext): string | undefined;
83
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/tui/triggers/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAA8B,KAAK,UAAU,EAAW,MAAM,cAAc,CAAA;AACnF,OAAO,KAAK,EAAmB,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGhF,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,QAAS,CAAA;AAEvC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CAAA;AAE5E,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAA;IACrC,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,SAAS;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAA;IACpC,sFAAsF;IACtF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAC5B;AAED,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,+CAA+C;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;IAClC,gDAAgD;IAChD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,aAAa;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAA;IAC1D,mCAAmC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,CAAA;IAC7D,sFAAsF;IACtF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAC3B;AAED,eAAO,MAAM,eAAe,EAAE,SAA6C,CAAA;AA2C3E,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,cAAc,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,aAAkB,GACzB,SAAS,CA4CX;AA+JD,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAmBtF"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Which composer triggers a draft names, and in what state.
3
+ *
4
+ * Pure and local: no model call, no clock, no file. The Composer calls it on
5
+ * every render (memoised) and once more at submit.
6
+ *
7
+ * A match is **strict** when it stands where a request stands:
8
+ * - a keyword is the first or last word of its clause;
9
+ * - an English phrase starts and ends at clause edges (a conjunction such as
10
+ * `and`, `then`, `ve`, `sonra` counts as an edge); a Turkish phrase, whose
11
+ * verb comes last, has to end at one;
12
+ * - in a clause that ends with `?`, a match is strict only with a request
13
+ * frame: `please`, `can/could/would/will you`, or a polite Turkish form
14
+ * (`kaydeder misin`, `kaydedebilir misin`, `kaydedelim mi`) — so "how do I
15
+ * … and save it as a skill?" and "what is hypermode?" are talk, not asks;
16
+ * - a phrase followed by `:` is a label ("skill olarak kaydet: bu ne?");
17
+ * - an English negation (`not`, `don't`, `never`, `no`, `without`, …) up to
18
+ * three words before a match in its clause cancels it, except `don't forget`;
19
+ * - a keyword next to a word about words (`keyword`, `mode`, `kelimesi`, …)
20
+ * is being talked about.
21
+ *
22
+ * A strict match of a trigger whose arming is `arm`, made only of characters
23
+ * the operator typed here, is **armed**. Everything else that matches is a
24
+ * **suggestion**: offered in the tag row, armed only with Alt+W. Nothing in
25
+ * code, quotes, URLs, paths, mentions or `>` lines matches at all, and a draft
26
+ * that starts with `/`, `!` or `#` is a command, never scanned.
27
+ */
28
+ import { analyze, inZone } from './analyze.js';
29
+ import { FORM_OPTATIVE, FORM_POLITE, matchAt } from './pattern.js';
30
+ import { QUESTION_PARTICLES } from './verbs.js';
31
+ /** Past this many UTF-16 code units a draft is not scanned; the row says so. */
32
+ export const MAX_SCANNED_DRAFT = 65_536;
33
+ export const EMPTY_DETECTION = { hits: [], onlyTriggers: false };
34
+ const CONJUNCTIONS = new Set(['and', 'then', 'also', 've', 'sonra', 'ardindan', 'ayrica']);
35
+ const NEGATIONS = new Set([
36
+ 'not',
37
+ "don't",
38
+ 'dont',
39
+ 'never',
40
+ 'no',
41
+ 'without',
42
+ "doesn't",
43
+ "didn't",
44
+ "shouldn't",
45
+ "won't",
46
+ ]);
47
+ /** Words that mark the next or previous word as the thing being talked about. */
48
+ const META_WORDS = new Set([
49
+ 'keyword',
50
+ 'word',
51
+ 'mode',
52
+ 'command',
53
+ 'feature',
54
+ 'setting',
55
+ 'flag',
56
+ 'trigger',
57
+ 'option',
58
+ ]);
59
+ const META_PREFIXES = ['kelime', 'modu', 'komut', 'ozellig', 'ayar', 'secenek', 'sozcuk'];
60
+ const FILLERS = new Set([
61
+ 'please',
62
+ 'lutfen',
63
+ 'now',
64
+ 'simdi',
65
+ 'this',
66
+ 'bunu',
67
+ 'ok',
68
+ 'okay',
69
+ 'tamam',
70
+ 'and',
71
+ 've',
72
+ ]);
73
+ const REQUEST_VERBS = new Set(['can', 'could', 'would', 'will']);
74
+ /** Whether a draft is a command the triggers never read: `/…`, `!…`, `#…`. */
75
+ export function isCommandDraft(draft) {
76
+ return /^[/!#]/u.test(draft.trimStart());
77
+ }
78
+ export function detectTriggers(draft, registry, context, options = {}) {
79
+ if (registry.triggers.length === 0 || isCommandDraft(draft) || draft.trim().length === 0)
80
+ return EMPTY_DETECTION;
81
+ if (draft.length > MAX_SCANNED_DRAFT)
82
+ return { hits: [], onlyTriggers: false, paused: 'too-long' };
83
+ const analysis = analyze(draft);
84
+ const words = analysis.tokens.map((token) => token.text);
85
+ const hits = [];
86
+ const armedTokens = new Set();
87
+ for (const trigger of registry.triggers) {
88
+ const found = bestCandidate(trigger, analysis, words, options.stats);
89
+ if (!found)
90
+ continue;
91
+ const start = analysis.tokens[found.first]?.start ?? 0;
92
+ const end = analysis.tokens[found.last]?.end ?? start;
93
+ const key = `${trigger.definition.id}@${start}`;
94
+ const typed = !(options.nonTyped ?? []).some(([from, to]) => start < to && end > from);
95
+ const byText = found.strict && trigger.arming === 'arm' && typed;
96
+ const override = options.overrides?.get(key);
97
+ let state = override === 'dropped' && byText
98
+ ? 'dropped'
99
+ : override === 'armed' || (byText && override !== 'dropped')
100
+ ? 'armed'
101
+ : 'suggested';
102
+ const reason = unavailable(trigger.definition.id, context);
103
+ if (reason && state === 'armed')
104
+ state = 'unavailable';
105
+ if (state === 'suggested' && (reason || options.suggest === false))
106
+ continue;
107
+ if (state === 'armed')
108
+ for (let index = found.first; index <= found.last; index += 1)
109
+ armedTokens.add(index);
110
+ hits.push({
111
+ id: trigger.definition.id,
112
+ label: trigger.definition.label,
113
+ start,
114
+ end,
115
+ state,
116
+ ...(state === 'unavailable' && reason ? { reason } : {}),
117
+ scope: trigger.definition.scope,
118
+ key,
119
+ });
120
+ }
121
+ hits.sort((a, b) => a.start - b.start);
122
+ const onlyTriggers = armedTokens.size > 0 &&
123
+ analysis.tokens.every((token, index) => armedTokens.has(index) || FILLERS.has(token.text));
124
+ return { hits, onlyTriggers };
125
+ }
126
+ /** The trigger's first strict match, else its first loose one. */
127
+ function bestCandidate(trigger, analysis, words, stats) {
128
+ const candidates = [];
129
+ const { tokens } = analysis;
130
+ for (let index = 0; index < tokens.length; index += 1) {
131
+ const token = tokens[index];
132
+ if (!token || token.excluded)
133
+ continue;
134
+ if (trigger.keywords.has(token.text)) {
135
+ candidates.push({ first: index, last: index, strict: keywordIsStrict(analysis, index) });
136
+ }
137
+ for (const phrase of trigger.phrases) {
138
+ const match = matchAt(phrase.pattern, words, index, stats)[0];
139
+ if (!match)
140
+ continue;
141
+ const first = match.start;
142
+ const last = match.end - 1;
143
+ if (inZone(analysis, tokens[first]?.start ?? 0, tokens[last]?.end ?? 0))
144
+ continue;
145
+ if (negated(analysis, first))
146
+ continue;
147
+ candidates.push({
148
+ first,
149
+ last,
150
+ strict: phraseIsStrict(analysis, first, last, phrase.edges, match.flags),
151
+ });
152
+ }
153
+ }
154
+ const strict = candidates.find((candidate) => candidate.strict);
155
+ if (strict)
156
+ return strict;
157
+ if (candidates[0])
158
+ return candidates[0];
159
+ return looseCandidate(trigger, analysis);
160
+ }
161
+ function looseCandidate(trigger, analysis) {
162
+ for (const clause of analysis.clauses) {
163
+ for (const loose of trigger.loose) {
164
+ let first = Number.POSITIVE_INFINITY;
165
+ let last = -1;
166
+ const satisfied = loose.slots.every((slot) => {
167
+ for (let index = clause.first; index <= clause.last; index += 1) {
168
+ const token = analysis.tokens[index];
169
+ if (!token || token.excluded || !slot(token.text))
170
+ continue;
171
+ first = Math.min(first, index);
172
+ last = Math.max(last, index);
173
+ return true;
174
+ }
175
+ return false;
176
+ });
177
+ if (satisfied && !negated(analysis, first))
178
+ return { first, last, strict: false };
179
+ }
180
+ }
181
+ return undefined;
182
+ }
183
+ function isConjunctionBefore(analysis, index) {
184
+ const previous = analysis.tokens[index - 1];
185
+ if (!previous || previous.edgeAfter)
186
+ return false;
187
+ if (CONJUNCTIONS.has(previous.text))
188
+ return true;
189
+ // "bir de": "and also".
190
+ return previous.text === 'de' && analysis.tokens[index - 2]?.text === 'bir';
191
+ }
192
+ function isConjunctionAfter(analysis, index) {
193
+ const next = analysis.tokens[index + 1];
194
+ return next !== undefined && !analysis.tokens[index]?.edgeAfter && CONJUNCTIONS.has(next.text);
195
+ }
196
+ const leftEdge = (analysis, index) => (analysis.tokens[index]?.edgeBefore ?? true) || isConjunctionBefore(analysis, index);
197
+ const rightEdge = (analysis, index) => (analysis.tokens[index]?.edgeAfter ?? true) || isConjunctionAfter(analysis, index);
198
+ function isMetaWord(text) {
199
+ if (text === undefined)
200
+ return false;
201
+ return META_WORDS.has(text) || META_PREFIXES.some((prefix) => text.startsWith(prefix));
202
+ }
203
+ function keywordIsStrict(analysis, index) {
204
+ const token = analysis.tokens[index];
205
+ if (!token)
206
+ return false;
207
+ const first = leftEdge(analysis, index);
208
+ const last = rightEdge(analysis, index);
209
+ if (!first && !last)
210
+ return false;
211
+ // "the hypermode keyword", "hypermode kelimesi": talk about the word.
212
+ const previous = analysis.tokens[index - 1];
213
+ const next = analysis.tokens[index + 1];
214
+ if ((!token.edgeBefore && isMetaWord(previous?.text)) ||
215
+ (!token.edgeAfter && isMetaWord(next?.text)))
216
+ return false;
217
+ const clause = analysis.clauses[token.clause];
218
+ // "what is hypermode?" asks about it; "hypermode, can you split this?"
219
+ // puts it in a clause of its own, and "hypermode ile … yapar mısın?" asks
220
+ // for the work with it.
221
+ if (clause?.question)
222
+ return first && hasRequestFrame(analysis, clause.first, clause.last, 0, clause.last);
223
+ return true;
224
+ }
225
+ function phraseIsStrict(analysis, first, last, edges, flags) {
226
+ if (edges === 'both' && !leftEdge(analysis, first))
227
+ return false;
228
+ if (!rightEdge(analysis, last))
229
+ return false;
230
+ if (analysis.tokens[last]?.colonAfter)
231
+ return false;
232
+ const clause = analysis.clauses[analysis.tokens[last]?.clause ?? -1];
233
+ if (clause?.question && !hasRequestFrame(analysis, clause.first, clause.last, flags, last))
234
+ return false;
235
+ return true;
236
+ }
237
+ /** `please`, `can/could/would/will you`, or a polite Turkish verb form. */
238
+ function hasRequestFrame(analysis, from, to, flags, matchLast) {
239
+ if (flags & FORM_POLITE)
240
+ return true;
241
+ if (flags & FORM_OPTATIVE && QUESTION_PARTICLES.has(analysis.tokens[matchLast]?.text ?? ''))
242
+ return true;
243
+ for (let index = from; index <= to; index += 1) {
244
+ const text = analysis.tokens[index]?.text;
245
+ if (text === 'please' || text === 'lutfen')
246
+ return true;
247
+ if (text && REQUEST_VERBS.has(text) && analysis.tokens[index + 1]?.text === 'you')
248
+ return true;
249
+ if (text && /^(misin|misiniz|musun|musunuz)$/u.test(text))
250
+ return true;
251
+ if (text && /(misin|misiniz|musun|musunuz)$/u.test(text) && text.length > 6)
252
+ return true;
253
+ }
254
+ return false;
255
+ }
256
+ /** An English negation up to three words before `index`, in its clause. */
257
+ function negated(analysis, index) {
258
+ const clause = analysis.tokens[index]?.clause;
259
+ for (let at = index - 1; at >= Math.max(0, index - 3); at -= 1) {
260
+ const token = analysis.tokens[at];
261
+ if (!token || token.clause !== clause)
262
+ break;
263
+ if (NEGATIONS.has(token.text) && analysis.tokens[at + 1]?.text !== 'forget')
264
+ return true;
265
+ }
266
+ return false;
267
+ }
268
+ /** Why a trigger cannot apply in this session right now, or undefined when it can. */
269
+ export function unavailable(id, context) {
270
+ switch (id) {
271
+ case 'hypermode':
272
+ if (context.sessionHypermode)
273
+ return 'already on for this session';
274
+ if (!context.agentTool)
275
+ return 'unavailable: this session cannot delegate';
276
+ return undefined;
277
+ case 'save-skill':
278
+ if (context.permissionMode === 'plan' || context.permissionMode === 'strict')
279
+ return `unavailable in ${context.permissionMode} mode`;
280
+ if (!context.skillCreator)
281
+ return 'unavailable: the skill-creator skill is off';
282
+ return undefined;
283
+ case 'schedule':
284
+ if (context.permissionMode === 'plan')
285
+ return 'unavailable in plan mode';
286
+ if (!context.scheduleTool)
287
+ return 'unavailable in this session';
288
+ return undefined;
289
+ case 'max-effort':
290
+ if (!context.effortMenu)
291
+ return 'unavailable: this model publishes no effort levels';
292
+ return undefined;
293
+ }
294
+ }
295
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../src/tui/triggers/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Case- and accent-folding for composer-trigger matching, with a map back to
3
+ * the draft the operator is editing.
4
+ *
5
+ * One grapheme at a time: canonical decomposition (NFD), combining marks
6
+ * dropped, dotless `ı` to `i`, plain `toLowerCase()`, and the typographic
7
+ * apostrophes `’`/`‘` to `'`. So `İSTANBUL` folds to `istanbul`, `KAYDET` to
8
+ * `kaydet`, `ÇALIŞTIR` to `calistir` and `skill’e` to `skill'e`.
9
+ *
10
+ * Folding DOES merge different words: `sık`/`sik`, `düş`/`duş`, `aşı`/`ası`,
11
+ * `şişe`/`sise` all fold to one string. The built-in phrase lists are checked
12
+ * for that against a word list (`__tests__/fold.test.ts`), so no built-in
13
+ * token folds onto a different common word.
14
+ *
15
+ * Pure and locale-free: the same input folds the same way on every machine.
16
+ */
17
+ export interface FoldedText {
18
+ /** The folded text. */
19
+ readonly text: string;
20
+ /**
21
+ * `map[i]` is the offset in the source of the grapheme folded character `i`
22
+ * came from; `map[text.length]` is the source's length. A span `[a, b)` of
23
+ * the folded text is `[map[a], map[b])` of the source, and always covers
24
+ * whole graphemes.
25
+ */
26
+ readonly map: readonly number[];
27
+ }
28
+ /** Fold one grapheme cluster. */
29
+ export declare function foldGrapheme(grapheme: string): string;
30
+ /** Fold a whole string, keeping where every folded character came from. */
31
+ export declare function foldWithMap(source: string): FoldedText;
32
+ /** Fold a string whose offsets nobody needs (registry data, word lists). */
33
+ export declare function fold(source: string): string;
34
+ //# sourceMappingURL=fold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fold.d.ts","sourceRoot":"","sources":["../../../src/tui/triggers/fold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,MAAM,WAAW,UAAU;IAC1B,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B;AAED,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAUtD;AAED,4EAA4E;AAC5E,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3C"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Case- and accent-folding for composer-trigger matching, with a map back to
3
+ * the draft the operator is editing.
4
+ *
5
+ * One grapheme at a time: canonical decomposition (NFD), combining marks
6
+ * dropped, dotless `ı` to `i`, plain `toLowerCase()`, and the typographic
7
+ * apostrophes `’`/`‘` to `'`. So `İSTANBUL` folds to `istanbul`, `KAYDET` to
8
+ * `kaydet`, `ÇALIŞTIR` to `calistir` and `skill’e` to `skill'e`.
9
+ *
10
+ * Folding DOES merge different words: `sık`/`sik`, `düş`/`duş`, `aşı`/`ası`,
11
+ * `şişe`/`sise` all fold to one string. The built-in phrase lists are checked
12
+ * for that against a word list (`__tests__/fold.test.ts`), so no built-in
13
+ * token folds onto a different common word.
14
+ *
15
+ * Pure and locale-free: the same input folds the same way on every machine.
16
+ */
17
+ const graphemes = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
18
+ /** Fold one grapheme cluster. */
19
+ export function foldGrapheme(grapheme) {
20
+ return grapheme
21
+ .normalize('NFD')
22
+ .replace(/\p{M}/gu, '')
23
+ .replace(/ı/g, 'i')
24
+ .toLowerCase()
25
+ .replace(/[’‘]/g, "'");
26
+ }
27
+ /** Fold a whole string, keeping where every folded character came from. */
28
+ export function foldWithMap(source) {
29
+ let text = '';
30
+ const map = [];
31
+ for (const { segment, index } of graphemes.segment(source)) {
32
+ const folded = foldGrapheme(segment);
33
+ for (let i = 0; i < folded.length; i += 1)
34
+ map.push(index);
35
+ text += folded;
36
+ }
37
+ map.push(source.length);
38
+ return { text, map };
39
+ }
40
+ /** Fold a string whose offsets nobody needs (registry data, word lists). */
41
+ export function fold(source) {
42
+ return foldWithMap(source).text;
43
+ }
44
+ //# sourceMappingURL=fold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fold.js","sourceRoot":"","sources":["../../../src/tui/triggers/fold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAA;AAc5E,iCAAiC;AACjC,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC5C,OAAO,QAAQ;SACb,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,WAAW,EAAE;SACb,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACxB,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,MAAc;IACzC,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1D,IAAI,IAAI,MAAM,CAAA;IACf,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACvB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;AACrB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,IAAI,CAAC,MAAc;IAClC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA;AAChC,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The phrase language of composer triggers, compiled to a token automaton.
3
+ *
4
+ * word one token, matched after folding (`fold.ts`)
5
+ * (a|b c) one of the alternatives; an alternative may be several words
6
+ * [a|b] optional: one of the alternatives, or nothing
7
+ * <n> a run of digits
8
+ * word+' `word` itself, or `word` with an apostrophe suffix: `skill'e`
9
+ * {verb|verb} any positive request form of the verbs, from `verbs.ts`
10
+ *
11
+ * No `RegExp` is ever built from a pattern: a pattern compiles to a small
12
+ * nondeterministic automaton over tokens, and matching simulates it. The
13
+ * simulation counts its steps so a test can bound the cost on a long draft
14
+ * without reading a clock.
15
+ */
16
+ type Atom = {
17
+ readonly kind: 'word';
18
+ readonly text: string;
19
+ } | {
20
+ readonly kind: 'number';
21
+ } | {
22
+ readonly kind: 'suffix';
23
+ readonly base: string;
24
+ };
25
+ /** Flags a verb form carries into the match it ends. */
26
+ export declare const FORM_POLITE = 1;
27
+ export declare const FORM_OPTATIVE = 2;
28
+ interface Edge {
29
+ readonly atom: Atom;
30
+ readonly to: number;
31
+ readonly flags: number;
32
+ }
33
+ interface State {
34
+ readonly edges: Edge[];
35
+ readonly empty: number[];
36
+ }
37
+ export interface CompiledPattern {
38
+ readonly source: string;
39
+ readonly states: readonly State[];
40
+ readonly start: number;
41
+ readonly accept: number;
42
+ /** Words that can begin a match; `null` when a non-word atom can. */
43
+ readonly firstWords: ReadonlySet<string> | null;
44
+ }
45
+ export interface PatternMatch {
46
+ /** Token indices, `end` exclusive. */
47
+ readonly start: number;
48
+ readonly end: number;
49
+ /** `FORM_POLITE | FORM_OPTATIVE` from the verb form the match used. */
50
+ readonly flags: number;
51
+ }
52
+ /** Matching work done, for tests that bound cost by steps rather than time. */
53
+ export interface MatchStats {
54
+ steps: number;
55
+ }
56
+ export declare class PatternError extends Error {
57
+ constructor(source: string, reason: string);
58
+ }
59
+ export declare function compilePattern(source: string): CompiledPattern;
60
+ /**
61
+ * Every match of `pattern` that starts at token `start`, longest first. A
62
+ * question particle (`mi`, `mu`) right after a match extends it by one token.
63
+ */
64
+ export declare function matchAt(pattern: CompiledPattern, tokens: readonly string[], start: number, stats?: MatchStats): PatternMatch[];
65
+ export {};
66
+ //# sourceMappingURL=pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../../src/tui/triggers/pattern.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,KAAK,IAAI,GACN;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAErD,wDAAwD;AACxD,eAAO,MAAM,WAAW,IAAI,CAAA;AAC5B,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B,UAAU,IAAI;IACb,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,UAAU,KAAK;IACd,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;CAC/C;AAED,MAAM,WAAW,YAAY;IAC5B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAA;CACb;AAQD,qBAAa,YAAa,SAAQ,KAAK;gBAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI1C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAoD9D;AAsCD;;;GAGG;AACH,wBAAgB,OAAO,CACtB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,UAAU,GAChB,YAAY,EAAE,CAqChB"}