open-multi-agent-kit 0.80.4 → 0.80.6
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 +21 -0
- package/dist/config.d.ts +4 -9
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +46 -15
- package/dist/config.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +6 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +82 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +606 -10
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/harness-control-events.d.ts +79 -0
- package/dist/core/harness-control-events.d.ts.map +1 -0
- package/dist/core/harness-control-events.js +339 -0
- package/dist/core/harness-control-events.js.map +1 -0
- package/dist/core/harness-control-replay.d.ts +26 -0
- package/dist/core/harness-control-replay.d.ts.map +1 -0
- package/dist/core/harness-control-replay.js +155 -0
- package/dist/core/harness-control-replay.js.map +1 -0
- package/dist/core/keybindings.d.ts +12 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +31 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mcp-inventory.d.ts +40 -0
- package/dist/core/mcp-inventory.d.ts.map +1 -0
- package/dist/core/mcp-inventory.js +104 -0
- package/dist/core/mcp-inventory.js.map +1 -0
- package/dist/core/settings-manager.d.ts +3 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +4 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +4 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/spec-kit/compiler.d.ts +67 -0
- package/dist/core/spec-kit/compiler.d.ts.map +1 -0
- package/dist/core/spec-kit/compiler.js +268 -0
- package/dist/core/spec-kit/compiler.js.map +1 -0
- package/dist/core/transaction-coordinator.d.ts +30 -0
- package/dist/core/transaction-coordinator.d.ts.map +1 -0
- package/dist/core/transaction-coordinator.js +173 -0
- package/dist/core/transaction-coordinator.js.map +1 -0
- package/dist/migrations.d.ts +35 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +409 -3
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/control-panel.d.ts +29 -0
- package/dist/modes/interactive/components/control-panel.d.ts.map +1 -0
- package/dist/modes/interactive/components/control-panel.js +90 -0
- package/dist/modes/interactive/components/control-panel.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +21 -13
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +3 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +3 -0
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/mcp-selector.d.ts +28 -0
- package/dist/modes/interactive/components/mcp-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/mcp-selector.js +138 -0
- package/dist/modes/interactive/components/mcp-selector.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +12 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +120 -27
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +19 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +21 -8
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/skills-selector.d.ts +32 -0
- package/dist/modes/interactive/components/skills-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/skills-selector.js +130 -0
- package/dist/modes/interactive/components/skills-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +7 -8
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +7 -48
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +9 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +340 -97
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/catppuccin-mocha.json +86 -0
- package/dist/modes/interactive/theme/dracula.json +86 -0
- package/dist/modes/interactive/theme/gruvbox-dark.json +86 -0
- package/dist/modes/interactive/theme/kanagawa-dragon.json +86 -0
- package/dist/modes/interactive/theme/omk-control-panel.json +91 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +41 -16
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/theme/tokyo-night-storm.json +86 -0
- package/docs/compaction.md +21 -8
- package/docs/quickstart.md +1 -1
- package/docs/themes.md +10 -2
- package/docs/usage.md +2 -1
- 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,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills inventory selector with fuzzy search input + counter.
|
|
3
|
+
* Read-only: never invokes or modifies a skill.
|
|
4
|
+
*/
|
|
5
|
+
import { Container, fuzzyFilter, getKeybindings, Input, Spacer, Text } from "@earendil-works/omk-tui";
|
|
6
|
+
import { theme } from "../theme/theme.js";
|
|
7
|
+
import { DynamicBorder } from "./dynamic-border.js";
|
|
8
|
+
import { keyHint, rawKeyHint } from "./keybinding-hints.js";
|
|
9
|
+
export class SkillsSelectorComponent extends Container {
|
|
10
|
+
allSkills;
|
|
11
|
+
filteredSkills;
|
|
12
|
+
selectedIndex = 0;
|
|
13
|
+
listContainer;
|
|
14
|
+
detailContainer;
|
|
15
|
+
counterText;
|
|
16
|
+
searchInput;
|
|
17
|
+
onCancelCallback;
|
|
18
|
+
_focused = false;
|
|
19
|
+
get focused() {
|
|
20
|
+
return this._focused;
|
|
21
|
+
}
|
|
22
|
+
set focused(value) {
|
|
23
|
+
this._focused = value;
|
|
24
|
+
this.searchInput.focused = value;
|
|
25
|
+
}
|
|
26
|
+
constructor(input, onCancel) {
|
|
27
|
+
super();
|
|
28
|
+
this.allSkills = input.skills;
|
|
29
|
+
this.filteredSkills = input.skills;
|
|
30
|
+
this.onCancelCallback = onCancel;
|
|
31
|
+
this.addChild(new DynamicBorder());
|
|
32
|
+
this.addChild(new Spacer(1));
|
|
33
|
+
this.addChild(new Text(theme.fg("accent", theme.bold("Skills")), 1, 0));
|
|
34
|
+
this.addChild(new Text(theme.fg("muted", ` ${this.allSkills.length} loaded · slash commands ${input.enableSkillCommands ? "enabled" : "disabled"}`), 1, 0));
|
|
35
|
+
this.addChild(new Spacer(1));
|
|
36
|
+
if (!input.enableSkillCommands) {
|
|
37
|
+
this.addChild(new Text(theme.fg("warning", " Skill slash commands are disabled. Toggle via /settings."), 1, 0));
|
|
38
|
+
this.addChild(new Spacer(1));
|
|
39
|
+
}
|
|
40
|
+
for (const diag of input.diagnostics.slice(0, 5)) {
|
|
41
|
+
const tone = diag.type === "warning" || diag.type === "collision" ? "warning" : "error";
|
|
42
|
+
this.addChild(new Text(theme.fg(tone, ` ${diag.type}: ${diag.message}`), 1, 0));
|
|
43
|
+
}
|
|
44
|
+
if (input.diagnostics.length > 0) {
|
|
45
|
+
this.addChild(new Spacer(1));
|
|
46
|
+
}
|
|
47
|
+
this.counterText = new Text(this.getCounterText(), 1, 0);
|
|
48
|
+
this.addChild(this.counterText);
|
|
49
|
+
this.searchInput = new Input();
|
|
50
|
+
this.searchInput.onSubmit = () => this.updateDetail();
|
|
51
|
+
this.addChild(this.searchInput);
|
|
52
|
+
this.addChild(new Spacer(1));
|
|
53
|
+
this.listContainer = new Container();
|
|
54
|
+
this.addChild(this.listContainer);
|
|
55
|
+
this.addChild(new Spacer(1));
|
|
56
|
+
this.detailContainer = new Container();
|
|
57
|
+
this.addChild(this.detailContainer);
|
|
58
|
+
this.addChild(new Spacer(1));
|
|
59
|
+
this.addChild(new Text(`${rawKeyHint("↑↓", "navigate")} ${keyHint("tui.select.cancel", "close")}`, 1, 0));
|
|
60
|
+
this.addChild(new Spacer(1));
|
|
61
|
+
this.addChild(new DynamicBorder());
|
|
62
|
+
this.updateList();
|
|
63
|
+
this.updateDetail();
|
|
64
|
+
}
|
|
65
|
+
getCounterText() {
|
|
66
|
+
return theme.fg("muted", ` matched ${this.filteredSkills.length} / total ${this.allSkills.length}`);
|
|
67
|
+
}
|
|
68
|
+
applyFilter(query) {
|
|
69
|
+
this.filteredSkills = query
|
|
70
|
+
? fuzzyFilter(this.allSkills, query, (s) => `${s.name} ${s.description}`)
|
|
71
|
+
: this.allSkills;
|
|
72
|
+
this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredSkills.length - 1));
|
|
73
|
+
this.counterText.setText(this.getCounterText());
|
|
74
|
+
this.updateList();
|
|
75
|
+
this.updateDetail();
|
|
76
|
+
}
|
|
77
|
+
updateList() {
|
|
78
|
+
this.listContainer.clear();
|
|
79
|
+
if (this.filteredSkills.length === 0) {
|
|
80
|
+
const msg = this.allSkills.length === 0 ? " No skills loaded." : " No skills match the search.";
|
|
81
|
+
this.listContainer.addChild(new Text(theme.fg("muted", msg), 1, 0));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
for (let i = 0; i < this.filteredSkills.length; i++) {
|
|
85
|
+
const skill = this.filteredSkills[i];
|
|
86
|
+
const isSelected = i === this.selectedIndex;
|
|
87
|
+
const name = isSelected ? theme.fg("accent", `→ ${skill.name}`) : ` ${skill.name}`;
|
|
88
|
+
const scopeTag = theme.fg("muted", ` [${skill.sourceInfo.scope}]`);
|
|
89
|
+
const tail = skill.disableModelInvocation ? theme.fg("dim", " · model-invocation off") : "";
|
|
90
|
+
this.listContainer.addChild(new Text(`${name}${scopeTag}${tail}`, 1, 0));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
updateDetail() {
|
|
94
|
+
this.detailContainer.clear();
|
|
95
|
+
const skill = this.filteredSkills[this.selectedIndex];
|
|
96
|
+
if (!skill)
|
|
97
|
+
return;
|
|
98
|
+
const desc = (skill.description || "").trim();
|
|
99
|
+
const oneLine = desc.length > 200 ? `${desc.slice(0, 197)}...` : desc;
|
|
100
|
+
this.detailContainer.addChild(new Text(theme.fg("muted", ` ${oneLine || "(no description)"}`), 1, 0));
|
|
101
|
+
this.detailContainer.addChild(new Text(theme.fg("muted", ` path: ${skill.filePath}`), 1, 0));
|
|
102
|
+
this.detailContainer.addChild(new Text(theme.fg("muted", ` source: ${skill.sourceInfo.source} · scope: ${skill.sourceInfo.scope}`), 1, 0));
|
|
103
|
+
}
|
|
104
|
+
handleInput(keyData) {
|
|
105
|
+
const kb = getKeybindings();
|
|
106
|
+
if (kb.matches(keyData, "tui.select.up")) {
|
|
107
|
+
if (this.filteredSkills.length === 0)
|
|
108
|
+
return;
|
|
109
|
+
this.selectedIndex = this.selectedIndex === 0 ? this.filteredSkills.length - 1 : this.selectedIndex - 1;
|
|
110
|
+
this.updateList();
|
|
111
|
+
this.updateDetail();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (kb.matches(keyData, "tui.select.down")) {
|
|
115
|
+
if (this.filteredSkills.length === 0)
|
|
116
|
+
return;
|
|
117
|
+
this.selectedIndex = this.selectedIndex === this.filteredSkills.length - 1 ? 0 : this.selectedIndex + 1;
|
|
118
|
+
this.updateList();
|
|
119
|
+
this.updateDetail();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (kb.matches(keyData, "tui.select.cancel")) {
|
|
123
|
+
this.onCancelCallback();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
this.searchInput.handleInput(keyData);
|
|
127
|
+
this.applyFilter(this.searchInput.getValue());
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=skills-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/skills-selector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Skills inventory selector with fuzzy search input + counter.\n * Read-only: never invokes or modifies a skill.\n */\n\nimport { Container, type Focusable, fuzzyFilter, getKeybindings, Input, Spacer, Text } from \"@earendil-works/omk-tui\";\nimport type { ResourceDiagnostic } from \"../../../core/resource-loader.ts\";\nimport type { Skill } from \"../../../core/skills.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint, rawKeyHint } from \"./keybinding-hints.ts\";\n\nexport interface SkillsSelectorInput {\n\tskills: ReadonlyArray<Skill>;\n\tdiagnostics: ReadonlyArray<ResourceDiagnostic>;\n\tenableSkillCommands: boolean;\n}\n\nexport class SkillsSelectorComponent extends Container implements Focusable {\n\tprivate allSkills: ReadonlyArray<Skill>;\n\tprivate filteredSkills: ReadonlyArray<Skill>;\n\tprivate selectedIndex = 0;\n\tprivate listContainer: Container;\n\tprivate detailContainer: Container;\n\tprivate counterText: Text;\n\tprivate searchInput: Input;\n\tprivate onCancelCallback: () => void;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.searchInput.focused = value;\n\t}\n\n\tconstructor(input: SkillsSelectorInput, onCancel: () => void) {\n\t\tsuper();\n\n\t\tthis.allSkills = input.skills;\n\t\tthis.filteredSkills = input.skills;\n\t\tthis.onCancelCallback = onCancel;\n\n\t\tthis.addChild(new DynamicBorder());\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.addChild(new Text(theme.fg(\"accent\", theme.bold(\"Skills\")), 1, 0));\n\t\tthis.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.fg(\n\t\t\t\t\t\"muted\",\n\t\t\t\t\t` ${this.allSkills.length} loaded · slash commands ${input.enableSkillCommands ? \"enabled\" : \"disabled\"}`,\n\t\t\t\t),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.addChild(new Spacer(1));\n\n\t\tif (!input.enableSkillCommands) {\n\t\t\tthis.addChild(\n\t\t\t\tnew Text(theme.fg(\"warning\", \" Skill slash commands are disabled. Toggle via /settings.\"), 1, 0),\n\t\t\t);\n\t\t\tthis.addChild(new Spacer(1));\n\t\t}\n\n\t\tfor (const diag of input.diagnostics.slice(0, 5)) {\n\t\t\tconst tone = diag.type === \"warning\" || diag.type === \"collision\" ? \"warning\" : \"error\";\n\t\t\tthis.addChild(new Text(theme.fg(tone, ` ${diag.type}: ${diag.message}`), 1, 0));\n\t\t}\n\t\tif (input.diagnostics.length > 0) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t}\n\n\t\tthis.counterText = new Text(this.getCounterText(), 1, 0);\n\t\tthis.addChild(this.counterText);\n\n\t\tthis.searchInput = new Input();\n\t\tthis.searchInput.onSubmit = () => this.updateDetail();\n\t\tthis.addChild(this.searchInput);\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.listContainer = new Container();\n\t\tthis.addChild(this.listContainer);\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.detailContainer = new Container();\n\t\tthis.addChild(this.detailContainer);\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.addChild(new Text(`${rawKeyHint(\"↑↓\", \"navigate\")} ${keyHint(\"tui.select.cancel\", \"close\")}`, 1, 0));\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder());\n\n\t\tthis.updateList();\n\t\tthis.updateDetail();\n\t}\n\n\tprivate getCounterText(): string {\n\t\treturn theme.fg(\"muted\", ` matched ${this.filteredSkills.length} / total ${this.allSkills.length}`);\n\t}\n\n\tprivate applyFilter(query: string): void {\n\t\tthis.filteredSkills = query\n\t\t\t? fuzzyFilter(this.allSkills as Skill[], query, (s) => `${s.name} ${s.description}`)\n\t\t\t: this.allSkills;\n\t\tthis.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredSkills.length - 1));\n\t\tthis.counterText.setText(this.getCounterText());\n\t\tthis.updateList();\n\t\tthis.updateDetail();\n\t}\n\n\tprivate updateList(): void {\n\t\tthis.listContainer.clear();\n\t\tif (this.filteredSkills.length === 0) {\n\t\t\tconst msg = this.allSkills.length === 0 ? \" No skills loaded.\" : \" No skills match the search.\";\n\t\t\tthis.listContainer.addChild(new Text(theme.fg(\"muted\", msg), 1, 0));\n\t\t\treturn;\n\t\t}\n\t\tfor (let i = 0; i < this.filteredSkills.length; i++) {\n\t\t\tconst skill = this.filteredSkills[i];\n\t\t\tconst isSelected = i === this.selectedIndex;\n\t\t\tconst name = isSelected ? theme.fg(\"accent\", `→ ${skill.name}`) : ` ${skill.name}`;\n\t\t\tconst scopeTag = theme.fg(\"muted\", ` [${skill.sourceInfo.scope}]`);\n\t\t\tconst tail = skill.disableModelInvocation ? theme.fg(\"dim\", \" · model-invocation off\") : \"\";\n\t\t\tthis.listContainer.addChild(new Text(`${name}${scopeTag}${tail}`, 1, 0));\n\t\t}\n\t}\n\n\tprivate updateDetail(): void {\n\t\tthis.detailContainer.clear();\n\t\tconst skill = this.filteredSkills[this.selectedIndex];\n\t\tif (!skill) return;\n\t\tconst desc = (skill.description || \"\").trim();\n\t\tconst oneLine = desc.length > 200 ? `${desc.slice(0, 197)}...` : desc;\n\t\tthis.detailContainer.addChild(new Text(theme.fg(\"muted\", ` ${oneLine || \"(no description)\"}`), 1, 0));\n\t\tthis.detailContainer.addChild(new Text(theme.fg(\"muted\", ` path: ${skill.filePath}`), 1, 0));\n\t\tthis.detailContainer.addChild(\n\t\t\tnew Text(theme.fg(\"muted\", ` source: ${skill.sourceInfo.source} · scope: ${skill.sourceInfo.scope}`), 1, 0),\n\t\t);\n\t}\n\n\thandleInput(keyData: string): void {\n\t\tconst kb = getKeybindings();\n\t\tif (kb.matches(keyData, \"tui.select.up\")) {\n\t\t\tif (this.filteredSkills.length === 0) return;\n\t\t\tthis.selectedIndex = this.selectedIndex === 0 ? this.filteredSkills.length - 1 : this.selectedIndex - 1;\n\t\t\tthis.updateList();\n\t\t\tthis.updateDetail();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(keyData, \"tui.select.down\")) {\n\t\t\tif (this.filteredSkills.length === 0) return;\n\t\t\tthis.selectedIndex = this.selectedIndex === this.filteredSkills.length - 1 ? 0 : this.selectedIndex + 1;\n\t\t\tthis.updateList();\n\t\t\tthis.updateDetail();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(keyData, \"tui.select.cancel\")) {\n\t\t\tthis.onCancelCallback();\n\t\t\treturn;\n\t\t}\n\t\tthis.searchInput.handleInput(keyData);\n\t\tthis.applyFilter(this.searchInput.getValue());\n\t}\n}\n"]}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type { ThinkingLevel } from "@earendil-works/omk-agent-core";
|
|
2
|
-
import { Container, SelectList } from "@earendil-works/omk-tui";
|
|
3
1
|
/**
|
|
4
|
-
*
|
|
2
|
+
* Backward-compatible re-export shim.
|
|
3
|
+
*
|
|
4
|
+
* The original positional-args ThinkingSelectorComponent in this module was
|
|
5
|
+
* dead code (never instantiated). The actual implementation now lives in
|
|
6
|
+
* `settings-selector.ts` and uses a config+callbacks API. We re-export it
|
|
7
|
+
* here so external SDK consumers that import from this path keep working.
|
|
5
8
|
*/
|
|
6
|
-
export
|
|
7
|
-
private selectList;
|
|
8
|
-
constructor(currentLevel: ThinkingLevel, availableLevels: ThinkingLevel[], onSelect: (level: ThinkingLevel) => void, onCancel: () => void);
|
|
9
|
-
getSelectList(): SelectList;
|
|
10
|
-
}
|
|
9
|
+
export { ThinkingSelectorComponent } from "./settings-selector.ts";
|
|
11
10
|
//# sourceMappingURL=thinking-selector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinking-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/thinking-selector.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"thinking-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/thinking-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC","sourcesContent":["/**\n * Backward-compatible re-export shim.\n *\n * The original positional-args ThinkingSelectorComponent in this module was\n * dead code (never instantiated). The actual implementation now lives in\n * `settings-selector.ts` and uses a config+callbacks API. We re-export it\n * here so external SDK consumers that import from this path keep working.\n */\nexport { ThinkingSelectorComponent } from \"./settings-selector.ts\";\n"]}
|
|
@@ -1,51 +1,10 @@
|
|
|
1
|
-
import { Container, SelectList } from "@earendil-works/omk-tui";
|
|
2
|
-
import { getSelectListTheme } from "../theme/theme.js";
|
|
3
|
-
import { DynamicBorder } from "./dynamic-border.js";
|
|
4
|
-
const THINKING_SELECT_LIST_LAYOUT = {
|
|
5
|
-
minPrimaryColumnWidth: 12,
|
|
6
|
-
maxPrimaryColumnWidth: 32,
|
|
7
|
-
};
|
|
8
|
-
const LEVEL_DESCRIPTIONS = {
|
|
9
|
-
off: "No reasoning",
|
|
10
|
-
minimal: "Very brief reasoning (~1k tokens)",
|
|
11
|
-
low: "Light reasoning (~2k tokens)",
|
|
12
|
-
medium: "Moderate reasoning (~8k tokens)",
|
|
13
|
-
high: "Deep reasoning (~16k tokens)",
|
|
14
|
-
xhigh: "Maximum reasoning (~32k tokens)",
|
|
15
|
-
};
|
|
16
1
|
/**
|
|
17
|
-
*
|
|
2
|
+
* Backward-compatible re-export shim.
|
|
3
|
+
*
|
|
4
|
+
* The original positional-args ThinkingSelectorComponent in this module was
|
|
5
|
+
* dead code (never instantiated). The actual implementation now lives in
|
|
6
|
+
* `settings-selector.ts` and uses a config+callbacks API. We re-export it
|
|
7
|
+
* here so external SDK consumers that import from this path keep working.
|
|
18
8
|
*/
|
|
19
|
-
export
|
|
20
|
-
selectList;
|
|
21
|
-
constructor(currentLevel, availableLevels, onSelect, onCancel) {
|
|
22
|
-
super();
|
|
23
|
-
const thinkingLevels = availableLevels.map((level) => ({
|
|
24
|
-
value: level,
|
|
25
|
-
label: level,
|
|
26
|
-
description: LEVEL_DESCRIPTIONS[level],
|
|
27
|
-
}));
|
|
28
|
-
// Add top border
|
|
29
|
-
this.addChild(new DynamicBorder());
|
|
30
|
-
// Create selector
|
|
31
|
-
this.selectList = new SelectList(thinkingLevels, thinkingLevels.length, getSelectListTheme(), THINKING_SELECT_LIST_LAYOUT);
|
|
32
|
-
// Preselect current level
|
|
33
|
-
const currentIndex = thinkingLevels.findIndex((item) => item.value === currentLevel);
|
|
34
|
-
if (currentIndex !== -1) {
|
|
35
|
-
this.selectList.setSelectedIndex(currentIndex);
|
|
36
|
-
}
|
|
37
|
-
this.selectList.onSelect = (item) => {
|
|
38
|
-
onSelect(item.value);
|
|
39
|
-
};
|
|
40
|
-
this.selectList.onCancel = () => {
|
|
41
|
-
onCancel();
|
|
42
|
-
};
|
|
43
|
-
this.addChild(this.selectList);
|
|
44
|
-
// Add bottom border
|
|
45
|
-
this.addChild(new DynamicBorder());
|
|
46
|
-
}
|
|
47
|
-
getSelectList() {
|
|
48
|
-
return this.selectList;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
9
|
+
export { ThinkingSelectorComponent } from "./settings-selector.js";
|
|
51
10
|
//# sourceMappingURL=thinking-selector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinking-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/thinking-selector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"thinking-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/thinking-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC","sourcesContent":["/**\n * Backward-compatible re-export shim.\n *\n * The original positional-args ThinkingSelectorComponent in this module was\n * dead code (never instantiated). The actual implementation now lives in\n * `settings-selector.ts` and uses a config+callbacks API. We re-export it\n * here so external SDK consumers that import from this path keep working.\n */\nexport { ThinkingSelectorComponent } from \"./settings-selector.ts\";\n"]}
|
|
@@ -144,6 +144,7 @@ export declare class InteractiveMode {
|
|
|
144
144
|
private findSourceInfoForPath;
|
|
145
145
|
private formatPathWithSource;
|
|
146
146
|
private formatDiagnostics;
|
|
147
|
+
private formatDiagnosticsSummary;
|
|
147
148
|
private showLoadedResources;
|
|
148
149
|
private bindCurrentSessionExtensions;
|
|
149
150
|
private applyRuntimeSettings;
|
|
@@ -322,11 +323,17 @@ export declare class InteractiveMode {
|
|
|
322
323
|
*/
|
|
323
324
|
private showSelector;
|
|
324
325
|
private showSettingsSelector;
|
|
326
|
+
private applySettingsThemeChange;
|
|
327
|
+
private handleThinkCommand;
|
|
328
|
+
private applyThinkingLevel;
|
|
325
329
|
private handleModelCommand;
|
|
326
330
|
private findExactModelMatch;
|
|
327
331
|
private getModelCandidates;
|
|
328
332
|
private updateAvailableProviderCount;
|
|
329
333
|
private maybeWarnAboutAnthropicSubscriptionAuth;
|
|
334
|
+
private showThinkingSelector;
|
|
335
|
+
private showModelThinkingTransaction;
|
|
336
|
+
private commitModelThinkingSelection;
|
|
330
337
|
private showModelSelector;
|
|
331
338
|
private showModelsSelector;
|
|
332
339
|
private showUserMessageSelector;
|
|
@@ -352,6 +359,8 @@ export declare class InteractiveMode {
|
|
|
352
359
|
private handleCopyCommand;
|
|
353
360
|
private handleNameCommand;
|
|
354
361
|
private handleSessionCommand;
|
|
362
|
+
private handleMcpCommand;
|
|
363
|
+
private handleSkillsCommand;
|
|
355
364
|
private handleChangelogCommand;
|
|
356
365
|
/**
|
|
357
366
|
* Get capitalized display string for an app keybinding action.
|