@downcity/agent 1.1.11 → 1.1.12

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.
Files changed (37) hide show
  1. package/bin/index.d.ts +1 -1
  2. package/bin/index.d.ts.map +1 -1
  3. package/bin/index.js.map +1 -1
  4. package/bin/sdk/Agent.d.ts +11 -6
  5. package/bin/sdk/Agent.d.ts.map +1 -1
  6. package/bin/sdk/Agent.js +60 -16
  7. package/bin/sdk/Agent.js.map +1 -1
  8. package/bin/sdk/AgentSdkTypes.d.ts +95 -0
  9. package/bin/sdk/AgentSdkTypes.d.ts.map +1 -1
  10. package/bin/sdk/RemoteAgent.d.ts +3 -3
  11. package/bin/sdk/RemoteAgent.d.ts.map +1 -1
  12. package/bin/sdk/RemoteAgent.js +5 -2
  13. package/bin/sdk/RemoteAgent.js.map +1 -1
  14. package/bin/sdk/SdkSessionSystemComposer.d.ts +52 -19
  15. package/bin/sdk/SdkSessionSystemComposer.d.ts.map +1 -1
  16. package/bin/sdk/SdkSessionSystemComposer.js +102 -48
  17. package/bin/sdk/SdkSessionSystemComposer.js.map +1 -1
  18. package/bin/sdk/Session.d.ts +15 -13
  19. package/bin/sdk/Session.d.ts.map +1 -1
  20. package/bin/sdk/Session.js +47 -25
  21. package/bin/sdk/Session.js.map +1 -1
  22. package/bin/sdk/SessionMetadata.d.ts +4 -0
  23. package/bin/sdk/SessionMetadata.d.ts.map +1 -1
  24. package/bin/sdk/SessionMetadata.js +16 -0
  25. package/bin/sdk/SessionMetadata.js.map +1 -1
  26. package/bin/session/types/SessionHistoryMeta.d.ts +2 -0
  27. package/bin/session/types/SessionHistoryMeta.d.ts.map +1 -1
  28. package/package.json +1 -1
  29. package/src/index.ts +4 -0
  30. package/src/sdk/Agent.ts +70 -18
  31. package/src/sdk/AgentSdkTypes.ts +113 -0
  32. package/src/sdk/RemoteAgent.ts +10 -4
  33. package/src/sdk/SdkSessionSystemComposer.ts +165 -77
  34. package/src/sdk/Session.ts +61 -32
  35. package/src/sdk/SessionMetadata.ts +18 -0
  36. package/src/session/types/SessionHistoryMeta.ts +2 -0
  37. package/tsconfig.tsbuildinfo +1 -1
@@ -11,6 +11,19 @@ function normalizeModelLabel(input) {
11
11
  const label = typeof input === "string" ? input.trim() : "";
12
12
  return label || undefined;
13
13
  }
14
+ /**
15
+ * 读取当前系统时区。
16
+ */
17
+ export function resolveSystemTimezone() {
18
+ const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
19
+ return typeof timezone === "string" && timezone.trim()
20
+ ? timezone.trim()
21
+ : "UTC";
22
+ }
23
+ function normalizeTimezone(input) {
24
+ const timezone = typeof input === "string" ? input.trim() : "";
25
+ return timezone || undefined;
26
+ }
14
27
  /**
15
28
  * 从模型实例推导轻量可读标签。
16
29
  */
