@downcity/agent 1.1.281 → 1.1.283

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 (39) hide show
  1. package/bin/agent/AgentSessions.d.ts.map +1 -1
  2. package/bin/agent/AgentSessions.js +1 -0
  3. package/bin/agent/AgentSessions.js.map +1 -1
  4. package/bin/executor/Executor.d.ts +4 -1
  5. package/bin/executor/Executor.d.ts.map +1 -1
  6. package/bin/executor/Executor.js +6 -1
  7. package/bin/executor/Executor.js.map +1 -1
  8. package/bin/session/Session.d.ts +24 -4
  9. package/bin/session/Session.d.ts.map +1 -1
  10. package/bin/session/Session.js +102 -23
  11. package/bin/session/Session.js.map +1 -1
  12. package/bin/session/storage/Instruction.d.ts +7 -5
  13. package/bin/session/storage/Instruction.d.ts.map +1 -1
  14. package/bin/session/storage/Instruction.js +9 -5
  15. package/bin/session/storage/Instruction.js.map +1 -1
  16. package/bin/session/storage/Paths.d.ts +2 -2
  17. package/bin/session/storage/Paths.js +2 -2
  18. package/bin/types/agent/SessionActor.d.ts +3 -1
  19. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  20. package/bin/types/agent/SessionTypes.d.ts +2 -2
  21. package/bin/types/agent/SessionTypes.d.ts.map +1 -1
  22. package/bin/types/session/SessionInstruction.d.ts +3 -3
  23. package/bin/types/session/SessionInstruction.d.ts.map +1 -1
  24. package/bin/types/session/SessionInstruction.js +2 -2
  25. package/bin/types/session/SessionOptions.d.ts +9 -1
  26. package/bin/types/session/SessionOptions.d.ts.map +1 -1
  27. package/package.json +3 -3
  28. package/scripts/agent-compiler.mjs +12 -5
  29. package/scripts/session-config-turn-boundary.test.mjs +141 -5
  30. package/src/agent/AgentSessions.ts +1 -0
  31. package/src/executor/Executor.ts +9 -1
  32. package/src/session/Session.ts +115 -26
  33. package/src/session/storage/Instruction.ts +18 -5
  34. package/src/session/storage/Paths.ts +2 -2
  35. package/src/types/agent/SessionActor.ts +4 -1
  36. package/src/types/agent/SessionTypes.ts +2 -2
  37. package/src/types/session/SessionInstruction.ts +3 -3
  38. package/src/types/session/SessionOptions.ts +10 -1
  39. package/tsconfig.tsbuildinfo +1 -1
@@ -1,16 +1,16 @@
1
1
  /**
2
- * Session instruction 显式快照存储。
2
+ * Session system 显式快照存储。
3
3
  *
4
4
  * 关键点(中文)
5
- * - instruction.md 是可选文件,不存在时由 Session 使用 Agent 当前 instruction
6
- * - 空文件也是有效快照,用于显式固化没有自定义 instruction 的状态。
5
+ * - instruction.md 是可选文件,不存在时由 Session 在内存中重新生成完整 system
6
+ * - 空文件也是有效的完整 system 快照。
7
7
  * - 写入使用同目录临时文件替换,避免进程中断留下半份内容。
8
8
  */
9
9
  import { randomUUID } from "node:crypto";
10
10
  import path from "node:path";
11
11
  import fs from "fs-extra";
12
12
  import { getSdkAgentSessionInstructionPath } from "../../session/storage/Paths.js";
