@pentoshi/clai 4.7.0 → 4.8.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 (115) hide show
  1. package/dist/agent/context-manager.js +13 -3
  2. package/dist/agent/context-manager.js.map +1 -1
  3. package/dist/agent/injected-blocks.d.ts +8 -0
  4. package/dist/agent/injected-blocks.js +26 -0
  5. package/dist/agent/injected-blocks.js.map +1 -0
  6. package/dist/agent/must-continue.js +13 -8
  7. package/dist/agent/must-continue.js.map +1 -1
  8. package/dist/agent/runner.js +91 -21
  9. package/dist/agent/runner.js.map +1 -1
  10. package/dist/agent/tool-call-parser.js +2 -1
  11. package/dist/agent/tool-call-parser.js.map +1 -1
  12. package/dist/agent/tool-history.js +8 -2
  13. package/dist/agent/tool-history.js.map +1 -1
  14. package/dist/app/commands/catalog.js +9 -1
  15. package/dist/app/commands/catalog.js.map +1 -1
  16. package/dist/classic/app/ClassicApp.js +1 -1
  17. package/dist/classic/app/ClassicApp.js.map +1 -1
  18. package/dist/classic/app/wiring-lifecycle.js +6 -1
  19. package/dist/classic/app/wiring-lifecycle.js.map +1 -1
  20. package/dist/classic/chrome/Composer.d.ts +2 -0
  21. package/dist/classic/chrome/Composer.js +2 -1
  22. package/dist/classic/chrome/Composer.js.map +1 -1
  23. package/dist/classic/chrome/composer-controller.d.ts +3 -0
  24. package/dist/classic/chrome/composer-controller.js +21 -1
  25. package/dist/classic/chrome/composer-controller.js.map +1 -1
  26. package/dist/classic/chrome/editor-view.d.ts +5 -0
  27. package/dist/classic/chrome/editor-view.js +54 -4
  28. package/dist/classic/chrome/editor-view.js.map +1 -1
  29. package/dist/commands/update-install.d.ts +10 -1
  30. package/dist/commands/update-install.js +165 -11
  31. package/dist/commands/update-install.js.map +1 -1
  32. package/dist/commands/update.d.ts +2 -2
  33. package/dist/commands/update.js +2 -1
  34. package/dist/commands/update.js.map +1 -1
  35. package/dist/instructions/load.d.ts +19 -0
  36. package/dist/instructions/load.js +123 -0
  37. package/dist/instructions/load.js.map +1 -0
  38. package/dist/instructions/locations.d.ts +23 -0
  39. package/dist/instructions/locations.js +167 -0
  40. package/dist/instructions/locations.js.map +1 -0
  41. package/dist/instructions/record.d.ts +22 -0
  42. package/dist/instructions/record.js +157 -0
  43. package/dist/instructions/record.js.map +1 -0
  44. package/dist/instructions/scaffold.d.ts +8 -0
  45. package/dist/instructions/scaffold.js +70 -0
  46. package/dist/instructions/scaffold.js.map +1 -0
  47. package/dist/modes/ask.js +4 -0
  48. package/dist/modes/ask.js.map +1 -1
  49. package/dist/prompts/embedded.js +1 -1
  50. package/dist/prompts/embedded.js.map +1 -1
  51. package/dist/prompts/index.js +11 -1
  52. package/dist/prompts/index.js.map +1 -1
  53. package/dist/prompts/system.agent.md +8 -7
  54. package/dist/safety/classifier.js +9 -0
  55. package/dist/safety/classifier.js.map +1 -1
  56. package/dist/skills/catalog.d.ts +13 -0
  57. package/dist/skills/catalog.js +119 -0
  58. package/dist/skills/catalog.js.map +1 -0
  59. package/dist/skills/discover.d.ts +8 -0
  60. package/dist/skills/discover.js +203 -0
  61. package/dist/skills/discover.js.map +1 -0
  62. package/dist/skills/format.d.ts +3 -0
  63. package/dist/skills/format.js +29 -0
  64. package/dist/skills/format.js.map +1 -0
  65. package/dist/skills/frontmatter.d.ts +8 -0
  66. package/dist/skills/frontmatter.js +151 -0
  67. package/dist/skills/frontmatter.js.map +1 -0
  68. package/dist/skills/locations.d.ts +10 -0
  69. package/dist/skills/locations.js +174 -0
  70. package/dist/skills/locations.js.map +1 -0
  71. package/dist/skills/mentions.d.ts +9 -0
  72. package/dist/skills/mentions.js +31 -0
  73. package/dist/skills/mentions.js.map +1 -0
  74. package/dist/skills/registry.d.ts +12 -0
  75. package/dist/skills/registry.js +141 -0
  76. package/dist/skills/registry.js.map +1 -0
  77. package/dist/skills/types.d.ts +33 -0
  78. package/dist/skills/types.js +8 -0
  79. package/dist/skills/types.js.map +1 -0
  80. package/dist/tools/definitions.js +40 -0
  81. package/dist/tools/definitions.js.map +1 -1
  82. package/dist/tools/instructions.d.ts +2 -0
  83. package/dist/tools/instructions.js +54 -0
  84. package/dist/tools/instructions.js.map +1 -0
  85. package/dist/tools/registry.js +14 -0
  86. package/dist/tools/registry.js.map +1 -1
  87. package/dist/tools/skills.d.ts +3 -0
  88. package/dist/tools/skills.js +99 -0
  89. package/dist/tools/skills.js.map +1 -0
  90. package/dist/tui-v2/composer/composer-editor.js +10 -0
  91. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  92. package/dist/tui-v2/composer/skill-highlight.d.ts +3 -0
  93. package/dist/tui-v2/composer/skill-highlight.js +63 -0
  94. package/dist/tui-v2/composer/skill-highlight.js.map +1 -0
  95. package/dist/tui-v2/composer/use-draft-actions.d.ts +1 -0
  96. package/dist/tui-v2/composer/use-draft-actions.js +13 -1
  97. package/dist/tui-v2/composer/use-draft-actions.js.map +1 -1
  98. package/dist/ui-core/bootstrap/composition-root.js +3 -0
  99. package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
  100. package/dist/ui-core/commands/command-handlers.js +2 -0
  101. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  102. package/dist/ui-core/commands/config-commands.js +7 -2
  103. package/dist/ui-core/commands/config-commands.js.map +1 -1
  104. package/dist/ui-core/commands/skill-commands.d.ts +3 -0
  105. package/dist/ui-core/commands/skill-commands.js +69 -0
  106. package/dist/ui-core/commands/skill-commands.js.map +1 -0
  107. package/dist/ui-core/composer/composer-action-port.d.ts +3 -0
  108. package/dist/ui-core/composer/composer-action-port.js +14 -0
  109. package/dist/ui-core/composer/composer-action-port.js.map +1 -1
  110. package/dist/ui-core/composer/insert-token.d.ts +1 -0
  111. package/dist/ui-core/composer/insert-token.js +5 -0
  112. package/dist/ui-core/composer/insert-token.js.map +1 -0
  113. package/dist/version.generated.d.ts +2 -2
  114. package/dist/version.generated.js +2 -2
  115. package/package.json +1 -1
