@arts1234567/arc-code 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/LICENSE +21 -0
- package/README.md +109 -0
- package/bin/arc.js +5 -0
- package/dist/agent/executor.js +78 -0
- package/dist/agent/executor.js.map +1 -0
- package/dist/agent/memory.js +57 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/orchestrator.js +153 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/planner.js +26 -0
- package/dist/agent/planner.js.map +1 -0
- package/dist/agent/retriever.js +151 -0
- package/dist/agent/retriever.js.map +1 -0
- package/dist/agent/verifier.js +24 -0
- package/dist/agent/verifier.js.map +1 -0
- package/dist/cli.js +33 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.js +47 -0
- package/dist/config.js.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/compaction.js +108 -0
- package/dist/llm/compaction.js.map +1 -0
- package/dist/llm/provider.js +201 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/llm/system.js +40 -0
- package/dist/llm/system.js.map +1 -0
- package/dist/llm/types.js +4 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/run-interactive.js +22 -0
- package/dist/run-interactive.js.map +1 -0
- package/dist/run-single.js +72 -0
- package/dist/run-single.js.map +1 -0
- package/dist/state.js +75 -0
- package/dist/state.js.map +1 -0
- package/dist/tools/delete.js +63 -0
- package/dist/tools/delete.js.map +1 -0
- package/dist/tools/edit.js +67 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/execute.js +85 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/index.js +36 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list.js +66 -0
- package/dist/tools/list.js.map +1 -0
- package/dist/tools/move.js +56 -0
- package/dist/tools/move.js.map +1 -0
- package/dist/tools/read.js +84 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/read_image.js +67 -0
- package/dist/tools/read_image.js.map +1 -0
- package/dist/tools/search.js +177 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/websearch.js +106 -0
- package/dist/tools/websearch.js.map +1 -0
- package/dist/tools/write.js +47 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/ui/ChatWindow.js +143 -0
- package/dist/ui/ChatWindow.js.map +1 -0
- package/dist/ui/InputBar.js +136 -0
- package/dist/ui/InputBar.js.map +1 -0
- package/dist/ui/ThinkingIndicator.js +67 -0
- package/dist/ui/ThinkingIndicator.js.map +1 -0
- package/dist/ui/commands.js +395 -0
- package/dist/ui/commands.js.map +1 -0
- package/dist/ui/mascot.js +41 -0
- package/dist/ui/mascot.js.map +1 -0
- package/dist/ui/theme.js +43 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/tui.js +297 -0
- package/dist/ui/tui.js.map +1 -0
- package/dist/ui/words.js +161 -0
- package/dist/ui/words.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// Arc-code Input Bar
|
|
2
|
+
// Premium terminal input with slash-command autocomplete palette,
|
|
3
|
+
// animated mascot, and polished visual feedback.
|
|
4
|
+
import React, { useState, useEffect } from "react";
|
|
5
|
+
import { Text, Box, useInput } from "ink";
|
|
6
|
+
import { Mascot } from "./mascot.js";
|
|
7
|
+
import { getCommandSuggestions } from "./commands.js";
|
|
8
|
+
export const InputBar = ({ onSubmit, disabled, working, mode = "build", }) => {
|
|
9
|
+
const [value, setValue] = useState("");
|
|
10
|
+
const [frame, setFrame] = useState(0);
|
|
11
|
+
// Index into command suggestion list for arrow-key navigation.
|
|
12
|
+
const [selectedIdx, setSelectedIdx] = useState(0);
|
|
13
|
+
// Mascot animation timer.
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const t = setInterval(() => setFrame((f) => (f + 1) % 4), 250);
|
|
16
|
+
return () => clearInterval(t);
|
|
17
|
+
}, []);
|
|
18
|
+
// Reset suggestion index whenever the typed value changes.
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
setSelectedIdx(0);
|
|
21
|
+
}, [value]);
|
|
22
|
+
// Compute live suggestions when value starts with "/".
|
|
23
|
+
const isSlash = value.startsWith("/") && !disabled;
|
|
24
|
+
const suggestions = isSlash
|
|
25
|
+
? getCommandSuggestions(value)
|
|
26
|
+
: [];
|
|
27
|
+
const clampedIdx = suggestions.length > 0
|
|
28
|
+
? Math.min(selectedIdx, suggestions.length - 1)
|
|
29
|
+
: 0;
|
|
30
|
+
useInput((input, key) => {
|
|
31
|
+
// Ctrl+C always exits — belt-and-suspenders (also caught globally in tui.tsx).
|
|
32
|
+
if (key.ctrl && input === "c") {
|
|
33
|
+
process.exit(0);
|
|
34
|
+
}
|
|
35
|
+
// Block all other input while the agent is working.
|
|
36
|
+
if (disabled)
|
|
37
|
+
return;
|
|
38
|
+
// Arrow key navigation through command suggestions.
|
|
39
|
+
if (key.upArrow) {
|
|
40
|
+
if (suggestions.length > 0) {
|
|
41
|
+
setSelectedIdx((i) => Math.max(0, i - 1));
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (key.downArrow) {
|
|
46
|
+
if (suggestions.length > 0) {
|
|
47
|
+
setSelectedIdx((i) => Math.min(suggestions.length - 1, i + 1));
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Tab autocompletes the selected suggestion.
|
|
52
|
+
if (key.tab) {
|
|
53
|
+
if (suggestions.length > 0) {
|
|
54
|
+
const suggestion = suggestions[clampedIdx];
|
|
55
|
+
setValue("/" + suggestion.name + " ");
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (key.return) {
|
|
60
|
+
if (value.trim().length === 0)
|
|
61
|
+
return;
|
|
62
|
+
// If arrow-navigating suggestions, Tab should complete — Enter submits as-is.
|
|
63
|
+
onSubmit(value.trim());
|
|
64
|
+
setValue("");
|
|
65
|
+
setSelectedIdx(0);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (key.backspace || key.delete) {
|
|
69
|
+
setValue((v) => v.slice(0, -1));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Ignore other special keys.
|
|
73
|
+
if (key.escape || key.leftArrow || key.rightArrow || key.pageUp || key.pageDown) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (input) {
|
|
77
|
+
setValue((v) => v + input);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
const isCommand = value.startsWith("/");
|
|
81
|
+
const brandColor = mode === "plan" ? "#00E5FF" : "#FF6B35";
|
|
82
|
+
const glowColor = mode === "plan" ? "#18FFFF" : "#FFB74D";
|
|
83
|
+
const workingColor = mode === "plan" ? "#84FFFF" : "#FF8C42";
|
|
84
|
+
const label = mode === "plan" ? "Arc 3.4 [Plan]" : "Arc 3.4 [Build]";
|
|
85
|
+
const promptColor = disabled ? "#444" : isCommand ? glowColor : brandColor;
|
|
86
|
+
const textColor = disabled ? "#444" : isCommand ? (mode === "plan" ? "#E0F7FA" : "#FFD180") : "#F5F5F5";
|
|
87
|
+
const borderColor = working
|
|
88
|
+
? brandColor
|
|
89
|
+
: isCommand
|
|
90
|
+
? glowColor
|
|
91
|
+
: "#3A3A3A";
|
|
92
|
+
const hintText = working
|
|
93
|
+
? " working… Ctrl+C exits"
|
|
94
|
+
: isCommand
|
|
95
|
+
? suggestions.length > 0
|
|
96
|
+
? ` ↑↓ navigate · Tab complete · Enter run`
|
|
97
|
+
: ` Unknown command — type /help`
|
|
98
|
+
: " Enter sends · /help for commands · Ctrl+C exits";
|
|
99
|
+
return React.createElement(Box, { flexDirection: "column" },
|
|
100
|
+
// ── Command Palette Suggestions ──────────────────────────────────────────
|
|
101
|
+
suggestions.length > 0
|
|
102
|
+
? React.createElement(Box, {
|
|
103
|
+
flexDirection: "column",
|
|
104
|
+
borderStyle: "round",
|
|
105
|
+
borderColor: glowColor,
|
|
106
|
+
paddingX: 1,
|
|
107
|
+
marginBottom: 0,
|
|
108
|
+
}, React.createElement(Text, { color: glowColor, bold: true }, " Commands "), ...suggestions.slice(0, 6).map((cmd, i) => React.createElement(Box, { key: cmd.name, flexDirection: "row" }, React.createElement(Text, {
|
|
109
|
+
color: i === clampedIdx ? "#1A1A1A" : "#888",
|
|
110
|
+
backgroundColor: i === clampedIdx ? workingColor : undefined,
|
|
111
|
+
bold: i === clampedIdx,
|
|
112
|
+
}, ` /${cmd.name.padEnd(10)} `), React.createElement(Text, { color: i === clampedIdx ? (mode === "plan" ? "#E0F7FA" : "#FFD180") : "#555" }, cmd.aliases && cmd.aliases.length > 0
|
|
113
|
+
? `(${cmd.aliases.map(a => `/${a}`).join(", ")}) ${cmd.description}`
|
|
114
|
+
: cmd.description))))
|
|
115
|
+
: null,
|
|
116
|
+
// ── Input Row ────────────────────────────────────────────────────────────
|
|
117
|
+
React.createElement(Box, {
|
|
118
|
+
borderStyle: "round",
|
|
119
|
+
borderColor,
|
|
120
|
+
paddingX: 1,
|
|
121
|
+
flexDirection: "row",
|
|
122
|
+
},
|
|
123
|
+
// Mascot
|
|
124
|
+
React.createElement(Mascot, { frame, dim: disabled }),
|
|
125
|
+
// Input area
|
|
126
|
+
React.createElement(Box, { marginLeft: 1, flexDirection: "column", flexGrow: 1 },
|
|
127
|
+
// Label + status row
|
|
128
|
+
React.createElement(Box, { flexDirection: "row", justifyContent: "space-between" }, React.createElement(Text, { color: brandColor, bold: true }, label), working
|
|
129
|
+
? React.createElement(Text, { color: workingColor, bold: true }, "● working")
|
|
130
|
+
: React.createElement(Text, { color: "#4CAF50" }, "○ idle")),
|
|
131
|
+
// Prompt line
|
|
132
|
+
React.createElement(Box, { flexDirection: "row" }, React.createElement(Text, { color: promptColor, bold: true }, "❯ "), React.createElement(Text, { color: textColor }, disabled ? "(waiting for Arc…)" : value + "▌")),
|
|
133
|
+
// Hint line
|
|
134
|
+
React.createElement(Text, { color: "#555", dimColor: true }, hintText))));
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=InputBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputBar.js","sourceRoot":"","sources":["../../src/ui/InputBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Arc-code Thinking Indicator
|
|
2
|
+
// Two-row live strip shown while the model is reasoning:
|
|
3
|
+
// row 1 — spinner + rotating word + step counter
|
|
4
|
+
// row 2 — progress bar + status text
|
|
5
|
+
import React, { useEffect, useState } from "react";
|
|
6
|
+
import { Text, Box } from "ink";
|
|
7
|
+
import spinners from "cli-spinners";
|
|
8
|
+
import { THINKING_WORDS } from "./words.js";
|
|
9
|
+
export const ThinkingIndicator = ({ active, status, iteration, mode = "build", }) => {
|
|
10
|
+
// spinFrame drives the dots animation at the correct frame rate (~80ms).
|
|
11
|
+
const [spinFrame, setSpinFrame] = useState(0);
|
|
12
|
+
// wordFrame drives the word rotation (one word every ~1.5 s).
|
|
13
|
+
const [wordFrame, setWordFrame] = useState(0);
|
|
14
|
+
// elapsedSec tracks how long the current request has been running.
|
|
15
|
+
const [elapsedSec, setElapsedSec] = useState(0);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (!active) {
|
|
18
|
+
// Reset counters when deactivated.
|
|
19
|
+
setSpinFrame(0);
|
|
20
|
+
setWordFrame(0);
|
|
21
|
+
setElapsedSec(0);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const dots = spinners.dots;
|
|
25
|
+
const spinTimer = setInterval(() => setSpinFrame((f) => f + 1), dots.interval);
|
|
26
|
+
const wordTimer = setInterval(() => setWordFrame((f) => f + 1), 1500);
|
|
27
|
+
const secTimer = setInterval(() => setElapsedSec((s) => s + 1), 1000);
|
|
28
|
+
return () => {
|
|
29
|
+
clearInterval(spinTimer);
|
|
30
|
+
clearInterval(wordTimer);
|
|
31
|
+
clearInterval(secTimer);
|
|
32
|
+
};
|
|
33
|
+
}, [active]);
|
|
34
|
+
if (!active)
|
|
35
|
+
return React.createElement(Box, { height: 0 });
|
|
36
|
+
const dots = spinners.dots;
|
|
37
|
+
const spinnerChar = dots.frames[spinFrame % dots.frames.length];
|
|
38
|
+
const word = THINKING_WORDS[wordFrame % THINKING_WORDS.length];
|
|
39
|
+
// Progress bar — fills slowly, resets every 60 word-frames (~90 seconds).
|
|
40
|
+
const BAR_WIDTH = 28;
|
|
41
|
+
const progress = Math.min(1, (wordFrame % 60) / 60);
|
|
42
|
+
const filled = Math.round(progress * BAR_WIDTH);
|
|
43
|
+
const bar = "▰".repeat(filled) + "▱".repeat(BAR_WIDTH - filled);
|
|
44
|
+
// Elapsed time display.
|
|
45
|
+
const mins = Math.floor(elapsedSec / 60);
|
|
46
|
+
const secs = elapsedSec % 60;
|
|
47
|
+
const elapsed = mins > 0
|
|
48
|
+
? `${mins}m ${secs.toString().padStart(2, "0")}s`
|
|
49
|
+
: `${secs}s`;
|
|
50
|
+
const brandColor = mode === "plan" ? "#00E5FF" : "#FF6B35";
|
|
51
|
+
const workingColor = mode === "plan" ? "#84FFFF" : "#FF8C42";
|
|
52
|
+
return React.createElement(Box, {
|
|
53
|
+
flexDirection: "column",
|
|
54
|
+
borderStyle: "single",
|
|
55
|
+
borderColor: "#2A2A2A",
|
|
56
|
+
paddingX: 1,
|
|
57
|
+
},
|
|
58
|
+
// Row 1: spinner + word + step + elapsed
|
|
59
|
+
React.createElement(Box, { flexDirection: "row", justifyContent: "space-between" }, React.createElement(Box, { flexDirection: "row" }, React.createElement(Text, { color: workingColor, bold: true }, spinnerChar + " "), React.createElement(Text, { color: workingColor }, word + "…"), iteration !== undefined
|
|
60
|
+
? React.createElement(Text, { color: "#555" }, ` step ${iteration}`)
|
|
61
|
+
: null), React.createElement(Text, { color: "#444", dimColor: true }, elapsed)),
|
|
62
|
+
// Row 2: progress bar + status
|
|
63
|
+
React.createElement(Box, { flexDirection: "row", justifyContent: "space-between" }, React.createElement(Text, { color: brandColor }, bar), status
|
|
64
|
+
? React.createElement(Text, { color: "#555", dimColor: true }, " " + status)
|
|
65
|
+
: null));
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=ThinkingIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThinkingIndicator.js","sourceRoot":"","sources":["../../src/ui/ThinkingIndicator.tsx"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,yDAAyD;AACzD,mDAAmD;AACnD,uCAAuC;AAEvC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAS5C,MAAM,CAAC,MAAM,iBAAiB,GAA4B,CAAC,EACzD,MAAM,EACN,MAAM,EACN,SAAS,EACT,IAAI,GAAG,OAAO,GACf,EAAE,EAAE;IACH,yEAAyE;IACzE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,8DAA8D;IAC9D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,mEAAmE;IACnE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,mCAAmC;YACnC,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,aAAa,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,SAAS,GAAG,WAAW,CAC3B,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAChC,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAE5D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAE/D,0EAA0E;IAC1E,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAEhE,wBAAwB;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,UAAU,GAAG,EAAE,CAAC;IAC7B,MAAM,OAAO,GACX,IAAI,GAAG,CAAC;QACN,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG;QACjD,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;IAEjB,MAAM,UAAU,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7D,OAAO,KAAK,CAAC,aAAa,CACxB,GAAG,EACH;QACE,aAAa,EAAE,QAAQ;QACvB,WAAW,EAAE,QAAiB;QAC9B,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,CAAC;KACZ;IACD,yCAAyC;IACzC,KAAK,CAAC,aAAa,CACjB,GAAG,EACH,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,EACzD,KAAK,CAAC,aAAa,CACjB,GAAG,EACH,EAAE,aAAa,EAAE,KAAK,EAAE,EACxB,KAAK,CAAC,aAAa,CACjB,IAAI,EACJ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,EACnC,WAAW,GAAG,GAAG,CAClB,EACD,KAAK,CAAC,aAAa,CACjB,IAAI,EACJ,EAAE,KAAK,EAAE,YAAY,EAAE,EACvB,IAAI,GAAG,GAAG,CACX,EACD,SAAS,KAAK,SAAS;QACrB,CAAC,CAAC,KAAK,CAAC,aAAa,CACjB,IAAI,EACJ,EAAE,KAAK,EAAE,MAAM,EAAE,EACjB,UAAU,SAAS,EAAE,CACtB;QACH,CAAC,CAAC,IAAI,CACT,EACD,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CACtE;IACD,+BAA+B;IAC/B,KAAK,CAAC,aAAa,CACjB,GAAG,EACH,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,EACzD,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,EACrD,MAAM;QACJ,CAAC,CAAC,KAAK,CAAC,aAAa,CACjB,IAAI,EACJ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EACjC,GAAG,GAAG,MAAM,CACb;QACH,CAAC,CAAC,IAAI,CACT,CACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
// Arc-code Slash Command Registry
|
|
2
|
+
// All /commands available in the TUI. Each command has a name, aliases,
|
|
3
|
+
// description, and an execute function that updates TUI state.
|
|
4
|
+
import { promises as fs } from "fs";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import { forceCompact } from "../llm/compaction.js";
|
|
7
|
+
import { CONFIG } from "../config.js";
|
|
8
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
9
|
+
// Helpers
|
|
10
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
11
|
+
function box(title, lines) {
|
|
12
|
+
const W = 57;
|
|
13
|
+
const pad = Math.max(0, Math.floor((W - 2 - title.length) / 2));
|
|
14
|
+
const lpad = " ".repeat(pad);
|
|
15
|
+
const rpad = " ".repeat(W - 2 - title.length - pad);
|
|
16
|
+
const top = `┌${"─".repeat(W - 2)}┐`;
|
|
17
|
+
const mid = `│${lpad}${title}${rpad}│`;
|
|
18
|
+
const bot = `└${"─".repeat(W - 2)}┘`;
|
|
19
|
+
return [top, mid, bot, "", ...lines].join("\n");
|
|
20
|
+
}
|
|
21
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
22
|
+
// Command definitions
|
|
23
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
24
|
+
const cmdHelp = {
|
|
25
|
+
name: "help",
|
|
26
|
+
aliases: ["h", "?"],
|
|
27
|
+
description: "Show all available slash commands",
|
|
28
|
+
execute: (_args, ctx) => {
|
|
29
|
+
const lines = [];
|
|
30
|
+
for (const cmd of ALL_COMMANDS) {
|
|
31
|
+
const aliasStr = cmd.aliases
|
|
32
|
+
? ` (${cmd.aliases.map((a) => `/${a}`).join(", ")})`
|
|
33
|
+
: "";
|
|
34
|
+
const usageStr = cmd.usage ? ` /${cmd.name} ${cmd.usage}` : "";
|
|
35
|
+
lines.push(` /${cmd.name}${aliasStr}`);
|
|
36
|
+
lines.push(` ${cmd.description}${usageStr}`);
|
|
37
|
+
lines.push("");
|
|
38
|
+
}
|
|
39
|
+
lines.push(" Ctrl+C — Exit at any time");
|
|
40
|
+
lines.push(" Escape — Cancel current task");
|
|
41
|
+
ctx.addMessage("system", box("Arc 3.4 Ultra — Commands", lines));
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
const cmdContext = {
|
|
45
|
+
name: "context",
|
|
46
|
+
aliases: ["ctx"],
|
|
47
|
+
description: "Show context window usage and conversation statistics",
|
|
48
|
+
execute: (_args, ctx) => {
|
|
49
|
+
const { state } = ctx;
|
|
50
|
+
const tokens = state.totalTokens;
|
|
51
|
+
const limit = CONFIG.CONTEXT_LIMIT;
|
|
52
|
+
const pct = Math.min(100, (tokens / limit) * 100);
|
|
53
|
+
const barWidth = 42;
|
|
54
|
+
const filled = Math.round((pct / 100) * barWidth);
|
|
55
|
+
const pctBar = "█".repeat(filled) + "░".repeat(barWidth - filled);
|
|
56
|
+
const compactAt = Math.round(CONFIG.CONTEXT_LIMIT * CONFIG.COMPACT_THRESHOLD);
|
|
57
|
+
// Count message types in state.messages (actual LLM history).
|
|
58
|
+
let userCount = 0;
|
|
59
|
+
let assistantCount = 0;
|
|
60
|
+
let toolCount = 0;
|
|
61
|
+
for (const m of state.messages) {
|
|
62
|
+
if (m.role === "user")
|
|
63
|
+
userCount++;
|
|
64
|
+
else if (m.role === "assistant")
|
|
65
|
+
assistantCount++;
|
|
66
|
+
else if (m.role === "tool")
|
|
67
|
+
toolCount++;
|
|
68
|
+
}
|
|
69
|
+
const ctxStatus = pct > 80 ? "⚠ HIGH — consider /compact" :
|
|
70
|
+
pct > 60 ? "● moderate" :
|
|
71
|
+
"✓ healthy";
|
|
72
|
+
const lines = [
|
|
73
|
+
` Model Arc 3.4 Ultra`,
|
|
74
|
+
` Context limit ${limit.toLocaleString()} tokens`,
|
|
75
|
+
` Used ${tokens.toLocaleString()} tokens (${pct.toFixed(1)}%)`,
|
|
76
|
+
` Auto-compact ≥ ${compactAt.toLocaleString()} tokens (${Math.round(CONFIG.COMPACT_THRESHOLD * 100)}%)`,
|
|
77
|
+
` Status ${ctxStatus}`,
|
|
78
|
+
"",
|
|
79
|
+
` [${pctBar}]`,
|
|
80
|
+
` ${pct.toFixed(1)}% of ${(limit / 1000).toFixed(0)}K`,
|
|
81
|
+
"",
|
|
82
|
+
` LLM History ${state.messages.length} messages`,
|
|
83
|
+
` ├ User ${userCount}`,
|
|
84
|
+
` ├ Assistant ${assistantCount}`,
|
|
85
|
+
` └ Tool ${toolCount}`,
|
|
86
|
+
"",
|
|
87
|
+
` Working dir ${state.cwd}`,
|
|
88
|
+
` Iteration ${state.iteration}`,
|
|
89
|
+
` Temperature ${CONFIG.TEMPERATURE}`,
|
|
90
|
+
];
|
|
91
|
+
ctx.addMessage("system", box("Context Window", lines));
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
const cmdCompact = {
|
|
95
|
+
name: "compact",
|
|
96
|
+
description: "Summarise older messages to free up context window space",
|
|
97
|
+
execute: async (_args, ctx) => {
|
|
98
|
+
const { state } = ctx;
|
|
99
|
+
if (state.messages.length < 4) {
|
|
100
|
+
ctx.addMessage("system", " Nothing to compact — conversation history is too short (< 4 messages).");
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
ctx.setWorking(true, "compacting context");
|
|
104
|
+
try {
|
|
105
|
+
const result = await forceCompact(state.messages);
|
|
106
|
+
if (!result) {
|
|
107
|
+
ctx.addMessage("system", " ✓ Not enough history to compact yet.");
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
state.setMessages(result.messages);
|
|
111
|
+
ctx.addMessage("compaction", `Compacted ${result.droppedCount} older message(s) into a summary. Context reduced.`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
ctx.addMessage("system", ` ✗ Compaction failed: ${err?.message ?? err}`);
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
ctx.setWorking(false);
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
const cmdClear = {
|
|
123
|
+
name: "clear",
|
|
124
|
+
aliases: ["cls"],
|
|
125
|
+
description: "Clear the chat display and reset LLM conversation history",
|
|
126
|
+
execute: (_args, ctx) => {
|
|
127
|
+
// clearMessages resets to banner + optional confirmation in one setState call.
|
|
128
|
+
ctx.state.setMessages([]);
|
|
129
|
+
ctx.state.iteration = 0;
|
|
130
|
+
ctx.clearMessages(" ✓ Conversation cleared. Fresh start.");
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
const cmdMemory = {
|
|
134
|
+
name: "memory",
|
|
135
|
+
aliases: ["mem"],
|
|
136
|
+
description: "Show the agent's persisted long-term memory facts",
|
|
137
|
+
execute: (_args, ctx) => {
|
|
138
|
+
const facts = Array.from(ctx.memory.facts.values());
|
|
139
|
+
if (facts.length === 0) {
|
|
140
|
+
ctx.addMessage("system", " No long-term memory facts stored yet.\n Arc will remember things you explicitly ask it to.");
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const lines = [];
|
|
144
|
+
for (const f of facts) {
|
|
145
|
+
const ts = new Date(f.updated).toLocaleString();
|
|
146
|
+
lines.push(` ${f.key}`);
|
|
147
|
+
lines.push(` ${f.value}`);
|
|
148
|
+
lines.push(` Last updated: ${ts}`);
|
|
149
|
+
lines.push("");
|
|
150
|
+
}
|
|
151
|
+
ctx.addMessage("system", box("Long-Term Memory", lines));
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
const cmdTools = {
|
|
155
|
+
name: "tools",
|
|
156
|
+
description: "List all available agent tools with descriptions",
|
|
157
|
+
execute: (_args, ctx) => {
|
|
158
|
+
const lines = [
|
|
159
|
+
" read_file(path)",
|
|
160
|
+
" Read a text file from the filesystem.",
|
|
161
|
+
"",
|
|
162
|
+
" write_file(path, content)",
|
|
163
|
+
" Create or overwrite a file with provided content.",
|
|
164
|
+
"",
|
|
165
|
+
" list_directory(path?)",
|
|
166
|
+
" List immediate entries of a directory.",
|
|
167
|
+
" Defaults to the current working directory.",
|
|
168
|
+
"",
|
|
169
|
+
" search_files(pattern, path?, file_glob?)",
|
|
170
|
+
" Search file contents with ripgrep (or JS fallback).",
|
|
171
|
+
" Supports literal strings and regex patterns.",
|
|
172
|
+
"",
|
|
173
|
+
" execute_command(cmd, timeout_ms?)",
|
|
174
|
+
" Run a shell command. Returns stdout, stderr, exit code.",
|
|
175
|
+
" Default timeout: 60s.",
|
|
176
|
+
];
|
|
177
|
+
ctx.addMessage("system", box("Available Tools", lines));
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
const cmdCwd = {
|
|
181
|
+
name: "cwd",
|
|
182
|
+
description: "Show the current working directory",
|
|
183
|
+
execute: (_args, ctx) => {
|
|
184
|
+
ctx.addMessage("system", ` Working directory: ${ctx.state.cwd}`);
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
const cmdModel = {
|
|
188
|
+
name: "model",
|
|
189
|
+
description: "Show current model and generation settings",
|
|
190
|
+
execute: (_args, ctx) => {
|
|
191
|
+
const lines = [
|
|
192
|
+
` Name ${CONFIG.MODEL_NAME}`,
|
|
193
|
+
` Context ${CONFIG.CONTEXT_LIMIT.toLocaleString()} tokens`,
|
|
194
|
+
` Max output ${CONFIG.MAX_TOKENS.toLocaleString()} tokens`,
|
|
195
|
+
` Temperature ${CONFIG.TEMPERATURE}`,
|
|
196
|
+
` Top-P ${CONFIG.TOP_P}`,
|
|
197
|
+
` Thinking ${CONFIG.THINKING_ENABLED ? "enabled — always on" : "disabled"}`,
|
|
198
|
+
` Streaming ${CONFIG.STREAM ? "yes" : "no"}`,
|
|
199
|
+
];
|
|
200
|
+
ctx.addMessage("system", box("Model Configuration", lines));
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
const cmdReset = {
|
|
204
|
+
name: "reset",
|
|
205
|
+
description: "Full session reset — clears display, LLM history, and in-memory facts",
|
|
206
|
+
execute: (_args, ctx) => {
|
|
207
|
+
ctx.state.setMessages([]);
|
|
208
|
+
ctx.state.iteration = 0;
|
|
209
|
+
ctx.memory.facts.clear();
|
|
210
|
+
ctx.clearMessages(" ✓ Full reset complete. All state cleared.");
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
const cmdStop = {
|
|
214
|
+
name: "stop",
|
|
215
|
+
aliases: ["cancel"],
|
|
216
|
+
description: "Cancel the currently running agent task",
|
|
217
|
+
execute: (_args, ctx) => {
|
|
218
|
+
ctx.cancelOrchestrator();
|
|
219
|
+
ctx.addMessage("system", " ✓ Task cancellation requested.");
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
const cmdSave = {
|
|
223
|
+
name: "save",
|
|
224
|
+
usage: "[filename]",
|
|
225
|
+
description: "Save the current conversation to a markdown file",
|
|
226
|
+
execute: async (args, ctx) => {
|
|
227
|
+
const { state } = ctx;
|
|
228
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
229
|
+
const filename = args.trim() || `arc-conversation-${timestamp}.md`;
|
|
230
|
+
const filePath = path.isAbsolute(filename)
|
|
231
|
+
? filename
|
|
232
|
+
: path.join(state.cwd, filename);
|
|
233
|
+
const lines = [
|
|
234
|
+
`# Arc 3.4 Ultra — Conversation`,
|
|
235
|
+
`**Date:** ${new Date().toLocaleString()}`,
|
|
236
|
+
`**Directory:** \`${state.cwd}\``,
|
|
237
|
+
`**Messages:** ${state.messages.length}`,
|
|
238
|
+
"",
|
|
239
|
+
"---",
|
|
240
|
+
"",
|
|
241
|
+
];
|
|
242
|
+
for (const m of state.messages) {
|
|
243
|
+
if (m.role === "user") {
|
|
244
|
+
lines.push(`## You\n\n${m.content ?? ""}\n`);
|
|
245
|
+
}
|
|
246
|
+
else if (m.role === "assistant") {
|
|
247
|
+
const text = m.content ?? "";
|
|
248
|
+
if (text)
|
|
249
|
+
lines.push(`## Arc 3.4 Ultra\n\n${text}\n`);
|
|
250
|
+
if (m.tool_calls && m.tool_calls.length > 0) {
|
|
251
|
+
for (const tc of m.tool_calls) {
|
|
252
|
+
lines.push(`### Tool: \`${tc.function.name}\`\n\`\`\`json\n${tc.function.arguments}\n\`\`\`\n`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else if (m.role === "tool") {
|
|
257
|
+
const preview = typeof m.content === "string"
|
|
258
|
+
? m.content.slice(0, 500) + (m.content.length > 500 ? "\n…[truncated]" : "")
|
|
259
|
+
: "";
|
|
260
|
+
lines.push(`### Tool Result: \`${m.name ?? "tool"}\`\n\`\`\`\n${preview}\n\`\`\`\n`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
try {
|
|
264
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
265
|
+
await fs.writeFile(filePath, lines.join("\n"), "utf-8");
|
|
266
|
+
ctx.addMessage("system", ` ✓ Conversation saved to:\n ${filePath}`);
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
ctx.addMessage("system", ` ✗ Failed to save: ${err?.message ?? err}`);
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
const cmdHistory = {
|
|
274
|
+
name: "history",
|
|
275
|
+
aliases: ["hist"],
|
|
276
|
+
description: "Show a summary of the current LLM conversation history",
|
|
277
|
+
execute: (_args, ctx) => {
|
|
278
|
+
const msgs = ctx.state.messages;
|
|
279
|
+
if (msgs.length === 0) {
|
|
280
|
+
ctx.addMessage("system", " No conversation history yet.");
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
const lines = [];
|
|
284
|
+
for (let i = 0; i < msgs.length; i++) {
|
|
285
|
+
const m = msgs[i];
|
|
286
|
+
let preview = "";
|
|
287
|
+
if (typeof m.content === "string" && m.content) {
|
|
288
|
+
preview = m.content.slice(0, 80).replace(/\n/g, " ");
|
|
289
|
+
if (m.content.length > 80)
|
|
290
|
+
preview += "…";
|
|
291
|
+
}
|
|
292
|
+
else if (m.tool_calls) {
|
|
293
|
+
preview = `[tool: ${m.tool_calls.map((t) => t.function.name).join(", ")}]`;
|
|
294
|
+
}
|
|
295
|
+
const role = m.role.padEnd(9);
|
|
296
|
+
lines.push(` ${String(i + 1).padStart(3)} ${role} ${preview}`);
|
|
297
|
+
}
|
|
298
|
+
ctx.addMessage("system", box(`History (${msgs.length} messages)`, lines));
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
const cmdPlan = {
|
|
302
|
+
name: "plan",
|
|
303
|
+
description: "Switch to Plan mode (architectural design, research, no direct edits)",
|
|
304
|
+
execute: (_args, ctx) => {
|
|
305
|
+
ctx.state.mode = "plan";
|
|
306
|
+
ctx.addMessage("system", " ◆ Switched to Plan mode. Ready to architect and research.");
|
|
307
|
+
},
|
|
308
|
+
};
|
|
309
|
+
const cmdBuild = {
|
|
310
|
+
name: "build",
|
|
311
|
+
description: "Switch to Build mode (default, actively modifying code)",
|
|
312
|
+
execute: (_args, ctx) => {
|
|
313
|
+
ctx.state.mode = "build";
|
|
314
|
+
ctx.addMessage("system", " ◆ Switched to Build mode. Ready to write code.");
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
318
|
+
// Registry
|
|
319
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
320
|
+
export const ALL_COMMANDS = [
|
|
321
|
+
cmdHelp,
|
|
322
|
+
cmdContext,
|
|
323
|
+
cmdCompact,
|
|
324
|
+
cmdClear,
|
|
325
|
+
cmdMemory,
|
|
326
|
+
cmdTools,
|
|
327
|
+
cmdHistory,
|
|
328
|
+
cmdModel,
|
|
329
|
+
cmdSave,
|
|
330
|
+
cmdStop,
|
|
331
|
+
cmdReset,
|
|
332
|
+
cmdPlan,
|
|
333
|
+
cmdBuild,
|
|
334
|
+
];
|
|
335
|
+
/** Flat lookup: name + all aliases → command */
|
|
336
|
+
const COMMAND_MAP = new Map();
|
|
337
|
+
for (const cmd of ALL_COMMANDS) {
|
|
338
|
+
COMMAND_MAP.set(cmd.name, cmd);
|
|
339
|
+
for (const alias of cmd.aliases ?? []) {
|
|
340
|
+
COMMAND_MAP.set(alias, cmd);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Parse and execute a slash command.
|
|
345
|
+
* Returns true if handled (even unknown), false if not a slash command at all.
|
|
346
|
+
*/
|
|
347
|
+
export async function tryRunCommand(input, ctx) {
|
|
348
|
+
if (!input.startsWith("/"))
|
|
349
|
+
return false;
|
|
350
|
+
const trimmed = input.slice(1).trim();
|
|
351
|
+
if (!trimmed) {
|
|
352
|
+
// Bare "/" — show help.
|
|
353
|
+
await cmdHelp.execute("", ctx);
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
const spaceIdx = trimmed.indexOf(" ");
|
|
357
|
+
const name = (spaceIdx === -1 ? trimmed : trimmed.slice(0, spaceIdx)).toLowerCase();
|
|
358
|
+
const args = spaceIdx === -1 ? "" : trimmed.slice(spaceIdx + 1);
|
|
359
|
+
const cmd = COMMAND_MAP.get(name);
|
|
360
|
+
if (!cmd) {
|
|
361
|
+
ctx.addMessage("system", ` Unknown command: /${name}\n Type /help to see all available commands.`);
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
await cmd.execute(args, ctx);
|
|
365
|
+
return true;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Autocomplete suggestions for a partial command string (e.g. "/co").
|
|
369
|
+
* Shows all commands for bare "/".
|
|
370
|
+
*/
|
|
371
|
+
export function getCommandSuggestions(partial) {
|
|
372
|
+
if (!partial.startsWith("/"))
|
|
373
|
+
return [];
|
|
374
|
+
const q = partial.slice(1).toLowerCase();
|
|
375
|
+
if (q === "")
|
|
376
|
+
return ALL_COMMANDS;
|
|
377
|
+
const seen = new Set();
|
|
378
|
+
const exact = [];
|
|
379
|
+
const prefix = [];
|
|
380
|
+
for (const cmd of ALL_COMMANDS) {
|
|
381
|
+
if (seen.has(cmd))
|
|
382
|
+
continue;
|
|
383
|
+
const names = [cmd.name, ...(cmd.aliases ?? [])];
|
|
384
|
+
if (names.some((n) => n === q)) {
|
|
385
|
+
exact.push(cmd);
|
|
386
|
+
seen.add(cmd);
|
|
387
|
+
}
|
|
388
|
+
else if (names.some((n) => n.startsWith(q))) {
|
|
389
|
+
prefix.push(cmd);
|
|
390
|
+
seen.add(cmd);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return [...exact, ...prefix];
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"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"}
|