eucode-cli 0.1.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/dist/agentFinish.d.ts +10 -0
- package/dist/agentFinish.d.ts.map +1 -0
- package/dist/agentFinish.js +9 -0
- package/dist/agentFinish.js.map +1 -0
- package/dist/agentHost.d.ts +29 -0
- package/dist/agentHost.d.ts.map +1 -0
- package/dist/agentHost.js +94 -0
- package/dist/agentHost.js.map +1 -0
- package/dist/backgroundJobs.d.ts +12 -0
- package/dist/backgroundJobs.d.ts.map +1 -0
- package/dist/backgroundJobs.js +66 -0
- package/dist/backgroundJobs.js.map +1 -0
- package/dist/capabilities.d.ts +9 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +46 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/cliErrors.d.ts +3 -0
- package/dist/cliErrors.d.ts.map +1 -0
- package/dist/cliErrors.js +16 -0
- package/dist/cliErrors.js.map +1 -0
- package/dist/cloud.d.ts +17 -0
- package/dist/cloud.d.ts.map +1 -0
- package/dist/cloud.js +78 -0
- package/dist/cloud.js.map +1 -0
- package/dist/codeReview.d.ts +8 -0
- package/dist/codeReview.d.ts.map +1 -0
- package/dist/codeReview.js +64 -0
- package/dist/codeReview.js.map +1 -0
- package/dist/commands/agent.d.ts +7 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +86 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/capabilities.d.ts +2 -0
- package/dist/commands/capabilities.d.ts.map +1 -0
- package/dist/commands/capabilities.js +22 -0
- package/dist/commands/capabilities.js.map +1 -0
- package/dist/commands/chat.d.ts +7 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +426 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/db.d.ts +6 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +17 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/docker.d.ts +5 -0
- package/dist/commands/docker.d.ts.map +1 -0
- package/dist/commands/docker.js +35 -0
- package/dist/commands/docker.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +34 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +5 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +32 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +65 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/models.d.ts +2 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +30 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/new.d.ts +5 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +31 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/plan.d.ts +6 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +82 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/pr.d.ts +6 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +29 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/test.d.ts +5 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +49 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/config.d.ts +18 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +75 -0
- package/dist/config.js.map +1 -0
- package/dist/createProject.d.ts +5 -0
- package/dist/createProject.d.ts.map +1 -0
- package/dist/createProject.js +53 -0
- package/dist/createProject.js.map +1 -0
- package/dist/delegateAgent.d.ts +6 -0
- package/dist/delegateAgent.d.ts.map +1 -0
- package/dist/delegateAgent.js +34 -0
- package/dist/delegateAgent.js.map +1 -0
- package/dist/fileContext.d.ts +4 -0
- package/dist/fileContext.d.ts.map +1 -0
- package/dist/fileContext.js +98 -0
- package/dist/fileContext.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +207 -0
- package/dist/index.js.map +1 -0
- package/dist/intensity.d.ts +13 -0
- package/dist/intensity.d.ts.map +1 -0
- package/dist/intensity.js +33 -0
- package/dist/intensity.js.map +1 -0
- package/dist/mcpConfig.d.ts +3 -0
- package/dist/mcpConfig.d.ts.map +1 -0
- package/dist/mcpConfig.js +29 -0
- package/dist/mcpConfig.js.map +1 -0
- package/dist/memory.d.ts +3 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +16 -0
- package/dist/memory.js.map +1 -0
- package/dist/modelCatalog.d.ts +9 -0
- package/dist/modelCatalog.d.ts.map +1 -0
- package/dist/modelCatalog.js +45 -0
- package/dist/modelCatalog.js.map +1 -0
- package/dist/nodeToolHost.d.ts +4 -0
- package/dist/nodeToolHost.d.ts.map +1 -0
- package/dist/nodeToolHost.js +320 -0
- package/dist/nodeToolHost.js.map +1 -0
- package/dist/projectRules.d.ts +2 -0
- package/dist/projectRules.d.ts.map +1 -0
- package/dist/projectRules.js +57 -0
- package/dist/projectRules.js.map +1 -0
- package/dist/replOutput.d.ts +21 -0
- package/dist/replOutput.d.ts.map +1 -0
- package/dist/replOutput.js +84 -0
- package/dist/replOutput.js.map +1 -0
- package/dist/sqliteQuery.d.ts +3 -0
- package/dist/sqliteQuery.d.ts.map +1 -0
- package/dist/sqliteQuery.js +40 -0
- package/dist/sqliteQuery.js.map +1 -0
- package/dist/synthesizeAgentReply.d.ts +32 -0
- package/dist/synthesizeAgentReply.d.ts.map +1 -0
- package/dist/synthesizeAgentReply.js +173 -0
- package/dist/synthesizeAgentReply.js.map +1 -0
- package/dist/synthesizeAgentReply.test.d.ts +2 -0
- package/dist/synthesizeAgentReply.test.d.ts.map +1 -0
- package/dist/synthesizeAgentReply.test.js +35 -0
- package/dist/synthesizeAgentReply.test.js.map +1 -0
- package/dist/terminalOutput.d.ts +4 -0
- package/dist/terminalOutput.d.ts.map +1 -0
- package/dist/terminalOutput.js +34 -0
- package/dist/terminalOutput.js.map +1 -0
- package/dist/ui.d.ts +17 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +121 -0
- package/dist/ui.js.map +1 -0
- package/dist/webFetch.d.ts +2 -0
- package/dist/webFetch.d.ts.map +1 -0
- package/dist/webFetch.js +29 -0
- package/dist/webFetch.js.map +1 -0
- package/dist/workspace.d.ts +2 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +30 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqliteQuery.js","sourceRoot":"","sources":["../src/sqliteQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,WAAW,GACf,6GAA6G,CAAC;AAEhH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,kBAAkB,CAAC;IACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,OAAO,sDAAsD,CAAC;IAChE,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,qDAAqD,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,OAAO,8BAA8B,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,GAAW,EACX,OAAO,GAAG,GAAG;IAEb,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAEpB,IAAI,CAAC;QACH,UAAU,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,yBAAyB,MAAM,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,OAAO,GAAG,CAAC;IACpE,MAAM,MAAM,GAAG,SAAS,CACtB,SAAS,EACT,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EACpD,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CACzC,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,CACL,6EAA6E;YAC7E,qBAAqB,MAAM,eAAe,CAC3C,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,mBAAmB,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ChatMessage } from "@eucode/shared";
|
|
2
|
+
import type { LlmProvider } from "@eucode/llm";
|
|
3
|
+
export interface ToolResultEntry {
|
|
4
|
+
name: string;
|
|
5
|
+
content: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function collectToolResults(messages: ChatMessage[]): ToolResultEntry[];
|
|
8
|
+
export interface GitStatusSummary {
|
|
9
|
+
branch: string;
|
|
10
|
+
tracking?: string;
|
|
11
|
+
ahead?: number;
|
|
12
|
+
behind?: number;
|
|
13
|
+
changedFiles: number;
|
|
14
|
+
staged: number;
|
|
15
|
+
unstaged: number;
|
|
16
|
+
untracked: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function parseGitStatusOutput(output: string): GitStatusSummary | null;
|
|
19
|
+
export declare function formatGitStatusSummary(gitOutput: string): string | null;
|
|
20
|
+
export declare function promptWantsGitSummary(userPrompt: string): boolean;
|
|
21
|
+
export declare function assistantTextLooksLikeGitSummary(text: string): boolean;
|
|
22
|
+
/** Template synthesis from tool output (no LLM). */
|
|
23
|
+
export declare function synthesizeAgentReply(toolResults: ToolResultEntry[], userPrompt: string): string | null;
|
|
24
|
+
export declare function synthesizeAgentReplyWithLlm(provider: LlmProvider, toolResults: ToolResultEntry[], userPrompt: string): Promise<string>;
|
|
25
|
+
export declare function resolveAgentAssistantSummary(options: {
|
|
26
|
+
finalText: string;
|
|
27
|
+
wroteText: boolean;
|
|
28
|
+
history: ChatMessage[];
|
|
29
|
+
userPrompt: string;
|
|
30
|
+
provider?: LlmProvider;
|
|
31
|
+
}): Promise<string | undefined>;
|
|
32
|
+
//# sourceMappingURL=synthesizeAgentReply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesizeAgentReply.d.ts","sourceRoot":"","sources":["../src/synthesizeAgentReply.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,eAAe,EAAE,CAQ7E;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAwD5E;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBvE;AA6BD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAIjE;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,eAAe,EAAE,EAC9B,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAgBf;AAED,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,eAAe,EAAE,EAC9B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAkBjB;AAED,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2B9B"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { formatToolFallbackSummary } from "@eucode/agent";
|
|
2
|
+
import { streamCliChat } from "./cloud.js";
|
|
3
|
+
export function collectToolResults(messages) {
|
|
4
|
+
const out = [];
|
|
5
|
+
for (const m of messages) {
|
|
6
|
+
if (m.role === "tool" && m.content?.trim()) {
|
|
7
|
+
out.push({ name: m.name ?? "tool", content: m.content });
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return out;
|
|
11
|
+
}
|
|
12
|
+
export function parseGitStatusOutput(output) {
|
|
13
|
+
const lines = output.trim().split("\n").filter(Boolean);
|
|
14
|
+
const header = lines.find((l) => l.startsWith("##"));
|
|
15
|
+
if (!header)
|
|
16
|
+
return null;
|
|
17
|
+
let branch = "HEAD";
|
|
18
|
+
let tracking;
|
|
19
|
+
let ahead;
|
|
20
|
+
let behind;
|
|
21
|
+
const headerBody = header.replace(/^##\s+/, "").trim();
|
|
22
|
+
const bracketIdx = headerBody.indexOf(" [");
|
|
23
|
+
const branchPart = (bracketIdx >= 0 ? headerBody.slice(0, bracketIdx) : headerBody).trim();
|
|
24
|
+
const bracket = bracketIdx >= 0 ? headerBody.slice(bracketIdx + 2).replace(/\]$/, "") : "";
|
|
25
|
+
const [branchName, trackRef] = branchPart.split("...");
|
|
26
|
+
branch = branchName?.trim() || "HEAD";
|
|
27
|
+
tracking = trackRef?.trim() || undefined;
|
|
28
|
+
if (bracket) {
|
|
29
|
+
const aheadM = bracket.match(/ahead\s+(\d+)/i);
|
|
30
|
+
const behindM = bracket.match(/behind\s+(\d+)/i);
|
|
31
|
+
if (aheadM)
|
|
32
|
+
ahead = Number(aheadM[1]);
|
|
33
|
+
if (behindM)
|
|
34
|
+
behind = Number(behindM[1]);
|
|
35
|
+
}
|
|
36
|
+
let staged = 0;
|
|
37
|
+
let unstaged = 0;
|
|
38
|
+
let untracked = 0;
|
|
39
|
+
for (const line of lines) {
|
|
40
|
+
if (line.startsWith("##"))
|
|
41
|
+
continue;
|
|
42
|
+
const xy = line.length >= 2 ? line.slice(0, 2) : " ";
|
|
43
|
+
if (xy === "??" || xy[0] === "?" || xy[1] === "?") {
|
|
44
|
+
untracked++;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const hasStaged = xy[0] !== " " && xy[0] !== "?";
|
|
48
|
+
const hasUnstaged = xy[1] !== " " && xy[1] !== "?";
|
|
49
|
+
if (hasStaged)
|
|
50
|
+
staged++;
|
|
51
|
+
if (hasUnstaged)
|
|
52
|
+
unstaged++;
|
|
53
|
+
}
|
|
54
|
+
const changedFiles = staged + unstaged + untracked;
|
|
55
|
+
return {
|
|
56
|
+
branch,
|
|
57
|
+
tracking,
|
|
58
|
+
ahead,
|
|
59
|
+
behind,
|
|
60
|
+
changedFiles,
|
|
61
|
+
staged,
|
|
62
|
+
unstaged,
|
|
63
|
+
untracked,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function formatGitStatusSummary(gitOutput) {
|
|
67
|
+
const parsed = parseGitStatusOutput(gitOutput);
|
|
68
|
+
if (!parsed)
|
|
69
|
+
return null;
|
|
70
|
+
const trackNote = parsed.tracking
|
|
71
|
+
? parsed.ahead || parsed.behind
|
|
72
|
+
? ` · ${parsed.tracking}${parsed.ahead ? `, +${parsed.ahead} commit` : ""}${parsed.behind ? `, −${parsed.behind} commit` : ""}`
|
|
73
|
+
: ` · traccia ${parsed.tracking}`
|
|
74
|
+
: "";
|
|
75
|
+
const line1 = `Ramo: ${parsed.branch}${trackNote}`;
|
|
76
|
+
const line2 = parsed.changedFiles === 0
|
|
77
|
+
? "Working tree pulito: nessun file modificato o non tracciato."
|
|
78
|
+
: `${parsed.changedFiles} file toccati (${parsed.staged} in stage, ${parsed.unstaged} modificati, ${parsed.untracked} non tracciati).`;
|
|
79
|
+
const line3 = parsed.changedFiles === 0
|
|
80
|
+
? "Puoi continuare a lavorare o creare un nuovo branch se serve."
|
|
81
|
+
: "Prossimo passo: `git add` sui file giusti, poi `git commit` con un messaggio chiaro.";
|
|
82
|
+
return [line1, line2, line3].join("\n");
|
|
83
|
+
}
|
|
84
|
+
function stripToolGuardPrefix(content) {
|
|
85
|
+
const trimmed = content.trim();
|
|
86
|
+
if (/^(Già eseguito|Chiamata duplicata)/i.test(trimmed)) {
|
|
87
|
+
const parts = trimmed.split(/\n\n+/);
|
|
88
|
+
return parts[parts.length - 1]?.trim() ?? trimmed;
|
|
89
|
+
}
|
|
90
|
+
return trimmed;
|
|
91
|
+
}
|
|
92
|
+
function findGitStatusOutput(toolResults) {
|
|
93
|
+
for (const r of toolResults) {
|
|
94
|
+
if (r.name === "git" && r.content.trim()) {
|
|
95
|
+
return stripToolGuardPrefix(r.content);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
for (const r of toolResults) {
|
|
99
|
+
if ((r.name === "run_terminal" || r.name === "bash") &&
|
|
100
|
+
/git status/i.test(r.content) &&
|
|
101
|
+
(r.content.includes("##") || /^[ MADRCU?!]{2}/m.test(r.content))) {
|
|
102
|
+
return r.content;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
export function promptWantsGitSummary(userPrompt) {
|
|
108
|
+
return /git\s+status|riassum|stato\s+(del\s+)?repo|modifiche\s+locali|working\s+tree/i.test(userPrompt);
|
|
109
|
+
}
|
|
110
|
+
export function assistantTextLooksLikeGitSummary(text) {
|
|
111
|
+
return /Ramo:|file toccati|working tree pulito|modificat/i.test(text);
|
|
112
|
+
}
|
|
113
|
+
/** Template synthesis from tool output (no LLM). */
|
|
114
|
+
export function synthesizeAgentReply(toolResults, userPrompt) {
|
|
115
|
+
if (!toolResults.length)
|
|
116
|
+
return null;
|
|
117
|
+
const gitOut = findGitStatusOutput(toolResults);
|
|
118
|
+
if (gitOut && (promptWantsGitSummary(userPrompt) || /git/i.test(userPrompt))) {
|
|
119
|
+
const summary = formatGitStatusSummary(gitOut);
|
|
120
|
+
if (summary)
|
|
121
|
+
return summary;
|
|
122
|
+
}
|
|
123
|
+
const last = toolResults[toolResults.length - 1];
|
|
124
|
+
if (last && promptWantsGitSummary(userPrompt)) {
|
|
125
|
+
const fromLast = formatGitStatusSummary(last.content);
|
|
126
|
+
if (fromLast)
|
|
127
|
+
return fromLast;
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
export async function synthesizeAgentReplyWithLlm(provider, toolResults, userPrompt) {
|
|
132
|
+
const toolBlock = toolResults
|
|
133
|
+
.map((t) => `### ${t.name}\n${t.content.slice(0, 6000)}`)
|
|
134
|
+
.join("\n\n");
|
|
135
|
+
const messages = [
|
|
136
|
+
{
|
|
137
|
+
role: "system",
|
|
138
|
+
content: "Sei EUCoder. Sintetizza i risultati dei tool in italiano per l'utente. Massimo 3 righe, concise, senza ripetere dump grezzi.",
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
role: "user",
|
|
142
|
+
content: `Richiesta utente: ${userPrompt}\n\nRisultati tool:\n${toolBlock}`,
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
return streamCliChat(provider, messages, () => { }, { maxTokens: 256 });
|
|
146
|
+
}
|
|
147
|
+
export async function resolveAgentAssistantSummary(options) {
|
|
148
|
+
if (options.wroteText)
|
|
149
|
+
return undefined;
|
|
150
|
+
if (options.finalText.trim())
|
|
151
|
+
return options.finalText.trim();
|
|
152
|
+
const fromHistory = formatToolFallbackSummary(options.history).trim();
|
|
153
|
+
if (fromHistory)
|
|
154
|
+
return fromHistory;
|
|
155
|
+
const toolResults = collectToolResults(options.history);
|
|
156
|
+
if (!toolResults.length)
|
|
157
|
+
return undefined;
|
|
158
|
+
const templated = synthesizeAgentReply(toolResults, options.userPrompt);
|
|
159
|
+
if (templated?.trim())
|
|
160
|
+
return templated.trim();
|
|
161
|
+
if (!options.provider)
|
|
162
|
+
return undefined;
|
|
163
|
+
try {
|
|
164
|
+
const llm = await synthesizeAgentReplyWithLlm(options.provider, toolResults, options.userPrompt);
|
|
165
|
+
return llm.trim() || undefined;
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
const last = toolResults[toolResults.length - 1];
|
|
169
|
+
const preview = last?.content.split("\n").slice(0, 3).join("\n").trim();
|
|
170
|
+
return preview || undefined;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=synthesizeAgentReply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesizeAgentReply.js","sourceRoot":"","sources":["../src/synthesizeAgentReply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesizeAgentReply.test.d.ts","sourceRoot":"","sources":["../src/synthesizeAgentReply.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { describe, it } from "node:test";
|
|
3
|
+
import { formatGitStatusSummary, parseGitStatusOutput, synthesizeAgentReply, } from "./synthesizeAgentReply.js";
|
|
4
|
+
describe("parseGitStatusOutput", () => {
|
|
5
|
+
it("parses branch and file counts", () => {
|
|
6
|
+
const out = parseGitStatusOutput(`## feature/foo...origin/feature/foo [ahead 2]
|
|
7
|
+
M apps/cli/src/a.ts
|
|
8
|
+
?? apps/cli/src/b.ts
|
|
9
|
+
M staged.ts`);
|
|
10
|
+
assert.ok(out);
|
|
11
|
+
assert.equal(out.branch, "feature/foo");
|
|
12
|
+
assert.equal(out.tracking, "origin/feature/foo");
|
|
13
|
+
assert.equal(out.ahead, 2);
|
|
14
|
+
assert.equal(out.changedFiles, 3);
|
|
15
|
+
assert.equal(out.untracked, 1);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
describe("formatGitStatusSummary", () => {
|
|
19
|
+
it("returns three Italian lines", () => {
|
|
20
|
+
const summary = formatGitStatusSummary(`## main...origin/main
|
|
21
|
+
M README.md`);
|
|
22
|
+
assert.ok(summary);
|
|
23
|
+
const lines = summary.split("\n");
|
|
24
|
+
assert.equal(lines.length, 3);
|
|
25
|
+
assert.match(lines[0], /Ramo: main/);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe("synthesizeAgentReply", () => {
|
|
29
|
+
it("summarizes git tool output for git status prompts", () => {
|
|
30
|
+
const reply = synthesizeAgentReply([{ name: "git", content: "## dev\n M x.ts" }], "git status: riassumi in 3 righe");
|
|
31
|
+
assert.match(reply, /Ramo: dev/);
|
|
32
|
+
assert.equal(reply.split("\n").length, 3);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=synthesizeAgentReply.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesizeAgentReply.test.js","sourceRoot":"","sources":["../src/synthesizeAgentReply.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,oBAAoB,CAAC;;;aAGxB,CAAC,CAAC;QACX,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,GAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,GAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,GAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,GAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,GAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,OAAO,GAAG,sBAAsB,CAAC;aAC9B,CAAC,CAAC;QACX,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,KAAK,GAAG,OAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,KAAK,GAAG,oBAAoB,CAChC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAC7C,iCAAiC,CAClC,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,KAAM,EAAE,WAAW,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,KAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Avoid whole-monorepo eslint blowing context; cap output size. */
|
|
2
|
+
export declare function sanitizeTerminalCommand(command: string, cwd: string): string;
|
|
3
|
+
export declare function truncateTerminalOutput(output: string): string;
|
|
4
|
+
//# sourceMappingURL=terminalOutput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminalOutput.d.ts","sourceRoot":"","sources":["../src/terminalOutput.ts"],"names":[],"mappings":"AAMA,oEAAoE;AACpE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAY5E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAe7D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const MAX_TERMINAL_CHARS = 8_000;
|
|
4
|
+
const TERMINAL_TAIL_LINES = 50;
|
|
5
|
+
/** Avoid whole-monorepo eslint blowing context; cap output size. */
|
|
6
|
+
export function sanitizeTerminalCommand(command, cwd) {
|
|
7
|
+
let cmd = command.trim();
|
|
8
|
+
if (/^eslint\s+(\.\s*|\.?$)/.test(cmd) || /\beslint\s+\.\b/.test(cmd)) {
|
|
9
|
+
const scoped = existsSync(join(cwd, "apps", "cli"))
|
|
10
|
+
? "eslint apps/cli --max-warnings 0"
|
|
11
|
+
: "eslint . --max-warnings 0";
|
|
12
|
+
cmd = cmd.replace(/\beslint\s+\./g, scoped);
|
|
13
|
+
if (!/\|\s*tail\b/.test(cmd) && !cmd.includes("head")) {
|
|
14
|
+
cmd = `${cmd} 2>&1 | tail -n ${TERMINAL_TAIL_LINES}`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return cmd;
|
|
18
|
+
}
|
|
19
|
+
export function truncateTerminalOutput(output) {
|
|
20
|
+
if (output.length <= MAX_TERMINAL_CHARS)
|
|
21
|
+
return output;
|
|
22
|
+
const lines = output.split("\n");
|
|
23
|
+
const omitted = Math.max(0, lines.length - TERMINAL_TAIL_LINES);
|
|
24
|
+
const tail = lines.slice(-TERMINAL_TAIL_LINES).join("\n");
|
|
25
|
+
const prefix = omitted > 0
|
|
26
|
+
? `[${omitted} righe omesse — ultime ${TERMINAL_TAIL_LINES}]\n`
|
|
27
|
+
: "";
|
|
28
|
+
const combined = prefix + tail;
|
|
29
|
+
if (combined.length <= MAX_TERMINAL_CHARS)
|
|
30
|
+
return combined;
|
|
31
|
+
return (combined.slice(combined.length - MAX_TERMINAL_CHARS) +
|
|
32
|
+
`\n…[output troncato, ${output.length} caratteri]`);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=terminalOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminalOutput.js","sourceRoot":"","sources":["../src/terminalOutput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,oEAAoE;AACpE,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,GAAW;IAClE,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACjD,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,2BAA2B,CAAC;QAChC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,GAAG,GAAG,GAAG,GAAG,mBAAmB,mBAAmB,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,IAAI,MAAM,CAAC,MAAM,IAAI,kBAAkB;QAAE,OAAO,MAAM,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,MAAM,GACV,OAAO,GAAG,CAAC;QACT,CAAC,CAAC,IAAI,OAAO,0BAA0B,mBAAmB,KAAK;QAC/D,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,QAAQ,CAAC,MAAM,IAAI,kBAAkB;QAAE,OAAO,QAAQ,CAAC;IAC3D,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,kBAAkB,CAAC;QACpD,wBAAwB,MAAM,CAAC,MAAM,aAAa,CACnD,CAAC;AACJ,CAAC"}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SelectableModelGroup } from "@eucode/shared";
|
|
2
|
+
import type { IntensityMode } from "./intensity.js";
|
|
3
|
+
export declare function printBanner(modelId: string, intensity: IntensityMode): void;
|
|
4
|
+
export declare function printHelpHint(): void;
|
|
5
|
+
export declare function printReplHelp(agentMode?: boolean): void;
|
|
6
|
+
export declare function formatStatusPrompt(modelId: string, intensity: IntensityMode, agentMode?: boolean): string;
|
|
7
|
+
export declare function printModelGroups(groups: SelectableModelGroup[], currentModelId: string, hint?: string): void;
|
|
8
|
+
export declare const c: {
|
|
9
|
+
user: (s: string) => string;
|
|
10
|
+
assistant: (s: string) => string;
|
|
11
|
+
dim: import("picocolors/types.js").Formatter;
|
|
12
|
+
warn: import("picocolors/types.js").Formatter;
|
|
13
|
+
err: import("picocolors/types.js").Formatter;
|
|
14
|
+
accent: import("picocolors/types.js").Formatter;
|
|
15
|
+
ok: import("picocolors/types.js").Formatter;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=ui.d.ts.map
|
package/dist/ui.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,CAwB3E;AAED,wBAAgB,aAAa,IAAI,IAAI,CAkBpC;AAED,wBAAgB,aAAa,CAAC,SAAS,UAAQ,GAAG,IAAI,CA0CrD;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,aAAa,EACxB,SAAS,UAAQ,GAChB,MAAM,CAWR;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,EAAE,EAC9B,cAAc,EAAE,MAAM,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI,CAuBN;AAED,eAAO,MAAM,CAAC;cACF,MAAM;mBACD,MAAM;;;;;;CAMtB,CAAC"}
|
package/dist/ui.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import boxen from "boxen";
|
|
2
|
+
import pc from "picocolors";
|
|
3
|
+
import { intensityLabel } from "./intensity.js";
|
|
4
|
+
export function printBanner(modelId, intensity) {
|
|
5
|
+
const art = [
|
|
6
|
+
" ███████╗██╗ ██╗ ██████╗ ██████╗ ███████╗██████╗ ",
|
|
7
|
+
" ██╔════╝██║ ██║██╔════╝██╔═══██╗██╔════╝██╔══██╗",
|
|
8
|
+
" █████╗ ██║ ██║██║ ██║ ██║█████╗ ██████╔╝",
|
|
9
|
+
" ██╔══╝ ██║ ██║██║ ██║ ██║██╔══╝ ██╔══██╗",
|
|
10
|
+
" ███████╗╚██████╔╝╚██████╗╚██████╔╝███████╗██║ ██║",
|
|
11
|
+
" ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝",
|
|
12
|
+
].join("\n");
|
|
13
|
+
const footer = [
|
|
14
|
+
pc.dim("REPL interattiva · Cloud EU"),
|
|
15
|
+
`${pc.cyan(modelId)} · ${pc.yellow(intensityLabel(intensity))}`,
|
|
16
|
+
pc.dim("Digita /help per i comandi"),
|
|
17
|
+
].join("\n");
|
|
18
|
+
console.log(boxen(`${pc.cyan(art)}\n${footer}`, {
|
|
19
|
+
padding: 1,
|
|
20
|
+
margin: { top: 0, bottom: 1, left: 0, right: 0 },
|
|
21
|
+
borderColor: "cyan",
|
|
22
|
+
borderStyle: "round",
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
export function printHelpHint() {
|
|
26
|
+
console.log(pc.dim("Comandi: ") +
|
|
27
|
+
pc.cyan("eucoder start") +
|
|
28
|
+
pc.dim(" · ") +
|
|
29
|
+
pc.cyan("eucoder chat") +
|
|
30
|
+
pc.dim(" · ") +
|
|
31
|
+
pc.cyan("eucoder agent") +
|
|
32
|
+
pc.dim(" · ") +
|
|
33
|
+
pc.cyan("eucoder capabilities") +
|
|
34
|
+
pc.dim(" · ") +
|
|
35
|
+
pc.cyan("eucoder mcp") +
|
|
36
|
+
pc.dim(" · ") +
|
|
37
|
+
pc.cyan("eucoder test") +
|
|
38
|
+
pc.dim(" · ") +
|
|
39
|
+
pc.cyan("eucoder init") +
|
|
40
|
+
pc.dim("\n"));
|
|
41
|
+
}
|
|
42
|
+
export function printReplHelp(agentMode = false) {
|
|
43
|
+
const agentLines = agentMode
|
|
44
|
+
? [
|
|
45
|
+
`${pc.cyan("/init")} Crea AGENTS.md nel progetto`,
|
|
46
|
+
`${pc.cyan("/agent")} <task> Sub-agent (subprocess)`,
|
|
47
|
+
`${pc.cyan("/plan")} <task> Analisi read-only senza modifiche`,
|
|
48
|
+
`${pc.cyan("/background")} <task> Job in background (1 alla volta)`,
|
|
49
|
+
`${pc.cyan("/tasks")} Stato job background`,
|
|
50
|
+
`${pc.cyan("/diff")} git diff colorato`,
|
|
51
|
+
`${pc.cyan("/code-review")} [--fix] Review del diff`,
|
|
52
|
+
`${pc.cyan("/memory")} <nota> Append .eucode/memory.md`,
|
|
53
|
+
`${pc.cyan("/mcp")} list|test Server MCP`,
|
|
54
|
+
`${pc.dim("Menziona @percorso/file.ts per iniettare contesto")}`,
|
|
55
|
+
"",
|
|
56
|
+
]
|
|
57
|
+
: [];
|
|
58
|
+
const body = [
|
|
59
|
+
`${pc.bold("Comandi REPL")}`,
|
|
60
|
+
"",
|
|
61
|
+
...agentLines,
|
|
62
|
+
`${pc.cyan("/help")} Mostra questo aiuto`,
|
|
63
|
+
`${pc.cyan("/exit")} Esci dalla chat`,
|
|
64
|
+
`${pc.cyan("/clear")} Cancella la cronologia`,
|
|
65
|
+
`${pc.cyan("/compact")} Come /clear (contesto agent)`,
|
|
66
|
+
`${pc.cyan("/model")} <id> Cambia modello`,
|
|
67
|
+
`${pc.cyan("/models")} Elenco modelli (raggruppati)`,
|
|
68
|
+
`${pc.cyan("/intensity")} <modo> veloce · bilanciato · profondo`,
|
|
69
|
+
`${pc.cyan("/fast")} Intensità Veloce`,
|
|
70
|
+
`${pc.cyan("/balanced")} Intensità Bilanciato`,
|
|
71
|
+
`${pc.cyan("/deep")} Intensità Profondo`,
|
|
72
|
+
"",
|
|
73
|
+
pc.dim("Scorciatoie: /veloce /bilanciato /profondo · Ctrl+C per uscire"),
|
|
74
|
+
].join("\n");
|
|
75
|
+
console.log(boxen(body, {
|
|
76
|
+
padding: { top: 0, bottom: 0, left: 1, right: 1 },
|
|
77
|
+
borderColor: "gray",
|
|
78
|
+
borderStyle: "round",
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
export function formatStatusPrompt(modelId, intensity, agentMode = false) {
|
|
82
|
+
const mode = agentMode ? pc.green("agent") + pc.dim(" · ") : "";
|
|
83
|
+
return (pc.dim("[") +
|
|
84
|
+
pc.cyan(modelId) +
|
|
85
|
+
pc.dim("] [") +
|
|
86
|
+
pc.yellow(intensityLabel(intensity)) +
|
|
87
|
+
pc.dim("] ") +
|
|
88
|
+
mode +
|
|
89
|
+
pc.cyan("› "));
|
|
90
|
+
}
|
|
91
|
+
export function printModelGroups(groups, currentModelId, hint) {
|
|
92
|
+
const lines = [pc.bold("Modelli disponibili"), ""];
|
|
93
|
+
if (hint)
|
|
94
|
+
lines.push(pc.dim(hint), "");
|
|
95
|
+
for (const group of groups) {
|
|
96
|
+
const badge = group.badge ? pc.dim(` [${group.badge}]`) : "";
|
|
97
|
+
lines.push(pc.bold(`${group.label}${badge}`));
|
|
98
|
+
for (const m of group.models) {
|
|
99
|
+
const active = m.id === currentModelId ? pc.green(" ●") : " ";
|
|
100
|
+
const free = m.showFreeBadge ? pc.dim(" F") : "";
|
|
101
|
+
lines.push(`${active} ${pc.cyan(m.id)}${free} ${pc.dim(m.displayName)}`);
|
|
102
|
+
}
|
|
103
|
+
lines.push("");
|
|
104
|
+
}
|
|
105
|
+
lines.push(pc.dim("Usa /model <id> per cambiare modello"));
|
|
106
|
+
console.log(boxen(lines.join("\n").trimEnd(), {
|
|
107
|
+
padding: { top: 0, bottom: 0, left: 1, right: 1 },
|
|
108
|
+
borderColor: "cyan",
|
|
109
|
+
borderStyle: "round",
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
export const c = {
|
|
113
|
+
user: (s) => pc.bold(pc.blue("Tu: ")) + s,
|
|
114
|
+
assistant: (s) => pc.bold(pc.green("EUCoder: ")) + s,
|
|
115
|
+
dim: pc.dim,
|
|
116
|
+
warn: pc.yellow,
|
|
117
|
+
err: pc.red,
|
|
118
|
+
accent: pc.cyan,
|
|
119
|
+
ok: pc.green,
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webFetch.d.ts","sourceRoot":"","sources":["../src/webFetch.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,QAAQ,SAAkB,GACzB,OAAO,CAAC,MAAM,CAAC,CA0BjB"}
|
package/dist/webFetch.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const MAX_FETCH_CHARS = 12_000;
|
|
2
|
+
const FETCH_TIMEOUT_MS = 15_000;
|
|
3
|
+
export async function fetchUrlAsText(url, maxChars = MAX_FETCH_CHARS) {
|
|
4
|
+
const parsed = new URL(url);
|
|
5
|
+
if (!["http:", "https:"].includes(parsed.protocol)) {
|
|
6
|
+
throw new Error("Solo URL http/https.");
|
|
7
|
+
}
|
|
8
|
+
const controller = new AbortController();
|
|
9
|
+
const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
10
|
+
try {
|
|
11
|
+
const res = await fetch(url, {
|
|
12
|
+
signal: controller.signal,
|
|
13
|
+
headers: { "User-Agent": "EUCoder-CLI/0.2" },
|
|
14
|
+
});
|
|
15
|
+
if (!res.ok) {
|
|
16
|
+
throw new Error(`HTTP ${res.status} ${res.statusText}`);
|
|
17
|
+
}
|
|
18
|
+
const contentType = res.headers.get("content-type") ?? "";
|
|
19
|
+
const body = await res.text();
|
|
20
|
+
const trimmed = body.length > maxChars
|
|
21
|
+
? `${body.slice(0, maxChars)}\n…[troncato, ${body.length} caratteri]`
|
|
22
|
+
: body;
|
|
23
|
+
return `URL: ${url}\nContent-Type: ${contentType}\n\n${trimmed}`;
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
clearTimeout(timer);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=webFetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webFetch.js","sourceRoot":"","sources":["../src/webFetch.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAW,EACX,QAAQ,GAAG,eAAe;IAE1B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE;SAC7C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,GAAG,QAAQ;YACpB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,iBAAiB,IAAI,CAAC,MAAM,aAAa;YACrE,CAAC,CAAC,IAAI,CAAC;QACX,OAAO,QAAQ,GAAG,mBAAmB,WAAW,OAAO,OAAO,EAAE,CAAC;IACnE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAaA,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAetE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { access, readdir } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const PROJECT_MARKERS = [
|
|
4
|
+
"package.json",
|
|
5
|
+
".git",
|
|
6
|
+
"AGENTS.md",
|
|
7
|
+
"Cargo.toml",
|
|
8
|
+
"pyproject.toml",
|
|
9
|
+
"go.mod",
|
|
10
|
+
"pnpm-workspace.yaml",
|
|
11
|
+
];
|
|
12
|
+
export async function isProjectDirectory(cwd) {
|
|
13
|
+
for (const marker of PROJECT_MARKERS) {
|
|
14
|
+
try {
|
|
15
|
+
await access(join(cwd, marker));
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
/* try next */
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const entries = await readdir(cwd);
|
|
24
|
+
return entries.some((e) => !e.startsWith("."));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,eAAe,GAAG;IACtB,cAAc;IACd,MAAM;IACN,WAAW;IACX,YAAY;IACZ,gBAAgB;IAChB,QAAQ;IACR,qBAAqB;CACtB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "eucode-cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "EUCoder terminal CLI — chat e agent cloud",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"eucoder": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"keywords": [
|
|
14
|
+
"cli",
|
|
15
|
+
"ai",
|
|
16
|
+
"agent",
|
|
17
|
+
"coding-assistant",
|
|
18
|
+
"eucode"
|
|
19
|
+
],
|
|
20
|
+
"author": "EUCode Team",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/eucode/eucode.git",
|
|
25
|
+
"directory": "apps/cli"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"dev": "tsc --watch",
|
|
30
|
+
"typecheck": "tsc --noEmit",
|
|
31
|
+
"test": "pnpm run build && node --test dist/synthesizeAgentReply.test.js",
|
|
32
|
+
"start": "node dist/index.js"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@eucode/agent": "workspace:*",
|
|
36
|
+
"@eucode/context": "workspace:*",
|
|
37
|
+
"@eucode/llm": "workspace:*",
|
|
38
|
+
"@eucode/shared": "workspace:*",
|
|
39
|
+
"@eucode/templates": "workspace:*",
|
|
40
|
+
"boxen": "^8.0.1",
|
|
41
|
+
"commander": "^13.1.0",
|
|
42
|
+
"ora": "^8.2.0",
|
|
43
|
+
"picocolors": "^1.1.1"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/node": "^22.10.5",
|
|
47
|
+
"typescript": "^5.7.3"
|
|
48
|
+
}
|
|
49
|
+
}
|