@@ -0,0 +1,69 @@
1
+ import { composerActionPort } from "../composer/composer-action-port.js";
2
+ import { renderSkillListing, skillScopeLabel } from "../../skills/format.js";
3
+ import { getSkillIndex, invalidateSkillIndex } from "../../skills/registry.js";
4
+ import { skillSearchLocationHints } from "../../skills/locations.js";
5
+ import { formatSkillToken } from "../../skills/mentions.js";
6
+ import { safeCwd } from "../../os/cwd.js";
7
+ const NO_SKILLS_HINT = `no skills found — add <project>/.clai/skills/<name>/SKILL.md (also read from ${skillSearchLocationHints()
8
+ .slice(1, 8)
9
+ .join(", ")} and your home config)`;
10
+ function attach(services, skill) {
11
+ const token = formatSkillToken(skill.name);
12
+ if (composerActionPort.insert(`${token} `)) {
13
+ services.focus.focusRegion("composer");
14
+ return;
15
+ }
16
+ services.session.notice("info", `type ${token} in your prompt to load this skill for that request`);
17
+ }
18
+ export async function handleSkills(services, invocation) {
19
+ const args = invocation.args.trim();
20
+ const sub = args.toLowerCase();
21
+ if (sub === "refresh" || sub === "reload")
22
+ invalidateSkillIndex();
23
+ const index = await getSkillIndex({ cwd: safeCwd() });
24
+ if (index.skills.length === 0) {
25
+ services.session.notice("info", NO_SKILLS_HINT);
26
+ return;
27
+ }
28
+ if (sub === "list" || sub === "all") {
29
+ services.overlay.openPager(`Skills (${index.skills.length})`, renderSkillListing(index.skills), undefined, undefined, "plain");
30
+ return;
31
+ }
32
+ if (args && sub !== "refresh" && sub !== "reload") {
33
+ const needle = sub;
34
+ const exact = index.skills.find((skill) => skill.name === needle);
35
+ if (exact) {
36
+ attach(services, exact);
37
+ return;
38
+ }
39
+ const partial = index.skills.filter((skill) => skill.name.includes(needle));
40
+ if (partial.length === 1) {
41
+ attach(services, partial[0]);
42
+ return;
43
+ }
44
+ if (partial.length === 0) {
45
+ services.session.notice("warn", `no skill matching "${args}" · ${index.skills.map((s) => s.name).join(", ")}`);
46
+ return;
47
+ }
48
+ }
49
+ const filter = args && sub !== "refresh" && sub !== "reload" ? sub : "";
50
+ const pool = filter
51
+ ? index.skills.filter((skill) => skill.name.includes(filter))
52
+ : index.skills;
53
+ services.overlay.openPicker({
54
+ title: `Skills · ${pool.length} available`,
55
+ searchDescription: true,
56
+ twoLine: true,
57
+ options: pool.map((skill) => ({
58
+ value: skill.name,
59
+ label: formatSkillToken(skill.name),
60
+ description: `${skill.description} — ${skillScopeLabel(skill)}`,
61
+ })),
62
+ }, (value) => {
63
+ const picked = pool.find((skill) => skill.name === value);
64
+ services.overlay.close();
65
+ if (picked)
66
+ attach(services, picked);
67
+ });
68
+ }
69
+ //# sourceMappingURL=skill-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-commands.js","sourceRoot":"","sources":["../../../src/ui-core/commands/skill-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,cAAc,GAAG,gFAAgF,wBAAwB,EAAE;KAC9H,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KACX,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC;AAEtC,SAAS,MAAM,CAAC,QAAqB,EAAE,KAAgB;IACrD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,kBAAkB,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3C,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,OAAO,CAAC,MAAM,CACrB,MAAM,EACN,QAAQ,KAAK,qDAAqD,CACnE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAqB,EACrB,UAA6B;IAE7B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC/B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,QAAQ;QAAE,oBAAoB,EAAE,CAAC;IAClE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAEtD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,CAAC,SAAS,CACxB,WAAW,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,EACjC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,EAChC,SAAS,EACT,SAAS,EACT,OAAO,CACR,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,GAAG,CAAC;QACnB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAClE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,OAAO,CAAC,MAAM,CACrB,MAAM,EACN,sBAAsB,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9E,CAAC;YACF,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,IAAI,GAAG,MAAM;QACjB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7D,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IACjB,QAAQ,CAAC,OAAO,CAAC,UAAU,CACzB;QACE,KAAK,EAAE,YAAY,IAAI,CAAC,MAAM,YAAY;QAC1C,iBAAiB,EAAE,IAAI;QACvB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5B,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE;SAChE,CAAC,CAAC;KACJ,EACD,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAC1D,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM;YAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  type Handler = () => void;
6
6
  type DraftListener = (hasDraft: boolean) => void;
