tellrun 1.0.1 → 1.1.2
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 +144 -108
- package/README.zh-CN.md +207 -0
- package/dist/agents/codex.js +225 -80
- package/dist/agents/codex.js.map +1 -1
- package/dist/cli.js +39 -39
- package/dist/cli.js.map +1 -1
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/core/relay.js +80 -44
- package/dist/core/relay.js.map +1 -1
- package/dist/im/telegram.js +90 -14
- package/dist/im/telegram.js.map +1 -1
- package/dist/logger.js +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/main.js +12 -12
- package/dist/main.js.map +1 -1
- package/dist/storage/schema.js +8 -1
- package/dist/storage/schema.js.map +1 -1
- package/dist/storage/store.js +88 -21
- package/dist/storage/store.js.map +1 -1
- package/dist/systemd.js +17 -17
- package/dist/systemd.js.map +1 -1
- package/docs/architecture.md +32 -18
- package/docs/prd.md +9 -9
- package/package.json +32 -5
package/dist/cli.js
CHANGED
|
@@ -12,69 +12,69 @@ import { manageService } from "./systemd.js";
|
|
|
12
12
|
/** 全局入口只注册命令;业务入口仅在 run 时动态加载。 */
|
|
13
13
|
const program = new Command()
|
|
14
14
|
.name("tellrun")
|
|
15
|
-
.description("
|
|
16
|
-
.version(JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version, "-V, --version", "
|
|
17
|
-
.helpOption("-h, --help", "
|
|
18
|
-
.addHelpCommand("help [command]", "
|
|
15
|
+
.description("Chat with Codex via Telegram")
|
|
16
|
+
.version(JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version, "-V, --version", "Show version")
|
|
17
|
+
.helpOption("-h, --help", "Show help")
|
|
18
|
+
.addHelpCommand("help [command]", "Show command help")
|
|
19
19
|
.showHelpAfterError()
|
|
20
20
|
.exitOverride();
|
|
21
21
|
program
|
|
22
22
|
.command("setup")
|
|
23
|
-
.description("
|
|
23
|
+
.description("Configure Tellrun and start the service")
|
|
24
24
|
.action(async () => {
|
|
25
25
|
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
26
|
-
throw new Error("setup
|
|
26
|
+
throw new Error("Run tellrun setup in an interactive terminal.");
|
|
27
27
|
}
|
|
28
|
-
p.intro("Tellrun
|
|
28
|
+
p.intro("Tellrun setup");
|
|
29
29
|
let current;
|
|
30
30
|
try {
|
|
31
31
|
current = loadConfig();
|
|
32
32
|
}
|
|
33
33
|
catch {
|
|
34
34
|
if (existsSync(join(appDirectory, "config.json"))) {
|
|
35
|
-
p.log.warn("
|
|
35
|
+
p.log.warn("Could not load config. It will be kept until you save.");
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
p.log.info("
|
|
38
|
+
p.log.info("Config: ~/.tellrun/config.json");
|
|
39
39
|
const answers = await p.group({
|
|
40
40
|
token: () => p.text({
|
|
41
|
-
message: current ? "Telegram
|
|
41
|
+
message: current ? "Telegram bot token (blank to keep)" : "Telegram bot token",
|
|
42
42
|
validate: (value) => configSchema.shape.telegram.shape.token.safeParse(value?.trim() || current?.telegram.token).success
|
|
43
43
|
? undefined
|
|
44
|
-
: "
|
|
44
|
+
: "Enter a valid bot token.",
|
|
45
45
|
}),
|
|
46
46
|
ownerId: () => p.text({
|
|
47
|
-
message: "
|
|
47
|
+
message: "Your Telegram user ID",
|
|
48
48
|
initialValue: current ? String(current.telegram.ownerId) : "",
|
|
49
49
|
validate: (value) => configSchema.shape.telegram.shape.ownerId.safeParse(value).success
|
|
50
50
|
? undefined
|
|
51
|
-
: "
|
|
51
|
+
: "Enter a positive numeric user ID.",
|
|
52
52
|
}),
|
|
53
53
|
codexPath: () => p.text({
|
|
54
|
-
message: "Codex
|
|
54
|
+
message: "Codex command or path",
|
|
55
55
|
initialValue: current?.codexPath ?? process.env.CODEX_PATH ?? "codex",
|
|
56
|
-
validate: (value) => (value?.trim() ? undefined : "
|
|
56
|
+
validate: (value) => (value?.trim() ? undefined : "Enter a Codex command or path."),
|
|
57
57
|
}),
|
|
58
58
|
launch: () => process.platform === "linux"
|
|
59
59
|
? p.select({
|
|
60
|
-
message: "
|
|
60
|
+
message: "After setup",
|
|
61
61
|
options: [
|
|
62
|
-
{ value: "boot", label: "
|
|
63
|
-
{ value: "start", label: "
|
|
64
|
-
{ value: "later", label: "
|
|
62
|
+
{ value: "boot", label: "Start or restart, enable at boot" },
|
|
63
|
+
{ value: "start", label: "Start or restart" },
|
|
64
|
+
{ value: "later", label: "Save only" },
|
|
65
65
|
],
|
|
66
66
|
})
|
|
67
67
|
: Promise.resolve("later"),
|
|
68
68
|
}, {
|
|
69
69
|
onCancel: () => {
|
|
70
|
-
p.cancel("
|
|
71
|
-
throw new CommanderError(130, "setup.cancelled", "
|
|
70
|
+
p.cancel("Setup cancelled. Config unchanged.");
|
|
71
|
+
throw new CommanderError(130, "setup.cancelled", "Setup cancelled.");
|
|
72
72
|
},
|
|
73
73
|
});
|
|
74
74
|
/** 命令名按 PATH 查找,指定路径直接检查可执行性。 */
|
|
75
75
|
const executable = await which(answers.codexPath.trim(), { nothrow: true });
|
|
76
76
|
if (!executable)
|
|
77
|
-
throw new Error("
|
|
77
|
+
throw new Error("Codex not found. Check its path; config unchanged.");
|
|
78
78
|
const config = configSchema.parse({
|
|
79
79
|
telegram: {
|
|
80
80
|
token: answers.token.trim() || current?.telegram.token,
|
|
@@ -87,63 +87,63 @@ program
|
|
|
87
87
|
await createCodexAgent(config.codexPath);
|
|
88
88
|
}
|
|
89
89
|
catch {
|
|
90
|
-
throw new Error("Codex
|
|
90
|
+
throw new Error("Codex check failed. Check its path and permissions; config unchanged.");
|
|
91
91
|
}
|
|
92
92
|
/** 校验完成后在同目录原子替换,取消或失败时不留下半份配置。 */
|
|
93
93
|
mkdirSync(appDirectory, { recursive: true, mode: 0o700 });
|
|
94
94
|
chmodSync(appDirectory, 0o700);
|
|
95
95
|
writeJson(join(appDirectory, "config.json"), config);
|
|
96
|
-
p.outro("
|
|
96
|
+
p.outro("Config saved. Run tellrun restart to reload.");
|
|
97
97
|
if (answers.launch !== "later")
|
|
98
98
|
await manageService("restart", { enable: answers.launch === "boot" });
|
|
99
99
|
else
|
|
100
100
|
console.log(process.platform === "linux"
|
|
101
|
-
? "
|
|
102
|
-
: "
|
|
101
|
+
? "Run tellrun start to start the service."
|
|
102
|
+
: "Run tellrun run. Background mode requires Linux systemd.");
|
|
103
103
|
});
|
|
104
104
|
program
|
|
105
105
|
.command("run")
|
|
106
|
-
.description("
|
|
106
|
+
.description("Run in the foreground")
|
|
107
107
|
.action(async () => {
|
|
108
108
|
await import("./main.js");
|
|
109
109
|
});
|
|
110
110
|
program
|
|
111
111
|
.command("start")
|
|
112
|
-
.description("
|
|
113
|
-
.option("--enable", "
|
|
112
|
+
.description("Start the background service")
|
|
113
|
+
.option("--enable", "Enable at boot")
|
|
114
114
|
.action(async (options) => {
|
|
115
115
|
await manageService("start", options);
|
|
116
116
|
});
|
|
117
117
|
program
|
|
118
118
|
.command("stop")
|
|
119
|
-
.description("
|
|
119
|
+
.description("Stop the background service")
|
|
120
120
|
.action(async () => {
|
|
121
121
|
await manageService("stop");
|
|
122
122
|
});
|
|
123
123
|
program
|
|
124
124
|
.command("restart")
|
|
125
|
-
.description("
|
|
125
|
+
.description("Restart with updated config or version")
|
|
126
126
|
.action(async () => {
|
|
127
127
|
await manageService("restart");
|
|
128
128
|
});
|
|
129
129
|
program
|
|
130
130
|
.command("status")
|
|
131
|
-
.description("
|
|
131
|
+
.description("Show service status and data paths")
|
|
132
132
|
.action(async () => {
|
|
133
133
|
await manageService("status");
|
|
134
134
|
});
|
|
135
135
|
program
|
|
136
136
|
.command("logs")
|
|
137
|
-
.description("
|
|
138
|
-
.option("-f, --follow", "
|
|
137
|
+
.description("Show the last 100 log entries")
|
|
138
|
+
.option("-f, --follow", "Follow logs")
|
|
139
139
|
.action(async (options) => {
|
|
140
140
|
await manageService("logs", options);
|
|
141
141
|
});
|
|
142
142
|
program
|
|
143
143
|
.command("service")
|
|
144
|
-
.description("
|
|
144
|
+
.description("Manage the background service")
|
|
145
145
|
.command("uninstall")
|
|
146
|
-
.description("
|
|
146
|
+
.description("Remove service; keep config and state")
|
|
147
147
|
.action(async () => {
|
|
148
148
|
await manageService("uninstall");
|
|
149
149
|
});
|
|
@@ -151,7 +151,7 @@ try {
|
|
|
151
151
|
/** npm 的 engines 默认只警告;入口显式拒绝缺少内置代理能力的 Node 版本。 */
|
|
152
152
|
const [nodeMajor = 0, nodeMinor = 0] = process.versions.node.split(".").map(Number);
|
|
153
153
|
if (nodeMajor < 24 || (nodeMajor === 24 && nodeMinor < 5)) {
|
|
154
|
-
throw new Error(
|
|
154
|
+
throw new Error(`Node.js 24.5.0+ required (current: ${process.versions.node}). Upgrade Node.js.`);
|
|
155
155
|
}
|
|
156
156
|
if (process.argv.length <= 2)
|
|
157
157
|
program.outputHelp();
|
|
@@ -164,10 +164,10 @@ catch (error) {
|
|
|
164
164
|
else {
|
|
165
165
|
process.exitCode = 1;
|
|
166
166
|
console.error(error instanceof ZodError
|
|
167
|
-
? "
|
|
167
|
+
? "Invalid config. Existing config unchanged."
|
|
168
168
|
: error instanceof Error
|
|
169
169
|
? error.message
|
|
170
|
-
: "
|
|
170
|
+
: "Command failed.");
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAe,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,kCAAkC;AAClC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -41,8 +41,8 @@ export function loadConfig(env = process.env) {
|
|
|
41
41
|
catch (error) {
|
|
42
42
|
if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
|
|
43
43
|
throw new Error(error instanceof SyntaxError
|
|
44
|
-
? "~/.tellrun/config.json
|
|
45
|
-
: "
|
|
44
|
+
? "Invalid ~/.tellrun/config.json. Run tellrun setup."
|
|
45
|
+
: "Cannot read ~/.tellrun/config.json. Check permissions.");
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
const config = configSchema.safeParse({
|
|
@@ -55,7 +55,7 @@ export function loadConfig(env = process.env) {
|
|
|
55
55
|
codexPath: env.CODEX_PATH ?? saved.codexPath,
|
|
56
56
|
});
|
|
57
57
|
if (!config.success) {
|
|
58
|
-
throw new Error(
|
|
58
|
+
throw new Error(`Invalid config: ${[...new Set(config.error.issues.map((issue) => issue.path.join(".")))].join(", ")}. Run tellrun setup or check environment variables.`);
|
|
59
59
|
}
|
|
60
60
|
return config.data;
|
|
61
61
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAExD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,IAAI,EAAE;aACN,KAAK,CAAC,cAAc,CAAC;QACxB,OAAO,EAAE,CAAC;aACP,KAAK,CAAC;YACL,CAAC,CAAC,MAAM,EAAE;YACV,CAAC;iBACE,MAAM,EAAE;iBACR,IAAI,EAAE;iBACN,KAAK,CAAC,YAAY,CAAC;iBACnB,SAAS,CAAC,MAAM,CAAC;SACrB,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACjE,uCAAuC;QACvC,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,IAAI,EAAE;aACN,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;aACvD,QAAQ,EAAE;KACd,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;CACrD,CAAC,CAAC;AAEH,oDAAoD;AACpD,MAAM,UAAU,UAAU,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAC7D,IAAI,KAAK,GAA0C,EAAE,CAAC;IACtD,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,WAAW,EAAE,CAAC;IAC3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CACb,KAAK,YAAY,WAAW;gBAC1B,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/relay.js
CHANGED
|
@@ -6,21 +6,21 @@ export function createRelayService(options) {
|
|
|
6
6
|
let stopping = false;
|
|
7
7
|
/** 状态查询与历史结果共用面向用户的状态名称。 */
|
|
8
8
|
const statuses = {
|
|
9
|
-
queued: "
|
|
10
|
-
dispatching: "
|
|
11
|
-
running: "
|
|
12
|
-
cancelling: "
|
|
13
|
-
completed: "
|
|
14
|
-
failed: "
|
|
15
|
-
cancelled: "
|
|
16
|
-
interrupted: "
|
|
9
|
+
queued: "Queued",
|
|
10
|
+
dispatching: "Connecting",
|
|
11
|
+
running: "Running",
|
|
12
|
+
cancelling: "Stopping",
|
|
13
|
+
completed: "Completed",
|
|
14
|
+
failed: "Failed",
|
|
15
|
+
cancelled: "Stopped",
|
|
16
|
+
interrupted: "Unconfirmed",
|
|
17
17
|
};
|
|
18
18
|
options.store.recoverTasks();
|
|
19
19
|
return {
|
|
20
|
-
/**
|
|
20
|
+
/** 返回前保存消息和必要回复;重复事件直接忽略,不重新执行控制或任务。 */
|
|
21
21
|
async handleMessage(message) {
|
|
22
22
|
if (stopping)
|
|
23
|
-
throw new Error("
|
|
23
|
+
throw new Error("Service stopping. Message not accepted.");
|
|
24
24
|
options.store.accept(message, (channel) => {
|
|
25
25
|
/** 未指定目录时沿用服务启动目录,并随消息一同保存,后续可用 /cwd 切换。 */
|
|
26
26
|
if (!channel.cwd)
|
|
@@ -30,66 +30,72 @@ export function createRelayService(options) {
|
|
|
30
30
|
switch (message.content.name) {
|
|
31
31
|
case "start":
|
|
32
32
|
case "help":
|
|
33
|
-
return "Tellrun
|
|
33
|
+
return "Tellrun ready.\nSend text to chat with Codex. New messages add to the running task.\n/cwd <path> — Set directory; start a new session\n/new — New session, same directory\n/status — Task status\n/last — Last result\n/stop — Stop task and pause\n/resume — Accept new tasks\nOne task at a time. Tasks needing approval or structured input are interrupted.";
|
|
34
34
|
case "status":
|
|
35
|
-
return
|
|
35
|
+
return `Service: connected\n${options.agent.name}: ${options.agent.version}\nDirectory: ${channel.cwd}\nSession: ${channel.sessionId ? "existing" : "new"}\nNew tasks: ${channel.paused ? "paused (/resume)" : "enabled"}\nTask: ${task ? `#${task.id} ${statuses[task.status]}` : "idle"}`;
|
|
36
36
|
case "cwd": {
|
|
37
37
|
if (!message.content.args)
|
|
38
|
-
return
|
|
38
|
+
return `Directory: ${channel.cwd}\nUse /cwd /absolute/path to change directory and start a new session.`;
|
|
39
39
|
if (task)
|
|
40
|
-
return "
|
|
40
|
+
return "Wait for the task to finish, or use /stop first.";
|
|
41
41
|
if (!isAbsolute(message.content.args))
|
|
42
|
-
return "
|
|
42
|
+
return "Use an absolute path: /cwd /path/to/project.";
|
|
43
43
|
let cwd;
|
|
44
44
|
try {
|
|
45
45
|
cwd = realpathSync(message.content.args);
|
|
46
46
|
if (!statSync(cwd).isDirectory())
|
|
47
|
-
return "
|
|
47
|
+
return "Path is not a directory.";
|
|
48
48
|
}
|
|
49
49
|
catch {
|
|
50
|
-
return "
|
|
50
|
+
return "Cannot access directory. Check the path and permissions.";
|
|
51
51
|
}
|
|
52
52
|
if (cwd !== channel.cwd)
|
|
53
53
|
options.store.setSession(channel.id, cwd);
|
|
54
|
-
return
|
|
54
|
+
return `Directory: ${cwd}\n${channel.paused ? "Paused. Send /resume to continue." : "Send a task to Codex."}`;
|
|
55
55
|
}
|
|
56
56
|
case "new":
|
|
57
57
|
if (task)
|
|
58
|
-
return "
|
|
58
|
+
return "Wait for the task to finish, or use /stop first.";
|
|
59
59
|
options.store.setSession(channel.id, channel.cwd);
|
|
60
|
-
return
|
|
60
|
+
return `New session.\nDirectory: ${channel.cwd}${channel.paused ? "\nPaused. Send /resume to continue." : ""}`;
|
|
61
61
|
case "stop":
|
|
62
62
|
options.store.setPaused(channel.id, true);
|
|
63
63
|
if (!task || task.channelId !== channel.id)
|
|
64
|
-
return "
|
|
64
|
+
return "Paused. No task running in this chat. Send /resume to continue.";
|
|
65
65
|
options.store.cancelTask(task.id);
|
|
66
66
|
if (task.status !== "queued")
|
|
67
67
|
options.agent.stop();
|
|
68
|
-
return
|
|
68
|
+
return `Stop requested for task #${task.id}. Wait for its result, then /resume.`;
|
|
69
69
|
case "resume":
|
|
70
70
|
if (task)
|
|
71
|
-
return "
|
|
71
|
+
return "Wait for the task to finish before /resume.";
|
|
72
72
|
options.store.setPaused(channel.id, false);
|
|
73
|
-
return "
|
|
73
|
+
return "Ready for new tasks. Interrupted tasks will not be rerun.";
|
|
74
74
|
case "last": {
|
|
75
75
|
const last = options.store.lastTask(channel.id);
|
|
76
76
|
return last
|
|
77
|
-
?
|
|
78
|
-
: "
|
|
77
|
+
? `Task #${last.id} ${statuses[last.status]}\n${last.result ?? "No result yet."}`
|
|
78
|
+
: "No tasks yet.";
|
|
79
79
|
}
|
|
80
80
|
default:
|
|
81
|
-
return "
|
|
81
|
+
return "Unknown command. See /help.";
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
if (message.content.type === "unsupported")
|
|
85
|
-
return "
|
|
85
|
+
return "Text messages only. See /help.";
|
|
86
86
|
if (channel.paused)
|
|
87
|
-
return "
|
|
88
|
-
if (task)
|
|
89
|
-
return `任务 #${task.id} 仍在处理,本条消息未提交。可用 /status 查看状态或 /stop 停止。`;
|
|
87
|
+
return "Paused. Check /last, then /resume to send a new task.";
|
|
90
88
|
if (!message.content.text.trim())
|
|
91
|
-
return "
|
|
92
|
-
|
|
89
|
+
return "Send a task description.";
|
|
90
|
+
if (task) {
|
|
91
|
+
if (task.channelId !== channel.id)
|
|
92
|
+
return `Task #${task.id} is running in another chat. Message not sent.`;
|
|
93
|
+
if (task.status === "cancelling")
|
|
94
|
+
return "Task stopping. Wait for its result.";
|
|
95
|
+
options.store.appendTaskInput(task.id, message.content.text);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
options.store.createTask(channel, message.content.text);
|
|
93
99
|
});
|
|
94
100
|
},
|
|
95
101
|
/** 领取任务后再次检查目录;运行结果与最终回复在同一个快照中保存。 */
|
|
@@ -102,30 +108,60 @@ export function createRelayService(options) {
|
|
|
102
108
|
}
|
|
103
109
|
try {
|
|
104
110
|
if (realpathSync(task.cwd) !== task.cwd || !statSync(task.cwd).isDirectory())
|
|
105
|
-
throw new Error("
|
|
111
|
+
throw new Error("Directory changed.");
|
|
106
112
|
}
|
|
107
113
|
catch {
|
|
108
114
|
options.store.finishTask(task.id, {
|
|
109
115
|
status: "failed",
|
|
110
|
-
text: "
|
|
116
|
+
text: "Directory missing, changed, or inaccessible. Task not started. Set /cwd and try again.",
|
|
111
117
|
});
|
|
112
118
|
continue;
|
|
113
119
|
}
|
|
120
|
+
let finished = false;
|
|
121
|
+
const running = options.agent
|
|
122
|
+
.run({
|
|
123
|
+
cwd: task.cwd,
|
|
124
|
+
prompt: task.prompt,
|
|
125
|
+
sessionId: task.sessionId,
|
|
126
|
+
onSession: (id) => options.store.recordSession(task.id, id),
|
|
127
|
+
onStarted: () => options.store.markRunning(task.id),
|
|
128
|
+
onText: (text) => options.store.setDraft(task.id, text),
|
|
129
|
+
})
|
|
130
|
+
.finally(() => {
|
|
131
|
+
finished = true;
|
|
132
|
+
});
|
|
133
|
+
/** 补充输入独立于入站处理和任务完成等待,慢 RPC 不阻塞 /status 与 /stop。 */
|
|
134
|
+
const steering = (async () => {
|
|
135
|
+
while (!finished && !stopping) {
|
|
136
|
+
const input = options.store.claimTaskInput(task.id);
|
|
137
|
+
if (!input) {
|
|
138
|
+
await setTimeout(50);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
let error;
|
|
142
|
+
try {
|
|
143
|
+
await options.agent.steer(input.text);
|
|
144
|
+
}
|
|
145
|
+
catch (cause) {
|
|
146
|
+
error =
|
|
147
|
+
cause instanceof Error && cause.message.startsWith("Codex ")
|
|
148
|
+
? cause.message
|
|
149
|
+
: "Submission unconfirmed. Not retried; check the session before resending.";
|
|
150
|
+
}
|
|
151
|
+
options.store.finishTaskInput(task.id, input.index, error);
|
|
152
|
+
}
|
|
153
|
+
})();
|
|
114
154
|
try {
|
|
115
|
-
const result = await
|
|
116
|
-
cwd: task.cwd,
|
|
117
|
-
prompt: task.prompt,
|
|
118
|
-
sessionId: task.sessionId,
|
|
119
|
-
onSession: (id) => options.store.recordSession(task.id, id),
|
|
120
|
-
onStarted: () => options.store.markRunning(task.id),
|
|
121
|
-
});
|
|
155
|
+
const [result] = await Promise.all([running, steering]);
|
|
122
156
|
options.store.finishTask(task.id, result);
|
|
123
|
-
options.logger.info({ taskId: task.id, status: result.status }, "
|
|
157
|
+
options.logger.info({ taskId: task.id, status: result.status }, "Task finished");
|
|
124
158
|
}
|
|
125
159
|
catch (error) {
|
|
160
|
+
options.agent.stop();
|
|
161
|
+
await Promise.allSettled([running, steering]);
|
|
126
162
|
options.store.finishTask(task.id, {
|
|
127
163
|
status: "interrupted",
|
|
128
|
-
text: "
|
|
164
|
+
text: "Service error; shutting down. Check the directory and local processes before /resume.",
|
|
129
165
|
});
|
|
130
166
|
throw error;
|
|
131
167
|
}
|
package/dist/core/relay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/core/relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKlD,uCAAuC;AACvC,MAAM,UAAU,kBAAkB,CAAC,OAAuD;IACxF,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/core/relay.ts"],"names":[],"mappings":"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"}
|