@pentoshi/clai 3.10.0 → 3.11.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 (44) hide show
  1. package/dist/tui-v2/actions/action-id.d.ts +1 -1
  2. package/dist/tui-v2/actions/action-id.js +1 -0
  3. package/dist/tui-v2/actions/action-id.js.map +1 -1
  4. package/dist/tui-v2/actions/format-shortcuts.js +1 -0
  5. package/dist/tui-v2/actions/format-shortcuts.js.map +1 -1
  6. package/dist/tui-v2/actions/keymap.js +2 -0
  7. package/dist/tui-v2/actions/keymap.js.map +1 -1
  8. package/dist/tui-v2/app/App.js +3 -1
  9. package/dist/tui-v2/app/App.js.map +1 -1
  10. package/dist/tui-v2/bootstrap/console-guard.d.ts +20 -0
  11. package/dist/tui-v2/bootstrap/console-guard.js +73 -0
  12. package/dist/tui-v2/bootstrap/console-guard.js.map +1 -0
  13. package/dist/tui-v2/bootstrap/start-tui-v2.js +14 -0
  14. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  15. package/dist/tui-v2/components/composer/composer-input-box.js +5 -1
  16. package/dist/tui-v2/components/composer/composer-input-box.js.map +1 -1
  17. package/dist/tui-v2/components/status/status-line.d.ts +8 -2
  18. package/dist/tui-v2/components/status/status-line.js +12 -8
  19. package/dist/tui-v2/components/status/status-line.js.map +1 -1
  20. package/dist/tui-v2/components/transcript/thinking-block.d.ts +3 -1
  21. package/dist/tui-v2/components/transcript/thinking-block.js +49 -5
  22. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  23. package/dist/tui-v2/components/transcript/transcript-row.js +1 -1
  24. package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
  25. package/dist/tui-v2/composer/composer-action-port.d.ts +15 -3
  26. package/dist/tui-v2/composer/composer-action-port.js +49 -6
  27. package/dist/tui-v2/composer/composer-action-port.js.map +1 -1
  28. package/dist/tui-v2/composer/composer-editor.js +37 -44
  29. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  30. package/dist/tui-v2/composer/draft-actions.d.ts +31 -0
  31. package/dist/tui-v2/composer/draft-actions.js +45 -0
  32. package/dist/tui-v2/composer/draft-actions.js.map +1 -0
  33. package/dist/tui-v2/composer/textarea-keybindings.d.ts +1 -1
  34. package/dist/tui-v2/composer/textarea-keybindings.js +33 -0
  35. package/dist/tui-v2/composer/textarea-keybindings.js.map +1 -1
  36. package/dist/tui-v2/composer/use-draft-actions.d.ts +32 -0
  37. package/dist/tui-v2/composer/use-draft-actions.js +59 -0
  38. package/dist/tui-v2/composer/use-draft-actions.js.map +1 -0
  39. package/dist/tui-v2/state/use-has-draft.d.ts +6 -0
  40. package/dist/tui-v2/state/use-has-draft.js +13 -0
  41. package/dist/tui-v2/state/use-has-draft.js.map +1 -0
  42. package/dist/version.generated.d.ts +2 -2
  43. package/dist/version.generated.js +2 -2
  44. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"textarea-keybindings.js","sourceRoot":"","sources":["../../../src/tui-v2/composer/textarea-keybindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoBH,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAC;AAEnD,MAAM,UAAU,8BAA8B;IAC5C,MAAM,SAAS,GAA6B,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,uEAAuE;QACvE,8DAA8D;QAC9D,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACxD,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,+CAA+C;IAC/C,8DAA8D;IAC9D,SAAS,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,sBAAsB;KAC/B,CAAC,CAAC;IACH,SAAS,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,qBAAqB;KAC9B,CAAC,CAAC;IAEH,qEAAqE;IACrE,sEAAsE;IACtE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC1E,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACvE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACzE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAEtE,uEAAuE;IACvE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACjE,iEAAiE;IACjE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAExE,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"textarea-keybindings.js","sourceRoot":"","sources":["../../../src/tui-v2/composer/textarea-keybindings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Draft-level composer actions and their registration on
3
+ * {@link composerActionPort}, so status chrome and keystrokes share one path.
4
+ */
5
+ import { type RefObject } from "react";
6
+ import type { TextareaRenderable } from "@opentui/core";
7
+ import type { AppServices } from "../bootstrap/composition-root.js";
8
+ export interface DraftActionsInput {
9
+ readonly editorRef: RefObject<TextareaRenderable | null>;
10
+ readonly services: AppServices;
11
+ /** Expands paste placeholders into the real text. */
12
+ readonly expandPastes: (text: string) => string;
13
+ /** Drop paste + prompt-history state tied to the current draft. */
14
+ readonly resetRegistries: () => void;
15
+ /** Collapse the completion menu and any accepted-slash marker. */
16
+ readonly resetMenuState: () => void;
17
+ readonly setContentRows: (rows: number) => void;
18
+ readonly clearPasteChips: () => void;
19
+ readonly focusComposer: () => void;
20
+ readonly refreshMenu: () => void;
21
+ readonly syncContentRows: () => void;
22
+ readonly notify: (message: string, durationMs: number) => void;
23
+ }
24
+ export interface DraftActions {
25
+ /** Wipe the draft and everything derived from it. */
26
+ readonly clear: (editor: TextareaRenderable) => void;
27
+ /** Ctrl+Shift+X — copy the draft to the clipboard, then clear it. */
28
+ readonly cut: () => Promise<void>;
29
+ /** Show every slash command, as typing "/" in the composer does. */
30
+ readonly showCommands: () => void;
31
+ }
32
+ export declare function useDraftActions(input: DraftActionsInput): DraftActions;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Draft-level composer actions and their registration on
3
+ * {@link composerActionPort}, so status chrome and keystrokes share one path.
4
+ */
5
+ import { useEffect } from "react";
6
+ import { composerActionPort } from "./composer-action-port.js";
7
+ import { cutDraft, cutDraftMessage, primeCommandMenu } from "./draft-actions.js";
8
+ export function useDraftActions(input) {
9
+ const clear = (editor) => {
10
+ editor.clear();
11
+ input.resetRegistries();
12
+ input.resetMenuState();
13
+ input.setContentRows(1);
14
+ input.clearPasteChips();
15
+ };
16
+ const cut = async () => {
17
+ const editor = input.editorRef.current;
18
+ if (!editor)
19
+ return;
20
+ const outcome = await cutDraft({
21
+ editor,
22
+ clipboard: input.services.ports.clipboard,
23
+ expand: input.expandPastes,
24
+ clearDraft: () => clear(editor),
25
+ focus: input.focusComposer,
26
+ });
27
+ input.notify(cutDraftMessage(outcome), outcome === "empty" ? 1400 : 1600);
28
+ };
29
+ const showCommands = () => {
30
+ const editor = input.editorRef.current;
31
+ if (!editor)
32
+ return;
33
+ input.focusComposer();
34
+ primeCommandMenu(editor);
35
+ input.refreshMenu();
36
+ input.syncContentRows();
37
+ };
38
+ // Re-registered every render so the handlers close over current state.
39
+ useEffect(() => {
40
+ const unregisterClear = composerActionPort.registerClear(() => {
41
+ const editor = input.editorRef.current;
42
+ if (!editor)
43
+ return;
44
+ clear(editor);
45
+ input.focusComposer();
46
+ });
47
+ const unregisterCut = composerActionPort.registerCut(() => {
48
+ void cut();
49
+ });
50
+ const unregisterCommands = composerActionPort.registerOpenCommands(showCommands);
51
+ return () => {
52
+ unregisterClear();
53
+ unregisterCut();
54
+ unregisterCommands();
55
+ };
56
+ });
57
+ return { clear, cut, showCommands };
58
+ }
59
+ //# sourceMappingURL=use-draft-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-draft-actions.js","sourceRoot":"","sources":["../../../src/tui-v2/composer/use-draft-actions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA4BjF,MAAM,UAAU,eAAe,CAAC,KAAwB;IACtD,MAAM,KAAK,GAAG,CAAC,MAA0B,EAAQ,EAAE;QACjD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,CAAC,eAAe,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,KAAK,IAAmB,EAAE;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC;YAC7B,MAAM;YACN,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS;YACzC,MAAM,EAAE,KAAK,CAAC,YAAY;YAC1B,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;YAC/B,KAAK,EAAE,KAAK,CAAC,aAAa;SAC3B,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACzB,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,KAAK,CAAC,eAAe,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,eAAe,GAAG,kBAAkB,CAAC,aAAa,CAAC,GAAG,EAAE;YAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;YACvC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,KAAK,CAAC,MAAM,CAAC,CAAC;YACd,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE;YACxD,KAAK,GAAG,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;QACH,MAAM,kBAAkB,GACtB,kBAAkB,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACxD,OAAO,GAAG,EAAE;YACV,eAAe,EAAE,CAAC;YAClB,aAAa,EAAE,CAAC;YAChB,kBAAkB,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Draft emptiness, published by the composer. Status chrome uses it to gate
3
+ * the draft-only chips (^X / ⇧^X) so the row never offers a chord that would
4
+ * currently do nothing.
5
+ */
6
+ export declare function useHasDraft(): boolean;
@@ -0,0 +1,13 @@
1
+ import { useEffect, useState } from "react";
2
+ import { composerActionPort } from "../composer/composer-action-port.js";
3
+ /**
4
+ * Draft emptiness, published by the composer. Status chrome uses it to gate
5
+ * the draft-only chips (^X / ⇧^X) so the row never offers a chord that would
6
+ * currently do nothing.
7
+ */
8
+ export function useHasDraft() {
9
+ const [hasDraft, setHasDraft] = useState(() => composerActionPort.hasDraft());
10
+ useEffect(() => composerActionPort.subscribeDraft(setHasDraft), []);
11
+ return hasDraft;
12
+ }
13
+ //# sourceMappingURL=use-has-draft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-has-draft.js","sourceRoot":"","sources":["../../../src/tui-v2/state/use-has-draft.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9E,SAAS,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -2,5 +2,5 @@
2
2
  * AUTO-GENERATED by scripts/sync-version.mjs — do not edit by hand.
3
3
  * Source of truth: package.json "version".
4
4
  */
5
- export declare const VERSION: "3.10.0";
6
- export declare const VERSION_TAG: "v3.10.0";
5
+ export declare const VERSION: "3.11.0";
6
+ export declare const VERSION_TAG: "v3.11.0";
@@ -2,6 +2,6 @@
2
2
  * AUTO-GENERATED by scripts/sync-version.mjs — do not edit by hand.
3
3
  * Source of truth: package.json "version".
4
4
  */
5
- export const VERSION = "3.10.0";
6
- export const VERSION_TAG = "v3.10.0";
5
+ export const VERSION = "3.11.0";
6
+ export const VERSION_TAG = "v3.11.0";
7
7
  //# sourceMappingURL=version.generated.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pentoshi/clai",
3
- "version": "3.10.0",
3
+ "version": "3.11.0",
4
4
  "description": "A fast, cross-platform AI CLI assistant with ask and agent modes for shell tasks, file operations, and cybersecurity workflows.",
5
5
  "type": "module",
6
6
  "license": "MIT",