7
+ type InsertHandler = (text: string) => void;
7
8
  export declare const composerActionPort: {
8
9
  /** Register the active composer's clear implementation. Returns unregister. */
9
10
  registerClear(handler: Handler): () => void;
@@ -16,6 +17,8 @@ export declare const composerActionPort: {
16
17
  /** Register "show the slash-command list inside the composer". */
17
18
  registerOpenCommands(handler: Handler): () => void;
18
19
  openCommands(): void;
20
+ registerInsert(handler: InsertHandler): () => void;
21
+ insert(text: string): boolean;
19
22
  /** Publish draft emptiness so status chrome can gate draft-only hints. */
20
23
  setHasDraft(next: boolean): void;
21
24
  hasDraft(): boolean;
@@ -5,6 +5,7 @@
5
5
  let clearHandler;
6
6
  let cutHandler;
7
7
  let openCommandsHandler;
8
+ let insertHandler;
8
9
  let hasDraft = false;
9
10
  const draftListeners = new Set();
10
11
  function register(handler, assign, current) {
@@ -44,6 +45,19 @@ export const composerActionPort = {
44
45
  openCommands() {
45
46
  openCommandsHandler?.();
46
47
  },
48
+ registerInsert(handler) {
49
+ insertHandler = handler;
50
+ return () => {
51
+ if (insertHandler === handler)
52
+ insertHandler = undefined;
53
+ };
54
+ },
55
+ insert(text) {
56
+ if (!insertHandler)
57
+ return false;
58
+ insertHandler(text);
59
+ return true;
60
+ },
47
61
  /** Publish draft emptiness so status chrome can gate draft-only hints. */
48
62
  setHasDraft(next) {
49
63
  if (next === hasDraft)
@@ -1 +1 @@
1
- {"version":3,"file":"composer-action-port.js","sourceRoot":"","sources":["../../../src/ui-core/composer/composer-action-port.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,IAAI,YAAiC,CAAC;AACtC,IAAI,UAA+B,CAAC;AACpC,IAAI,mBAAwC,CAAC;AAC7C,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;AAEhD,SAAS,QAAQ,CACf,OAAgB,EAChB,MAA2C,EAC3C,OAAkC;IAElC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,GAAG,EAAE;QACV,IAAI,OAAO,EAAE,KAAK,OAAO;YAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,+EAA+E;IAC/E,aAAa,CAAC,OAAgB;QAC5B,OAAO,QAAQ,CACb,OAAO,EACP,CAAC,IAAI,EAAE,EAAE;YACP,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC,EACD,GAAG,EAAE,CAAC,YAAY,CACnB,CAAC;IACJ,CAAC;IACD,2DAA2D;IAC3D,KAAK;QACH,YAAY,EAAE,EAAE,CAAC;IACnB,CAAC;IACD,mEAAmE;IACnE,WAAW,CAAC,OAAgB;QAC1B,OAAO,QAAQ,CACb,OAAO,EACP,CAAC,IAAI,EAAE,EAAE;YACP,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC,EACD,GAAG,EAAE,CAAC,UAAU,CACjB,CAAC;IACJ,CAAC;IACD,sDAAsD;IACtD,GAAG;QACD,UAAU,EAAE,EAAE,CAAC;IACjB,CAAC;IACD,kEAAkE;IAClE,oBAAoB,CAAC,OAAgB;QACnC,OAAO,QAAQ,CACb,OAAO,EACP,CAAC,IAAI,EAAE,EAAE;YACP,mBAAmB,GAAG,IAAI,CAAC;QAC7B,CAAC,EACD,GAAG,EAAE,CAAC,mBAAmB,CAC1B,CAAC;IACJ,CAAC;IACD,YAAY;QACV,mBAAmB,EAAE,EAAE,CAAC;IAC1B,CAAC;IACD,0EAA0E;IAC1E,WAAW,CAAC,IAAa;QACvB,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC9B,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,cAAc;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,QAAQ;QACN,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,cAAc,CAAC,QAAuB;QACpC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"composer-action-port.js","sourceRoot":"","sources":["../../../src/ui-core/composer/composer-action-port.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,IAAI,YAAiC,CAAC;AACtC,IAAI,UAA+B,CAAC;AACpC,IAAI,mBAAwC,CAAC;AAC7C,IAAI,aAAwC,CAAC;AAC7C,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;AAEhD,SAAS,QAAQ,CACf,OAAgB,EAChB,MAA2C,EAC3C,OAAkC;IAElC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,OAAO,GAAG,EAAE;QACV,IAAI,OAAO,EAAE,KAAK,OAAO;YAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,+EAA+E;IAC/E,aAAa,CAAC,OAAgB;QAC5B,OAAO,QAAQ,CACb,OAAO,EACP,CAAC,IAAI,EAAE,EAAE;YACP,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC,EACD,GAAG,EAAE,CAAC,YAAY,CACnB,CAAC;IACJ,CAAC;IACD,2DAA2D;IAC3D,KAAK;QACH,YAAY,EAAE,EAAE,CAAC;IACnB,CAAC;IACD,mEAAmE;IACnE,WAAW,CAAC,OAAgB;QAC1B,OAAO,QAAQ,CACb,OAAO,EACP,CAAC,IAAI,EAAE,EAAE;YACP,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC,EACD,GAAG,EAAE,CAAC,UAAU,CACjB,CAAC;IACJ,CAAC;IACD,sDAAsD;IACtD,GAAG;QACD,UAAU,EAAE,EAAE,CAAC;IACjB,CAAC;IACD,kEAAkE;IAClE,oBAAoB,CAAC,OAAgB;QACnC,OAAO,QAAQ,CACb,OAAO,EACP,CAAC,IAAI,EAAE,EAAE;YACP,mBAAmB,GAAG,IAAI,CAAC;QAC7B,CAAC,EACD,GAAG,EAAE,CAAC,mBAAmB,CAC1B,CAAC;IACJ,CAAC;IACD,YAAY;QACV,mBAAmB,EAAE,EAAE,CAAC;IAC1B,CAAC;IACD,cAAc,CAAC,OAAsB;QACnC,aAAa,GAAG,OAAO,CAAC;QACxB,OAAO,GAAG,EAAE;YACV,IAAI,aAAa,KAAK,OAAO;gBAAE,aAAa,GAAG,SAAS,CAAC;QAC3D,CAAC,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,0EAA0E;IAC1E,WAAW,CAAC,IAAa;QACvB,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC9B,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,cAAc;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,QAAQ;QACN,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,cAAc,CAAC,QAAuB;QACpC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function tokenInsertion(textBeforeCaret: string, token: string): string;
@@ -0,0 +1,5 @@
1
+ export function tokenInsertion(textBeforeCaret, token) {
2
+ const needsSpace = textBeforeCaret.length > 0 && !/[\s([{"'`]$/.test(textBeforeCaret);
3
+ return needsSpace ? ` ${token}` : token;
4
+ }
5
+ //# sourceMappingURL=insert-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-token.js","sourceRoot":"","sources":["../../../src/ui-core/composer/insert-token.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,eAAuB,EAAE,KAAa;IACnE,MAAM,UAAU,GACd,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrE,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1C,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: "4.7.0";
6
- export declare const VERSION_TAG: "v4.7.0";
5
+ export declare const VERSION: "4.8.0";
6
+ export declare const VERSION_TAG: "v4.8.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 = "4.7.0";
6
- export const VERSION_TAG = "v4.7.0";
5
+ export const VERSION = "4.8.0";
6
+ export const VERSION_TAG = "v4.8.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": "4.7.0",
3
+ "version": "4.8.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",