@ashx-j/lunr 0.2.12 → 0.2.13
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.
- package/CHANGELOG.md +7 -1
- package/dist/catalog/models.json +1 -1
- package/dist/catalog/providers/cloudflare-workers-ai.json +1 -1
- package/dist/catalog/providers/fireworks.json +1 -1
- package/dist/catalog/providers/opencode-go.json +1 -1
- package/dist/catalog/providers/opencode.json +1 -1
- package/dist/catalog/providers/openrouter.json +1 -1
- package/dist/catalog/providers/together.json +1 -1
- package/dist/catalog/publication.json +3 -3
- package/dist/core/context-breakdown.d.ts +3 -1
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js +5 -2
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/settings-manager.d.ts +7 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +13 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +105 -89
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +16 -3
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/skill-tag-autocomplete.d.ts +13 -0
- package/dist/modes/interactive/skill-tag-autocomplete.d.ts.map +1 -0
- package/dist/modes/interactive/skill-tag-autocomplete.js +72 -0
- package/dist/modes/interactive/skill-tag-autocomplete.js.map +1 -0
- package/docs/settings.md +1 -0
- package/docs/skills.md +10 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AutocompleteProvider } from "@ashx-j/lunr-tui";
|
|
2
|
+
import type { SkillTagCharacter } from "../../core/settings-manager.ts";
|
|
3
|
+
export interface SkillTagAutocompleteSkill {
|
|
4
|
+
name: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface WrapSkillTagAutocompleteOptions {
|
|
8
|
+
character: SkillTagCharacter;
|
|
9
|
+
skills: readonly SkillTagAutocompleteSkill[];
|
|
10
|
+
}
|
|
11
|
+
export declare function extractSkillTagPrefix(textBeforeCursor: string, character: SkillTagCharacter): string | null;
|
|
12
|
+
export declare function wrapSkillTagAutocomplete(inner: AutocompleteProvider, options: WrapSkillTagAutocompleteOptions): AutocompleteProvider;
|
|
13
|
+
//# sourceMappingURL=skill-tag-autocomplete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-tag-autocomplete.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/skill-tag-autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,oBAAoB,EAGzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE,MAAM,WAAW,yBAAyB;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,+BAA+B;IAC/C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC7C;AAED,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAsB3G;AAED,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,+BAA+B,GACtC,oBAAoB,CAoDtB","sourcesContent":["import {\n\ttype AutocompleteItem,\n\ttype AutocompleteProvider,\n\ttype AutocompleteSuggestions,\n\tfuzzyFilter,\n} from \"@ashx-j/lunr-tui\";\nimport type { SkillTagCharacter } from \"../../core/settings-manager.ts\";\n\nexport interface SkillTagAutocompleteSkill {\n\tname: string;\n\tdescription?: string;\n}\n\nexport interface WrapSkillTagAutocompleteOptions {\n\tcharacter: SkillTagCharacter;\n\tskills: readonly SkillTagAutocompleteSkill[];\n}\n\nexport function extractSkillTagPrefix(textBeforeCursor: string, character: SkillTagCharacter): string | null {\n\tif (textBeforeCursor.trimStart().startsWith(\"/\")) {\n\t\treturn null;\n\t}\n\n\tlet tokenStart = 0;\n\tfor (let i = textBeforeCursor.length - 1; i >= 0; i--) {\n\t\tconst ch = textBeforeCursor[i];\n\t\tif (ch === \" \" || ch === \"\\t\") {\n\t\t\ttokenStart = i + 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst token = textBeforeCursor.slice(tokenStart);\n\tif (!token.startsWith(character)) {\n\t\treturn null;\n\t}\n\tif (character === \"~\" && (token.startsWith(\"~/\") || token.startsWith(\"~\\\\\"))) {\n\t\treturn null;\n\t}\n\treturn token;\n}\n\nexport function wrapSkillTagAutocomplete(\n\tinner: AutocompleteProvider,\n\toptions: WrapSkillTagAutocompleteOptions,\n): AutocompleteProvider {\n\tconst triggerCharacters = [...new Set([options.character, ...(inner.triggerCharacters ?? [])])];\n\n\treturn {\n\t\ttriggerCharacters,\n\t\tasync getSuggestions(lines, cursorLine, cursorCol, suggestionOptions): Promise<AutocompleteSuggestions | null> {\n\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\t\tconst prefix = extractSkillTagPrefix(textBeforeCursor, options.character);\n\t\t\tif (prefix === null) {\n\t\t\t\treturn inner.getSuggestions(lines, cursorLine, cursorCol, suggestionOptions);\n\t\t\t}\n\n\t\t\tconst query = prefix.slice(options.character.length);\n\t\t\tconst filtered = fuzzyFilter([...options.skills], query, (skill) => skill.name);\n\t\t\tif (filtered.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tprefix,\n\t\t\t\titems: filtered.map((skill) => {\n\t\t\t\t\tconst item: AutocompleteItem = {\n\t\t\t\t\t\tvalue: `${options.character}${skill.name}`,\n\t\t\t\t\t\tlabel: skill.name,\n\t\t\t\t\t};\n\t\t\t\t\tif (skill.description) {\n\t\t\t\t\t\titem.description = skill.description;\n\t\t\t\t\t}\n\t\t\t\t\treturn item;\n\t\t\t\t}),\n\t\t\t};\n\t\t},\n\t\tapplyCompletion(lines, cursorLine, cursorCol, item, prefix) {\n\t\t\tif (!prefix.startsWith(options.character)) {\n\t\t\t\treturn inner.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t\t\t}\n\n\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\tconst beforePrefix = currentLine.slice(0, Math.max(0, cursorCol - prefix.length));\n\t\t\tconst afterCursor = currentLine.slice(cursorCol);\n\t\t\tconst completed = `${item.value} `;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = `${beforePrefix}${completed}${afterCursor}`;\n\t\t\treturn {\n\t\t\t\tlines: newLines,\n\t\t\t\tcursorLine,\n\t\t\t\tcursorCol: beforePrefix.length + completed.length,\n\t\t\t};\n\t\t},\n\t\tshouldTriggerFileCompletion: inner.shouldTriggerFileCompletion?.bind(inner),\n\t};\n}\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { fuzzyFilter, } from "@ashx-j/lunr-tui";
|
|
2
|
+
export function extractSkillTagPrefix(textBeforeCursor, character) {
|
|
3
|
+
if (textBeforeCursor.trimStart().startsWith("/")) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
let tokenStart = 0;
|
|
7
|
+
for (let i = textBeforeCursor.length - 1; i >= 0; i--) {
|
|
8
|
+
const ch = textBeforeCursor[i];
|
|
9
|
+
if (ch === " " || ch === "\t") {
|
|
10
|
+
tokenStart = i + 1;
|
|
11
|
+
break;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const token = textBeforeCursor.slice(tokenStart);
|
|
15
|
+
if (!token.startsWith(character)) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
if (character === "~" && (token.startsWith("~/") || token.startsWith("~\\"))) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return token;
|
|
22
|
+
}
|
|
23
|
+
export function wrapSkillTagAutocomplete(inner, options) {
|
|
24
|
+
const triggerCharacters = [...new Set([options.character, ...(inner.triggerCharacters ?? [])])];
|
|
25
|
+
return {
|
|
26
|
+
triggerCharacters,
|
|
27
|
+
async getSuggestions(lines, cursorLine, cursorCol, suggestionOptions) {
|
|
28
|
+
const currentLine = lines[cursorLine] || "";
|
|
29
|
+
const textBeforeCursor = currentLine.slice(0, cursorCol);
|
|
30
|
+
const prefix = extractSkillTagPrefix(textBeforeCursor, options.character);
|
|
31
|
+
if (prefix === null) {
|
|
32
|
+
return inner.getSuggestions(lines, cursorLine, cursorCol, suggestionOptions);
|
|
33
|
+
}
|
|
34
|
+
const query = prefix.slice(options.character.length);
|
|
35
|
+
const filtered = fuzzyFilter([...options.skills], query, (skill) => skill.name);
|
|
36
|
+
if (filtered.length === 0) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
prefix,
|
|
41
|
+
items: filtered.map((skill) => {
|
|
42
|
+
const item = {
|
|
43
|
+
value: `${options.character}${skill.name}`,
|
|
44
|
+
label: skill.name,
|
|
45
|
+
};
|
|
46
|
+
if (skill.description) {
|
|
47
|
+
item.description = skill.description;
|
|
48
|
+
}
|
|
49
|
+
return item;
|
|
50
|
+
}),
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
applyCompletion(lines, cursorLine, cursorCol, item, prefix) {
|
|
54
|
+
if (!prefix.startsWith(options.character)) {
|
|
55
|
+
return inner.applyCompletion(lines, cursorLine, cursorCol, item, prefix);
|
|
56
|
+
}
|
|
57
|
+
const currentLine = lines[cursorLine] || "";
|
|
58
|
+
const beforePrefix = currentLine.slice(0, Math.max(0, cursorCol - prefix.length));
|
|
59
|
+
const afterCursor = currentLine.slice(cursorCol);
|
|
60
|
+
const completed = `${item.value} `;
|
|
61
|
+
const newLines = [...lines];
|
|
62
|
+
newLines[cursorLine] = `${beforePrefix}${completed}${afterCursor}`;
|
|
63
|
+
return {
|
|
64
|
+
lines: newLines,
|
|
65
|
+
cursorLine,
|
|
66
|
+
cursorCol: beforePrefix.length + completed.length,
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
shouldTriggerFileCompletion: inner.shouldTriggerFileCompletion?.bind(inner),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=skill-tag-autocomplete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-tag-autocomplete.js","sourceRoot":"","sources":["../../../src/modes/interactive/skill-tag-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AutocompleteItem,\n\ttype AutocompleteProvider,\n\ttype AutocompleteSuggestions,\n\tfuzzyFilter,\n} from \"@ashx-j/lunr-tui\";\nimport type { SkillTagCharacter } from \"../../core/settings-manager.ts\";\n\nexport interface SkillTagAutocompleteSkill {\n\tname: string;\n\tdescription?: string;\n}\n\nexport interface WrapSkillTagAutocompleteOptions {\n\tcharacter: SkillTagCharacter;\n\tskills: readonly SkillTagAutocompleteSkill[];\n}\n\nexport function extractSkillTagPrefix(textBeforeCursor: string, character: SkillTagCharacter): string | null {\n\tif (textBeforeCursor.trimStart().startsWith(\"/\")) {\n\t\treturn null;\n\t}\n\n\tlet tokenStart = 0;\n\tfor (let i = textBeforeCursor.length - 1; i >= 0; i--) {\n\t\tconst ch = textBeforeCursor[i];\n\t\tif (ch === \" \" || ch === \"\\t\") {\n\t\t\ttokenStart = i + 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst token = textBeforeCursor.slice(tokenStart);\n\tif (!token.startsWith(character)) {\n\t\treturn null;\n\t}\n\tif (character === \"~\" && (token.startsWith(\"~/\") || token.startsWith(\"~\\\\\"))) {\n\t\treturn null;\n\t}\n\treturn token;\n}\n\nexport function wrapSkillTagAutocomplete(\n\tinner: AutocompleteProvider,\n\toptions: WrapSkillTagAutocompleteOptions,\n): AutocompleteProvider {\n\tconst triggerCharacters = [...new Set([options.character, ...(inner.triggerCharacters ?? [])])];\n\n\treturn {\n\t\ttriggerCharacters,\n\t\tasync getSuggestions(lines, cursorLine, cursorCol, suggestionOptions): Promise<AutocompleteSuggestions | null> {\n\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\t\tconst prefix = extractSkillTagPrefix(textBeforeCursor, options.character);\n\t\t\tif (prefix === null) {\n\t\t\t\treturn inner.getSuggestions(lines, cursorLine, cursorCol, suggestionOptions);\n\t\t\t}\n\n\t\t\tconst query = prefix.slice(options.character.length);\n\t\t\tconst filtered = fuzzyFilter([...options.skills], query, (skill) => skill.name);\n\t\t\tif (filtered.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tprefix,\n\t\t\t\titems: filtered.map((skill) => {\n\t\t\t\t\tconst item: AutocompleteItem = {\n\t\t\t\t\t\tvalue: `${options.character}${skill.name}`,\n\t\t\t\t\t\tlabel: skill.name,\n\t\t\t\t\t};\n\t\t\t\t\tif (skill.description) {\n\t\t\t\t\t\titem.description = skill.description;\n\t\t\t\t\t}\n\t\t\t\t\treturn item;\n\t\t\t\t}),\n\t\t\t};\n\t\t},\n\t\tapplyCompletion(lines, cursorLine, cursorCol, item, prefix) {\n\t\t\tif (!prefix.startsWith(options.character)) {\n\t\t\t\treturn inner.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t\t\t}\n\n\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\tconst beforePrefix = currentLine.slice(0, Math.max(0, cursorCol - prefix.length));\n\t\t\tconst afterCursor = currentLine.slice(cursorCol);\n\t\t\tconst completed = `${item.value} `;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = `${beforePrefix}${completed}${afterCursor}`;\n\t\t\treturn {\n\t\t\t\tlines: newLines,\n\t\t\t\tcursorLine,\n\t\t\t\tcursorCol: beforePrefix.length + completed.length,\n\t\t\t};\n\t\t},\n\t\tshouldTriggerFileCompletion: inner.shouldTriggerFileCompletion?.bind(inner),\n\t};\n}\n"]}
|
package/docs/settings.md
CHANGED
|
@@ -265,6 +265,7 @@ Paths in `~/.lunr/agent/settings.json` resolve relative to `~/.lunr/agent`. Path
|
|
|
265
265
|
| `prompts` | string[] | `[]` | Local prompt template paths or directories |
|
|
266
266
|
| `themes` | string[] | `[]` | Local theme file paths or directories |
|
|
267
267
|
| `enableSkillCommands` | boolean | `true` | Register skills as `/skill:name` commands |
|
|
268
|
+
| `skillTagCharacter` | `"+" \| "~" \| "$"` | `"+"` | Character that lists skills mid-message after a space |
|
|
268
269
|
|
|
269
270
|
Arrays support glob patterns and exclusions. Use `!pattern` to exclude. Use `+path` to force-include an exact path and `-path` to force-exclude an exact path.
|
|
270
271
|
|
package/docs/skills.md
CHANGED
|
@@ -89,6 +89,16 @@ Toggle skill commands via `/settings` in interactive mode or in `settings.json`:
|
|
|
89
89
|
}
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
+
### Skill tags
|
|
93
|
+
|
|
94
|
+
`/settings` → Skill tag picks `+`, `~`, or `$` (default `+`). After a space — or at the start of a line — that character lists loaded skills, the same picker `/` opens at the start of the TUI. Completing inserts a tag; it does not expand SKILL.md the way `/skill:name` does.
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
Please use +pdf-tools on this file
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`xyz+` does not open the list. `xyz +` does. When the tag character is `~`, `~/path` still completes as a file path.
|
|
101
|
+
|
|
92
102
|
## Skill Structure
|
|
93
103
|
|
|
94
104
|
A skill is a directory with a `SKILL.md` file. Everything else is freeform.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-custom-provider",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-custom-provider",
|
|
9
|
-
"version": "0.2.
|
|
9
|
+
"version": "0.2.13",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/sdk": "^0.52.0"
|
|
12
12
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-gondolin",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-gondolin",
|
|
9
|
-
"version": "0.2.
|
|
9
|
+
"version": "0.2.13",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@earendil-works/gondolin": "0.12.0"
|
|
12
12
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-sandbox",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-sandbox",
|
|
9
|
-
"version": "0.2.
|
|
9
|
+
"version": "0.2.13",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/sandbox-runtime": "^0.0.26"
|
|
12
12
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-with-deps",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-with-deps",
|
|
9
|
-
"version": "0.2.
|
|
9
|
+
"version": "0.2.13",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"ms": "^2.1.3"
|
|
12
12
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ashx-j/lunr",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"description": "lunR — terminal coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"piConfig": {
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
"shrinkwrap": "node ../../scripts/generate-coding-agent-shrinkwrap.mjs"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@ashx-j/lunr-agent": "^0.2.
|
|
41
|
-
"@ashx-j/lunr-ai": "^0.2.
|
|
42
|
-
"@ashx-j/lunr-tui": "^0.2.
|
|
40
|
+
"@ashx-j/lunr-agent": "^0.2.13",
|
|
41
|
+
"@ashx-j/lunr-ai": "^0.2.13",
|
|
42
|
+
"@ashx-j/lunr-tui": "^0.2.13",
|
|
43
43
|
"@modelcontextprotocol/ext-apps": "^1.7.4",
|
|
44
44
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
45
45
|
"@mozilla/readability": "^0.6.0",
|