opencode-snippets 2.1.6 → 2.2.1

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.
@@ -7,11 +7,12 @@ import { logger } from "./logger.js";
7
7
  * @param sessionId - The current session ID
8
8
  * @param text - The text to display
9
9
  */
10
- export async function sendIgnoredMessage(client, sessionId, text) {
10
+ export async function sendIgnoredMessage(client, sessionId, text, messageId) {
11
11
  try {
12
12
  await client.session.prompt({
13
13
  path: { id: sessionId },
14
14
  body: {
15
+ messageID: messageId,
15
16
  noReply: true,
16
17
  parts: [{ type: "text", text, ignored: true }],
17
18
  },
@@ -23,4 +24,75 @@ export async function sendIgnoredMessage(client, sessionId, text) {
23
24
  });
24
25
  }
25
26
  }
27
+ export async function deleteSessionMessage(client, serverUrl, sessionId, messageId) {
28
+ try {
29
+ const session = client.session;
30
+ const sdkResponse = await session.deleteMessage?.({
31
+ sessionID: sessionId,
32
+ messageID: messageId,
33
+ });
34
+ if (sdkResponse)
35
+ return sdkResponse.data !== false;
36
+ const legacySession = client.session;
37
+ const legacyResponse = await legacySession._client?.delete?.({
38
+ url: "/session/{id}/message/{messageID}",
39
+ path: { id: sessionId, messageID: messageId },
40
+ });
41
+ if (legacyResponse)
42
+ return legacyResponse.data !== false;
43
+ const url = new URL(`/session/${encodeURIComponent(sessionId)}/message/${encodeURIComponent(messageId)}`, serverUrl);
44
+ const fetchResponse = await fetch(url, {
45
+ method: "DELETE",
46
+ signal: AbortSignal.timeout(1000),
47
+ });
48
+ if (fetchResponse.ok)
49
+ return true;
50
+ logger.debug("Failed to delete ignored message", {
51
+ messageId,
52
+ status: fetchResponse.status,
53
+ statusText: fetchResponse.statusText,
54
+ });
55
+ return false;
56
+ }
57
+ catch (error) {
58
+ logger.debug("Failed to delete ignored message", {
59
+ messageId,
60
+ error: error instanceof Error ? error.message : String(error),
61
+ });
62
+ return false;
63
+ }
64
+ }
65
+ export async function deleteSessionPart(client, serverUrl, sessionId, messageId, partId) {
66
+ try {
67
+ const legacySession = client.session;
68
+ const legacyResponse = await legacySession._client?.delete?.({
69
+ url: "/session/{id}/message/{messageID}/part/{partID}",
70
+ path: { id: sessionId, messageID: messageId, partID: partId },
71
+ });
72
+ if (legacyResponse)
73
+ return legacyResponse.data !== false;
74
+ const url = new URL(`/session/${encodeURIComponent(sessionId)}/message/${encodeURIComponent(messageId)}/part/${encodeURIComponent(partId)}`, serverUrl);
75
+ const fetchResponse = await fetch(url, {
76
+ method: "DELETE",
77
+ signal: AbortSignal.timeout(1000),
78
+ });
79
+ if (fetchResponse.ok)
80
+ return true;
81
+ logger.debug("Failed to delete ignored message part", {
82
+ messageId,
83
+ partId,
84
+ status: fetchResponse.status,
85
+ statusText: fetchResponse.statusText,
86
+ });
87
+ return false;
88
+ }
89
+ catch (error) {
90
+ logger.debug("Failed to delete ignored message part", {
91
+ messageId,
92
+ partId,
93
+ error: error instanceof Error ? error.message : String(error),
94
+ });
95
+ return false;
96
+ }
97
+ }
26
98
  //# sourceMappingURL=notification.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../src/notification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,SAAiB,EACjB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aAC/C;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;YAC7C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../src/notification.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  /**
2
- * Executes shell commands in text using !`command` syntax
2
+ * Executes shell commands in text using !`command` or !>`command` syntax
3
3
  *
4
4
  * @param text - The text containing shell commands to execute
5
5
  * @param ctx - The plugin context (with Bun shell)
6
- * @param options - Shell execution options
7
6
  * @returns The text with shell commands replaced by their output
8
7
  */
9
8
  export type ShellContext = {
@@ -20,9 +19,5 @@ export type ShellContext = {
20
19
  };
21
20
  };
22
21
  };
23
- export interface ShellOptions {
24
- /** Hide the command prefix in output, showing only the result */
25
- hideCommandInOutput?: boolean;
26
- }
27
- export declare function executeShellCommands(text: string, ctx: ShellContext, options?: ShellOptions): Promise<string>;
22
+ export declare function executeShellCommands(text: string, ctx: ShellContext): Promise<string>;
28
23
  //# sourceMappingURL=shell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/shell.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,CACD,QAAQ,EAAE,oBAAoB,EAC9B,GAAG,IAAI,EAAE,OAAO,EAAE,KACf;QACH,KAAK,EAAE,MAAM;YACX,OAAO,EAAE,MAAM,OAAO,CAAC;gBACrB,MAAM,EAAE;oBAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;iBAAE,CAAC;gBACnC,MAAM,EAAE;oBAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;iBAAE,CAAC;aACpC,CAAC,CAAC;SACJ,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,YAAY,EACjB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/shell.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,CACD,QAAQ,EAAE,oBAAoB,EAC9B,GAAG,IAAI,EAAE,OAAO,EAAE,KACf;QACH,KAAK,EAAE,MAAM;YACX,OAAO,EAAE,MAAM,OAAO,CAAC;gBACrB,MAAM,EAAE;oBAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;iBAAE,CAAC;gBACnC,MAAM,EAAE;oBAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;iBAAE,CAAC;aACpC,CAAC,CAAC;SACJ,CAAC;KACH,CAAC;CACH,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC3F"}
package/dist/src/shell.js CHANGED
@@ -1,20 +1,21 @@
1
1
  import { PATTERNS } from "./constants.js";
2
2
  import { logger } from "./logger.js";
3
- export async function executeShellCommands(text, ctx, options = {}) {
3
+ export async function executeShellCommands(text, ctx) {
4
4
  let result = text;
5
- const hideCommand = options.hideCommandInOutput ?? false;
6
5
  // Reset regex state (global flag requires this)
7
6
  PATTERNS.SHELL_COMMAND.lastIndex = 0;
8
7
  // Find all shell command matches
9
8
  const matches = [...text.matchAll(PATTERNS.SHELL_COMMAND)];
10
9
  // Execute each command and replace in text
11
10
  for (const match of matches) {
12
- const cmd = match[1];
11
+ const showCommand = match[1] === "!>";
12
+ const cmd = match[2];
13
13
  const _placeholder = match[0];
14
14
  try {
15
15
  const output = await ctx.$ `${{ raw: cmd }}`.quiet().nothrow();
16
16
  const text = `${output.stdout.toString()}${output.stderr.toString()}`.trim();
17
- const replacement = hideCommand ? text : `$ ${cmd}\n--> ${text}`;
17
+ // `!>` preserves command provenance when the model should see what just ran.
18
+ const replacement = showCommand ? `$ ${cmd}\n--> ${text}` : text;
18
19
  result = result.replace(_placeholder, replacement);
19
20
  }
20
21
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA6BrC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,GAAiB,EACjB,UAAwB,EAAE;IAE1B,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,IAAI,KAAK,CAAC;IAEzD,gDAAgD;IAChD,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;IAErC,iCAAiC;IACjC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAE3D,2CAA2C;IAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAA,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;YAC7E,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,IAAI,EAAE,CAAC;YACjE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yCAAyC;YACzC,mDAAmD;YACnD,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;gBAC5C,OAAO,EAAE,GAAG;gBACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAuBrC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,GAAiB;IACxE,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,gDAAgD;IAChD,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;IAErC,iCAAiC;IACjC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAE3D,2CAA2C;IAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAA,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;YAC7E,6EAA6E;YAC7E,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yCAAyC;YACzC,mDAAmD;YACnD,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;gBAC5C,OAAO,EAAE,GAAG;gBACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -22,6 +22,7 @@ export type SkillRegistry = Map<string, SkillInfo>;
22
22
  */
23
23
  export interface LoadSkillsOptions {
24
24
  homeDir?: string;
25
+ bundledSkillDirs?: string[];
25
26
  }
26
27
  /**
27
28
  * Loads all skills from global and project directories
@@ -1 +1 @@
1
- {"version":3,"file":"skill-loader.d.ts","sourceRoot":"","sources":["../../src/skill-loader.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA+ED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,CAAC,CAmBxB;AA2ED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAErF"}
1
+ {"version":3,"file":"skill-loader.d.ts","sourceRoot":"","sources":["../../src/skill-loader.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAsFD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,CAAC,CA0BxB;AA2ED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAErF"}
@@ -1,9 +1,12 @@
1
1
  import { readdir, stat } from "node:fs/promises";
2
2
  import { homedir } from "node:os";
3
3
  import { dirname, join, resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
4
5
  import { importCjs } from "./cjs-interop.js";
5
6
  const matter = await importCjs("gray-matter");
6
7
  import { logger } from "./logger.js";
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
7
10
  /**
8
11
  * OpenCode skill directory patterns.
9
12
  *
@@ -43,6 +46,9 @@ function getProjectSkillDirs(projectDir) {
43
46
  join(projectDir, ".agents", "skills"),
44
47
  ];
45
48
  }
49
+ function getBundledSkillDirs() {
50
+ return [join(__dirname, "..", "..", "skill")];
51
+ }
46
52
  async function exists(path) {
47
53
  try {
48
54
  await stat(path);
@@ -82,6 +88,12 @@ async function getProjectSearchRoots(projectDir) {
82
88
  */
83
89
  export async function loadSkills(projectDir, options = {}) {
84
90
  const skills = new Map();
91
+ // Bundled plugin skills should participate in the same registry used by runtime
92
+ // expansion and TUI autocomplete. Load them first so user/global/project skills can
93
+ // still override shipped defaults with the same name.
94
+ for (const dir of options.bundledSkillDirs || getBundledSkillDirs()) {
95
+ await loadFromDirectory(dir, skills, "global");
96
+ }
85
97
  // Load from global directories first
86
98
  for (const dir of getGlobalSkillDirs(options.homeDir)) {
87
99
  await loadFromDirectory(dir, skills, "global");
@@ -1 +1 @@
1
- {"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../src/skill-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../src/skill-loader.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tui-search.d.ts","sourceRoot":"","sources":["../../src/tui-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AA+DD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAgBpF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,CAgB5E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAK5E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CA0B9E"}
1
+ {"version":3,"file":"tui-search.d.ts","sourceRoot":"","sources":["../../src/tui-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AA6ED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAgBpF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,CAgB5E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ5E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CA0B9E"}
@@ -1,6 +1,19 @@
1
1
  function normalizeSearchText(input) {
2
2
  return input.toLowerCase().replace(/[^a-z0-9]/g, "");
3
3
  }
4
+ function isSubsequence(input, query) {
5
+ if (!query)
6
+ return true;
7
+ let i = 0;
8
+ for (const c of input) {
9
+ if (c !== query[i])
10
+ continue;
11
+ i += 1;
12
+ if (i === query.length)
13
+ return true;
14
+ }
15
+ return false;
16
+ }
4
17
  function scoreText(input, query) {
5
18
  const raw = input.toLowerCase();
6
19
  const needle = query.toLowerCase();
@@ -18,6 +31,8 @@ function scoreText(input, query) {
18
31
  return 4;
19
32
  if (compactNeedle && compact.includes(compactNeedle))
20
33
  return 5;
34
+ if (compactNeedle && isSubsequence(compact, compactNeedle))
35
+ return 6;
21
36
  return Number.POSITIVE_INFINITY;
22
37
  }
23
38
  function scoreSnippet(snippet, query) {
@@ -29,9 +44,9 @@ function scoreSnippet(snippet, query) {
29
44
  return score;
30
45
  const needle = query.toLowerCase();
31
46
  if (description.startsWith(needle))
32
- return 6;
33
- if (description.includes(needle))
34
47
  return 7;
48
+ if (description.includes(needle))
49
+ return 8;
35
50
  return Number.POSITIVE_INFINITY;
36
51
  }
37
52
  function sourceRank(item) {
@@ -49,9 +64,9 @@ function scoreSkill(skill, query) {
49
64
  return score;
50
65
  const needle = query.toLowerCase();
51
66
  if (description.startsWith(needle))
52
- return 6;
53
- if (description.includes(needle))
54
67
  return 7;
68
+ if (description.includes(needle))
69
+ return 8;
55
70
  return Number.POSITIVE_INFINITY;
56
71
  }
57
72
  export function filterSnippets(snippets, query) {
@@ -92,6 +107,9 @@ export function matchedAliases(snippet, query) {
92
107
  const needle = query.trim();
93
108
  if (!needle)
94
109
  return [];
110
+ const exact = snippet.aliases.filter((alias) => alias === needle);
111
+ if (exact.length > 0)
112
+ return exact;
95
113
  return snippet.aliases.filter((alias) => Number.isFinite(scoreText(alias, needle)));
96
114
  }
97
115
  export function snippetDescription(snippet) {
@@ -1 +1 @@
1
- {"version":3,"file":"tui-search.js","sourceRoot":"","sources":["../../src/tui-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui-search.js","sourceRoot":"","sources":["../../src/tui-search.ts"],"names":[],"mappings":"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"}
package/dist/tui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../tui.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,yBAAyB,CAAC;AAyhCjC,QAAA,MAAM,MAAM,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAG3C,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../tui.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,yBAAyB,CAAC;AAs9BjC,QAAA,MAAM,MAAM,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAG3C,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/tui.jsx CHANGED
@@ -2,7 +2,7 @@
2
2
  import { join } from "node:path";
3
3
  import { RGBA } from "@opentui/core";
4
4
  import { useKeyboard } from "@opentui/solid";
5
- import { createEffect, createMemo, createResource, createSignal, Index, onCleanup, Show, } from "solid-js";
5
+ import { createEffect, createMemo, createResource, createSignal, Index, onCleanup, onMount, Show, } from "solid-js";
6
6
  import { CONFIG } from "./src/constants.js";
7
7
  import { ensureSnippetsDir, listSnippets, loadSnippets } from "./src/loader.js";
8
8
  import { addPendingDraft } from "./src/pending-drafts.js";
@@ -180,6 +180,17 @@ function toPromptInfo(prompt, input) {
180
180
  function setPromptInput(prompt, input) {
181
181
  prompt.set(toPromptInfo(prompt, input));
182
182
  }
183
+ function isSubmitKey(evt) {
184
+ return (evt.name === "return" ||
185
+ evt.name === "linefeed" ||
186
+ evt.name === "enter" ||
187
+ evt.raw === "\r" ||
188
+ evt.raw === "\n" ||
189
+ evt.sequence === "\r" ||
190
+ evt.sequence === "\n" ||
191
+ evt.raw === "\x1bOM" ||
192
+ evt.sequence === "\x1bOM");
193
+ }
183
194
  async function getSnippets(api) {
184
195
  const registry = await loadSnippets(api.state.path.directory);
185
196
  return sortSnippets(listSnippets(registry));
@@ -268,20 +279,6 @@ function PromptWithSnippetAutocomplete(props) {
268
279
  props.api.renderer.requestRender();
269
280
  }, 175);
270
281
  };
271
- const handlePromptSubmit = () => {
272
- if (dialogBlockingInput()) {
273
- return;
274
- }
275
- const ref = prompt();
276
- if (ref && isReloadCommand(ref.current.input)) {
277
- executeReloadInPrompt(props.api, ref, () => {
278
- syncPromptInput(ref, "");
279
- setDismissed(undefined);
280
- }, refreshSnippetOptions);
281
- return;
282
- }
283
- props.onSubmit?.();
284
- };
285
282
  const recordMouseMove = (x, y) => {
286
283
  const last = lastMousePos();
287
284
  if (last?.x === x && last.y === y) {
@@ -322,16 +319,6 @@ function PromptWithSnippetAutocomplete(props) {
322
319
  }));
323
320
  return [...snippetOptions, ...skillOptions];
324
321
  };
325
- const canCreateForQuery = (value) => {
326
- const q = value.trim();
327
- if (snippets.loading || skills.loading)
328
- return false;
329
- if (!q)
330
- return false;
331
- if (!normalizeSnippetName(q))
332
- return false;
333
- return optionsForQuery(q).length === 0;
334
- };
335
322
  const schedulePromptSync = () => {
336
323
  const ref = prompt();
337
324
  if (!ref)
@@ -488,66 +475,6 @@ function PromptWithSnippetAutocomplete(props) {
488
475
  }, refreshSnippetOptions);
489
476
  },
490
477
  },
491
- {
492
- title: "Accept snippet autocomplete",
493
- value: "snippets.accept",
494
- keybind: "input_submit",
495
- category: "Prompt",
496
- hidden: true,
497
- enabled: ref.focused,
498
- onSelect() {
499
- if (isReloadCommand(ref.current.input)) {
500
- executeReloadInPrompt(props.api, ref, () => {
501
- syncPromptInput(ref, "");
502
- setDismissed(undefined);
503
- }, refreshSnippetOptions);
504
- return;
505
- }
506
- if (dialogBlockingInput()) {
507
- return;
508
- }
509
- const current = findTrailingHashtagTrigger(ref.current.input);
510
- if (!current || dismissed() === current.token) {
511
- ref.submit();
512
- return;
513
- }
514
- const live = optionsForQuery(current.query.trim());
515
- const index = Math.min(selected(), Math.max(live.length - 1, 0));
516
- if (syncingPrompt()) {
517
- if (live.length > 0) {
518
- chooseItem(live[index] ?? live[0]);
519
- return;
520
- }
521
- if (canCreateForQuery(current.query)) {
522
- void createSnippetDraft(current.query);
523
- return;
524
- }
525
- ref.submit();
526
- return;
527
- }
528
- // Prefer the rendered dropdown state so Enter follows what the user can see.
529
- if (visible()) {
530
- const rendered = options();
531
- if (rendered.length > 0) {
532
- const index = Math.min(selected(), rendered.length - 1);
533
- chooseItem(rendered[index] ?? rendered[0]);
534
- return;
535
- }
536
- }
537
- if (snippets.loading || skills.loading) {
538
- return;
539
- }
540
- if (live.length > 0) {
541
- chooseItem(live[index] ?? live[0]);
542
- return;
543
- }
544
- if (canCreateForQuery(current.query)) {
545
- void createSnippetDraft(current.query);
546
- return;
547
- }
548
- ref.submit();
549
- },
550
- },
551
478
  ]);
552
479
  }, 0);
553
480
  onCleanup(() => {
@@ -609,6 +536,35 @@ function PromptWithSnippetAutocomplete(props) {
609
536
  })();
610
537
  }}/>));
611
538
  };
539
+ const acceptVisibleAutocomplete = () => {
540
+ const total = options().length;
541
+ const actionable = total > 0 || canCreate();
542
+ if (!visible() || !actionable)
543
+ return false;
544
+ if (total > 0) {
545
+ choose(selected());
546
+ }
547
+ else if (canCreate()) {
548
+ void createSnippetDraft();
549
+ }
550
+ return true;
551
+ };
552
+ onMount(() => {
553
+ const submitAutocomplete = (evt) => {
554
+ if (!isSubmitKey(evt))
555
+ return;
556
+ if (dialogBlockingInput())
557
+ return;
558
+ if (!acceptVisibleAutocomplete())
559
+ return;
560
+ evt.preventDefault();
561
+ evt.stopPropagation();
562
+ };
563
+ props.api.renderer.keyInput.prependListener("keypress", submitAutocomplete);
564
+ onCleanup(() => {
565
+ props.api.renderer.keyInput.removeListener("keypress", submitAutocomplete);
566
+ });
567
+ });
612
568
  useKeyboard((evt) => {
613
569
  const ref = prompt();
614
570
  const name = evt.name?.toLowerCase();
@@ -657,15 +613,9 @@ function PromptWithSnippetAutocomplete(props) {
657
613
  evt.stopPropagation();
658
614
  return;
659
615
  }
660
- if (name === "tab") {
661
- if (!actionable)
616
+ if (name === "tab" || name === "return" || name === "linefeed" || name === "enter") {
617
+ if (!acceptVisibleAutocomplete())
662
618
  return;
663
- if (total > 0) {
664
- choose(selected());
665
- }
666
- else if (canCreate()) {
667
- void createSnippetDraft();
668
- }
669
619
  evt.preventDefault();
670
620
  evt.stopPropagation();
671
621
  return;
@@ -751,7 +701,7 @@ function PromptWithSnippetAutocomplete(props) {
751
701
  </scrollbox>
752
702
  </box>
753
703
  </Show>
754
- <props.api.ui.Prompt sessionID={props.sessionID} workspaceID={props.workspaceID} visible={props.visible} disabled={props.disabled || dialogBlockingInput()} onSubmit={handlePromptSubmit} placeholders={props.placeholders} ref={bind} right={props.right}/>
704
+ <props.api.ui.Prompt sessionID={props.sessionID} workspaceID={props.workspaceID} visible={props.visible} disabled={props.disabled || dialogBlockingInput()} onSubmit={props.onSubmit} placeholders={props.placeholders} ref={bind} right={props.right}/>
755
705
  </box>);
756
706
  }
757
707
  const tui = async (api) => {