downcity 1.1.90 → 1.1.95
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/city/admin/commands/service-env.d.ts.map +1 -1
- package/city/admin/commands/service-env.js +15 -0
- package/city/admin/commands/service-env.js.map +1 -1
- package/city/env/commands/refresh.d.ts +12 -0
- package/city/env/commands/refresh.d.ts.map +1 -0
- package/city/env/commands/refresh.js +40 -0
- package/city/env/commands/refresh.js.map +1 -0
- package/city/index.js +12 -0
- package/city/index.js.map +1 -1
- package/package.json +4 -4
- package/town/agent/control/CommonHelpers.d.ts +36 -0
- package/town/agent/control/CommonHelpers.d.ts.map +1 -0
- package/town/agent/control/CommonHelpers.js +63 -0
- package/town/agent/control/CommonHelpers.js.map +1 -0
- package/town/agent/control/ExecuteBySession.d.ts +28 -0
- package/town/agent/control/ExecuteBySession.d.ts.map +1 -0
- package/town/agent/control/ExecuteBySession.js +41 -0
- package/town/agent/control/ExecuteBySession.js.map +1 -0
- package/town/agent/control/ExecuteInput.d.ts +18 -0
- package/town/agent/control/ExecuteInput.d.ts.map +1 -0
- package/town/agent/control/ExecuteInput.js +201 -0
- package/town/agent/control/ExecuteInput.js.map +1 -0
- package/town/agent/control/Helpers.d.ts +13 -0
- package/town/agent/control/Helpers.d.ts.map +1 -0
- package/town/agent/control/Helpers.js +13 -0
- package/town/agent/control/Helpers.js.map +1 -0
- package/town/agent/control/MessageTimeline.d.ts +22 -0
- package/town/agent/control/MessageTimeline.d.ts.map +1 -0
- package/town/agent/control/MessageTimeline.js +226 -0
- package/town/agent/control/MessageTimeline.js.map +1 -0
- package/town/agent/control/SessionSummaryStore.d.ts +18 -0
- package/town/agent/control/SessionSummaryStore.d.ts.map +1 -0
- package/town/agent/control/SessionSummaryStore.js +50 -0
- package/town/agent/control/SessionSummaryStore.js.map +1 -0
- package/town/agent/control/TaskStore.d.ts +33 -0
- package/town/agent/control/TaskStore.d.ts.map +1 -0
- package/town/agent/control/TaskStore.js +175 -0
- package/town/agent/control/TaskStore.js.map +1 -0
- package/town/agent/control/types/ControlSessionExecute.d.ts +85 -0
- package/town/agent/control/types/ControlSessionExecute.d.ts.map +1 -0
- package/town/agent/control/types/ControlSessionExecute.js +9 -0
- package/town/agent/control/types/ControlSessionExecute.js.map +1 -0
- package/town/agent/control/types/ControlViewData.d.ts +320 -0
- package/town/agent/control/types/ControlViewData.d.ts.map +1 -0
- package/town/agent/control/types/ControlViewData.js +9 -0
- package/town/agent/control/types/ControlViewData.js.map +1 -0
- package/town/agent/http/control/ControlAuthorizationRoutes.d.ts +1 -1
- package/town/agent/http/control/ControlAuthorizationRoutes.d.ts.map +1 -1
- package/town/agent/http/control/ControlAuthorizationRoutes.js +51 -10
- package/town/agent/http/control/ControlAuthorizationRoutes.js.map +1 -1
- package/town/agent/http/control/OverviewRoutes.d.ts.map +1 -1
- package/town/agent/http/control/OverviewRoutes.js +2 -3
- package/town/agent/http/control/OverviewRoutes.js.map +1 -1
- package/town/agent/http/control/SessionRoutes.d.ts.map +1 -1
- package/town/agent/http/control/SessionRoutes.js +4 -6
- package/town/agent/http/control/SessionRoutes.js.map +1 -1
- package/town/agent/http/control/TaskRoutes.js +3 -3
- package/town/agent/http/control/TaskRoutes.js.map +1 -1
- package/town/agent/http/static/static.js +1 -1
- package/town/agent/http/static/static.js.map +1 -1
- package/town/config/Paths.d.ts +21 -0
- package/town/config/Paths.d.ts.map +1 -1
- package/town/config/Paths.js +31 -1
- package/town/config/Paths.js.map +1 -1
- package/town/control/DashboardOverviewApiRoutes.js +1 -1
- package/town/control/DashboardOverviewApiRoutes.js.map +1 -1
- package/town/control/DashboardRuntimeApiRoutes.d.ts.map +1 -1
- package/town/control/DashboardRuntimeApiRoutes.js +51 -8
- package/town/control/DashboardRuntimeApiRoutes.js.map +1 -1
- package/town/control/DashboardSessionApiRoutes.d.ts.map +1 -1
- package/town/control/DashboardSessionApiRoutes.js +76 -2
- package/town/control/DashboardSessionApiRoutes.js.map +1 -1
- package/town/control/DashboardTaskApiRoutes.js +1 -1
- package/town/control/DashboardTaskApiRoutes.js.map +1 -1
- package/town/control/instant/InstantSystemComposer.d.ts.map +1 -1
- package/town/control/instant/InstantSystemComposer.js +2 -3
- package/town/control/instant/InstantSystemComposer.js.map +1 -1
- package/town/shared/Plugins.js +2 -2
- package/town/shared/Plugins.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-env.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/service-env.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AA2BtC,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"service-env.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/service-env.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AA2BtC,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCtD"}
|
|
@@ -18,6 +18,7 @@ export async function manageEnv(a) {
|
|
|
18
18
|
{ label: "Upsert", value: "__upsert__", hint: "Add or update a key=value" },
|
|
19
19
|
{ label: "Update", value: "__update__", hint: "Update an existing key" },
|
|
20
20
|
{ label: "Remove", value: "__remove__", hint: "Delete a key" },
|
|
21
|
+
{ label: "Refresh runtime cache", value: "__refresh__", hint: "Reload env cache after direct database edits" },
|
|
21
22
|
];
|
|
22
23
|
if (services) {
|
|
23
24
|
for (const s of services) {
|
|
@@ -53,6 +54,10 @@ export async function manageEnv(a) {
|
|
|
53
54
|
await removeEnv(a);
|
|
54
55
|
continue;
|
|
55
56
|
}
|
|
57
|
+
if (svcId === "__refresh__") {
|
|
58
|
+
await refreshEnv(a);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
56
61
|
if (services) {
|
|
57
62
|
const svc = services.find((s) => s.id === svcId);
|
|
58
63
|
if (svc)
|
|
@@ -175,6 +180,16 @@ async function removeEnv(a) {
|
|
|
175
180
|
showError(adminErrorMessage(e));
|
|
176
181
|
}
|
|
177
182
|
}
|
|
183
|
+
async function refreshEnv(a) {
|
|
184
|
+
try {
|
|
185
|
+
const result = await a.env.refresh();
|
|
186
|
+
showSuccess(`env runtime cache refreshed (${result.count} keys)`);
|
|
187
|
+
}
|
|
188
|
+
catch (e) {
|
|
189
|
+
rethrowAdminAuthError(e);
|
|
190
|
+
showError(adminErrorMessage(e));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
178
193
|
// ============================================================
|
|
179
194
|
// 按 Service 查看
|
|
180
195
|
// ============================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-env.js","sourceRoot":"","sources":["../../../src/admin/commands/service-env.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAwBlG,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,CAAO;IACrC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,OAAO,GAAsD;YACjE,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,4CAA4C,EAAE;YAC3G,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,mCAAmC,EAAE;YACnF,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,2BAA2B,EAAE;YAC3E,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,wBAAwB,EAAE;YACxE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE;SAC/
|
|
1
|
+
{"version":3,"file":"service-env.js","sourceRoot":"","sources":["../../../src/admin/commands/service-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* City env runtime cache 刷新命令。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 这个命令只负责脚本化调用当前 active City 的 env refresh。
|
|
6
|
+
* - 真正刷新逻辑位于 City SDK 与服务端 EnvService,CLI 不复制业务规则。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 刷新当前 active City 的 runtime env cache。
|
|
10
|
+
*/
|
|
11
|
+
export declare function refreshEnvCache(): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/env/commands/refresh.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBrD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* City env runtime cache 刷新命令。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 这个命令只负责脚本化调用当前 active City 的 env refresh。
|
|
6
|
+
* - 真正刷新逻辑位于 City SDK 与服务端 EnvService,CLI 不复制业务规则。
|
|
7
|
+
*/
|
|
8
|
+
import { City } from "@downcity/city";
|
|
9
|
+
import { adminAuth } from "../../auth/admin.js";
|
|
10
|
+
import { adminErrorMessage, rethrowAdminAuthError } from "../../admin/auth-error.js";
|
|
11
|
+
import { readActiveServer } from "../../core/session.js";
|
|
12
|
+
import { showError, showSuccess } from "../../core/ui.js";
|
|
13
|
+
/**
|
|
14
|
+
* 刷新当前 active City 的 runtime env cache。
|
|
15
|
+
*/
|
|
16
|
+
export async function refreshEnvCache() {
|
|
17
|
+
const active_server = readActiveServer();
|
|
18
|
+
if (!active_server) {
|
|
19
|
+
showError("No active City server. Run `city` to connect one first.");
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const session = await adminAuth(active_server);
|
|
23
|
+
if (!session) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const admin = new City({
|
|
27
|
+
role: "admin",
|
|
28
|
+
city_url: session.base_url,
|
|
29
|
+
admin_secret_key: session.admin_secret_key,
|
|
30
|
+
});
|
|
31
|
+
try {
|
|
32
|
+
const result = await admin.env.refresh();
|
|
33
|
+
showSuccess(`env runtime cache refreshed (${result.count} keys)`);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
rethrowAdminAuthError(error);
|
|
37
|
+
showError(adminErrorMessage(error));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/env/commands/refresh.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,SAAS,CAAC,yDAAyD,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC;QACrB,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACzC,WAAW,CAAC,gCAAgC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC7B,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
|
package/city/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { createVersionBanner } from "./shared/IndexSupport.js";
|
|
|
16
16
|
import { setCliVerbosity } from "./shared/CliReporter.js";
|
|
17
17
|
import { deployCityProject } from "./deploy/commands/deploy.js";
|
|
18
18
|
import { createCityProject } from "./create/commands/create.js";
|
|
19
|
+
import { refreshEnvCache } from "./env/commands/refresh.js";
|
|
19
20
|
const __filename = fileURLToPath(import.meta.url);
|
|
20
21
|
const __dirname = dirname(__filename);
|
|
21
22
|
const packageJson = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8"));
|
|
@@ -55,6 +56,17 @@ program
|
|
|
55
56
|
.action(createVersionBanner(packageJson.version, async (source, options) => {
|
|
56
57
|
await deployCityProject(source ?? ".", options);
|
|
57
58
|
}));
|
|
59
|
+
const env_program = program
|
|
60
|
+
.command("env")
|
|
61
|
+
.description("管理当前 City 的环境变量运行态能力")
|
|
62
|
+
.helpOption("--help", "display help for command");
|
|
63
|
+
env_program
|
|
64
|
+
.command("refresh")
|
|
65
|
+
.description("刷新当前 City runtime env cache")
|
|
66
|
+
.helpOption("--help", "display help for command")
|
|
67
|
+
.action(createVersionBanner(packageJson.version, async () => {
|
|
68
|
+
await refreshEnvCache();
|
|
69
|
+
}));
|
|
58
70
|
program.showHelpAfterError();
|
|
59
71
|
program.showSuggestionAfterError();
|
|
60
72
|
// 关键点(中文):在 parse 前解析 --quiet / --verbose,设置全局 verbosity。
|
package/city/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "downcity",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.95",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Downcity CLI bundle — installs city and town commands",
|
|
6
6
|
"bin": {
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"prompts": "^2.4.2",
|
|
46
46
|
"ws": "^8.21.0",
|
|
47
47
|
"zod": "^4.4.3",
|
|
48
|
-
"@downcity/agent": "^1.1.
|
|
49
|
-
"@downcity/city": "^0.2.
|
|
50
|
-
"@downcity/plugins": "^1.0.
|
|
48
|
+
"@downcity/agent": "^1.1.82",
|
|
49
|
+
"@downcity/city": "^0.2.42",
|
|
50
|
+
"@downcity/plugins": "^1.0.35"
|
|
51
51
|
},
|
|
52
52
|
"scripts": {
|
|
53
53
|
"build": "node scripts/copy-cli-products.mjs && node scripts/ensure-cli-executable.mjs",
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单 agent control API 通用 helper。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 聚合 control 路由、query/path/文本裁剪等基础工具。
|
|
6
|
+
* - 单 agent 控制面统一收敛到 `/api/control/*`。
|
|
7
|
+
* - 不依赖任何业务状态。
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* 单 agent control API 的公开路由前缀。
|
|
11
|
+
*
|
|
12
|
+
* 说明(中文)
|
|
13
|
+
* - 单 agent 控制面只暴露 `/api/control/*`。
|
|
14
|
+
*/
|
|
15
|
+
export declare const CONTROL_API_ROUTE_PREFIXES: readonly ["/api/control"];
|
|
16
|
+
/**
|
|
17
|
+
* 为同一个 control 端点生成公开路径别名。
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildControlRouteAliases(suffix: string): string[];
|
|
20
|
+
/**
|
|
21
|
+
* 解析 limit 参数并做边界裁剪。
|
|
22
|
+
*/
|
|
23
|
+
export declare function toLimit(raw: string | undefined, fallback?: number): number;
|
|
24
|
+
/**
|
|
25
|
+
* 转成可选字符串。
|
|
26
|
+
*/
|
|
27
|
+
export declare function toOptionalString(input: unknown): string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* 安全 decodeURIComponent。
|
|
30
|
+
*/
|
|
31
|
+
export declare function decodeMaybe(value: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* 文本截断。
|
|
34
|
+
*/
|
|
35
|
+
export declare function truncateText(text: string, maxChars: number): string;
|
|
36
|
+
//# sourceMappingURL=CommonHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommonHelpers.d.ts","sourceRoot":"","sources":["../../../src/agent/control/CommonHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,2BAA4B,CAAC;AAEpE;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAKjE;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,SAAgB,GACvB,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGnE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAInE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单 agent control API 通用 helper。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 聚合 control 路由、query/path/文本裁剪等基础工具。
|
|
6
|
+
* - 单 agent 控制面统一收敛到 `/api/control/*`。
|
|
7
|
+
* - 不依赖任何业务状态。
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_LIMIT = 50;
|
|
10
|
+
const MAX_LIMIT = 500;
|
|
11
|
+
/**
|
|
12
|
+
* 单 agent control API 的公开路由前缀。
|
|
13
|
+
*
|
|
14
|
+
* 说明(中文)
|
|
15
|
+
* - 单 agent 控制面只暴露 `/api/control/*`。
|
|
16
|
+
*/
|
|
17
|
+
export const CONTROL_API_ROUTE_PREFIXES = ["/api/control"];
|
|
18
|
+
/**
|
|
19
|
+
* 为同一个 control 端点生成公开路径别名。
|
|
20
|
+
*/
|
|
21
|
+
export function buildControlRouteAliases(suffix) {
|
|
22
|
+
const normalizedSuffix = String(suffix || "").startsWith("/")
|
|
23
|
+
? String(suffix || "")
|
|
24
|
+
: `/${String(suffix || "")}`;
|
|
25
|
+
return CONTROL_API_ROUTE_PREFIXES.map((prefix) => `${prefix}${normalizedSuffix}`);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 解析 limit 参数并做边界裁剪。
|
|
29
|
+
*/
|
|
30
|
+
export function toLimit(raw, fallback = DEFAULT_LIMIT) {
|
|
31
|
+
const n = Number.parseInt(String(raw || "").trim(), 10);
|
|
32
|
+
if (!Number.isFinite(n) || Number.isNaN(n))
|
|
33
|
+
return fallback;
|
|
34
|
+
return Math.max(1, Math.min(MAX_LIMIT, n));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 转成可选字符串。
|
|
38
|
+
*/
|
|
39
|
+
export function toOptionalString(input) {
|
|
40
|
+
const value = typeof input === "string" ? input.trim() : "";
|
|
41
|
+
return value ? value : undefined;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 安全 decodeURIComponent。
|
|
45
|
+
*/
|
|
46
|
+
export function decodeMaybe(value) {
|
|
47
|
+
try {
|
|
48
|
+
return decodeURIComponent(String(value || ""));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return String(value || "");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 文本截断。
|
|
56
|
+
*/
|
|
57
|
+
export function truncateText(text, maxChars) {
|
|
58
|
+
const normalized = String(text || "");
|
|
59
|
+
if (normalized.length <= maxChars)
|
|
60
|
+
return normalized;
|
|
61
|
+
return normalized.slice(0, Math.max(0, maxChars - 3)) + "...";
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=CommonHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommonHelpers.js","sourceRoot":"","sources":["../../../src/agent/control/CommonHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,cAAc,CAAU,CAAC;AAEpE;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAC3D,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/B,OAAO,0BAA0B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,gBAAgB,EAAE,CAAC,CAAC;AACpF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CACrB,GAAuB,EACvB,QAAQ,GAAG,aAAa;IAExB,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAgB;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACtC,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAC;IACrD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control execute by session helper。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - control 层只负责把请求转成 session prompt。
|
|
6
|
+
* - chat / queue 等渠道语义由宿主显式注入的 plugin 自行实现。
|
|
7
|
+
*/
|
|
8
|
+
import type { AgentRuntime } from "@downcity/agent/internal/types/runtime/agent/AgentRuntime.js";
|
|
9
|
+
import type { ControlSessionExecuteAttachmentInput } from "../../agent/control/types/ControlSessionExecute.js";
|
|
10
|
+
/**
|
|
11
|
+
* 在指定 session 中执行一轮请求。
|
|
12
|
+
*
|
|
13
|
+
* 说明(中文)
|
|
14
|
+
* - 按普通 session 同步执行。
|
|
15
|
+
*/
|
|
16
|
+
export declare function executeBySessionId(params: {
|
|
17
|
+
agentState: AgentRuntime;
|
|
18
|
+
sessionId: string;
|
|
19
|
+
instructions: string;
|
|
20
|
+
attachments?: ControlSessionExecuteAttachmentInput[];
|
|
21
|
+
}): Promise<{
|
|
22
|
+
assistantMessage: import("@downcity/agent/internal/executor/types/SessionMessages.js").SessionMessageV1 | undefined;
|
|
23
|
+
userVisible: string;
|
|
24
|
+
queued: boolean;
|
|
25
|
+
error?: string | undefined;
|
|
26
|
+
success: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=ExecuteBySession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecuteBySession.d.ts","sourceRoot":"","sources":["../../../src/agent/control/ExecuteBySession.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,gDAAgD,CAAC;AAG3G;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,oCAAoC,EAAE,CAAC;CACtD;;;;;;GA0BA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control execute by session helper。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - control 层只负责把请求转成 session prompt。
|
|
6
|
+
* - chat / queue 等渠道语义由宿主显式注入的 plugin 自行实现。
|
|
7
|
+
*/
|
|
8
|
+
import { buildExecuteInputText } from "./ExecuteInput.js";
|
|
9
|
+
/**
|
|
10
|
+
* 在指定 session 中执行一轮请求。
|
|
11
|
+
*
|
|
12
|
+
* 说明(中文)
|
|
13
|
+
* - 按普通 session 同步执行。
|
|
14
|
+
*/
|
|
15
|
+
export async function executeBySessionId(params) {
|
|
16
|
+
const sessionId = String(params.sessionId || "").trim();
|
|
17
|
+
const instructions = String(params.instructions || "").trim();
|
|
18
|
+
if (!sessionId)
|
|
19
|
+
throw new Error("Missing sessionId");
|
|
20
|
+
if (!instructions)
|
|
21
|
+
throw new Error("Missing instructions");
|
|
22
|
+
const executeInput = await buildExecuteInputText({
|
|
23
|
+
projectRoot: params.agentState.rootPath,
|
|
24
|
+
sessionId,
|
|
25
|
+
instructions,
|
|
26
|
+
attachments: params.attachments,
|
|
27
|
+
});
|
|
28
|
+
const session = params.agentState.getSession(sessionId);
|
|
29
|
+
const turn = await session.prompt({
|
|
30
|
+
query: executeInput,
|
|
31
|
+
});
|
|
32
|
+
const result = await turn.finished;
|
|
33
|
+
return {
|
|
34
|
+
success: result.success,
|
|
35
|
+
...(result.error ? { error: result.error } : {}),
|
|
36
|
+
assistantMessage: result.assistantMessage,
|
|
37
|
+
userVisible: result.text.trim(),
|
|
38
|
+
queued: false,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=ExecuteBySession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecuteBySession.js","sourceRoot":"","sources":["../../../src/agent/control/ExecuteBySession.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAKxC;IACC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9D,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACrD,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAE3D,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC;QAC/C,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;QACvC,SAAS;QACT,YAAY;QACZ,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;QAChC,KAAK,EAAE,YAAY;KACpB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;IAEnC,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;QAC/B,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control execute 输入拼装 helper。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 负责把 API 传入的附件规范化并落盘。
|
|
6
|
+
* - 最终统一转成 `<file>` 标签注入到 user message。
|
|
7
|
+
*/
|
|
8
|
+
import type { ControlSessionExecuteAttachmentInput } from "../../agent/control/types/ControlSessionExecute.js";
|
|
9
|
+
/**
|
|
10
|
+
* 构造 execute 入站文本。
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildExecuteInputText(params: {
|
|
13
|
+
projectRoot: string;
|
|
14
|
+
sessionId: string;
|
|
15
|
+
instructions: string;
|
|
16
|
+
attachments?: ControlSessionExecuteAttachmentInput[];
|
|
17
|
+
}): Promise<string>;
|
|
18
|
+
//# sourceMappingURL=ExecuteInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecuteInput.d.ts","sourceRoot":"","sources":["../../../src/agent/control/ExecuteInput.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EACV,oCAAoC,EAErC,MAAM,gDAAgD,CAAC;AA0KxD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,oCAAoC,EAAE,CAAC;CACtD,GAAG,OAAO,CAAC,MAAM,CAAC,CA0ClB"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control execute 输入拼装 helper。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 负责把 API 传入的附件规范化并落盘。
|
|
6
|
+
* - 最终统一转成 `<file>` 标签注入到 user message。
|
|
7
|
+
*/
|
|
8
|
+
import fs from "fs-extra";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { getCacheDirPath } from "../../config/Paths.js";
|
|
11
|
+
import { renderChatMessageFileTag } from "@downcity/agent/internal/executor/messages/ChatMessageMarkup.js";
|
|
12
|
+
const EXECUTE_ATTACHMENT_MAX_COUNT = 8;
|
|
13
|
+
const EXECUTE_ATTACHMENT_MAX_BYTES = 2 * 1024 * 1024;
|
|
14
|
+
const EXECUTE_ATTACHMENT_CONTENT_MAX_CHARS = 1_500_000;
|
|
15
|
+
const EXECUTE_ATTACHMENT_FALLBACK_TEXT = "请查看以上附件并按用户要求处理。";
|
|
16
|
+
function normalizeExecuteAttachmentType(value) {
|
|
17
|
+
const raw = String(value || "")
|
|
18
|
+
.trim()
|
|
19
|
+
.toLowerCase();
|
|
20
|
+
if (raw === "photo" ||
|
|
21
|
+
raw === "voice" ||
|
|
22
|
+
raw === "audio" ||
|
|
23
|
+
raw === "video") {
|
|
24
|
+
return raw;
|
|
25
|
+
}
|
|
26
|
+
return "document";
|
|
27
|
+
}
|
|
28
|
+
function normalizeAttachmentCaption(value) {
|
|
29
|
+
const text = String(value || "")
|
|
30
|
+
.replace(/\r?\n+/g, " ")
|
|
31
|
+
.replace(/\s+/g, " ")
|
|
32
|
+
.replace(/\|/g, "/")
|
|
33
|
+
.trim();
|
|
34
|
+
if (!text)
|
|
35
|
+
return undefined;
|
|
36
|
+
return text.slice(0, 180);
|
|
37
|
+
}
|
|
38
|
+
function toProjectRelativePath(projectRoot, absPath) {
|
|
39
|
+
const relative = path.relative(projectRoot, absPath);
|
|
40
|
+
if (!relative)
|
|
41
|
+
return null;
|
|
42
|
+
if (relative.startsWith(".."))
|
|
43
|
+
return null;
|
|
44
|
+
if (path.isAbsolute(relative))
|
|
45
|
+
return null;
|
|
46
|
+
return relative.split(path.sep).join("/");
|
|
47
|
+
}
|
|
48
|
+
function normalizeAttachmentFileName(params) {
|
|
49
|
+
const raw = String(params.fileName || "").trim();
|
|
50
|
+
const base = (raw || "attachment")
|
|
51
|
+
.replace(/[\\/:*?"<>|]/g, "-")
|
|
52
|
+
.replace(/\s+/g, "-")
|
|
53
|
+
.replace(/-+/g, "-")
|
|
54
|
+
.replace(/^\.+/, "")
|
|
55
|
+
.replace(/^-+|-+$/g, "")
|
|
56
|
+
.slice(0, 72);
|
|
57
|
+
const safeBase = base || "attachment";
|
|
58
|
+
const fallbackExt = params.fallbackExt.startsWith(".")
|
|
59
|
+
? params.fallbackExt
|
|
60
|
+
: `.${params.fallbackExt}`;
|
|
61
|
+
const hasExt = /\.[A-Za-z0-9]+$/.test(safeBase);
|
|
62
|
+
return hasExt ? safeBase : `${safeBase}${fallbackExt}`;
|
|
63
|
+
}
|
|
64
|
+
function inferAttachmentExt(params) {
|
|
65
|
+
const fromFileName = path.extname(String(params.fileName || "").trim())
|
|
66
|
+
.toLowerCase()
|
|
67
|
+
.trim();
|
|
68
|
+
if (fromFileName)
|
|
69
|
+
return fromFileName;
|
|
70
|
+
const contentType = String(params.contentType || "").toLowerCase();
|
|
71
|
+
if (contentType.includes("markdown"))
|
|
72
|
+
return ".md";
|
|
73
|
+
if (contentType.includes("json"))
|
|
74
|
+
return ".json";
|
|
75
|
+
if (contentType.includes("html"))
|
|
76
|
+
return ".html";
|
|
77
|
+
if (contentType.includes("plain"))
|
|
78
|
+
return ".txt";
|
|
79
|
+
if (params.type === "photo")
|
|
80
|
+
return ".jpg";
|
|
81
|
+
if (params.type === "voice" || params.type === "audio")
|
|
82
|
+
return ".mp3";
|
|
83
|
+
if (params.type === "video")
|
|
84
|
+
return ".mp4";
|
|
85
|
+
return ".md";
|
|
86
|
+
}
|
|
87
|
+
async function resolveAttachmentPathFromInput(params) {
|
|
88
|
+
const rawPath = String(params.attachment.path || "").trim();
|
|
89
|
+
if (!rawPath)
|
|
90
|
+
return null;
|
|
91
|
+
const abs = path.isAbsolute(rawPath)
|
|
92
|
+
? path.normalize(rawPath)
|
|
93
|
+
: path.resolve(params.projectRoot, rawPath);
|
|
94
|
+
const relative = toProjectRelativePath(params.projectRoot, abs);
|
|
95
|
+
if (!relative)
|
|
96
|
+
return null;
|
|
97
|
+
const stat = await fs
|
|
98
|
+
.stat(abs)
|
|
99
|
+
.then((value) => value)
|
|
100
|
+
.catch(() => null);
|
|
101
|
+
if (!stat?.isFile())
|
|
102
|
+
return null;
|
|
103
|
+
return relative;
|
|
104
|
+
}
|
|
105
|
+
function resolveAttachmentBytes(attachment) {
|
|
106
|
+
const textContent = typeof attachment.content === "string" ? attachment.content : "";
|
|
107
|
+
if (textContent) {
|
|
108
|
+
const clipped = textContent.slice(0, EXECUTE_ATTACHMENT_CONTENT_MAX_CHARS);
|
|
109
|
+
return Buffer.from(clipped, "utf8");
|
|
110
|
+
}
|
|
111
|
+
const base64 = String(attachment.contentBase64 || "").trim();
|
|
112
|
+
if (!base64)
|
|
113
|
+
return null;
|
|
114
|
+
try {
|
|
115
|
+
return Buffer.from(base64, "base64");
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function materializeAttachmentContent(params) {
|
|
122
|
+
const bytes = resolveAttachmentBytes(params.attachment);
|
|
123
|
+
if (!bytes || bytes.length <= 0)
|
|
124
|
+
return null;
|
|
125
|
+
if (bytes.length > EXECUTE_ATTACHMENT_MAX_BYTES) {
|
|
126
|
+
throw new Error(`Attachment too large (>${EXECUTE_ATTACHMENT_MAX_BYTES} bytes)`);
|
|
127
|
+
}
|
|
128
|
+
const type = normalizeExecuteAttachmentType(params.attachment.type);
|
|
129
|
+
const ext = inferAttachmentExt({
|
|
130
|
+
type,
|
|
131
|
+
fileName: params.attachment.fileName,
|
|
132
|
+
contentType: params.attachment.contentType,
|
|
133
|
+
});
|
|
134
|
+
const safeName = normalizeAttachmentFileName({
|
|
135
|
+
fileName: params.attachment.fileName,
|
|
136
|
+
fallbackExt: ext,
|
|
137
|
+
});
|
|
138
|
+
const safeContext = String(params.sessionId || "session")
|
|
139
|
+
.replace(/[^A-Za-z0-9_-]+/g, "-")
|
|
140
|
+
.replace(/-+/g, "-")
|
|
141
|
+
.replace(/^-+|-+$/g, "")
|
|
142
|
+
.slice(0, 32);
|
|
143
|
+
const prefix = safeContext || "context";
|
|
144
|
+
const fileName = `${Date.now()}-${prefix}-${String(params.index + 1).padStart(2, "0")}-${safeName}`;
|
|
145
|
+
const cacheDir = path.join(getCacheDirPath(params.projectRoot), "chrome-extension");
|
|
146
|
+
await fs.ensureDir(cacheDir);
|
|
147
|
+
const absPath = path.join(cacheDir, fileName);
|
|
148
|
+
await fs.writeFile(absPath, bytes);
|
|
149
|
+
return toProjectRelativePath(params.projectRoot, absPath);
|
|
150
|
+
}
|
|
151
|
+
function toAttachmentLine(params) {
|
|
152
|
+
return renderChatMessageFileTag({
|
|
153
|
+
type: params.type,
|
|
154
|
+
path: params.relativePath,
|
|
155
|
+
...(params.caption ? { caption: params.caption } : {}),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* 构造 execute 入站文本。
|
|
160
|
+
*/
|
|
161
|
+
export async function buildExecuteInputText(params) {
|
|
162
|
+
const instructions = String(params.instructions || "").trim();
|
|
163
|
+
const inputAttachments = Array.isArray(params.attachments)
|
|
164
|
+
? params.attachments.slice(0, EXECUTE_ATTACHMENT_MAX_COUNT)
|
|
165
|
+
: [];
|
|
166
|
+
if (inputAttachments.length === 0)
|
|
167
|
+
return instructions;
|
|
168
|
+
const lines = [];
|
|
169
|
+
for (let index = 0; index < inputAttachments.length; index += 1) {
|
|
170
|
+
const attachment = inputAttachments[index];
|
|
171
|
+
if (!attachment || typeof attachment !== "object")
|
|
172
|
+
continue;
|
|
173
|
+
const type = normalizeExecuteAttachmentType(attachment.type);
|
|
174
|
+
const caption = normalizeAttachmentCaption(attachment.caption);
|
|
175
|
+
const reusePath = await resolveAttachmentPathFromInput({
|
|
176
|
+
projectRoot: params.projectRoot,
|
|
177
|
+
attachment,
|
|
178
|
+
});
|
|
179
|
+
const relativePath = reusePath ||
|
|
180
|
+
(await materializeAttachmentContent({
|
|
181
|
+
projectRoot: params.projectRoot,
|
|
182
|
+
sessionId: params.sessionId,
|
|
183
|
+
attachment,
|
|
184
|
+
index,
|
|
185
|
+
}));
|
|
186
|
+
if (!relativePath)
|
|
187
|
+
continue;
|
|
188
|
+
lines.push(toAttachmentLine({
|
|
189
|
+
type,
|
|
190
|
+
relativePath,
|
|
191
|
+
...(caption ? { caption } : {}),
|
|
192
|
+
}));
|
|
193
|
+
}
|
|
194
|
+
if (lines.length === 0)
|
|
195
|
+
return instructions;
|
|
196
|
+
return [lines.join("\n"), instructions || EXECUTE_ATTACHMENT_FALLBACK_TEXT]
|
|
197
|
+
.filter(Boolean)
|
|
198
|
+
.join("\n\n")
|
|
199
|
+
.trim();
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=ExecuteInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecuteInput.js","sourceRoot":"","sources":["../../../src/agent/control/ExecuteInput.ts"],"names":[],"mappings":"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"}
|