13
- /** 读取 Session 显式固化的 instruction;文件不存在时返回 null。 */
13
+ /** 读取 Session 显式固化的完整 system;文件不存在时返回 null。 */
14
14
  export async function read_session_instruction(input) {
15
15
  const instruction_path = getSdkAgentSessionInstructionPath(input.project_root, input.agent_id, input.session_id);
16
16
  try {
@@ -22,7 +22,11 @@ export async function read_session_instruction(input) {
22
22
  throw error;
23
23
  }
24
24
  }
25
- /** 原子覆盖当前 Session instruction.md。 */
25
+ /** 判断当前 Session 是否已经显式持久化 instruction.md。 */
26
+ export async function has_session_instruction(input) {
27
+ return await fs.pathExists(getSdkAgentSessionInstructionPath(input.project_root, input.agent_id, input.session_id));
28
+ }
29
+ /** 使用完整 system Markdown 原子覆盖当前 Session 的 instruction.md。 */
26
30
  export async function write_session_instruction(input) {
27
31
  const instruction_path = getSdkAgentSessionInstructionPath(input.project_root, input.agent_id, input.session_id);
28
32
  const temporary_path = [
@@ -1 +1 @@
1
- {"version":3,"file":"Instruction.js","sourceRoot":"","sources":["../../../src/session/storage/Instruction.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAM/E,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAwC;IAExC,MAAM,gBAAgB,GAAG,iCAAiC,CACxD,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,UAAU,CACjB,CAAC;IACF,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACpE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAAmC;IAEnC,MAAM,gBAAgB,GAAG,iCAAiC,CACxD,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,UAAU,CACjB,CAAC;IACF,MAAM,cAAc,GAAG;QACrB,gBAAgB;QAChB,OAAO,CAAC,GAAG;QACX,IAAI,CAAC,GAAG,EAAE;QACV,UAAU,EAAE;QACZ,KAAK;KACN,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"Instruction.js","sourceRoot":"","sources":["../../../src/session/storage/Instruction.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAM/E,+CAA+C;AAC/C,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAwC;IAExC,MAAM,gBAAgB,GAAG,iCAAiC,CACxD,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,UAAU,CACjB,CAAC;IACF,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACpE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAwC;IAExC,OAAO,MAAM,EAAE,CAAC,UAAU,CACxB,iCAAiC,CAC/B,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,UAAU,CACjB,CACF,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAAmC;IAEnC,MAAM,gBAAgB,GAAG,iCAAiC,CACxD,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,UAAU,CACjB,CAAC;IACF,MAAM,cAAc,GAAG;QACrB,gBAAgB;QAChB,OAAO,CAAC,GAAG;QACX,IAAI,CAAC,GAAG,EAAE;QACV,UAAU,EAAE;QACZ,KAAK;KACN,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
@@ -50,11 +50,11 @@ export declare function getSdkAgentArchivedSessionMetaPath(projectRoot: string,
50
50
  */
51
51
  export declare function getSdkAgentSessionDirPath(projectRoot: string, agentId: string, sessionId: string): string;
52
52
  /**
53
- * 单个 session 显式固化的 instruction.md 路径。
53
+ * 单个 session 显式固化完整 system 的 instruction.md 路径。
54
54
  *
55
55
  * 关键点(中文)
56
56
  * - 文件不存在表示 Session 恢复时继续采用 Agent 当前 instruction。
57
- * - 空文件表示调用方显式固化了空 instruction
57
+ * - 空文件表示调用方显式固化了空 system
58
58
  */
59
59
  export declare function getSdkAgentSessionInstructionPath(projectRoot: string, agentId: string, sessionId: string): string;
60
60
  /**
@@ -71,11 +71,11 @@ export function getSdkAgentSessionDirPath(projectRoot, agentId, sessionId) {
71
71
  return path.join(getSdkAgentSessionsRootDirPath(projectRoot, agentId), encodeURIComponent(String(sessionId || "").trim()));
72
72
  }
73
73
  /**
74
- * 单个 session 显式固化的 instruction.md 路径。
74
+ * 单个 session 显式固化完整 system 的 instruction.md 路径。
75
75
  *
76
76
  * 关键点(中文)
77
77
  * - 文件不存在表示 Session 恢复时继续采用 Agent 当前 instruction。
78
- * - 空文件表示调用方显式固化了空 instruction
78
+ * - 空文件表示调用方显式固化了空 system
79
79
  */
80
80
  export function getSdkAgentSessionInstructionPath(projectRoot, agentId, sessionId) {
81
81
  return path.join(getSdkAgentSessionDirPath(projectRoot, agentId, sessionId), "instruction.md");
@@ -74,8 +74,10 @@ export interface AgentSession extends AgentSessionActor {
74
74
  readonly config: AgentSessionConfigSnapshot;
75
75
  /** 写入当前 session 默认配置。 */
76
76
  set(input: AgentSessionSetInput): Promise<void>;
77
- /** 把当前 Session 生效的自定义 instruction 显式固化到 instruction.md。 */
77
+ /** 把当前 Session 首次生成后固定的完整 system 显式固化到 instruction.md。 */
78
78
  snapshot(): Promise<void>;
79
+ /** 使用 Agent 当前 instruction 与 plugin 显式重新生成 Session system。 */
80
+ syncshot(): Promise<void>;
79
81
  /** 从当前 session 创建一个分叉会话。 */
80
82
  fork(input?: AgentSessionForkInput | string): Promise<AgentSession>;
81
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SessionActor.d.ts","sourceRoot":"","sources":["../../../src/types/agent/SessionActor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionActor.d.ts","sourceRoot":"","sources":["../../../src/types/agent/SessionActor.ts"],"names":[],"mappings":"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"}
@@ -185,7 +185,7 @@ export interface AgentSessionSystemSessionInfo {
185
185
  timezone: string;
186
186
  }
187
187
  /**
188
- * 当前 session 生效的完整 system prompt 快照。
188
+ * 当前 session 首次生成后固定的完整 system prompt 快照。
189
189
  */
190
190
  export interface AgentSessionSystemSnapshot {
191
191
  /** 当前 sessionId。 */
@@ -199,7 +199,7 @@ export interface AgentSessionSystemSnapshot {
199
199
  * - 每轮动态信息应由调用方放入 user message,避免破坏 instruction 缓存命中。
200
200
  */
201
201
  session: AgentSessionSystemSessionInfo;
202
- /** 当前生效的 system blocks,按进入模型的顺序排列。 */
202
+ /** 首次生成后固定的 system blocks,按进入模型的顺序排列。 */
203
203
  blocks: AgentSessionSystemBlock[];
204
204
  }
205
205
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"SessionTypes.d.ts","sourceRoot":"","sources":["../../../src/types/agent/SessionTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionTypes.d.ts","sourceRoot":"","sources":["../../../src/types/agent/SessionTypes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CAEpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,UAAU,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;IACX;;;;;OAKG;IACH,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;IACpE,iBAAiB;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,6BAA6B,GACrC,MAAM,GACN,aAAa,GACb,QAAQ,GACR,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,sBAAsB;IACtB,MAAM,EAAE,6BAA6B,CAAC;IACtC;;;;;;;;OAQG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,OAAO,EAAE,6BAA6B,CAAC;IACvC,yCAAyC;IACzC,MAAM,EAAE,uBAAuB,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,uBAAuB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,2BAA2B;IAC3B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,iBAAiB;IACjB,IAAI,EAAE,uBAAuB,CAAC;IAC9B;;;;;;OAMG;IACH,KAAK,EAAE,eAAe,EAAE,GAAG,yBAAyB,EAAE,CAAC;IACvD;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;OAMG;IACH,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;CAAG;AAE9E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B"}
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Session instruction 显式快照存储类型。
2
+ * Session system 显式快照存储类型。
3
3
  *
4
4
  * 关键点(中文)
5
5
  * - 这里只描述 instruction.md 的定位与写入输入。
6
- * - 文件存在性本身用于表达 Session 是否启用显式 instruction 快照。
6
+ * - 文件存在性本身用于表达 Session 是否启用显式 system 快照。
7
7
  */
8
8
  /** Session instruction.md 的稳定定位信息。 */
9
9
  export interface SessionInstructionStorageLocation {
@@ -16,7 +16,7 @@ export interface SessionInstructionStorageLocation {
16
16
  }
17
17
  /** 原子写入 Session instruction.md 使用的完整输入。 */
18
18
  export interface WriteSessionInstructionInput extends SessionInstructionStorageLocation {
19
- /** 当前 Session 生效的自定义 instruction Markdown。 */
19
+ /** 当前 Session 首次生成后固定的完整 system Markdown。 */
20
20
  instruction: string;
21
21
  }
22
22
  //# sourceMappingURL=SessionInstruction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInstruction.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionInstruction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sCAAsC;AACtC,MAAM,WAAW,iCAAiC;IAChD,eAAe;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,2CAA2C;AAC3C,MAAM,WAAW,4BACf,SAAQ,iCAAiC;IACzC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"SessionInstruction.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionInstruction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sCAAsC;AACtC,MAAM,WAAW,iCAAiC;IAChD,eAAe;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,2CAA2C;AAC3C,MAAM,WAAW,4BACf,SAAQ,iCAAiC;IACzC,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Session instruction 显式快照存储类型。
2
+ * Session system 显式快照存储类型。
3
3
  *
4
4
  * 关键点(中文)
5
5
  * - 这里只描述 instruction.md 的定位与写入输入。
6
- * - 文件存在性本身用于表达 Session 是否启用显式 instruction 快照。
6
+ * - 文件存在性本身用于表达 Session 是否启用显式 system 快照。
7
7
  */
8
8
  export {};
9
9
  //# sourceMappingURL=SessionInstruction.js.map
@@ -65,9 +65,17 @@ export interface SessionOptions {
65
65
  *
66
66
  * 关键点(中文)
67
67
  * - Session 创建后不再动态读取 Agent instruction。
68
- * - `session.snapshot()` 只会把其中 `instruction` 来源的内容显式写入本地文件。
68
+ * - `session.snapshot()` 会把首次生成后固定的完整 system 显式写入本地文件。
69
69
  */
70
70
  instruction_system_blocks: AgentSessionSystemBlock[];
71
+ /**
72
+ * 读取当前 Agent configured instruction system blocks。
73
+ *
74
+ * 关键点(中文)
75
+ * - 仅供 `session.syncshot()` 显式重新生成 system 使用。
76
+ * - 普通 Session 执行仍使用首次生成后固定的 system snapshot。
77
+ */
78
+ get_instruction_system_blocks: () => AgentSessionSystemBlock[];
71
79
  /**
72
80
  * 读取当前 Agent configured env。
73
81
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SessionOptions.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,cAAc,IAAI,WAAW,CAAC;IAE9B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC;IAEvB;;OAEG;IACH,qBAAqB,CACnB,OAAO,EAAE,mBAAmB,GAC3B,IAAI,CAAC;CACT;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;;OAMG;IACH,yBAAyB,EAAE,uBAAuB,EAAE,CAAC;IAErD;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1C,wDAAwD;IACxD,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;IAErD;;OAEG;IACH,4BAA4B,EAAE,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAEvE;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,6BAA6B;IAC7B,aAAa,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC;IAE5C,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B"}
1
+ {"version":3,"file":"SessionOptions.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,cAAc,IAAI,WAAW,CAAC;IAE9B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC;IAEvB;;OAEG;IACH,qBAAqB,CACnB,OAAO,EAAE,mBAAmB,GAC3B,IAAI,CAAC;CACT;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;;OAMG;IACH,yBAAyB,EAAE,uBAAuB,EAAE,CAAC;IAErD;;;;;;OAMG;IACH,6BAA6B,EAAE,MAAM,uBAAuB,EAAE,CAAC;IAE/D;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1C,wDAAwD;IACxD,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;IAErD;;OAEG;IACH,4BAA4B,EAAE,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAEvE;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,6BAA6B;IAC7B,aAAa,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC;IAE5C,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@downcity/agent",
3
- "version": "1.1.281",
3
+ "version": "1.1.283",
4
4
  "type": "module",
5
5
  "description": "Downcity Agent 运行时 — 单 Agent 执行壳与本机 RPC 能力",
6
6
  "main": "./bin/index.js",
@@ -12,8 +12,8 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@downcity/shell": "^0.1.131",
16
- "@downcity/type": "0.1.161",
15
+ "@downcity/shell": "^0.1.135",
16
+ "@downcity/type": "0.1.162",
17
17
  "ai": "^6.0.193",
18
18
  "commander": "^15.0.0",
19
19
  "dotenv": "^17.4.2",
@@ -2,6 +2,7 @@ import fs from "node:fs";
2
2
  import fsp from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { spawn } from "node:child_process";
5
+ import { createRequire } from "node:module";
5
6
  import { fileURLToPath } from "node:url";
6
7
 
7
8
  /**
@@ -15,8 +16,11 @@ import { fileURLToPath } from "node:url";
15
16
 
16
17
  const __filename = fileURLToPath(import.meta.url);
17
18
  const __dirname = path.dirname(__filename);
19
+ const module_require = createRequire(import.meta.url);
18
20
  const packageRoot = path.resolve(__dirname, "..");
19
21
  const srcRoot = path.join(packageRoot, "src");
22
+ const tsc_entry = module_require.resolve("typescript/bin/tsc");
23
+ const tsc_alias_entry = module_require.resolve("tsc-alias/dist/bin/index.js");
20
24
  const generatedHeader = [
21
25
  "/**",
22
26
  " * 自动生成文件,请勿手改。",
@@ -114,14 +118,17 @@ function spawnCommand(command, args, options = {}) {
114
118
 
115
119
  async function runBuild() {
116
120
  await generateTextModules();
117
- await spawnCommand("rm", ["-rf", "bin", "tsconfig.tsbuildinfo"]);
118
- await spawnCommand("tsc", []);
119
- await spawnCommand("tsc-alias", ["-f"]);
121
+ await Promise.all([
122
+ fsp.rm(path.join(packageRoot, "bin"), { recursive: true, force: true }),
123
+ fsp.rm(path.join(packageRoot, "tsconfig.tsbuildinfo"), { force: true }),
124
+ ]);
125
+ await spawnCommand(process.execPath, [tsc_entry]);
126
+ await spawnCommand(process.execPath, [tsc_alias_entry, "-f"]);
120
127
  }
121
128
 
122
129
  async function runTypecheck() {
123
130
  await generateTextModules();
124
- await spawnCommand("tsc", ["--noEmit"]);
131
+ await spawnCommand(process.execPath, [tsc_entry, "--noEmit"]);
125
132
  }
126
133
 
127
134
  async function runDev() {
@@ -201,7 +208,7 @@ async function runDev() {
201
208
  }
202
209
 
203
210
  await attachWatchers();
204
- const tscWatch = spawn("tsc", ["--watch"], {
211
+ const tscWatch = spawn(process.execPath, [tsc_entry, "--watch"], {
205
212
  cwd: packageRoot,
206
213
  stdio: "inherit",
207
214
  env: process.env,
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * 关键点(中文)
5
5
  * - 第一次 provider 请求保持阻塞,用来制造真实的运行中配置修改窗口。
6
- * - Agent instruction 修改不能改变已有 Session;env 与 plugin registry 修改在 step 检查点生效。
6
+ * - Agent instruction 与 plugin system 修改不能改变已有 Session;plugin action 视图在 step 检查点生效。
7
7
  * - config 与 steer 在同一个 Session step 检查点提交,并继续使用同一个 turn id。
8
8
  */
9
9
 
@@ -135,7 +135,7 @@ test("Agent instruction changes only affect newly created Sessions", async () =>
135
135
  assert.equal(provider_prompts.length, 2);
136
136
  assert.match(provider_prompts[1], /instruction:old/);
137
137
  assert.doesNotMatch(provider_prompts[1], /instruction:new/);
138
- assert.doesNotMatch(provider_prompts[1], /plugin-env:old/);
138
+ assert.match(provider_prompts[1], /plugin-env:old/);
139
139
 
140
140
  const messages = await session.messages();
141
141
  const completed_actions = messages.items
@@ -171,7 +171,132 @@ test("Agent instruction changes only affect newly created Sessions", async () =>
171
171
  }
172
172
  });
173
173
 
174
- test("Session snapshot explicitly persists instruction.md", async () => {
174
+ test("Plugin registry changes do not rewrite an existing Session system", async () => {
175
+ const agent_path = await fs.mkdtemp(
176
+ path.join(os.tmpdir(), "downcity-session-fixed-plugin-system-"),
177
+ );
178
+ const agent = new Agent({
179
+ id: "fixed_plugin_system_agent",
180
+ path: agent_path,
181
+ model: new MockLanguageModelV3({ modelId: "fixed-plugin-system-model" }),
182
+ });
183
+ const runtime_plugin = createPlugin({
184
+ name: "runtime-system",
185
+ title: "Runtime System",
186
+ description: "Provides a fixed Session system test block",
187
+ system: () => "plugin-system:registered",
188
+ });
189
+
190
+ try {
191
+ const existing_session = await agent.sessions.create({
192
+ sessionId: "existing_session",
193
+ });
194
+ const existing_before = await existing_session.system();
195
+
196
+ await agent.plugins.register(runtime_plugin);
197
+ const existing_after_register = await existing_session.system();
198
+ assert.deepEqual(existing_after_register, existing_before);
199
+
200
+ const registered_session = await agent.sessions.create({
201
+ sessionId: "registered_session",
202
+ });
203
+ const registered_before = await registered_session.system();
204
+ assert.match(
205
+ registered_before.blocks.map((block) => block.content).join("\n"),
206
+ /plugin-system:registered/,
207
+ );
208
+
209
+ await agent.plugins.unregister("runtime-system");
210
+ const registered_after_unregister = await registered_session.system();
211
+ assert.deepEqual(registered_after_unregister, registered_before);
212
+
213
+ const unregistered_session = await agent.sessions.create({
214
+ sessionId: "unregistered_session",
215
+ });
216
+ assert.doesNotMatch(
217
+ (await unregistered_session.system()).blocks
218
+ .map((block) => block.content)
219
+ .join("\n"),
220
+ /plugin-system:registered/,
221
+ );
222
+ } finally {
223
+ await agent.dispose();
224
+ await fs.rm(agent_path, { recursive: true, force: true });
225
+ }
226
+ });
227
+
228
+ test("Session syncshot refreshes system and only rewrites an existing instruction.md", async () => {
229
+ const agent_path = await fs.mkdtemp(
230
+ path.join(os.tmpdir(), "downcity-session-syncshot-"),
231
+ );
232
+ const session_id = "syncshot_session";
233
+ const instruction_path = path.join(
234
+ agent_path,
235
+ ".downcity",
236
+ "agents",
237
+ "syncshot_agent",
238
+ "sessions",
239
+ session_id,
240
+ "instruction.md",
241
+ );
242
+ const create_system_plugin = (content) => createPlugin({
243
+ name: "syncshot-system",
244
+ title: "Syncshot System",
245
+ description: "Provides system text refreshed by session.syncshot()",
246
+ system: () => content,
247
+ });
248
+ const model = new MockLanguageModelV3({ modelId: "syncshot-model" });
249
+ const agent = new Agent({
250
+ id: "syncshot_agent",
251
+ path: agent_path,
252
+ model,
253
+ instruction: ["instruction:initial"],
254
+ plugins: [create_system_plugin("plugin-system:initial")],
255
+ });
256
+
257
+ try {
258
+ const session = await agent.sessions.create({ sessionId: session_id });
259
+ const initial_text = (await session.system()).blocks
260
+ .map((block) => block.content)
261
+ .join("\n");
262
+ assert.match(initial_text, /instruction:initial/);
263
+ assert.match(initial_text, /plugin-system:initial/);
264
+
265
+ agent.setInstruction(["instruction:refreshed"]);
266
+ await agent.plugins.register(create_system_plugin("plugin-system:refreshed"));
267
+ await session.syncshot();
268
+
269
+ const refreshed_text = (await session.system()).blocks
270
+ .map((block) => block.content)
271
+ .join("\n");
272
+ assert.match(refreshed_text, /instruction:refreshed/);
273
+ assert.match(refreshed_text, /plugin-system:refreshed/);
274
+ assert.doesNotMatch(refreshed_text, /instruction:initial/);
275
+ await assert.rejects(fs.access(instruction_path));
276
+
277
+ await session.snapshot();
278
+ agent.setInstruction(["instruction:latest"]);
279
+ await agent.plugins.register(create_system_plugin("plugin-system:latest"));
280
+ await Promise.all([session.snapshot(), session.syncshot()]);
281
+
282
+ const latest_system = await session.system();
283
+ const latest_text = latest_system.blocks
284
+ .map((block) => block.content)
285
+ .join("\n");
286
+ const persisted_text = await fs.readFile(instruction_path, "utf8");
287
+ assert.match(latest_text, /instruction:latest/);
288
+ assert.match(latest_text, /plugin-system:latest/);
289
+ assert.equal(
290
+ persisted_text,
291
+ latest_system.blocks.map((block) => block.content).join("\n\n"),
292
+ );
293
+ } finally {
294
+ await agent.dispose();
295
+ await fs.rm(agent_path, { recursive: true, force: true });
296
+ }
297
+ });
298
+
299
+ test("Session snapshot explicitly persists the complete system to instruction.md", async () => {
175
300
  const agent_path = await fs.mkdtemp(
176
301
  path.join(os.tmpdir(), "downcity-agent-instruction-restart-"),
177
302
  );
@@ -181,6 +306,12 @@ test("Session snapshot explicitly persists instruction.md", async () => {
181
306
  path: agent_path,
182
307
  model,
183
308
  instruction: ["instruction:old"],
309
+ plugins: [createPlugin({
310
+ name: "snapshot-system",
311
+ title: "Snapshot System",
312
+ description: "Provides system text persisted by session.snapshot()",
313
+ system: () => "plugin-system:persisted",
314
+ })],
184
315
  });
185
316
 
186
317
  try {
@@ -203,11 +334,15 @@ test("Session snapshot explicitly persists instruction.md", async () => {
203
334
  "instruction_restart_session",
204
335
  "instruction.md",
205
336
  );
206
- assert.equal(await fs.readFile(instruction_path, "utf8"), "instruction:old");
337
+ const persisted_system = await fs.readFile(instruction_path, "utf8");
338
+ assert.match(persisted_system, /instruction:old/);
339
+ assert.match(persisted_system, /# Downcity Agent/);
340
+ assert.match(persisted_system, /plugin-system:persisted/);
341
+ assert.match(persisted_system, /Current session context:/);
207
342
 
208
343
  await fs.writeFile(instruction_path, "instruction:manual", "utf8");
209
344
  await session.snapshot();
210
- assert.equal(await fs.readFile(instruction_path, "utf8"), "instruction:old");
345
+ assert.equal(await fs.readFile(instruction_path, "utf8"), persisted_system);
211
346
  } finally {
212
347
  await first_agent.dispose();
213
348
  }
@@ -227,6 +362,7 @@ test("Session snapshot explicitly persists instruction.md", async () => {
227
362
  .map((block) => block.content)
228
363
  .join("\n");
229
364
  assert.match(restored_system_text, /instruction:old/);
365
+ assert.match(restored_system_text, /plugin-system:persisted/);
230
366
  assert.doesNotMatch(restored_system_text, /instruction:new/);
231
367
  } finally {
232
368
  await restarted_agent.dispose();
@@ -418,6 +418,7 @@ export class AgentSessions implements AgentSessionsContract<AgentSession> {
418
418
  tools: this.tools,
419
419
  logger: this.logger,
420
420
  instruction_system_blocks: this.load_instruction_system_blocks(),
421
+ get_instruction_system_blocks: () => this.load_instruction_system_blocks(),
421
422
  getAgentEnv: () => this.get_agent_env(),
422
423
  getAgentModel: () => this.get_agent_model(),
423
424
  get_agent_plugins: () => this.get_agent_plugins(),
@@ -42,6 +42,9 @@ type ExecutorOptions = {
42
42
  retry_count: number,
43
43
  ) => Promise<SessionComposeInput>;
44
44
 
45
+ /** 应用 Session 级固定 system snapshot。 */
46
+ apply_system_snapshot?: (input: SessionStepInput) => SessionStepInput;
47
+
45
48
  /** 提交 Composer 生成的持久化压缩计划。 */
46
49
  commit_compaction: (
47
50
  plan: SessionCompactionPlan,
@@ -73,6 +76,7 @@ export class Executor implements SessionExecutor {
73
76
 
74
77
  private readonly composer: SessionComposer;
75
78
  private readonly get_compose_input: ExecutorOptions["get_compose_input"];
79
+ private readonly apply_system_snapshot?: ExecutorOptions["apply_system_snapshot"];
76
80
  private readonly commit_compaction: ExecutorOptions["commit_compaction"];
77
81
  private readonly getModel: ExecutorOptions["getModel"];
78
82
  private readonly get_plugins: ExecutorOptions["get_plugins"];
@@ -92,6 +96,7 @@ export class Executor implements SessionExecutor {
92
96
  this.sessionId = sessionId;
93
97
  this.composer = options.composer;
94
98
  this.get_compose_input = options.get_compose_input;
99
+ this.apply_system_snapshot = options.apply_system_snapshot;
95
100
  this.commit_compaction = options.commit_compaction;
96
101
  this.getModel = options.getModel;
97
102
  this.get_plugins = options.get_plugins;
@@ -340,9 +345,12 @@ export class Executor implements SessionExecutor {
340
345
  run_context.agentSystems = Object.freeze([
341
346
  ...compose_input.state.systems,
342
347
  ]);
348
+ const raw_input = await this.composer.compose(compose_input);
343
349
  return {
344
350
  compose_input,
345
- input: await this.composer.compose(compose_input),
351
+ input: this.apply_system_snapshot
352
+ ? this.apply_system_snapshot(raw_input)
353
+ : raw_input,
346
354
  model,
347
355
  };
348
356
  }