gnosys 5.4.3 → 5.6.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.
- package/README.md +52 -8
- package/dist/cli.js +246 -27
- package/dist/cli.js.map +1 -1
- package/dist/lib/audioExtract.d.ts +1 -1
- package/dist/lib/audioExtract.js +6 -6
- package/dist/lib/audioExtract.js.map +1 -1
- package/dist/lib/chat/choose.d.ts +75 -0
- package/dist/lib/chat/choose.d.ts.map +1 -0
- package/dist/lib/chat/choose.js +146 -0
- package/dist/lib/chat/choose.js.map +1 -0
- package/dist/lib/chat/commands.d.ts +96 -0
- package/dist/lib/chat/commands.d.ts.map +1 -0
- package/dist/lib/chat/commands.js +367 -0
- package/dist/lib/chat/commands.js.map +1 -0
- package/dist/lib/chat/focus.d.ts +70 -0
- package/dist/lib/chat/focus.d.ts.map +1 -0
- package/dist/lib/chat/focus.js +120 -0
- package/dist/lib/chat/focus.js.map +1 -0
- package/dist/lib/chat/index.d.ts +32 -0
- package/dist/lib/chat/index.d.ts.map +1 -0
- package/dist/lib/chat/index.js +151 -0
- package/dist/lib/chat/index.js.map +1 -0
- package/dist/lib/chat/intent.d.ts +100 -0
- package/dist/lib/chat/intent.d.ts.map +1 -0
- package/dist/lib/chat/intent.js +192 -0
- package/dist/lib/chat/intent.js.map +1 -0
- package/dist/lib/chat/llmTurn.d.ts +37 -0
- package/dist/lib/chat/llmTurn.d.ts.map +1 -0
- package/dist/lib/chat/llmTurn.js +61 -0
- package/dist/lib/chat/llmTurn.js.map +1 -0
- package/dist/lib/chat/recall.d.ts +58 -0
- package/dist/lib/chat/recall.d.ts.map +1 -0
- package/dist/lib/chat/recall.js +109 -0
- package/dist/lib/chat/recall.js.map +1 -0
- package/dist/lib/chat/render.d.ts +30 -0
- package/dist/lib/chat/render.d.ts.map +1 -0
- package/dist/lib/chat/render.js +737 -0
- package/dist/lib/chat/render.js.map +1 -0
- package/dist/lib/chat/session.d.ts +121 -0
- package/dist/lib/chat/session.d.ts.map +1 -0
- package/dist/lib/chat/session.js +148 -0
- package/dist/lib/chat/session.js.map +1 -0
- package/dist/lib/chat/types.d.ts +42 -0
- package/dist/lib/chat/types.d.ts.map +1 -0
- package/dist/lib/chat/types.js +6 -0
- package/dist/lib/chat/types.js.map +1 -0
- package/dist/lib/chat/write.d.ts +66 -0
- package/dist/lib/chat/write.d.ts.map +1 -0
- package/dist/lib/chat/write.js +203 -0
- package/dist/lib/chat/write.js.map +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +6 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/db.d.ts +3 -1
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +18 -2
- package/dist/lib/db.js.map +1 -1
- package/dist/lib/embeddings.d.ts +1 -1
- package/dist/lib/embeddings.d.ts.map +1 -1
- package/dist/lib/embeddings.js +9 -4
- package/dist/lib/embeddings.js.map +1 -1
- package/dist/lib/exportProject.d.ts +51 -0
- package/dist/lib/exportProject.d.ts.map +1 -0
- package/dist/lib/exportProject.js +72 -0
- package/dist/lib/exportProject.js.map +1 -0
- package/dist/lib/importProject.d.ts +35 -0
- package/dist/lib/importProject.d.ts.map +1 -0
- package/dist/lib/importProject.js +135 -0
- package/dist/lib/importProject.js.map +1 -0
- package/package.json +8 -2
|
@@ -32,7 +32,7 @@ export interface TranscriptionOptions {
|
|
|
32
32
|
* 1. If `options.provider` is specified, use that provider
|
|
33
33
|
* 2. Try Groq (if GNOSYS_GROQ_KEY or GROQ_API_KEY is set)
|
|
34
34
|
* 3. Try OpenAI (if GNOSYS_OPENAI_KEY or OPENAI_API_KEY is set)
|
|
35
|
-
* 4. Try local Whisper (if @
|
|
35
|
+
* 4. Try local Whisper (if @huggingface/transformers is installed)
|
|
36
36
|
* 5. Throw an error with setup instructions
|
|
37
37
|
*/
|
|
38
38
|
export declare function transcribeAudio(filePath: string, options?: TranscriptionOptions): Promise<TranscriptResult>;
|
package/dist/lib/audioExtract.js
CHANGED
|
@@ -71,13 +71,13 @@ async function transcribeWithOpenAI(audioBuffer, fileName, mimeType, apiKey, opt
|
|
|
71
71
|
async function transcribeWithLocal(filePath, options) {
|
|
72
72
|
let pipeline;
|
|
73
73
|
try {
|
|
74
|
-
// Dynamic import — @
|
|
75
|
-
const transformers = await import("@
|
|
74
|
+
// Dynamic import — @huggingface/transformers is an optional dependency
|
|
75
|
+
const transformers = await import("@huggingface/transformers");
|
|
76
76
|
pipeline = transformers.pipeline;
|
|
77
77
|
}
|
|
78
78
|
catch {
|
|
79
|
-
throw new Error("Local Whisper transcription requires @
|
|
80
|
-
'Install it with: npm install @
|
|
79
|
+
throw new Error("Local Whisper transcription requires @huggingface/transformers. " +
|
|
80
|
+
'Install it with: npm install @huggingface/transformers\n' +
|
|
81
81
|
"Or set a Groq/OpenAI API key for cloud transcription.");
|
|
82
82
|
}
|
|
83
83
|
const modelName = options?.model || "Xenova/whisper-small";
|
|
@@ -162,7 +162,7 @@ function resolveOpenAIKey(options) {
|
|
|
162
162
|
* 1. If `options.provider` is specified, use that provider
|
|
163
163
|
* 2. Try Groq (if GNOSYS_GROQ_KEY or GROQ_API_KEY is set)
|
|
164
164
|
* 3. Try OpenAI (if GNOSYS_OPENAI_KEY or OPENAI_API_KEY is set)
|
|
165
|
-
* 4. Try local Whisper (if @
|
|
165
|
+
* 4. Try local Whisper (if @huggingface/transformers is installed)
|
|
166
166
|
* 5. Throw an error with setup instructions
|
|
167
167
|
*/
|
|
168
168
|
export async function transcribeAudio(filePath, options) {
|
|
@@ -214,7 +214,7 @@ export async function transcribeAudio(filePath, options) {
|
|
|
214
214
|
throw new Error("No transcription provider available. Set up one of:\n" +
|
|
215
215
|
" 1. Groq API key: export GROQ_API_KEY=your-key (cheapest, $0.02/hr)\n" +
|
|
216
216
|
" 2. OpenAI API key: export OPENAI_API_KEY=your-key\n" +
|
|
217
|
-
" 3. Local Whisper: npm install @
|
|
217
|
+
" 3. Local Whisper: npm install @huggingface/transformers\n" +
|
|
218
218
|
"Or set multimodal.transcriptionProvider in gnosys.json.");
|
|
219
219
|
}
|
|
220
220
|
//# sourceMappingURL=audioExtract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioExtract.js","sourceRoot":"","sources":["../../src/lib/audioExtract.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"audioExtract.js","sourceRoot":"","sources":["../../src/lib/audioExtract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-choice protocol — gnosys-choose fenced YAML.
|
|
3
|
+
*
|
|
4
|
+
* The LLM is taught (via system prompt) to emit a fenced block when it wants
|
|
5
|
+
* the user to pick from a small set of options:
|
|
6
|
+
*
|
|
7
|
+
* ```gnosys-choose
|
|
8
|
+
* prompt: Which approach should we take?
|
|
9
|
+
* options:
|
|
10
|
+
* - id: a
|
|
11
|
+
* label: Refactor in place — keep the same module
|
|
12
|
+
* detail: Lower risk, but the existing API stays awkward
|
|
13
|
+
* - id: b
|
|
14
|
+
* label: Extract to a new module
|
|
15
|
+
* detail: Cleaner separation; one-time migration cost
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* The TUI parses the fence after the assistant turn completes, renders an
|
|
19
|
+
* arrow-key selectable list, and on selection injects a synthetic user turn
|
|
20
|
+
* "[picked: <id> — <label>]" before running the next LLM call.
|
|
21
|
+
*
|
|
22
|
+
* The protocol works in reverse too — TUI helpers can pose multiple-choice
|
|
23
|
+
* questions to the user using the same parser/renderer pieces.
|
|
24
|
+
*
|
|
25
|
+
* Failures are soft: a malformed fence renders as plain text in the
|
|
26
|
+
* conversation buffer. We log a `chat_choose_parse_error` style notice so
|
|
27
|
+
* agents can debug without blocking the chat.
|
|
28
|
+
*/
|
|
29
|
+
export interface ChooseOption {
|
|
30
|
+
id: string;
|
|
31
|
+
label: string;
|
|
32
|
+
detail?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface ChooseBlock {
|
|
35
|
+
prompt: string;
|
|
36
|
+
options: ChooseOption[];
|
|
37
|
+
}
|
|
38
|
+
/** System prompt addendum that teaches the LLM the fence syntax. */
|
|
39
|
+
export declare const CHOOSE_SYSTEM_PROMPT_ADDENDUM = "\nWhen you want the user to pick from a SHORT set of options (2\u20136), emit a fenced block:\n\n```gnosys-choose\nprompt: <one-line question>\noptions:\n - id: a\n label: <short>\n detail: <one-line context, optional>\n - id: b\n label: <short>\n```\n\nUse this only when a discrete choice will materially change what you do next. Don't use it for yes/no \u2014 just ask in prose. Don't use it to summarize options that the user has already chosen between.";
|
|
40
|
+
/**
|
|
41
|
+
* Find the first gnosys-choose fence in a text and parse it. Returns
|
|
42
|
+
* - { block, before, after } when a well-formed fence is present
|
|
43
|
+
* - { error } when a fence exists but failed to parse
|
|
44
|
+
* - null when no fence is present
|
|
45
|
+
*/
|
|
46
|
+
export type ExtractResult = {
|
|
47
|
+
kind: "ok";
|
|
48
|
+
block: ChooseBlock;
|
|
49
|
+
before: string;
|
|
50
|
+
after: string;
|
|
51
|
+
} | {
|
|
52
|
+
kind: "parse-error";
|
|
53
|
+
before: string;
|
|
54
|
+
rawFence: string;
|
|
55
|
+
after: string;
|
|
56
|
+
reason: string;
|
|
57
|
+
} | null;
|
|
58
|
+
export declare function extractChooseFence(text: string): ExtractResult;
|
|
59
|
+
/**
|
|
60
|
+
* Hand-rolled YAML parser for the minimal gnosys-choose schema.
|
|
61
|
+
* No external dependency. Tolerates Windows line endings and trailing whitespace.
|
|
62
|
+
*
|
|
63
|
+
* Accepts:
|
|
64
|
+
* prompt: <text> # one-line scalar
|
|
65
|
+
* options: # list literal follows
|
|
66
|
+
* - id: <token>
|
|
67
|
+
* label: <text>
|
|
68
|
+
* detail: <text> # optional
|
|
69
|
+
* - id: <token>
|
|
70
|
+
* label: <text>
|
|
71
|
+
*/
|
|
72
|
+
export declare function parseChooseYaml(yaml: string): ChooseBlock;
|
|
73
|
+
/** Format a user's selection as a synthetic user turn. */
|
|
74
|
+
export declare function formatSelection(option: ChooseOption): string;
|
|
75
|
+
//# sourceMappingURL=choose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choose.d.ts","sourceRoot":"","sources":["../../../src/lib/chat/choose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,oEAAoE;AACpE,eAAO,MAAM,6BAA6B,ydAa6J,CAAC;AAIxM;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxF,IAAI,CAAC;AAET,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CA+B9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAsDzD;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAG5D"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-choice protocol — gnosys-choose fenced YAML.
|
|
3
|
+
*
|
|
4
|
+
* The LLM is taught (via system prompt) to emit a fenced block when it wants
|
|
5
|
+
* the user to pick from a small set of options:
|
|
6
|
+
*
|
|
7
|
+
* ```gnosys-choose
|
|
8
|
+
* prompt: Which approach should we take?
|
|
9
|
+
* options:
|
|
10
|
+
* - id: a
|
|
11
|
+
* label: Refactor in place — keep the same module
|
|
12
|
+
* detail: Lower risk, but the existing API stays awkward
|
|
13
|
+
* - id: b
|
|
14
|
+
* label: Extract to a new module
|
|
15
|
+
* detail: Cleaner separation; one-time migration cost
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* The TUI parses the fence after the assistant turn completes, renders an
|
|
19
|
+
* arrow-key selectable list, and on selection injects a synthetic user turn
|
|
20
|
+
* "[picked: <id> — <label>]" before running the next LLM call.
|
|
21
|
+
*
|
|
22
|
+
* The protocol works in reverse too — TUI helpers can pose multiple-choice
|
|
23
|
+
* questions to the user using the same parser/renderer pieces.
|
|
24
|
+
*
|
|
25
|
+
* Failures are soft: a malformed fence renders as plain text in the
|
|
26
|
+
* conversation buffer. We log a `chat_choose_parse_error` style notice so
|
|
27
|
+
* agents can debug without blocking the chat.
|
|
28
|
+
*/
|
|
29
|
+
/** System prompt addendum that teaches the LLM the fence syntax. */
|
|
30
|
+
export const CHOOSE_SYSTEM_PROMPT_ADDENDUM = `
|
|
31
|
+
When you want the user to pick from a SHORT set of options (2–6), emit a fenced block:
|
|
32
|
+
|
|
33
|
+
\`\`\`gnosys-choose
|
|
34
|
+
prompt: <one-line question>
|
|
35
|
+
options:
|
|
36
|
+
- id: a
|
|
37
|
+
label: <short>
|
|
38
|
+
detail: <one-line context, optional>
|
|
39
|
+
- id: b
|
|
40
|
+
label: <short>
|
|
41
|
+
\`\`\`
|
|
42
|
+
|
|
43
|
+
Use this only when a discrete choice will materially change what you do next. Don't use it for yes/no — just ask in prose. Don't use it to summarize options that the user has already chosen between.`;
|
|
44
|
+
const FENCE_OPEN = /```\s*gnosys-choose\s*\n([\s\S]*?)```/;
|
|
45
|
+
export function extractChooseFence(text) {
|
|
46
|
+
const match = text.match(FENCE_OPEN);
|
|
47
|
+
if (!match)
|
|
48
|
+
return null;
|
|
49
|
+
const fenceContent = match[1].trim();
|
|
50
|
+
const start = match.index ?? 0;
|
|
51
|
+
const end = start + match[0].length;
|
|
52
|
+
const before = text.slice(0, start).trimEnd();
|
|
53
|
+
const after = text.slice(end).trimStart();
|
|
54
|
+
try {
|
|
55
|
+
const block = parseChooseYaml(fenceContent);
|
|
56
|
+
if (!block.prompt || block.options.length === 0) {
|
|
57
|
+
return {
|
|
58
|
+
kind: "parse-error",
|
|
59
|
+
before,
|
|
60
|
+
rawFence: match[0],
|
|
61
|
+
after,
|
|
62
|
+
reason: "missing prompt or empty options",
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return { kind: "ok", block, before, after };
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
return {
|
|
69
|
+
kind: "parse-error",
|
|
70
|
+
before,
|
|
71
|
+
rawFence: match[0],
|
|
72
|
+
after,
|
|
73
|
+
reason: err instanceof Error ? err.message : String(err),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Hand-rolled YAML parser for the minimal gnosys-choose schema.
|
|
79
|
+
* No external dependency. Tolerates Windows line endings and trailing whitespace.
|
|
80
|
+
*
|
|
81
|
+
* Accepts:
|
|
82
|
+
* prompt: <text> # one-line scalar
|
|
83
|
+
* options: # list literal follows
|
|
84
|
+
* - id: <token>
|
|
85
|
+
* label: <text>
|
|
86
|
+
* detail: <text> # optional
|
|
87
|
+
* - id: <token>
|
|
88
|
+
* label: <text>
|
|
89
|
+
*/
|
|
90
|
+
export function parseChooseYaml(yaml) {
|
|
91
|
+
const lines = yaml.replace(/\r\n/g, "\n").split("\n");
|
|
92
|
+
let prompt = "";
|
|
93
|
+
const options = [];
|
|
94
|
+
let inOptions = false;
|
|
95
|
+
let current = null;
|
|
96
|
+
for (let i = 0; i < lines.length; i++) {
|
|
97
|
+
const line = lines[i];
|
|
98
|
+
if (!line.trim())
|
|
99
|
+
continue;
|
|
100
|
+
// Top-level "prompt:" line
|
|
101
|
+
if (!inOptions) {
|
|
102
|
+
const m = line.match(/^prompt:\s*(.+?)\s*$/);
|
|
103
|
+
if (m) {
|
|
104
|
+
prompt = m[1];
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (/^options:\s*$/.test(line)) {
|
|
108
|
+
inOptions = true;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// Unknown top-level field — skip (forward-compat)
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// Inside options:
|
|
115
|
+
const itemStart = line.match(/^\s*-\s*id:\s*(.+?)\s*$/);
|
|
116
|
+
if (itemStart) {
|
|
117
|
+
// Push previous item if any
|
|
118
|
+
if (current && current.label)
|
|
119
|
+
options.push(current);
|
|
120
|
+
current = { id: itemStart[1], label: "" };
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (!current)
|
|
124
|
+
continue;
|
|
125
|
+
const labelMatch = line.match(/^\s*label:\s*(.+?)\s*$/);
|
|
126
|
+
if (labelMatch) {
|
|
127
|
+
current.label = labelMatch[1];
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const detailMatch = line.match(/^\s*detail:\s*(.+?)\s*$/);
|
|
131
|
+
if (detailMatch) {
|
|
132
|
+
current.detail = detailMatch[1];
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Flush the last option
|
|
137
|
+
if (current && current.label)
|
|
138
|
+
options.push(current);
|
|
139
|
+
return { prompt, options };
|
|
140
|
+
}
|
|
141
|
+
/** Format a user's selection as a synthetic user turn. */
|
|
142
|
+
export function formatSelection(option) {
|
|
143
|
+
const detail = option.detail ? ` (${option.detail})` : "";
|
|
144
|
+
return `[picked: ${option.id} — ${option.label}${detail}]`;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=choose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choose.js","sourceRoot":"","sources":["../../../src/lib/chat/choose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slash command dispatcher for the chat TUI.
|
|
3
|
+
*
|
|
4
|
+
* Each command receives the chat state and returns a result describing what
|
|
5
|
+
* happened. The TUI translates the result into UI updates (system messages,
|
|
6
|
+
* exit, conversation buffer changes, etc.). Commands run synchronously when
|
|
7
|
+
* possible; async ones return a Promise.
|
|
8
|
+
*
|
|
9
|
+
* Phase 2 commands: /help, /clear, /history, /read, /list, /tags, /dashboard,
|
|
10
|
+
* /quit, /provider. Phases 3–7 add /pin, /scope, /recall, /threshold,
|
|
11
|
+
* /reinforce, /remember, /save-turn, /attach, /focus, /branch, /resume-focus,
|
|
12
|
+
* /dream-here, /search-chats, /export.
|
|
13
|
+
*/
|
|
14
|
+
import { Turn } from "./types.js";
|
|
15
|
+
export interface CommandContext {
|
|
16
|
+
/** Current session ID. */
|
|
17
|
+
sessionId: string;
|
|
18
|
+
/** Conversation buffer as the LLM sees it. Commands may read or mutate (via the result's nextBuffer). */
|
|
19
|
+
buffer: Turn[];
|
|
20
|
+
/** Current provider name. */
|
|
21
|
+
provider: string;
|
|
22
|
+
/** Current model. */
|
|
23
|
+
model: string;
|
|
24
|
+
}
|
|
25
|
+
export type CommandResult = {
|
|
26
|
+
kind: "ok";
|
|
27
|
+
message?: string;
|
|
28
|
+
} | {
|
|
29
|
+
kind: "clear-buffer";
|
|
30
|
+
} | {
|
|
31
|
+
kind: "exit";
|
|
32
|
+
} | {
|
|
33
|
+
kind: "switch-provider";
|
|
34
|
+
provider: string;
|
|
35
|
+
model?: string;
|
|
36
|
+
} | {
|
|
37
|
+
kind: "show";
|
|
38
|
+
lines: string[];
|
|
39
|
+
} | {
|
|
40
|
+
kind: "pin";
|
|
41
|
+
memoryId: string;
|
|
42
|
+
} | {
|
|
43
|
+
kind: "unpin";
|
|
44
|
+
memoryId: string;
|
|
45
|
+
} | {
|
|
46
|
+
kind: "scope";
|
|
47
|
+
scope: "project" | "user" | "global" | "federated";
|
|
48
|
+
} | {
|
|
49
|
+
kind: "threshold";
|
|
50
|
+
value: number;
|
|
51
|
+
} | {
|
|
52
|
+
kind: "preview-recall";
|
|
53
|
+
query: string;
|
|
54
|
+
} | {
|
|
55
|
+
kind: "reinforce";
|
|
56
|
+
memoryId: string;
|
|
57
|
+
} | {
|
|
58
|
+
kind: "remember";
|
|
59
|
+
text: string;
|
|
60
|
+
} | {
|
|
61
|
+
kind: "save-turn";
|
|
62
|
+
} | {
|
|
63
|
+
kind: "attach";
|
|
64
|
+
filePath: string;
|
|
65
|
+
} | {
|
|
66
|
+
kind: "focus";
|
|
67
|
+
topic: string;
|
|
68
|
+
} | {
|
|
69
|
+
kind: "branch";
|
|
70
|
+
} | {
|
|
71
|
+
kind: "resume-focus";
|
|
72
|
+
topic?: string;
|
|
73
|
+
} | {
|
|
74
|
+
kind: "export-session";
|
|
75
|
+
filePath: string;
|
|
76
|
+
} | {
|
|
77
|
+
kind: "search-chats";
|
|
78
|
+
query: string;
|
|
79
|
+
} | {
|
|
80
|
+
kind: "dream-here";
|
|
81
|
+
} | {
|
|
82
|
+
kind: "error";
|
|
83
|
+
message: string;
|
|
84
|
+
};
|
|
85
|
+
export interface CommandSpec {
|
|
86
|
+
name: string;
|
|
87
|
+
aliases?: string[];
|
|
88
|
+
summary: string;
|
|
89
|
+
usage?: string;
|
|
90
|
+
handler: (ctx: CommandContext, args: string[]) => CommandResult | Promise<CommandResult>;
|
|
91
|
+
}
|
|
92
|
+
export declare function listCommands(): CommandSpec[];
|
|
93
|
+
export declare function findCommand(name: string): CommandSpec | undefined;
|
|
94
|
+
/** Parse a raw input line and dispatch if it's a slash command. Returns null if it's not a command. */
|
|
95
|
+
export declare function dispatchCommand(raw: string, ctx: CommandContext): Promise<CommandResult | null>;
|
|
96
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/lib/chat/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,MAAM,EAAE,IAAI,EAAE,CAAC;IACf,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC1F;AA0VD,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAE5C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAOjE;AAED,uGAAuG;AACvG,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAa/B"}
|