anti-trace 0.1.4 → 0.1.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/LICENSE +0 -1
- package/README.en.md +29 -1
- package/README.md +29 -1
- package/dist/agent/agent.d.ts +1 -1
- package/dist/agent/agent.js +2 -2
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/loop.js +9 -0
- package/dist/agent/loop.js.map +1 -1
- package/dist/cli/commands/command-registry.d.ts +4 -0
- package/dist/cli/commands/command-registry.js +1 -0
- package/dist/cli/commands/command-registry.js.map +1 -1
- package/dist/cli/locale.js +7 -0
- package/dist/cli/locale.js.map +1 -1
- package/dist/cli/permissions/permission-policy.d.ts +8 -1
- package/dist/cli/permissions/permission-policy.js +12 -4
- package/dist/cli/permissions/permission-policy.js.map +1 -1
- package/dist/cli/repl/repl-controller.d.ts +4 -2
- package/dist/cli/repl/repl-controller.js +60 -5
- package/dist/cli/repl/repl-controller.js.map +1 -1
- package/dist/harness/harness.d.ts +13 -0
- package/dist/harness/harness.js +80 -11
- package/dist/harness/harness.js.map +1 -1
- package/dist/harness/prompt.d.ts +2 -0
- package/dist/harness/prompt.js +11 -1
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/session.d.ts +2 -1
- package/dist/harness/session.js +5 -2
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/skills/loader.d.ts +9 -0
- package/dist/harness/skills/loader.js +144 -0
- package/dist/harness/skills/loader.js.map +1 -0
- package/dist/harness/skills/registry.d.ts +11 -0
- package/dist/harness/skills/registry.js +15 -0
- package/dist/harness/skills/registry.js.map +1 -0
- package/dist/harness/skills/runtime.d.ts +20 -0
- package/dist/harness/skills/runtime.js +139 -0
- package/dist/harness/skills/runtime.js.map +1 -0
- package/dist/harness/skills/types.d.ts +25 -0
- package/dist/harness/skills/types.js +2 -0
- package/dist/harness/skills/types.js.map +1 -0
- package/dist/harness/tools/skill.d.ts +9 -0
- package/dist/harness/tools/skill.js +16 -0
- package/dist/harness/tools/skill.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/app-paths.d.ts +1 -0
- package/dist/storage/app-paths.js +1 -1
- package/dist/storage/app-paths.js.map +1 -1
- package/dist/tui/commands/CommandDialog.js +3 -3
- package/dist/tui/commands/CommandDialog.js.map +1 -1
- package/dist/tui/commands/command-dialog-controller.d.ts +12 -0
- package/dist/tui/commands/command-dialog-controller.js +22 -4
- package/dist/tui/commands/command-dialog-controller.js.map +1 -1
- package/dist/tui/messages/TranscriptView.js +3 -0
- package/dist/tui/messages/TranscriptView.js.map +1 -1
- package/dist/tui/tools/SkillToolView.d.ts +6 -0
- package/dist/tui/tools/SkillToolView.js +11 -0
- package/dist/tui/tools/SkillToolView.js.map +1 -0
- package/dist/tui/transcript.js +1 -1
- package/dist/tui/transcript.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/package.json +4 -2
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { SkillRegistry } from "./registry.js";
|
|
3
|
+
export function splitSkillArguments(input) {
|
|
4
|
+
const result = [];
|
|
5
|
+
let current = "", quote = "", started = false;
|
|
6
|
+
for (let i = 0; i < input.length; i++) {
|
|
7
|
+
const char = input[i];
|
|
8
|
+
if (char === "\\" && (input[i + 1] === quote || input[i + 1] === "\\") && quote === '"') {
|
|
9
|
+
current += input[++i];
|
|
10
|
+
started = true;
|
|
11
|
+
}
|
|
12
|
+
else if (quote) {
|
|
13
|
+
if (char === quote)
|
|
14
|
+
quote = "";
|
|
15
|
+
else
|
|
16
|
+
current += char;
|
|
17
|
+
}
|
|
18
|
+
else if ((char === '"' || char === "'") && !started) {
|
|
19
|
+
quote = char;
|
|
20
|
+
started = true;
|
|
21
|
+
}
|
|
22
|
+
else if (/\s/u.test(char)) {
|
|
23
|
+
if (started) {
|
|
24
|
+
result.push(current);
|
|
25
|
+
current = "";
|
|
26
|
+
started = false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
current += char;
|
|
31
|
+
started = true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (quote)
|
|
35
|
+
throw new Error("Skill arguments contain an unclosed quote");
|
|
36
|
+
if (started)
|
|
37
|
+
result.push(current);
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
/** Definitions, model disclosure and per-session invocation snapshots have separate lifetimes. */
|
|
41
|
+
export class SkillRuntime {
|
|
42
|
+
registry;
|
|
43
|
+
invoked = new Map();
|
|
44
|
+
grants = new Set();
|
|
45
|
+
constructor(registry) {
|
|
46
|
+
this.registry = registry;
|
|
47
|
+
}
|
|
48
|
+
beginTurn() { this.grants.clear(); }
|
|
49
|
+
reset() { this.invoked.clear(); this.grants.clear(); }
|
|
50
|
+
getAllowedTools() { return [...this.grants]; }
|
|
51
|
+
getPermissionTools(name) { return this.registry.find(name)?.allowedTools; }
|
|
52
|
+
prepare(name, args, invoker, sessionId, availableTools) {
|
|
53
|
+
const skill = this.registry.find(name);
|
|
54
|
+
if (!skill)
|
|
55
|
+
throw new Error(`Unknown skill: ${name}`);
|
|
56
|
+
if (invoker === "model" && skill.disableModelInvocation)
|
|
57
|
+
throw new Error(`Skill ${name} does not allow model invocation`);
|
|
58
|
+
if (invoker === "user" && !skill.userInvocable)
|
|
59
|
+
throw new Error(`Skill ${name} can only be invoked by the model`);
|
|
60
|
+
for (const tool of skill.allowedTools)
|
|
61
|
+
if (!availableTools.includes(tool))
|
|
62
|
+
throw new Error(`Skill ${name} requires unavailable tool: ${tool}`);
|
|
63
|
+
let positional;
|
|
64
|
+
const positions = () => positional ??= splitSkillArguments(args);
|
|
65
|
+
let consumed = false;
|
|
66
|
+
const names = new Set(skill.argumentNames);
|
|
67
|
+
const body = skill.body.replace(/\\?\$(?:\{(CLAUDE_SKILL_DIR|CLAUDE_SESSION_ID)\}|ARGUMENTS(?:\[(\d+)\])?|(\d+)|([a-zA-Z_][\w-]*))/gu, (token, variable, bracketIndex, index, named) => {
|
|
68
|
+
if (token.startsWith("\\"))
|
|
69
|
+
return token.slice(1);
|
|
70
|
+
if (variable)
|
|
71
|
+
return variable === "CLAUDE_SKILL_DIR" ? skill.directory.replace(/\\/g, "/") : sessionId;
|
|
72
|
+
if (named) {
|
|
73
|
+
if (!names.has(named))
|
|
74
|
+
return token;
|
|
75
|
+
consumed = true;
|
|
76
|
+
return positions()[skill.argumentNames.indexOf(named)] ?? "";
|
|
77
|
+
}
|
|
78
|
+
if (bracketIndex !== undefined || index !== undefined) {
|
|
79
|
+
const value = positions()[Number(bracketIndex ?? index)];
|
|
80
|
+
if (value === undefined)
|
|
81
|
+
return token;
|
|
82
|
+
consumed = true;
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
85
|
+
consumed = true;
|
|
86
|
+
return args;
|
|
87
|
+
});
|
|
88
|
+
const content = `Skill: ${skill.name}\nBase directory for this skill: ${skill.directory}\nResolve relative resource paths against this directory.\n\n${body}${args && !consumed ? `\n\nARGUMENTS: ${args}` : ""}`;
|
|
89
|
+
return { role: "user", isMeta: true, timestamp: Date.now(), content: [{ type: "text", text: content }],
|
|
90
|
+
metadata: { kind: "skill", name: skill.name, path: skill.path, source: skill.source, args, allowedTools: [...skill.allowedTools] } };
|
|
91
|
+
}
|
|
92
|
+
/** Only committed instruction messages grant tools; restored history never re-grants permissions. */
|
|
93
|
+
accept(message, grant = true) {
|
|
94
|
+
if (message.role !== "user" || !message.isMeta || message.metadata?.kind !== "skill" || typeof message.metadata.name !== "string")
|
|
95
|
+
return;
|
|
96
|
+
this.invoked.set(message.metadata.name, structuredClone(message));
|
|
97
|
+
if (grant && Array.isArray(message.metadata.allowedTools))
|
|
98
|
+
for (const tool of message.metadata.allowedTools)
|
|
99
|
+
if (typeof tool === "string")
|
|
100
|
+
this.grants.add(tool);
|
|
101
|
+
}
|
|
102
|
+
restore(messages) { this.reset(); for (const message of messages)
|
|
103
|
+
this.accept(message, false); }
|
|
104
|
+
catalog(messages, contextWindow) {
|
|
105
|
+
const skills = this.registry.modelSkills();
|
|
106
|
+
const entries = skills.map(skill => ({ name: skill.name, description: skill.description.slice(0, 250) }));
|
|
107
|
+
const version = createHash("sha256").update(JSON.stringify(entries)).digest("hex");
|
|
108
|
+
const previous = [...messages].reverse().find(message => message.role === "user" && message.isMeta && message.metadata?.kind === "skill_catalog");
|
|
109
|
+
if (previous?.role === "user" && previous.metadata?.version === version)
|
|
110
|
+
return;
|
|
111
|
+
if (!entries.length && !previous)
|
|
112
|
+
return;
|
|
113
|
+
const budget = Math.max(500, Math.floor(contextWindow * 0.04));
|
|
114
|
+
const nameCost = entries.reduce((total, entry) => total + entry.name.length + 4, 0);
|
|
115
|
+
const descriptionLimit = Math.max(0, Math.min(250, Math.floor((budget - nameCost) / Math.max(1, entries.length))));
|
|
116
|
+
const listing = entries.map(entry => `- ${entry.name}${descriptionLimit ? `: ${entry.description.slice(0, descriptionLimit)}` : ""}`).join("\n");
|
|
117
|
+
return { role: "user", isMeta: true, timestamp: Date.now(), metadata: { kind: "skill_catalog", version },
|
|
118
|
+
content: [{ type: "text", text: `Available skills for the skill tool (this list replaces earlier skill catalogs):\n${listing || "(none)"}\nLoad a matching skill before doing its task. Only the selected skill's instructions are loaded on invocation.` }] };
|
|
119
|
+
}
|
|
120
|
+
retainedMessages(kept, tokenBudget) {
|
|
121
|
+
const present = new Set(kept.filter(message => message.role === "user" && message.metadata?.kind === "skill")
|
|
122
|
+
.map(message => message.role === "user" ? `${message.metadata?.name}:${message.timestamp}` : ""));
|
|
123
|
+
const result = [];
|
|
124
|
+
let remaining = Math.max(0, Math.floor(tokenBudget * 4));
|
|
125
|
+
for (const message of [...this.invoked.values()].sort((a, b) => b.timestamp - a.timestamp)) {
|
|
126
|
+
if (present.has(`${message.metadata?.name}:${message.timestamp}`))
|
|
127
|
+
continue;
|
|
128
|
+
if (remaining < 200)
|
|
129
|
+
break;
|
|
130
|
+
const original = message.content.filter(block => block.type === "text").map(block => block.text).join("\n");
|
|
131
|
+
const limit = Math.min(20_000, remaining);
|
|
132
|
+
const text = original.length <= limit ? original : `${original.slice(0, limit - 65)}\n[Skill instructions truncated to fit the context budget.]`;
|
|
133
|
+
result.push({ ...structuredClone(message), content: [{ type: "text", text }] });
|
|
134
|
+
remaining -= text.length;
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/harness/skills/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface SkillDefinition {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
path: string;
|
|
5
|
+
directory: string;
|
|
6
|
+
source: "project" | "user";
|
|
7
|
+
body: string;
|
|
8
|
+
argumentHint?: string;
|
|
9
|
+
argumentNames: string[];
|
|
10
|
+
userInvocable: boolean;
|
|
11
|
+
disableModelInvocation: boolean;
|
|
12
|
+
allowedTools: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface SkillDiagnostic {
|
|
15
|
+
path: string;
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SkillSnapshot {
|
|
19
|
+
skills: readonly SkillDefinition[];
|
|
20
|
+
diagnostics: readonly SkillDiagnostic[];
|
|
21
|
+
}
|
|
22
|
+
export interface SkillDirectory {
|
|
23
|
+
path: string;
|
|
24
|
+
source: SkillDefinition["source"];
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/harness/skills/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
import type { AgentTool } from "../../types.ts";
|
|
3
|
+
import type { SkillRuntime } from "../skills/runtime.ts";
|
|
4
|
+
declare const skillSchema: Type.TObject<{
|
|
5
|
+
skill: Type.TString;
|
|
6
|
+
args: Type.TOptional<Type.TString>;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function createSkillTool(runtime: SkillRuntime, sessionId: () => string, availableTools: () => string[]): AgentTool<typeof skillSchema>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
const skillSchema = Type.Object({ skill: Type.String({ description: "Name from the available skills catalog" }),
|
|
3
|
+
args: Type.Optional(Type.String({ description: "Arguments for the selected skill" })) });
|
|
4
|
+
export function createSkillTool(runtime, sessionId, availableTools) {
|
|
5
|
+
return { name: "skill", label: "skill", parameters: skillSchema,
|
|
6
|
+
description: "Load the full instructions of one named skill into this conversation. Consult the available skills catalog and invoke a matching skill before performing its task. Then follow its instructions using the existing tools. This tool does not list or execute all skills.",
|
|
7
|
+
async execute(_id, { skill, args = "" }, signal) {
|
|
8
|
+
signal?.throwIfAborted();
|
|
9
|
+
const message = runtime.prepare(skill, args, "model", sessionId(), availableTools());
|
|
10
|
+
signal?.throwIfAborted();
|
|
11
|
+
return { content: [{ type: "text", text: `Loaded skill: ${skill}` }],
|
|
12
|
+
details: { skill, args, path: message.metadata?.path, allowedTools: message.metadata?.allowedTools }, newMessages: [message] };
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/harness/tools/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAI/B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC;IAC9G,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAE1F,MAAM,UAAU,eAAe,CAAC,OAAqB,EAAE,SAAuB,EAAE,cAA8B;IAC7G,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW;QAC9D,WAAW,EAAE,0QAA0Q;QACvR,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM;YAC9C,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;YACrF,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,KAAK,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACjI,CAAC;KACD,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -17,5 +17,9 @@ export { detectShellEnvironment, type ShellEnvironment, type PowerShellConfig }
|
|
|
17
17
|
export { createEditTool } from "./harness/tools/edit.ts";
|
|
18
18
|
export { createReadTool } from "./harness/tools/read.ts";
|
|
19
19
|
export { createWriteTool } from "./harness/tools/write.ts";
|
|
20
|
+
export { createSkillTool } from "./harness/tools/skill.ts";
|
|
21
|
+
export { SkillRuntime } from "./harness/skills/runtime.ts";
|
|
22
|
+
export { SkillRegistry } from "./harness/skills/registry.ts";
|
|
23
|
+
export type { SkillDefinition, SkillSnapshot, SkillDiagnostic } from "./harness/skills/types.ts";
|
|
20
24
|
export { buildSystemPrompt, type BuildSystemPromptOptions } from "./harness/prompt.ts";
|
|
21
25
|
export type * from "./types.ts";
|
package/dist/index.js
CHANGED
|
@@ -16,5 +16,8 @@ export { detectShellEnvironment } from "./harness/shell-environment.js";
|
|
|
16
16
|
export { createEditTool } from "./harness/tools/edit.js";
|
|
17
17
|
export { createReadTool } from "./harness/tools/read.js";
|
|
18
18
|
export { createWriteTool } from "./harness/tools/write.js";
|
|
19
|
+
export { createSkillTool } from "./harness/tools/skill.js";
|
|
20
|
+
export { SkillRuntime } from "./harness/skills/runtime.js";
|
|
21
|
+
export { SkillRegistry } from "./harness/skills/registry.js";
|
|
19
22
|
export { buildSystemPrompt } from "./harness/prompt.js";
|
|
20
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAsC,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAkD,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAqD,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAgD,MAAM,gCAAgC,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAiC,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAsC,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAkD,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAqD,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAgD,MAAM,gCAAgC,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAiC,MAAM,qBAAqB,CAAC"}
|
|
@@ -31,7 +31,7 @@ export function getAppPaths(options) {
|
|
|
31
31
|
const projectRoot = join(profileRoot, "projects", projectId);
|
|
32
32
|
return {
|
|
33
33
|
appRoot, profileId, profileRoot, cwd, projectId, projectRoot,
|
|
34
|
-
configsDir: join(profileRoot, "configs"), preferencesFile: join(appRoot, "preferences.json"),
|
|
34
|
+
configsDir: join(profileRoot, "configs"), userSkillsDir: join(appRoot, "skills"), preferencesFile: join(appRoot, "preferences.json"),
|
|
35
35
|
defaultSelectionFile: join(profileRoot, "default-model.json"),
|
|
36
36
|
projectInfoFile: join(projectRoot, "project.json"), projectSelectionFile: join(projectRoot, "last-model.json"),
|
|
37
37
|
sessionsDir: join(projectRoot, "sessions"), toolResultsDir: join(projectRoot, "tool-results"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-paths.js","sourceRoot":"","sources":["../../src/storage/app-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"app-paths.js","sourceRoot":"","sources":["../../src/storage/app-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,12 +10,12 @@ export function CommandDialog({ controller, columns, rows }) {
|
|
|
10
10
|
if (!state)
|
|
11
11
|
return null;
|
|
12
12
|
const width = Math.max(1, columns - 4), count = Math.max(1, rows - (state.error ? 10 : 8));
|
|
13
|
-
const choices = state.kind === "picker" ? state.choices : state.kind === "field" ? (state.field.options ?? []).map(id => ({ id, label: id, current: id === state.field.value }))
|
|
13
|
+
const choices = state.kind === "picker" ? state.choices : state.kind === "input" ? [] : state.kind === "field" ? (state.field.options ?? []).map(id => ({ id, label: id, current: id === state.field.value }))
|
|
14
14
|
: [...state.fields.map(field => ({ id: field.key, label: field.label, description: field.secret ? field.value ? "••••••••" : t(field.placeholder ?? "未填写") : field.value ? field.options ? t(field.value) : field.value : t(field.placeholder ?? "未填写"), descriptionLiteral: true })), { id: ":save", label: "保存并使用此配置" }];
|
|
15
15
|
const start = Math.max(0, Math.min(state.selected - Math.floor(count / 2), choices.length - count));
|
|
16
16
|
const horizontal = state.kind === "picker" && state.horizontal && columns >= 54;
|
|
17
|
-
return _jsxs(ThemedBox, { flexDirection: "column", borderStyle: "round", color: "accent", width: columns, paddingX: 1, flexShrink: 0, children: [_jsx(ThemedText, { color: "brand", bold: true, wrap: "truncate-end", children: t(state.title) }), state.description ? _jsx(ThemedText, { color: "muted", wrap: "truncate-end", children: truncateText(t(state.description), width) }) : null, _jsxs(Box, { flexDirection: "column", marginY: 1, children: [state.kind === "field" && !state.field.options ? _jsx(BaseTextInput, { controller: controller.editor, mask: state.field.secret, maxRows: 1 })
|
|
17
|
+
return _jsxs(ThemedBox, { flexDirection: "column", borderStyle: "round", color: "accent", width: columns, paddingX: 1, flexShrink: 0, children: [_jsx(ThemedText, { color: "brand", bold: true, wrap: "truncate-end", children: t(state.title) }), state.description ? _jsx(ThemedText, { color: "muted", wrap: "truncate-end", children: truncateText(t(state.description), width) }) : null, _jsxs(Box, { flexDirection: "column", marginY: 1, children: [(state.kind === "input" || state.kind === "field") && !state.field.options ? _jsx(BaseTextInput, { controller: controller.editor, mask: state.field.secret, maxRows: 1 })
|
|
18
18
|
: horizontal ? _jsx(Box, { gap: 2, children: choices.map((item, i) => _jsxs(ThemedText, { color: i === state.selected ? "accent" : "muted", bold: i === state.selected, children: [i === state.selected ? "❯ " : " ", item.literal ? item.label : t(item.label), item.current ? " ✓" : ""] }, item.id)) })
|
|
19
|
-
: choices.slice(start, start + count).map((item, i) => _jsxs(ThemedText, { color: start + i === state.selected ? "accent" : undefined, wrap: "truncate-end", children: [start + i === state.selected ? "❯ " : " ", truncateText(`${item.literal ? item.label : t(item.label)}${item.current ? " ✓" : ""}${item.description ? ` · ${item.descriptionLiteral ? item.description : t(item.description)}` : ""}`, Math.max(1, width - 2))] }, item.id)), !choices.length && state.kind !== "field" ? _jsx(ThemedText, { color: "muted", children: t("暂无可选项") }) : null] }), state.error ? _jsx(ThemedText, { color: "error", children: truncateText(t(state.error), width * 2) }) : null, _jsx(ThemedText, { color: "muted", wrap: "truncate-end", children: state.kind === "form" ? t("Enter 编辑 · Ctrl+S 保存 · Esc 返回") : state.kind === "field" && !state.field.options ? t("Enter 确认 · Esc 返回") : `${horizontal ? "←→ / ↑↓" : "↑↓"} ${t("选择")} · Enter ${t("确认")} · Esc ${t("返回")}` }), choices.length > count && !horizontal ? _jsxs(ThemedText, { color: "dim", children: [state.selected + 1, "/", choices.length] }) : null] });
|
|
19
|
+
: choices.slice(start, start + count).map((item, i) => _jsxs(ThemedText, { color: start + i === state.selected ? "accent" : undefined, wrap: "truncate-end", children: [start + i === state.selected ? "❯ " : " ", truncateText(`${item.literal ? item.label : t(item.label)}${item.current ? " ✓" : ""}${item.description ? ` · ${item.descriptionLiteral ? item.description : t(item.description)}` : ""}`, Math.max(1, width - 2))] }, item.id)), !choices.length && state.kind !== "field" && state.kind !== "input" ? _jsx(ThemedText, { color: "muted", children: t("暂无可选项") }) : null] }), state.error ? _jsx(ThemedText, { color: "error", children: truncateText(t(state.error), width * 2) }) : null, _jsx(ThemedText, { color: "muted", wrap: "truncate-end", children: state.kind === "form" ? t("Enter 编辑 · Ctrl+S 保存 · Esc 返回") : (state.kind === "input" || state.kind === "field") && !state.field.options ? t("Enter 确认 · Esc 返回") : `${horizontal ? "←→ / ↑↓" : "↑↓"} ${t("选择")} · Enter ${t("确认")} · Esc ${t("返回")}` }), choices.length > count && !horizontal ? _jsxs(ThemedText, { color: "dim", children: [state.selected + 1, "/", choices.length] }) : null] });
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=CommandDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandDialog.js","sourceRoot":"","sources":["../../../src/tui/commands/CommandDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAqC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA8B,CAAC;AAGzD,MAAM,UAAU,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAA0E;IAClI,MAAM,KAAK,GAAG,oBAAoB,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;IAC9H,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,OAAO,GAA6B,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CommandDialog.js","sourceRoot":"","sources":["../../../src/tui/commands/CommandDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAqC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA8B,CAAC;AAGzD,MAAM,UAAU,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAA0E;IAClI,MAAM,KAAK,GAAG,oBAAoB,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;IAC9H,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,OAAO,GAA6B,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACvO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAC5T,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IACpG,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,OAAO,IAAI,EAAE,CAAC;IAChF,OAAO,MAAC,SAAS,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,aACrH,KAAC,UAAU,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,QAAC,IAAI,EAAC,cAAc,YAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAc,EAC/E,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,cAAc,YAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,GAAc,CAAC,CAAC,CAAC,IAAI,EAClI,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAC,aAAa,IAAC,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAI;wBACnK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAC,GAAG,IAAC,GAAG,EAAE,CAAC,YAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,MAAC,UAAU,IAAe,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,QAAQ,aAAG,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAA/L,IAAI,CAAC,EAAE,CAAsM,CAAC,GAAO;4BAC3R,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,MAAC,UAAU,IAAe,KAAK,EAAE,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAC,cAAc,aAAE,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,KAAxV,IAAI,CAAC,EAAE,CAA+V,CAAC,EAChb,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,KAAK,EAAC,OAAO,YAAE,CAAC,CAAC,OAAO,CAAC,GAAc,CAAC,CAAC,CAAC,IAAI,IAC5H,EACL,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,KAAK,EAAC,OAAO,YAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAc,CAAC,CAAC,CAAC,IAAI,EACtG,KAAC,UAAU,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,cAAc,YAAE,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,GAAc,EAChT,OAAO,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAC,UAAU,IAAC,KAAK,EAAC,KAAK,aAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,OAAG,OAAO,CAAC,MAAM,IAAc,CAAC,CAAC,CAAC,IAAI,IAC/G,CAAC;AACd,CAAC"}
|
|
@@ -32,6 +32,10 @@ export type CommandDialogState = (DialogBase & {
|
|
|
32
32
|
selected: number;
|
|
33
33
|
horizontal: boolean;
|
|
34
34
|
}) | ConfigFormState | (DialogBase & {
|
|
35
|
+
kind: "input";
|
|
36
|
+
field: ConfigField;
|
|
37
|
+
selected: number;
|
|
38
|
+
}) | (DialogBase & {
|
|
35
39
|
kind: "field";
|
|
36
40
|
field: ConfigField;
|
|
37
41
|
selected: number;
|
|
@@ -44,6 +48,7 @@ export declare class CommandDialogController {
|
|
|
44
48
|
private acceptChoice?;
|
|
45
49
|
private saveForm?;
|
|
46
50
|
private goBack?;
|
|
51
|
+
private acceptInput?;
|
|
47
52
|
readonly editor: TextInputController;
|
|
48
53
|
readonly target: InputTarget;
|
|
49
54
|
getSnapshot: () => CommandDialogState | null;
|
|
@@ -65,6 +70,13 @@ export declare class CommandDialogController {
|
|
|
65
70
|
onBack: () => void;
|
|
66
71
|
}): void;
|
|
67
72
|
setColumns(columns: number): void;
|
|
73
|
+
openInput(options: {
|
|
74
|
+
title: string;
|
|
75
|
+
description?: string;
|
|
76
|
+
placeholder?: string;
|
|
77
|
+
onAccept: (value: string) => void;
|
|
78
|
+
onBack?: () => void;
|
|
79
|
+
}): void;
|
|
68
80
|
showError(error: unknown): void;
|
|
69
81
|
close(): void;
|
|
70
82
|
cancel(): void;
|
|
@@ -7,14 +7,15 @@ export class CommandDialogController {
|
|
|
7
7
|
acceptChoice;
|
|
8
8
|
saveForm;
|
|
9
9
|
goBack;
|
|
10
|
+
acceptInput;
|
|
10
11
|
editor = new TextInputController({ availableColumns: 60, multiline: false });
|
|
11
12
|
target = { id: Symbol("command-dialog"), context: "CommandDialog", actions: {
|
|
12
|
-
...Object.fromEntries(Object.keys(this.editor.target.actions ?? {}).map(action => [action, () => { if (this.state?.kind === "field" && !this.state.field.options)
|
|
13
|
+
...Object.fromEntries(Object.keys(this.editor.target.actions ?? {}).map(action => [action, () => { if ((this.state?.kind === "field" || this.state?.kind === "input") && !this.state.field.options)
|
|
13
14
|
this.editor.handleAction(action); }])),
|
|
14
15
|
"dialog:previous": () => this.move(-1), "dialog:next": () => this.move(1),
|
|
15
16
|
"dialog:left": () => this.adjust(-1), "dialog:right": () => this.adjust(1),
|
|
16
17
|
"dialog:accept": () => this.accept(), "dialog:cancel": () => this.cancel(), "dialog:save": () => this.save(),
|
|
17
|
-
}, onInput: event => { if (this.state?.kind === "field" && !this.state.field.options)
|
|
18
|
+
}, onInput: event => { if ((this.state?.kind === "field" || this.state?.kind === "input") && !this.state.field.options)
|
|
18
19
|
this.editor.handleInput(event); } };
|
|
19
20
|
getSnapshot = () => this.state;
|
|
20
21
|
subscribe = (listener) => { this.listeners.add(listener); return () => { this.listeners.delete(listener); }; };
|
|
@@ -34,9 +35,17 @@ export class CommandDialogController {
|
|
|
34
35
|
this.set({ kind: "form", title: options.title, description: options.description, fields: options.fields, selected: 0 });
|
|
35
36
|
}
|
|
36
37
|
setColumns(columns) { this.editor.setAvailableColumns(Math.max(1, columns - 7)); }
|
|
38
|
+
openInput(options) {
|
|
39
|
+
this.clearEditor();
|
|
40
|
+
this.acceptInput = options.onAccept;
|
|
41
|
+
this.acceptChoice = undefined;
|
|
42
|
+
this.saveForm = undefined;
|
|
43
|
+
this.goBack = options.onBack;
|
|
44
|
+
this.set({ kind: "input", selected: 0, title: options.title, description: options.description, field: { key: "value", label: options.title, value: "", placeholder: options.placeholder } });
|
|
45
|
+
}
|
|
37
46
|
showError(error) { if (this.state)
|
|
38
47
|
this.set({ ...this.state, error: error instanceof Error ? error.message : String(error) }); }
|
|
39
|
-
close() { this.state = null; this.acceptChoice = undefined; this.saveForm = undefined; this.goBack = undefined; this.clearEditor(); this.publish(); }
|
|
48
|
+
close() { this.state = null; this.acceptChoice = undefined; this.acceptInput = undefined; this.saveForm = undefined; this.goBack = undefined; this.clearEditor(); this.publish(); }
|
|
40
49
|
cancel() {
|
|
41
50
|
if (this.state?.kind === "field") {
|
|
42
51
|
const form = this.state.form;
|
|
@@ -62,7 +71,7 @@ export class CommandDialogController {
|
|
|
62
71
|
this.move(direction);
|
|
63
72
|
return;
|
|
64
73
|
}
|
|
65
|
-
if (this.state?.kind !== "field")
|
|
74
|
+
if (this.state?.kind !== "field" && this.state?.kind !== "input")
|
|
66
75
|
return;
|
|
67
76
|
if (this.state.field.options)
|
|
68
77
|
this.move(direction);
|
|
@@ -72,6 +81,15 @@ export class CommandDialogController {
|
|
|
72
81
|
accept() {
|
|
73
82
|
if (!this.state || this.editor.pasteHandler.isPending())
|
|
74
83
|
return;
|
|
84
|
+
if (this.state.kind === "input") {
|
|
85
|
+
try {
|
|
86
|
+
this.acceptInput?.(this.editor.getState().text);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
this.showError(error);
|
|
90
|
+
}
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
75
93
|
if (this.state.kind === "field") {
|
|
76
94
|
const { field, form, selected } = this.state, value = field.options ? field.options[selected] : this.editor.getState().text;
|
|
77
95
|
this.clearEditor();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-dialog-controller.js","sourceRoot":"","sources":["../../../src/tui/commands/command-dialog-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"command-dialog-controller.js","sourceRoot":"","sources":["../../../src/tui/commands/command-dialog-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { ReadToolView } from "../tools/ReadToolView.js";
|
|
|
9
9
|
import { EditToolView } from "../tools/EditToolView.js";
|
|
10
10
|
import { WriteToolView } from "../tools/WriteToolView.js";
|
|
11
11
|
import { BashToolView } from "../tools/BashToolView.js";
|
|
12
|
+
import { SkillToolView } from "../tools/SkillToolView.js";
|
|
12
13
|
import { GroupedToolUseView } from "../tools/GroupedToolUseView.js";
|
|
13
14
|
import { ToolUseCard } from "../tools/ToolUseCard.js";
|
|
14
15
|
import { toolText } from "../tools/tool-result.js";
|
|
@@ -48,6 +49,8 @@ export function TranscriptItemView({ item, expanded, thinkingDisplay, columns, l
|
|
|
48
49
|
const props = { item, expanded, columns, live };
|
|
49
50
|
if (item.name === "read")
|
|
50
51
|
return _jsx(ReadToolView, { ...props });
|
|
52
|
+
if (item.name === "skill")
|
|
53
|
+
return _jsx(SkillToolView, { ...props });
|
|
51
54
|
if (item.name === "edit")
|
|
52
55
|
return _jsx(EditToolView, { ...props });
|
|
53
56
|
if (item.name === "write")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptView.js","sourceRoot":"","sources":["../../../src/tui/messages/TranscriptView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA4B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAAgC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA8B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAiC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAA0B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,UAAU,eAAe,CAAC,KAAgC;IAC/D,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAClF,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/E,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;gBAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAChE,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChF,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAAC,SAAS;YAC3F,CAAC;QACF,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,GAAG,KAAK,EAAE,QAAQ,EAEpG;IACA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAI,CAAC;IACzG,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAC,mBAAmB,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAI,CAAC;IACzF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAC,sBAAsB,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAI,CAAC;IACjH,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,KAAC,kBAAkB,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAI,CAAC;IAC9H,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU;gBACpH,CAAC,CAAC,KAAC,wBAAwB,IAAmB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAA/J,KAAK,CAAC,KAAK,CAAwJ;gBACpM,CAAC,CAAC,KAAC,oBAAoB,IAAmB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,IAA5F,KAAK,CAAC,KAAK,CAAqF,CAAC,GAAO,CAAC;IACvI,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAC,YAAY,OAAK,KAAK,GAAI,CAAC;IAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAC,YAAY,OAAK,KAAK,GAAI,CAAC;IAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,KAAC,aAAa,OAAK,KAAK,GAAI,CAAC;IAC/D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,KAAC,YAAY,OAAK,KAAK,GAAI,CAAC;IAC3F,OAAO,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,YAAE,KAAC,IAAI,cAAE,QAAQ,CAAC,IAAI,CAAC,GAAQ,GAAc,CAAC;AACpJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"TranscriptView.js","sourceRoot":"","sources":["../../../src/tui/messages/TranscriptView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Text } from "ink";
|
|
3
|
+
import { ToolUseCard } from "./ToolUseCard.js";
|
|
4
|
+
import { MessageResponse } from "../messages/MessageResponse.js";
|
|
5
|
+
import { toolDetails, toolText } from "./tool-result.js";
|
|
6
|
+
import { displayText } from "../utils/text.js";
|
|
7
|
+
export function SkillToolView({ item, expanded, columns }) {
|
|
8
|
+
const details = toolDetails(item);
|
|
9
|
+
return _jsx(ToolUseCard, { item: item, label: "Skill", target: String(item.args.skill ?? ""), columns: columns, children: item.result ? _jsxs(MessageResponse, { columns: Math.max(1, columns - 4), children: [_jsx(Text, { children: toolText(item) }), expanded && item.status !== "error" ? _jsxs(_Fragment, { children: [_jsx(Text, { wrap: "wrap", children: displayText(String(details.path ?? "")) }), item.args.args ? _jsx(Text, { wrap: "wrap", children: displayText(String(item.args.args)) }) : null] }) : null] }) : null });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=SkillToolView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillToolView.js","sourceRoot":"","sources":["../../../src/tui/tools/SkillToolView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAiC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAA6D;IACnH,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,OAAO,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,YACnG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAC,eAAe,IAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,aAChE,KAAC,IAAI,cAAE,QAAQ,CAAC,IAAI,CAAC,GAAQ,EAC5B,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,8BACtC,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,YAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAQ,EACjE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,YAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAQ,CAAC,CAAC,CAAC,IAAI,IACrF,CAAC,CAAC,CAAC,IAAI,IACO,CAAC,CAAC,CAAC,IAAI,GACZ,CAAC;AAChB,CAAC"}
|
package/dist/tui/transcript.js
CHANGED
|
@@ -4,7 +4,7 @@ export function projectMessages(messages, nextId) {
|
|
|
4
4
|
const result = [];
|
|
5
5
|
const tools = new Map();
|
|
6
6
|
for (const message of messages) {
|
|
7
|
-
if (message.role === "user")
|
|
7
|
+
if (message.role === "user" && !message.isMeta)
|
|
8
8
|
result.push({ id: nextId(), kind: "user", timestamp: message.timestamp,
|
|
9
9
|
text: message.content.filter(b => b.type === "text").map(b => b.text).join("\n"),
|
|
10
10
|
attachments: message.content.filter(b => b.type === "image").map((_, index) => `[Image #${index + 1}]`) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/tui/transcript.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAc/D,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,QAAiC,EAAE,MAAoB;IACtF,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/tui/transcript.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -69,6 +69,9 @@ export interface UserMessage {
|
|
|
69
69
|
role: "user";
|
|
70
70
|
content: (TextContent | ImageContent)[];
|
|
71
71
|
timestamp: number;
|
|
72
|
+
/** Program-generated context, retained on disk but hidden from user-message UI. */
|
|
73
|
+
isMeta?: boolean;
|
|
74
|
+
metadata?: Record<string, JsonValue>;
|
|
72
75
|
}
|
|
73
76
|
export interface AssistantMessage {
|
|
74
77
|
role: "assistant";
|
|
@@ -203,6 +206,8 @@ export interface AgentToolResult<T = unknown> {
|
|
|
203
206
|
content: (TextContent | ImageContent)[];
|
|
204
207
|
/** Arbitrary structured details for logs or UI rendering. */
|
|
205
208
|
details: T;
|
|
209
|
+
/** Added after the complete tool-result batch, preserving protocol call/result pairing. */
|
|
210
|
+
newMessages?: UserMessage[];
|
|
206
211
|
/**
|
|
207
212
|
* Hint that the agent should stop after the current tool batch.
|
|
208
213
|
* Early termination only happens when every finalized tool result in the batch sets this to true.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "anti-trace",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Terminal AI coding agent with bring-your-own-key model support",
|
|
6
6
|
"repository": {
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
"test:types": "tsc --project tsconfig.test.json",
|
|
43
43
|
"test:coverage": "c8 node scripts/run-tests.mjs",
|
|
44
44
|
"test:live": "node scripts/run-live-tests.mjs",
|
|
45
|
+
"test:live:skills": "node scripts/run-live-tests.mjs --skills",
|
|
45
46
|
"check": "npm run typecheck && npm run test:types && npm test && npm run build"
|
|
46
47
|
},
|
|
47
48
|
"engines": {
|
|
@@ -55,7 +56,8 @@
|
|
|
55
56
|
"react": "19.2.4",
|
|
56
57
|
"react-devtools-core": "6.1.2",
|
|
57
58
|
"string-width": "8.3.0",
|
|
58
|
-
"typebox": "1.3.7"
|
|
59
|
+
"typebox": "1.3.7",
|
|
60
|
+
"yaml": "2.9.1"
|
|
59
61
|
},
|
|
60
62
|
"devDependencies": {
|
|
61
63
|
"@types/node": "22.19.19",
|