@@ -49,6 +62,7 @@ export async function readSdkSessionMetadata(input) {
49
62
  createdAt: typeof raw.createdAt === "number" && Number.isFinite(raw.createdAt)
50
63
  ? raw.createdAt
51
64
  : Date.now(),
65
+ timezone: normalizeTimezone(raw.timezone) || resolveSystemTimezone(),
52
66
  updatedAt: typeof raw.updatedAt === "number" && Number.isFinite(raw.updatedAt)
53
67
  ? raw.updatedAt
54
68
  : 0,
@@ -82,6 +96,7 @@ export async function readSdkSessionMetadata(input) {
82
96
  sessionId: input.sessionId,
83
97
  agentId: input.agentId,
84
98
  createdAt: Date.now(),
99
+ timezone: resolveSystemTimezone(),
85
100
  updatedAt: 0,
86
101
  pinnedSkillIds: [],
87
102
  };
@@ -105,6 +120,7 @@ export async function patchSdkSessionModelLabel(input) {
105
120
  ...current,
106
121
  agentId: input.agentId,
107
122
  createdAt: typeof current.createdAt === "number" ? current.createdAt : Date.now(),
123
+ timezone: normalizeTimezone(current.timezone) || resolveSystemTimezone(),
108
124
  updatedAt: Date.now(),
109
125
  ...(modelLabel
110
126
  ? {
@@ -1 +1 @@
1
- {"version":3,"file":"SessionMetadata.js","sourceRoot":"","sources":["../../src/sdk/SessionMetadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionMetadata.js","sourceRoot":"","sources":["../../src/sdk/SessionMetadata.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,8 @@ export type SessionHistoryMetaV1 = {
25
25
  agentId?: string;
26
26
  /** 当前 session 首次创建时间戳(ms)。 */
27
27
  createdAt?: number;
28
+ /** 当前 session 初始化时解析到的系统时区。 */
29
+ timezone?: string;
28
30
  /** 最近一次更新元信息的时间戳(ms)。 */
29
31
  updatedAt: number;
30
32
  /** 固定注入到 Session 上下文的 skill id 列表。 */
@@ -1 +1 @@
1
- {"version":3,"file":"SessionHistoryMeta.d.ts","sourceRoot":"","sources":["../../../src/session/types/SessionHistoryMeta.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB;IACjB,CAAC,EAAE,CAAC,CAAC;IACL,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,CAAC"}
1
+ {"version":3,"file":"SessionHistoryMeta.d.ts","sourceRoot":"","sources":["../../../src/session/types/SessionHistoryMeta.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB;IACjB,CAAC,EAAE,CAAC,CAAC;IACL,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@downcity/agent",
3
- "version": "1.1.11",
3
+ "version": "1.1.12",
4
4
  "type": "module",
5
5
  "description": "Downcity Agent 运行时 — 执行壳,通过 RPC/HTTP 调用 City 的能力",
6
6
  "main": "./bin/index.js",
package/src/index.ts CHANGED
@@ -20,6 +20,10 @@ export type {
20
20
  AgentSessionRunResult,
21
21
  AgentSessionSetInput,
22
22
  AgentSessionStreamEvent,
23
+ AgentSessionSystemBlock,
24
+ AgentSessionSystemBlockSource,
25
+ AgentSessionSystemSessionInfo,
26
+ AgentSessionSystemSnapshot,
23
27
  } from "./sdk/AgentSdkTypes.js";
24
28
 
25
29
  // 服务与插件作者 API
package/src/sdk/Agent.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * Agent SDK 本地入口。
3
3
  *
4
4
  * 关键点(中文)
5
- * - `new Agent({ id, path, tools, services, plugins })` 只做同步装配,不在构造阶段启动任何 I/O。
5
+ * - `new Agent({ id, path, instruction, tools, services, plugins })` 只做同步装配,不在构造阶段启动任何 I/O。
6
6
  * - session、HTTP、RPC、service lifecycle 都按需异步初始化。
7
7
  * - SDK Agent 通过最小 `AgentContext` 适配层复用现有 service/plugin/chat 运行协议,而不是重复实现一套执行链。
8
8
  */
@@ -26,9 +26,10 @@ import type {
26
26
  import type {
27
27
  AgentOptions,
28
28
  AgentSessionMetadata,
29
+ AgentSessionSystemBlock,
29
30
  } from "@/sdk/AgentSdkTypes.js";
30
31
  import { SdkSession } from "@/sdk/Session.js";
31
- import { loadStaticSystemPrompts } from "@session/composer/system/default/StaticPromptCatalog.js";
32
+ import { DEFAULT_SHIP_PROMPTS } from "@session/composer/system/default/SystemDomain.js";
32
33
  import { getSdkAgentSessionsRootDirPath } from "@/sdk/Paths.js";
33
34
  import { SdkAgentHttpServer } from "@/sdk/HttpServer.js";
34
35
  import { SdkAgentRpcServer } from "@/sdk/RpcServer.js";
@@ -70,6 +71,41 @@ function createFallbackSdkConfig(agentId: string): DowncityConfig {
70
71
  } as DowncityConfig;
71
72
  }
72
73
 
74
+ function normalizeInstructionInput(input: string | string[] | undefined): string[] {
75
+ const items = Array.isArray(input) ? input : typeof input === "string" ? [input] : [];
76
+ return items
77
+ .map((item) => String(item || "").trim())
78
+ .filter((item) => item.length > 0);
79
+ }
80
+
81
+ function createCoreInstructionContent(projectRoot: string): string {
82
+ const currentYear = String(new Date().getFullYear());
83
+ return DEFAULT_SHIP_PROMPTS
84
+ .replaceAll("{{project_path}}", projectRoot)
85
+ .replaceAll("{{project_root}}", projectRoot)
86
+ .replaceAll("{{current_year}}", currentYear);
87
+ }
88
+
89
+ function createInstructionSystemBlocks(
90
+ instruction: string[],
91
+ projectRoot: string,
92
+ ): AgentSessionSystemBlock[] {
93
+ if (instruction.length === 0) {
94
+ return [
95
+ {
96
+ source: "core",
97
+ name: "default",
98
+ content: createCoreInstructionContent(projectRoot),
99
+ },
100
+ ];
101
+ }
102
+ return instruction.map((content, index) => ({
103
+ source: "instruction" as const,
104
+ name: instruction.length === 1 ? "agent" : `agent:${index + 1}`,
105
+ content,
106
+ }));
107
+ }
108
+
73
109
  /**
74
110
  * SDK 本地 Agent。
75
111
  */
@@ -90,7 +126,7 @@ export class Agent {
90
126
  private readonly pluginSystemProviders: Plugin[];
91
127
  private readonly config: DowncityConfig;
92
128
  private readonly platform: AgentPlatformRuntime;
93
- private systems: string[];
129
+ private instruction: string[];
94
130
  private servicesStartPromise: Promise<void> | null = null;
95
131
 
96
132
  constructor(options: AgentOptions) {
@@ -109,7 +145,7 @@ export class Agent {
109
145
  this.logger = new Logger();
110
146
  this.logger.bindProjectRoot(this.path);
111
147
  this.platform = options.platform || EMPTY_SDK_PLATFORM;
112
- this.systems = loadStaticSystemPrompts(this.path);
148
+ this.instruction = normalizeInstructionInput(options.instruction);
113
149
  this.config = this.loadConfig();
114
150
  this.services = this.createServiceMap(options.services || []);
115
151
  this.runtime = this.createRuntime();
@@ -176,10 +212,14 @@ export class Agent {
176
212
  }
177
213
 
178
214
  /**
179
- * 刷新静态 system 文本集合。
215
+ * 更新当前 SDK Agent 的静态基础指令。
216
+ *
217
+ * 关键点(中文)
218
+ * - instruction 不做动态变量替换。
219
+ * - 已创建的 session 后续 run 会读取最新 instruction blocks。
180
220
  */
181
- reloadStaticPrompts(): void {
182
- this.systems = loadStaticSystemPrompts(this.path);
221
+ setInstruction(input: string | string[]): void {
222
+ this.instruction = normalizeInstructionInput(input);
183
223
  }
184
224
 
185
225
  private loadConfig(): DowncityConfig {
@@ -252,8 +292,12 @@ export class Agent {
252
292
  };
253
293
  }
254
294
 
255
- private async loadPluginSystemPrompts(): Promise<string[]> {
256
- const out: string[] = [];
295
+ private loadInstructionSystemBlocks(): AgentSessionSystemBlock[] {
296
+ return createInstructionSystemBlocks(this.instruction, this.path);
297
+ }
298
+
299
+ private async loadPluginSystemBlocks(): Promise<AgentSessionSystemBlock[]> {
300
+ const out: AgentSessionSystemBlock[] = [];
257
301
  for (const plugin of this.pluginSystemProviders) {
258
302
  if (typeof plugin.system !== "function") continue;
259
303
  try {
@@ -264,7 +308,11 @@ export class Agent {
264
308
  }
265
309
  const text = String(await plugin.system(this.serviceContext)).trim();
266
310
  if (!text) continue;
267
- out.push(text);
311
+ out.push({
312
+ source: "plugin",
313
+ name: plugin.name,
314
+ content: text,
315
+ });
268
316
  } catch {
269
317
  // 单个 plugin system 失败不应阻断 SDK session 主链路。
270
318
  }
@@ -272,14 +320,18 @@ export class Agent {
272
320
  return out;
273
321
  }
274
322
 
275
- private async loadServiceSystemPrompts(): Promise<string[]> {
276
- const out: string[] = [];
323
+ private async loadServiceSystemBlocks(): Promise<AgentSessionSystemBlock[]> {
324
+ const out: AgentSessionSystemBlock[] = [];
277
325
  for (const service of this.services.values()) {
278
326
  if (typeof service.system !== "function") continue;
279
327
  try {
280
328
  const text = String(await service.system(this.serviceContext)).trim();
281
329
  if (!text) continue;
282
- out.push(text);
330
+ out.push({
331
+ source: "service",
332
+ name: service.name,
333
+ content: text,
334
+ });
283
335
  } catch {
284
336
  // 单个 service system 失败不应阻断 SDK session 主链路。
285
337
  }
@@ -295,7 +347,7 @@ export class Agent {
295
347
  config: this.config,
296
348
  env: {},
297
349
  globalEnv: {},
298
- systems: this.systems,
350
+ systems: this.instruction,
299
351
  paths: createAgentPathRuntime(this.path),
300
352
  pluginConfig: createAgentPluginConfigRuntime(this.path),
301
353
  platform: this.platform,
@@ -326,7 +378,7 @@ export class Agent {
326
378
  config: this.config,
327
379
  env: {},
328
380
  globalEnv: {},
329
- systems: this.systems,
381
+ systems: this.instruction,
330
382
  paths: this.runtime.paths,
331
383
  pluginConfig: this.runtime.pluginConfig,
332
384
  platform: this.platform,
@@ -409,9 +461,9 @@ export class Agent {
409
461
  sessionId: resolvedSessionId,
410
462
  tools: this.tools,
411
463
  logger: this.logger,
412
- getStaticSystemPrompts: () => this.systems,
413
- getServiceSystemPrompts: () => this.loadServiceSystemPrompts(),
414
- getPluginSystemPrompts: () => this.loadPluginSystemPrompts(),
464
+ getInstructionSystemBlocks: () => this.loadInstructionSystemBlocks(),
465
+ getServiceSystemBlocks: () => this.loadServiceSystemBlocks(),
466
+ getPluginSystemBlocks: () => this.loadPluginSystemBlocks(),
415
467
  });
416
468
  this.sessionsById.set(resolvedSessionId, created);
417
469
  return created;
@@ -41,6 +41,16 @@ export interface AgentOptions {
41
41
  */
42
42
  tools?: Record<string, Tool>;
43
43
 
44
+ /**
45
+ * 调用方显式传入的静态基础指令。
46
+ *
47
+ * 关键点(中文)
48
+ * - `instruction` 是稳定、缓存友好的 system 前缀,不做动态变量替换。
49
+ * - SDK 不主动读取 `PROFILE.md` / `SOUL.md`;这类项目文件应由 city 或调用方读取后传入。
50
+ * - 未传入时,SDK 会使用包内最小 core instruction 作为 fallback。
51
+ */
52
+ instruction?: string | string[];
53
+
44
54
  /**
45
55
  * 当前 agent 显式持有的 service 实例集合。
46
56
  *
@@ -246,6 +256,109 @@ export type AgentSessionStreamEvent =
246
256
  error: string;
247
257
  };
248
258
 
259
+ /**
260
+ * Session system block 来源类型。
261
+ */
262
+ export type AgentSessionSystemBlockSource =
263
+ | "core"
264
+ | "instruction"
265
+ | "service"
266
+ | "plugin"
267
+ | "session";
268
+
269
+ /**
270
+ * Session system prompt 的单个组成块。
271
+ */
272
+ export interface AgentSessionSystemBlock {
273
+ /**
274
+ * 当前 block 的来源层级。
275
+ */
276
+ source: AgentSessionSystemBlockSource;
277
+
278
+ /**
279
+ * 当前 block 在来源层级内的名称。
280
+ *
281
+ * 说明(中文)
282
+ * - `instruction` 通常使用 `agent`。
283
+ * - `service` / `plugin` 使用对应 service/plugin 名称。
284
+ * - `core` 使用 `default`。
285
+ * - `session` 使用当前 session 上下文名称。
286
+ */
287
+ name: string;
288
+
289
+ /**
290
+ * 已归一化后的 system 文本内容。
291
+ *
292
+ * 关键点(中文)
293
+ * - SDK 不对 instruction 做动态变量替换。
294
+ * - 动态上下文应由调用方放入 user message。
295
+ */
296
+ content: string;
297
+ }
298
+
299
+ /**
300
+ * 当前 session 的稳定上下文信息。
301
+ */
302
+ export interface AgentSessionSystemSessionInfo {
303
+ /**
304
+ * 当前 session 所属 agentId。
305
+ */
306
+ agentId: string;
307
+
308
+ /**
309
+ * 当前 session 唯一标识。
310
+ */
311
+ sessionId: string;
312
+
313
+ /**
314
+ * 当前 agent 绑定的项目根目录。
315
+ */
316
+ projectRoot: string;
317
+
318
+ /**
319
+ * 当前 session 首次创建时间。
320
+ *
321
+ * 关键点(中文)
322
+ * - 这是 session 初始化时落盘的稳定参考时间,按 Date/ISO 字符串对外展示。
323
+ * - 它不是每轮运行的当前时间,不会随着 `run()` / `stream()` 改变。
324
+ */
325
+ createdAt: string;
326
+
327
+ /**
328
+ * 当前 session 初始化时解析到的系统时区。
329
+ *
330
+ * 关键点(中文)
331
+ * - 这是 session 级参考时区,随创建信息一起固定。
332
+ * - 它不是每轮运行重新解析的动态时区。
333
+ */
334
+ timezone: string;
335
+ }
336
+
337
+ /**
338
+ * 当前 session 生效的完整 system prompt 快照。
339
+ */
340
+ export interface AgentSessionSystemSnapshot {
341
+ /**
342
+ * 当前 sessionId。
343
+ */
344
+ sessionId: string;
345
+
346
+ /**
347
+ * 当前 session 的稳定上下文信息。
348
+ *
349
+ * 关键点(中文)
350
+ * - 这里包含 session 创建时间这类稳定参考信息。
351
+ * - 这里不包含当前时间、轮次、用户输入等每轮变化的数据。
352
+ * - 每轮动态信息应由调用方放入 user message,避免破坏 instruction 缓存命中。
353
+ */
354
+ session: AgentSessionSystemSessionInfo;
355
+
356
+ /**
357
+ * 当前生效的 system blocks,按进入模型的顺序排列。
358
+ */
359
+ blocks: AgentSessionSystemBlock[];
360
+ }
361
+
249
362
  /**
250
363
  * Session 元数据列表项。
251
364
  */
@@ -12,6 +12,7 @@ import type {
12
12
  AgentSessionRunResult,
13
13
  AgentSessionSetInput,
14
14
  AgentSessionStreamEvent,
15
+ AgentSessionSystemSnapshot,
15
16
  RemoteAgentOptions,
16
17
  } from "@/sdk/AgentSdkTypes.js";
17
18
  import type { SessionMessageV1 } from "@/session/types/SessionMessages.js";
@@ -78,18 +79,23 @@ class RemoteSession {
78
79
  }
79
80
 
80
81
  /**
81
- * 读取远程 session 当前生效的 system prompt 文本集合。
82
+ * 读取远程 session 当前生效的 system prompt 快照。
82
83
  */
83
- async system(): Promise<string[]> {
84
+ async system(): Promise<AgentSessionSystemSnapshot> {
84
85
  const response = await fetch(
85
86
  `${this.baseUrl}/api/sdk/sessions/${encodeURIComponent(this.id)}/system`,
86
87
  );
87
88
  const payload = (await response.json()) as {
88
89
  success?: boolean;
89
90
  error?: string;
90
- system?: string[];
91
+ system?: AgentSessionSystemSnapshot;
91
92
  };
92
- if (!response.ok || !payload.success || !Array.isArray(payload.system)) {
93
+ if (
94
+ !response.ok ||
95
+ !payload.success ||
96
+ !payload.system ||
97
+ !Array.isArray(payload.system.blocks)
98
+ ) {
93
99
  throw new Error(String(payload.error || "Remote session system failed"));
94
100
  }
95
101
  return payload.system;