@di-code/coding-agent 0.2.1 → 0.2.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.
Files changed (88) hide show
  1. package/README.md +5 -0
  2. package/dist/core/session/session-manager.d.ts +18 -1
  3. package/dist/core/session/session-manager.d.ts.map +1 -1
  4. package/dist/core/session/session-manager.js +90 -1
  5. package/dist/core/session/session-manager.js.map +1 -1
  6. package/dist/core/session/session-storage.d.ts +2 -0
  7. package/dist/core/session/session-storage.d.ts.map +1 -1
  8. package/dist/core/session/session-storage.js +22 -1
  9. package/dist/core/session/session-storage.js.map +1 -1
  10. package/dist/core/session/types.d.ts +16 -1
  11. package/dist/core/session/types.d.ts.map +1 -1
  12. package/dist/core/session/types.js.map +1 -1
  13. package/dist/core/session.d.ts +27 -2
  14. package/dist/core/session.d.ts.map +1 -1
  15. package/dist/core/session.js +59 -0
  16. package/dist/core/session.js.map +1 -1
  17. package/dist/entry.js +1 -1
  18. package/dist/entry.js.map +1 -1
  19. package/dist/i18n.js +4 -4
  20. package/dist/i18n.js.map +1 -1
  21. package/dist/interactive-host-entry.d.ts.map +1 -1
  22. package/dist/interactive-host-entry.js +107 -12
  23. package/dist/interactive-host-entry.js.map +1 -1
  24. package/dist/main.d.ts.map +1 -1
  25. package/dist/main.js +3 -0
  26. package/dist/main.js.map +1 -1
  27. package/dist/modes/interactive-components.d.ts +8 -0
  28. package/dist/modes/interactive-components.d.ts.map +1 -1
  29. package/dist/modes/interactive-components.js +7 -2
  30. package/dist/modes/interactive-components.js.map +1 -1
  31. package/dist/modes/interactive.d.ts +4 -0
  32. package/dist/modes/interactive.d.ts.map +1 -1
  33. package/dist/modes/interactive.js +69 -0
  34. package/dist/modes/interactive.js.map +1 -1
  35. package/dist/modes/tree-selector.d.ts.map +1 -1
  36. package/dist/modes/tree-selector.js +4 -0
  37. package/dist/modes/tree-selector.js.map +1 -1
  38. package/dist/rpc/client.d.ts +2 -0
  39. package/dist/rpc/client.d.ts.map +1 -1
  40. package/dist/rpc/client.js +3 -0
  41. package/dist/rpc/client.js.map +1 -1
  42. package/dist/rpc/dispatcher.d.ts +14 -0
  43. package/dist/rpc/dispatcher.d.ts.map +1 -1
  44. package/dist/rpc/dispatcher.js +222 -7
  45. package/dist/rpc/dispatcher.js.map +1 -1
  46. package/dist/rpc/protocol.d.ts +12 -5
  47. package/dist/rpc/protocol.d.ts.map +1 -1
  48. package/dist/rpc/protocol.js +34 -0
  49. package/dist/rpc/protocol.js.map +1 -1
  50. package/dist/rpc/server.d.ts +5 -0
  51. package/dist/rpc/server.d.ts.map +1 -1
  52. package/dist/rpc/server.js +4 -0
  53. package/dist/rpc/server.js.map +1 -1
  54. package/dist/rpc-server-entry.d.ts.map +1 -1
  55. package/dist/rpc-server-entry.js +15 -1
  56. package/dist/rpc-server-entry.js.map +1 -1
  57. package/dist/runtime/product-host.d.ts +7 -0
  58. package/dist/runtime/product-host.d.ts.map +1 -1
  59. package/dist/runtime/product-host.js +29 -9
  60. package/dist/runtime/product-host.js.map +1 -1
  61. package/dist/runtime/session-factory.d.ts +18 -2
  62. package/dist/runtime/session-factory.d.ts.map +1 -1
  63. package/dist/runtime/session-factory.js +286 -24
  64. package/dist/runtime/session-factory.js.map +1 -1
  65. package/dist/runtime/session-host.d.ts +46 -1
  66. package/dist/runtime/session-host.d.ts.map +1 -1
  67. package/dist/runtime/session-host.js +38 -6
  68. package/dist/runtime/session-host.js.map +1 -1
  69. package/dist/ui-host.d.ts.map +1 -1
  70. package/dist/ui-host.js +3 -0
  71. package/dist/ui-host.js.map +1 -1
  72. package/dist/web/assets/index-C2SOU925.css +1 -0
  73. package/dist/web/assets/index-knXkInvO.js +41 -0
  74. package/dist/web/assets/index-knXkInvO.js.map +1 -0
  75. package/dist/web/index.html +2 -2
  76. package/dist/web-command.d.ts.map +1 -1
  77. package/dist/web-command.js +8 -1
  78. package/dist/web-command.js.map +1 -1
  79. package/dist/webui-entry.js +9 -1
  80. package/dist/webui-entry.js.map +1 -1
  81. package/dist/webui.d.ts +10 -0
  82. package/dist/webui.d.ts.map +1 -1
  83. package/dist/webui.js +21 -0
  84. package/dist/webui.js.map +1 -1
  85. package/package.json +11 -9
  86. package/dist/web/assets/index-C-NyCPxd.css +0 -1
  87. package/dist/web/assets/index-DgyxuNNG.js +0 -41
  88. package/dist/web/assets/index-DgyxuNNG.js.map +0 -1
@@ -32,7 +32,16 @@ export interface SessionPluginEntry extends SessionRecordBase {
32
32
  readonly schemaVersion: number;
33
33
  readonly data: JsonValue;
34
34
  }
35
- export type SessionEntry = SessionMessageEntry | SessionSummaryEntry | SessionPluginEntry;
35
+ /** Versioned extension event retained even when its plugin is unavailable. */
36
+ export interface SessionEventEntry extends SessionRecordBase {
37
+ readonly type: "event";
38
+ readonly parentId: string;
39
+ readonly namespace: string;
40
+ readonly eventName: string;
41
+ readonly schemaVersion: number;
42
+ readonly payload: JsonValue;
43
+ }
44
+ export type SessionEntry = SessionMessageEntry | SessionSummaryEntry | SessionPluginEntry | SessionEventEntry;
36
45
  /** An immutable entry snapshot with its append-ordered descendants. */
37
46
  export interface SessionTreeNode {
38
47
  readonly entry: SessionEntry;
@@ -47,6 +56,12 @@ export type SessionDiagnostic = {
47
56
  readonly kind: "corrupt_record";
48
57
  readonly lineNumber: number;
49
58
  readonly reason: string;
59
+ } | {
60
+ readonly kind: "event_validation";
61
+ readonly namespace: string;
62
+ readonly eventName: string;
63
+ readonly schemaVersion: number;
64
+ readonly reason: string;
50
65
  };
51
66
  export interface LoadedSession {
52
67
  readonly header: SessionHeader;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/session/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/session/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/session/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAC;AAsEjD,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACjC,IAAI,CAAuB;IAC3B,QAAQ,CAAS;IACjB,UAAU,CAAU;IAE7B,YACC,IAA0B,EAC1B,QAAgB,EAChB,OAAe,EACf,OAAoE;QAEpE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACvC,CAAC;CACD;AASD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAClC,IAAI,CAAwB;IAC5B,QAAQ,CAAS;IACjB,gBAAgB,CAAU;IAC1B,cAAc,CAAU;IAEjC,YACC,IAA2B,EAC3B,QAAgB,EAChB,OAAe,EACf,OAIC;QAED,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,cAAc,CAAC;IAC/C,CAAC;CACD","sourcesContent":["import type { JsonValue, Message } from \"@di-code/ai\";\n\nexport const SESSION_FORMAT_VERSION = 2 as const;\n\nexport interface SessionRecordBase {\n\treadonly version: typeof SESSION_FORMAT_VERSION;\n\treadonly id: string;\n\treadonly parentId: string | null;\n\treadonly timestamp: string;\n}\n\nexport interface SessionHeader extends SessionRecordBase {\n\treadonly type: \"session\";\n\treadonly parentId: null;\n\treadonly cwd: string;\n}\n\nexport interface SessionMessageEntry extends SessionRecordBase {\n\treadonly type: \"message\";\n\treadonly parentId: string;\n\treadonly message: Message;\n}\n\nexport interface SessionSummaryEntry extends SessionRecordBase {\n\treadonly type: \"summary\";\n\treadonly parentId: string;\n\treadonly summary: string;\n\treadonly firstKeptEntryId: string;\n\treadonly tokensBefore: number;\n}\n\n/** Plugin-private records are retained verbatim so newer plugins survive older readers. */\nexport interface SessionPluginEntry extends SessionRecordBase {\n\treadonly type: \"plugin\";\n\treadonly parentId: string;\n\treadonly pluginId: string;\n\treadonly pluginVersion: string;\n\treadonly schemaVersion: number;\n\treadonly data: JsonValue;\n}\n\nexport type SessionEntry = SessionMessageEntry | SessionSummaryEntry | SessionPluginEntry;\n\n/** An immutable entry snapshot with its append-ordered descendants. */\nexport interface SessionTreeNode {\n\treadonly entry: SessionEntry;\n\treadonly children: readonly SessionTreeNode[];\n}\n\nexport type SessionRecord = SessionHeader | SessionEntry;\n\nexport type SessionDiagnostic =\n\t| {\n\t\t\treadonly kind: \"trailing_partial_line\";\n\t\t\treadonly lineNumber: number;\n\t\t\treadonly reason: string;\n\t }\n\t| {\n\t\t\treadonly kind: \"corrupt_record\";\n\t\t\treadonly lineNumber: number;\n\t\t\treadonly reason: string;\n\t };\n\nexport interface LoadedSession {\n\treadonly header: SessionHeader;\n\treadonly entries: readonly SessionEntry[];\n\treadonly messages: readonly Message[];\n\treadonly diagnostics: readonly SessionDiagnostic[];\n}\n\nexport type SessionLoadErrorCode = \"INVALID_HEADER\" | \"UNSUPPORTED_VERSION\" | \"READ_FAILED\";\n\nexport class SessionLoadError extends Error {\n\treadonly code: SessionLoadErrorCode;\n\treadonly filePath: string;\n\treadonly lineNumber?: number;\n\n\tconstructor(\n\t\tcode: SessionLoadErrorCode,\n\t\tfilePath: string,\n\t\tmessage: string,\n\t\toptions?: { readonly lineNumber?: number; readonly cause?: unknown },\n\t) {\n\t\tsuper(message, { cause: options?.cause });\n\t\tthis.name = \"SessionLoadError\";\n\t\tthis.code = code;\n\t\tthis.filePath = filePath;\n\t\tthis.lineNumber = options?.lineNumber;\n\t}\n}\n\nexport type SessionWriteErrorCode =\n\t| \"CREATE_FAILED\"\n\t| \"APPEND_FAILED\"\n\t| \"LOCK_TIMEOUT\"\n\t| \"CONCURRENT_MODIFICATION\"\n\t| \"CORRUPT_SESSION\";\n\nexport class SessionWriteError extends Error {\n\treadonly code: SessionWriteErrorCode;\n\treadonly filePath: string;\n\treadonly expectedParentId?: string;\n\treadonly actualParentId?: string;\n\n\tconstructor(\n\t\tcode: SessionWriteErrorCode,\n\t\tfilePath: string,\n\t\tmessage: string,\n\t\toptions?: {\n\t\t\treadonly cause?: unknown;\n\t\t\treadonly expectedParentId?: string;\n\t\t\treadonly actualParentId?: string;\n\t\t},\n\t) {\n\t\tsuper(message, { cause: options?.cause });\n\t\tthis.name = \"SessionWriteError\";\n\t\tthis.code = code;\n\t\tthis.filePath = filePath;\n\t\tthis.expectedParentId = options?.expectedParentId;\n\t\tthis.actualParentId = options?.actualParentId;\n\t}\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/session/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAC;AAuFjD,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACjC,IAAI,CAAuB;IAC3B,QAAQ,CAAS;IACjB,UAAU,CAAU;IAE7B,YACC,IAA0B,EAC1B,QAAgB,EAChB,OAAe,EACf,OAAoE;QAEpE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACvC,CAAC;CACD;AASD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAClC,IAAI,CAAwB;IAC5B,QAAQ,CAAS;IACjB,gBAAgB,CAAU;IAC1B,cAAc,CAAU;IAEjC,YACC,IAA2B,EAC3B,QAAgB,EAChB,OAAe,EACf,OAIC;QAED,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,cAAc,CAAC;IAC/C,CAAC;CACD","sourcesContent":["import type { JsonValue, Message } from \"@di-code/ai\";\n\nexport const SESSION_FORMAT_VERSION = 2 as const;\n\nexport interface SessionRecordBase {\n\treadonly version: typeof SESSION_FORMAT_VERSION;\n\treadonly id: string;\n\treadonly parentId: string | null;\n\treadonly timestamp: string;\n}\n\nexport interface SessionHeader extends SessionRecordBase {\n\treadonly type: \"session\";\n\treadonly parentId: null;\n\treadonly cwd: string;\n}\n\nexport interface SessionMessageEntry extends SessionRecordBase {\n\treadonly type: \"message\";\n\treadonly parentId: string;\n\treadonly message: Message;\n}\n\nexport interface SessionSummaryEntry extends SessionRecordBase {\n\treadonly type: \"summary\";\n\treadonly parentId: string;\n\treadonly summary: string;\n\treadonly firstKeptEntryId: string;\n\treadonly tokensBefore: number;\n}\n\n/** Plugin-private records are retained verbatim so newer plugins survive older readers. */\nexport interface SessionPluginEntry extends SessionRecordBase {\n\treadonly type: \"plugin\";\n\treadonly parentId: string;\n\treadonly pluginId: string;\n\treadonly pluginVersion: string;\n\treadonly schemaVersion: number;\n\treadonly data: JsonValue;\n}\n\n/** Versioned extension event retained even when its plugin is unavailable. */\nexport interface SessionEventEntry extends SessionRecordBase {\n\treadonly type: \"event\";\n\treadonly parentId: string;\n\treadonly namespace: string;\n\treadonly eventName: string;\n\treadonly schemaVersion: number;\n\treadonly payload: JsonValue;\n}\n\nexport type SessionEntry = SessionMessageEntry | SessionSummaryEntry | SessionPluginEntry | SessionEventEntry;\n\n/** An immutable entry snapshot with its append-ordered descendants. */\nexport interface SessionTreeNode {\n\treadonly entry: SessionEntry;\n\treadonly children: readonly SessionTreeNode[];\n}\n\nexport type SessionRecord = SessionHeader | SessionEntry;\n\nexport type SessionDiagnostic =\n\t| {\n\t\t\treadonly kind: \"trailing_partial_line\";\n\t\t\treadonly lineNumber: number;\n\t\t\treadonly reason: string;\n\t }\n\t| {\n\t\t\treadonly kind: \"corrupt_record\";\n\t\t\treadonly lineNumber: number;\n\t\t\treadonly reason: string;\n\t }\n\t| {\n\t\t\treadonly kind: \"event_validation\";\n\t\t\treadonly namespace: string;\n\t\t\treadonly eventName: string;\n\t\t\treadonly schemaVersion: number;\n\t\t\treadonly reason: string;\n\t };\n\nexport interface LoadedSession {\n\treadonly header: SessionHeader;\n\treadonly entries: readonly SessionEntry[];\n\treadonly messages: readonly Message[];\n\treadonly diagnostics: readonly SessionDiagnostic[];\n}\n\nexport type SessionLoadErrorCode = \"INVALID_HEADER\" | \"UNSUPPORTED_VERSION\" | \"READ_FAILED\";\n\nexport class SessionLoadError extends Error {\n\treadonly code: SessionLoadErrorCode;\n\treadonly filePath: string;\n\treadonly lineNumber?: number;\n\n\tconstructor(\n\t\tcode: SessionLoadErrorCode,\n\t\tfilePath: string,\n\t\tmessage: string,\n\t\toptions?: { readonly lineNumber?: number; readonly cause?: unknown },\n\t) {\n\t\tsuper(message, { cause: options?.cause });\n\t\tthis.name = \"SessionLoadError\";\n\t\tthis.code = code;\n\t\tthis.filePath = filePath;\n\t\tthis.lineNumber = options?.lineNumber;\n\t}\n}\n\nexport type SessionWriteErrorCode =\n\t| \"CREATE_FAILED\"\n\t| \"APPEND_FAILED\"\n\t| \"LOCK_TIMEOUT\"\n\t| \"CONCURRENT_MODIFICATION\"\n\t| \"CORRUPT_SESSION\";\n\nexport class SessionWriteError extends Error {\n\treadonly code: SessionWriteErrorCode;\n\treadonly filePath: string;\n\treadonly expectedParentId?: string;\n\treadonly actualParentId?: string;\n\n\tconstructor(\n\t\tcode: SessionWriteErrorCode,\n\t\tfilePath: string,\n\t\tmessage: string,\n\t\toptions?: {\n\t\t\treadonly cause?: unknown;\n\t\t\treadonly expectedParentId?: string;\n\t\t\treadonly actualParentId?: string;\n\t\t},\n\t) {\n\t\tsuper(message, { cause: options?.cause });\n\t\tthis.name = \"SessionWriteError\";\n\t\tthis.code = code;\n\t\tthis.filePath = filePath;\n\t\tthis.expectedParentId = options?.expectedParentId;\n\t\tthis.actualParentId = options?.actualParentId;\n\t}\n}\n"]}
@@ -1,6 +1,9 @@
1
- import type { AgentTool, AgentToolResult } from "@di-code/agent";
2
- import { type AgentListener } from "@di-code/agent";
1
+ import type { AgentHookRegistration, AgentTool, AgentToolResult } from "@di-code/agent";
2
+ import { type AgentListener, type PromptSectionRegistry } from "@di-code/agent";
3
3
  import type { AssistantMessage, ImageContent, Message, Model, Provider, ThinkingLevel, TSchema, Usage } from "@di-code/ai";
4
+ import type { ToolPolicyCapability, ToolPolicyMode, ToolPolicySnapshot } from "@di-code/builtins";
5
+ import type { PlanModeController, PlanModeProjection } from "@di-code/plan-mode";
6
+ import type { SessionExtensionFacade, SessionProjectionRegistry } from "@di-code/plugin-sdk";
4
7
  import type { SkillResource } from "./resources/types.ts";
5
8
  import type { SessionManager } from "./session/session-manager.ts";
6
9
  import type { SessionDiagnostic, SessionTreeNode } from "./session/types.ts";
@@ -33,10 +36,18 @@ export interface AgentSessionOptions {
33
36
  /** Valid initial override for the selected model's thinking level. */
34
37
  readonly thinkingLevel?: ThinkingLevel;
35
38
  readonly systemPrompt?: string;
39
+ readonly promptSections?: PromptSectionRegistry;
40
+ /** Returns an immutable, session-owned snapshot for dynamic prompt generators. */
41
+ readonly getPromptSnapshot?: () => unknown;
36
42
  readonly skills?: readonly SkillResource[];
37
43
  readonly now?: () => number;
38
44
  readonly sessionManager?: SessionManager;
39
45
  readonly compaction?: AgentSessionCompactionOptions;
46
+ readonly toolPolicy?: ToolPolicyCapability;
47
+ readonly hooks?: readonly AgentHookRegistration[];
48
+ readonly planMode?: PlanModeController;
49
+ readonly projectionRegistry?: SessionProjectionRegistry;
50
+ readonly extensionFacade?: SessionExtensionFacade;
40
51
  /** Called once when the owning product host releases this session scope. */
41
52
  readonly onDispose?: () => void | Promise<void>;
42
53
  }
@@ -90,6 +101,10 @@ export declare class AgentSession {
90
101
  private readonly sessionListeners;
91
102
  private readonly agentUnsubscribers;
92
103
  private readonly onDispose?;
104
+ private readonly toolPolicy?;
105
+ private readonly planModeController?;
106
+ private readonly projectionRegistry?;
107
+ private readonly extensionFacade?;
93
108
  private disposed;
94
109
  constructor(options: AgentSessionOptions);
95
110
  /** Releases listeners and the isolated product scope. Repeated calls are harmless. */
@@ -114,6 +129,14 @@ export declare class AgentSession {
114
129
  get sessionDiagnostics(): readonly SessionDiagnostic[];
115
130
  get sessionTree(): readonly SessionTreeNode[];
116
131
  get sessionLeafId(): string | undefined;
132
+ get toolPolicySnapshot(): ToolPolicySnapshot | undefined;
133
+ get planModeProjection(): PlanModeProjection | undefined;
134
+ planModeCommand(args: string): Promise<string>;
135
+ planCommand(args: string): Promise<string>;
136
+ planMode(): PlanModeProjection | undefined;
137
+ projections(): readonly import("@di-code/plugin-sdk").SessionProjectionSnapshot[];
138
+ extensions(): SessionExtensionFacade | undefined;
139
+ setToolPolicyMode(mode: ToolPolicyMode, signal?: AbortSignal): Promise<ToolPolicySnapshot>;
117
140
  get usage(): SessionUsage;
118
141
  prompt(text: string, signal?: AbortSignal): Promise<AssistantMessage>;
119
142
  /** Queues an instruction for the next provider request while this Session is running. */
@@ -126,6 +149,8 @@ export declare class AgentSession {
126
149
  /** Changes the active persisted branch and replaces the next-request model context. */
127
150
  navigateTree(entryId: string): Promise<TreeNavigationResult>;
128
151
  subscribe(listener: AgentListener): () => void;
152
+ /** Adds a lifecycle hook to the live Agent and returns an idempotent disposer. */
153
+ addHook(hook: AgentHookRegistration): () => void;
129
154
  subscribeSession(listener: AgentSessionListener): () => void;
130
155
  private emitSession;
131
156
  private emitQueueUpdate;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
@@ -36,10 +36,18 @@ export class AgentSession {
36
36
  sessionListeners = new Set();
37
37
  agentUnsubscribers = [];
38
38
  onDispose;
39
+ toolPolicy;
40
+ planModeController;
41
+ projectionRegistry;
42
+ extensionFacade;
39
43
  disposed = false;
40
44
  constructor(options) {
41
45
  this.allowedRootValue = options.allowedRoot;
42
46
  this.onDispose = options.onDispose;
47
+ this.toolPolicy = options.toolPolicy;
48
+ this.planModeController = options.planMode;
49
+ this.projectionRegistry = options.projectionRegistry;
50
+ this.extensionFacade = options.extensionFacade;
43
51
  this.sessionManager = options.sessionManager;
44
52
  this.provider = options.provider;
45
53
  this.skills = structuredClone([...(options.skills ?? [])].map((skill) => ({
@@ -97,6 +105,9 @@ export class AgentSession {
97
105
  now: this.now,
98
106
  initialMessages: options.sessionManager?.messages,
99
107
  initialContextMessages: initialContext?.messages,
108
+ promptSections: options.promptSections,
109
+ getPromptSnapshot: options.getPromptSnapshot,
110
+ hooks: options.hooks,
100
111
  });
101
112
  this.agentUnsubscribers.push(this.agent.subscribe(async (event) => {
102
113
  if (event.type !== "message_end" || this.sessionManager === undefined || this.persistenceError !== undefined) {
@@ -132,6 +143,8 @@ export class AgentSession {
132
143
  if (this.disposed)
133
144
  return;
134
145
  this.disposed = true;
146
+ this.toolPolicy?.dispose?.();
147
+ await this.planModeController?.dispose();
135
148
  for (const unsubscribe of this.agentUnsubscribers.splice(0))
136
149
  unsubscribe();
137
150
  this.sessionListeners.clear();
@@ -253,6 +266,48 @@ export class AgentSession {
253
266
  get sessionLeafId() {
254
267
  return this.sessionManager?.leafId;
255
268
  }
269
+ get toolPolicySnapshot() {
270
+ return this.toolPolicy?.snapshot?.();
271
+ }
272
+ get planModeProjection() {
273
+ return this.planModeController?.get();
274
+ }
275
+ planModeCommand(args) {
276
+ if (!this.planModeController)
277
+ return Promise.reject(new Error("Plan mode is unavailable."));
278
+ return this.planModeController.command(args, async (message) => {
279
+ if (this.promptActive) {
280
+ await this.steer(message);
281
+ return;
282
+ }
283
+ await this.prompt(message);
284
+ });
285
+ }
286
+ planCommand(args) {
287
+ return this.planModeCommand(args);
288
+ }
289
+ planMode() {
290
+ return this.planModeProjection;
291
+ }
292
+ projections() {
293
+ if (!this.projectionRegistry || !this.sessionManager)
294
+ return [];
295
+ return this.projectionRegistry.replay(this.sessionManager.events.map((event) => ({
296
+ namespace: event.namespace,
297
+ eventName: event.eventName,
298
+ schemaVersion: event.schemaVersion,
299
+ payload: event.payload,
300
+ })));
301
+ }
302
+ extensions() {
303
+ return this.extensionFacade;
304
+ }
305
+ async setToolPolicyMode(mode, signal) {
306
+ this.assertNotDisposed();
307
+ if (!this.toolPolicy?.setMode)
308
+ throw new Error("Session tool policy is not dynamic.");
309
+ return await this.toolPolicy.setMode(mode, signal);
310
+ }
256
311
  get usage() {
257
312
  return {
258
313
  ...this.usageTotals,
@@ -366,6 +421,10 @@ export class AgentSession {
366
421
  subscribe(listener) {
367
422
  return this.agent.subscribe(listener);
368
423
  }
424
+ /** Adds a lifecycle hook to the live Agent and returns an idempotent disposer. */
425
+ addHook(hook) {
426
+ return this.agent.addHook(hook);
427
+ }
369
428
  subscribeSession(listener) {
370
429
  this.sessionListeners.add(listener);
371
430
  return () => this.sessionListeners.delete(listener);
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AgentTool, AgentToolResult } from \"@di-code/agent\";\nimport {\n\tAgent,\n\ttype AgentListener,\n\ttype ContextBudget,\n\testimateContextTokens,\n\tgenerateCompactionSummary,\n\tprepareCompaction,\n\tresolveContextBudget,\n\tshouldCompact,\n} from \"@di-code/agent\";\nimport type {\n\tAssistantMessage,\n\tImageContent,\n\tMessage,\n\tModel,\n\tProvider,\n\tThinkingLevel,\n\tTSchema,\n\tUsage,\n\tUserContent,\n} from \"@di-code/ai\";\nimport { createSkillCatalog, resolveSkillInvocation, type SkillCatalog } from \"@di-code/skills\";\nimport type { SkillResource } from \"./resources/types.ts\";\nimport type { SessionManager } from \"./session/session-manager.ts\";\nimport type { SessionDiagnostic, SessionEntry, SessionTreeNode } from \"./session/types.ts\";\n\nexport interface AgentSessionCompactionOptions {\n\treadonly enabled?: boolean;\n\treadonly keepRecentTokens?: number;\n\t/** Optional registry-owned message transform applied before compaction cut selection. */\n\treadonly prepareMessages?: (\n\t\tmessages: readonly Message[],\n\t\tsignal?: AbortSignal,\n\t) => readonly Message[] | Promise<readonly Message[]>;\n}\n\nexport type AgentSessionTool = AgentTool<TSchema, AgentToolResult>;\n\nexport interface SessionUsage {\n\treadonly requestCount: number;\n\treadonly inputTokens: number;\n\treadonly outputTokens: number;\n\treadonly cacheReadTokens: number;\n\treadonly cacheWriteTokens: number;\n\treadonly totalTokens: number;\n\treadonly cost: Usage[\"cost\"];\n\treadonly estimatedContextTokens: number;\n\treadonly contextWindow: number;\n\treadonly reserveTokens: number;\n\treadonly triggerTokens: number;\n}\n\nexport interface AgentSessionOptions {\n\treadonly allowedRoot: string;\n\treadonly provider: Provider;\n\treadonly model: Model;\n\t/** Immutable tool snapshot selected by the owning SessionFactory. */\n\treadonly tools: readonly AgentSessionTool[];\n\t/** Valid initial override for the selected model's thinking level. */\n\treadonly thinkingLevel?: ThinkingLevel;\n\treadonly systemPrompt?: string;\n\treadonly skills?: readonly SkillResource[];\n\treadonly now?: () => number;\n\treadonly sessionManager?: SessionManager;\n\treadonly compaction?: AgentSessionCompactionOptions;\n\t/** Called once when the owning product host releases this session scope. */\n\treadonly onDispose?: () => void | Promise<void>;\n}\n\nexport type AgentSessionEvent =\n\t| import(\"@di-code/agent\").AgentEvent\n\t| { type: \"compaction_start\"; reason: \"threshold\" | \"manual\" }\n\t| { type: \"compaction_end\"; reason: \"threshold\" | \"manual\"; success: boolean; errorMessage?: string }\n\t| { type: \"queue_update\"; steering: readonly string[] }\n\t| { type: \"usage_update\"; usage: SessionUsage }\n\t| {\n\t\t\ttype: \"tree_navigated\";\n\t\t\toldLeafId: string;\n\t\t\tnewLeafId: string;\n\t\t\tselectedEntryId: string;\n\t\t\trestoredEditorText: boolean;\n\t };\n\nexport interface TreeNavigationResult {\n\treadonly editorText?: string;\n\treadonly selectedEntryId: string;\n\treadonly leafId: string;\n\treadonly imagesOmitted: boolean;\n}\n\nexport type AgentSessionListener = (event: AgentSessionEvent) => void | Promise<void>;\n\nfunction defaultThinkingLevel(model: Model): ThinkingLevel | undefined {\n\tconst efforts = model.reasoningEfforts;\n\tif (!efforts || efforts.length === 0) return undefined;\n\treturn (\n\t\tmodel.defaultReasoningEffort ??\n\t\t(efforts.includes(\"medium\") ? \"medium\" : efforts.includes(\"high\") ? \"high\" : efforts[0])\n\t);\n}\n\nfunction textFromUserMessage(message: Extract<Message, { role: \"user\" }>): string {\n\treturn message.content\n\t\t.filter((content): content is Extract<UserContent, { type: \"text\" }> => content.type === \"text\")\n\t\t.map((content) => content.text)\n\t\t.join(\"\");\n}\n\nexport class AgentSession {\n\tprivate readonly agent: Agent;\n\tprivate readonly allowedRootValue: string;\n\tprivate readonly sessionManager?: SessionManager;\n\tprivate provider: Provider;\n\tprivate readonly skills: readonly SkillResource[];\n\tprivate readonly skillCatalog: SkillCatalog;\n\tprivate model: Model;\n\tprivate thinkingLevelValue?: ThinkingLevel;\n\tprivate readonly sessionIdValue: string;\n\tprivate readonly now: () => number;\n\tprivate compactionEnabledValue: boolean;\n\tprivate readonly compactionTransform?: AgentSessionCompactionOptions[\"prepareMessages\"];\n\tprivate contextBudget: ContextBudget;\n\tprivate keepRecentTokens: number;\n\tprivate usageTotals: Omit<\n\t\tSessionUsage,\n\t\t\"estimatedContextTokens\" | \"contextWindow\" | \"reserveTokens\" | \"triggerTokens\"\n\t>;\n\tprivate persistenceError?: unknown;\n\tprivate promptActive = false;\n\tprivate readonly steeringMessages: Array<{ displayText: string; deliveredText: string }> = [];\n\tprivate readonly sessionListeners = new Set<AgentSessionListener>();\n\tprivate readonly agentUnsubscribers: Array<() => void> = [];\n\tprivate readonly onDispose?: AgentSessionOptions[\"onDispose\"];\n\tprivate disposed = false;\n\n\tconstructor(options: AgentSessionOptions) {\n\t\tthis.allowedRootValue = options.allowedRoot;\n\t\tthis.onDispose = options.onDispose;\n\t\tthis.sessionManager = options.sessionManager;\n\t\tthis.provider = options.provider;\n\t\tthis.skills = structuredClone(\n\t\t\t[...(options.skills ?? [])].map((skill) => ({\n\t\t\t\t...skill,\n\t\t\t\tsource:\n\t\t\t\t\tskill.source ?? (skill.scope === \"explicit\" ? \"explicit\" : skill.scope === \"project\" ? \"project\" : \"user\"),\n\t\t\t\tuserInvocable: skill.userInvocable ?? true,\n\t\t\t})),\n\t\t);\n\t\tthis.skillCatalog = createSkillCatalog(\n\t\t\tthis.skills.map((skill) => ({\n\t\t\t\tskill: {\n\t\t\t\t\t...skill,\n\t\t\t\t\tsource:\n\t\t\t\t\t\tskill.source ?? (skill.scope === \"explicit\" ? \"explicit\" : skill.scope === \"project\" ? \"project\" : \"user\"),\n\t\t\t\t\tuserInvocable: skill.userInvocable ?? true,\n\t\t\t\t},\n\t\t\t\tdiagnostics: [],\n\t\t\t})),\n\t\t);\n\t\tthis.model = options.model;\n\t\tthis.thinkingLevelValue =\n\t\t\toptions.thinkingLevel !== undefined && this.model.reasoningEfforts?.includes(options.thinkingLevel)\n\t\t\t\t? options.thinkingLevel\n\t\t\t\t: defaultThinkingLevel(this.model);\n\t\tthis.sessionIdValue = options.sessionManager?.header.id ?? randomUUID();\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.contextBudget = resolveContextBudget(options.model);\n\t\tif (options.compaction?.enabled !== undefined && typeof options.compaction.enabled !== \"boolean\") {\n\t\t\tthrow new TypeError(\"compaction.enabled must be a boolean\");\n\t\t}\n\t\tthis.compactionEnabledValue = options.sessionManager !== undefined && options.compaction?.enabled !== false;\n\t\tthis.compactionTransform = options.compaction?.prepareMessages;\n\t\tconst defaultKeepRecentTokens = Math.max(1, Math.min(20_000, Math.floor(this.contextBudget.triggerTokens / 2)));\n\t\tthis.keepRecentTokens = options.compaction?.keepRecentTokens ?? defaultKeepRecentTokens;\n\t\tif (!Number.isInteger(this.keepRecentTokens) || this.keepRecentTokens <= 0) {\n\t\t\tthrow new RangeError(\"compaction.keepRecentTokens must be a positive integer\");\n\t\t}\n\t\tthis.usageTotals = {\n\t\t\trequestCount: 0,\n\t\t\tinputTokens: 0,\n\t\t\toutputTokens: 0,\n\t\t\tcacheReadTokens: 0,\n\t\t\tcacheWriteTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t};\n\t\tfor (const message of options.sessionManager?.messages ?? []) {\n\t\t\tif (message.role === \"assistant\") this.addUsage(message.usage);\n\t\t}\n\t\tconst initialContext = options.sessionManager?.buildContext();\n\t\tthis.agent = new Agent({\n\t\t\tprovider: options.provider,\n\t\t\tmodel: options.model,\n\t\t\tthinkingLevel: this.thinkingLevelValue,\n\t\t\tsystemPrompt: options.systemPrompt,\n\t\t\tsessionId: this.sessionIdValue,\n\t\t\ttools: Object.freeze([...options.tools]),\n\t\t\tnow: this.now,\n\t\t\tinitialMessages: options.sessionManager?.messages,\n\t\t\tinitialContextMessages: initialContext?.messages,\n\t\t});\n\t\tthis.agentUnsubscribers.push(\n\t\t\tthis.agent.subscribe(async (event) => {\n\t\t\t\tif (event.type !== \"message_end\" || this.sessionManager === undefined || this.persistenceError !== undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.sessionManager.appendMessage(event.message);\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tthis.persistenceError = cause;\n\t\t\t\t\tthrow cause;\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t\tthis.agentUnsubscribers.push(\n\t\t\tthis.agent.subscribe(async (event) => {\n\t\t\t\tif (event.type !== \"message_end\" || event.message.role !== \"assistant\") return;\n\t\t\t\tthis.addUsage(event.message.usage);\n\t\t\t\tawait this.emitSession({ type: \"usage_update\", usage: this.usage });\n\t\t\t}),\n\t\t);\n\t\tthis.agentUnsubscribers.push(\n\t\t\tthis.agent.subscribe(async (event, _signal) => {\n\t\t\t\tif (event.type === \"message_end\" && event.message.role === \"user\") {\n\t\t\t\t\tconst queued = this.steeringMessages[0];\n\t\t\t\t\tif (queued && textFromUserMessage(event.message) === queued.deliveredText) {\n\t\t\t\t\t\tthis.steeringMessages.shift();\n\t\t\t\t\t\tawait this.emitQueueUpdate();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.emitSession(event);\n\t\t\t}),\n\t\t);\n\t}\n\n\t/** Releases listeners and the isolated product scope. Repeated calls are harmless. */\n\tasync dispose(): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tfor (const unsubscribe of this.agentUnsubscribers.splice(0)) unsubscribe();\n\t\tthis.sessionListeners.clear();\n\t\tawait this.onDispose?.();\n\t}\n\n\tprivate assertNotDisposed(): void {\n\t\tif (this.disposed) throw new Error(\"AgentSession has been disposed.\");\n\t}\n\n\tget transcript(): readonly Message[] {\n\t\tif (!this.sessionManager) return this.agent.transcript;\n\t\treturn this.sessionManager\n\t\t\t.getBranch()\n\t\t\t.filter((entry): entry is Extract<SessionEntry, { type: \"message\" }> => entry.type === \"message\")\n\t\t\t.map((entry) => structuredClone(entry.message));\n\t}\n\n\tget isStreaming(): boolean {\n\t\treturn this.promptActive;\n\t}\n\n\tget sessionId(): string {\n\t\treturn this.sessionIdValue;\n\t}\n\n\tget modelId(): string {\n\t\treturn this.model.id;\n\t}\n\n\tget providerId(): string {\n\t\treturn this.provider.id;\n\t}\n\n\tget thinkingLevel(): ThinkingLevel | undefined {\n\t\treturn this.thinkingLevelValue;\n\t}\n\n\tget allowedRoot(): string {\n\t\treturn this.allowedRootValue;\n\t}\n\n\tget availableModels(): readonly Model[] {\n\t\treturn structuredClone(this.provider.models);\n\t}\n\n\tget availableSkills(): readonly SkillResource[] {\n\t\treturn structuredClone(this.skills.filter((skill) => skill.userInvocable !== false));\n\t}\n\n\tsetModel(modelId: string): Model {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change model while AgentSession is processing a prompt.\");\n\t\tconst next = this.provider.models.find((model) => model.id === modelId);\n\t\tif (!next) throw new Error(`Unknown model \"${modelId}\" for provider \"${this.provider.id}\".`);\n\t\tthis.model = structuredClone(next);\n\t\tthis.thinkingLevelValue =\n\t\t\tthis.thinkingLevelValue !== undefined && this.model.reasoningEfforts?.includes(this.thinkingLevelValue)\n\t\t\t\t? this.thinkingLevelValue\n\t\t\t\t: defaultThinkingLevel(this.model);\n\t\tthis.agent.setModel(this.model);\n\t\tthis.agent.setThinkingLevel(this.thinkingLevelValue);\n\t\tthis.contextBudget = resolveContextBudget(this.model);\n\t\tthis.keepRecentTokens = Math.min(\n\t\t\tthis.keepRecentTokens,\n\t\t\tMath.max(1, Math.min(20_000, Math.floor(this.contextBudget.triggerTokens / 2))),\n\t\t);\n\t\treturn structuredClone(this.model);\n\t}\n\n\tsetRuntime(provider: Provider, model: Model): Model {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change runtime while AgentSession is processing a prompt.\");\n\t\tconst configuredModel = provider.models.find((candidate) => candidate.id === model.id);\n\t\tif (!configuredModel || configuredModel.provider !== provider.id || model.provider !== provider.id) {\n\t\t\tthrow new Error(`Model \"${model.id}\" does not belong to provider \"${provider.id}\".`);\n\t\t}\n\t\tthis.provider = provider;\n\t\tthis.model = structuredClone(configuredModel);\n\t\tthis.thinkingLevelValue = defaultThinkingLevel(this.model);\n\t\tthis.agent.setRuntime(provider, this.model);\n\t\tthis.agent.setThinkingLevel(this.thinkingLevelValue);\n\t\tthis.contextBudget = resolveContextBudget(this.model);\n\t\tthis.keepRecentTokens = Math.min(\n\t\t\tthis.keepRecentTokens,\n\t\t\tMath.max(1, Math.min(20_000, Math.floor(this.contextBudget.triggerTokens / 2))),\n\t\t);\n\t\treturn structuredClone(this.model);\n\t}\n\n\tcycleThinkingLevel(): ThinkingLevel | undefined {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change thinking level while AgentSession is processing a prompt.\");\n\t\tconst efforts = this.model.reasoningEfforts;\n\t\tif (!efforts || efforts.length === 0) return undefined;\n\t\tconst currentIndex = this.thinkingLevelValue === undefined ? -1 : efforts.indexOf(this.thinkingLevelValue);\n\t\tthis.thinkingLevelValue = efforts[(currentIndex + 1) % efforts.length];\n\t\tthis.agent.setThinkingLevel(this.thinkingLevelValue);\n\t\treturn this.thinkingLevelValue;\n\t}\n\n\tsetThinkingLevel(level: ThinkingLevel): ThinkingLevel {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change thinking level while AgentSession is processing a prompt.\");\n\t\tif (!this.model.reasoningEfforts?.includes(level)) {\n\t\t\tthrow new Error(`Thinking level \"${level}\" is not supported by model \"${this.model.id}\".`);\n\t\t}\n\t\tthis.thinkingLevelValue = level;\n\t\tthis.agent.setThinkingLevel(level);\n\t\treturn level;\n\t}\n\n\tget compactionEnabled(): boolean {\n\t\treturn this.compactionEnabledValue;\n\t}\n\n\tsetCompactionEnabled(enabled: boolean): boolean {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change compaction while AgentSession is processing a prompt.\");\n\t\tthis.compactionEnabledValue = enabled && this.sessionManager !== undefined;\n\t\treturn this.compactionEnabledValue;\n\t}\n\n\tget sessionFile(): string | undefined {\n\t\treturn this.sessionManager?.filePath;\n\t}\n\n\tget sessionDiagnostics(): readonly SessionDiagnostic[] {\n\t\treturn this.sessionManager?.diagnostics ?? [];\n\t}\n\n\tget sessionTree(): readonly SessionTreeNode[] {\n\t\treturn this.sessionManager?.getTree() ?? [];\n\t}\n\n\tget sessionLeafId(): string | undefined {\n\t\treturn this.sessionManager?.leafId;\n\t}\n\n\tget usage(): SessionUsage {\n\t\treturn {\n\t\t\t...this.usageTotals,\n\t\t\tcost: { ...this.usageTotals.cost },\n\t\t\testimatedContextTokens: estimateContextTokens(this.agent.contextMessages),\n\t\t\tcontextWindow: this.contextBudget.contextWindow,\n\t\t\treserveTokens: this.contextBudget.reserveTokens,\n\t\t\ttriggerTokens: this.contextBudget.triggerTokens,\n\t\t};\n\t}\n\n\tasync prompt(text: string, signal?: AbortSignal): Promise<AssistantMessage> {\n\t\treturn this.promptWithImages(text, [], signal);\n\t}\n\n\t/** Queues an instruction for the next provider request while this Session is running. */\n\tasync steer(text: string, signal?: AbortSignal): Promise<void> {\n\t\tawait this.steerWithImages(text, [], signal);\n\t}\n\n\t/** Queues provider-neutral text and image content for the active Agent run. */\n\tasync steerWithImages(text: string, images: readonly ImageContent[], signal?: AbortSignal): Promise<void> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.persistenceError !== undefined) throw this.persistenceError;\n\t\tif (!this.promptActive) throw new Error(\"AgentSession is not processing a prompt.\");\n\t\tif (images.length > 0 && !this.model.input.includes(\"image\")) {\n\t\t\tthrow new Error(`Model \"${this.model.id}\" does not support image input.`);\n\t\t}\n\t\tconst prompt = await resolveSkillInvocation(text, this.skillCatalog, signal);\n\t\tconst content: UserContent[] = [{ type: \"text\", text: prompt }, ...structuredClone([...images])];\n\t\tthis.agent.steerWithContent(content);\n\t\tthis.steeringMessages.push({ displayText: text, deliveredText: prompt });\n\t\tawait this.emitQueueUpdate();\n\t}\n\n\t/** Sends one text prompt with explicitly supplied image attachments. */\n\tasync promptWithImages(\n\t\ttext: string,\n\t\timages: readonly ImageContent[],\n\t\tsignal?: AbortSignal,\n\t): Promise<AssistantMessage> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.persistenceError !== undefined) {\n\t\t\tthrow this.persistenceError;\n\t\t}\n\t\tif (this.promptActive) {\n\t\t\tthrow new Error(\"AgentSession is already processing a prompt.\");\n\t\t}\n\n\t\tthis.promptActive = true;\n\t\ttry {\n\t\t\tif (images.length > 0 && !this.model.input.includes(\"image\")) {\n\t\t\t\tthrow new Error(`Model \"${this.model.id}\" does not support image input.`);\n\t\t\t}\n\t\t\tconst prompt = await resolveSkillInvocation(text, this.skillCatalog, signal);\n\t\t\tconst content: UserContent[] = [{ type: \"text\", text: prompt }, ...structuredClone([...images])];\n\t\t\tawait this.compactIfNeeded(content, signal);\n\t\t\treturn await this.agent.promptWithContent(content, signal);\n\t\t} finally {\n\t\t\tthis.promptActive = false;\n\t\t}\n\t}\n\n\tasync compact(signal?: AbortSignal): Promise<void> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"AgentSession is already processing a prompt.\");\n\t\tif (!this.sessionManager) throw new Error(\"Cannot compact without a persisted session.\");\n\t\tthis.promptActive = true;\n\t\ttry {\n\t\t\tawait this.compactNow(signal, \"manual\");\n\t\t} finally {\n\t\t\tthis.promptActive = false;\n\t\t}\n\t}\n\n\t/** Changes the active persisted branch and replaces the next-request model context. */\n\tasync navigateTree(entryId: string): Promise<TreeNavigationResult> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive)\n\t\t\tthrow new Error(\"Cannot navigate the session tree while AgentSession is processing a prompt.\");\n\t\tif (!this.sessionManager) throw new Error(\"Cannot navigate an in-memory session.\");\n\t\tconst entry = this.sessionManager.getEntry(entryId);\n\t\tif (!entry) throw new Error(`Unknown session tree entry \"${entryId}\".`);\n\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\" && entry.message.stopReason === \"tool_use\") {\n\t\t\tthrow new Error(\"Select the final tool result for an assistant message with tool calls.\");\n\t\t}\n\n\t\tconst oldLeafId = this.sessionManager.leafId;\n\t\tlet editorText: string | undefined;\n\t\tlet imagesOmitted = false;\n\t\tif (entry.type === \"message\" && entry.message.role === \"user\") {\n\t\t\teditorText = textFromUserMessage(entry.message);\n\t\t\timagesOmitted = entry.message.content.some((content) => content.type === \"image\");\n\t\t\tthis.sessionManager.setLeaf(entry.parentId);\n\t\t} else {\n\t\t\tthis.sessionManager.setLeaf(entry.id);\n\t\t}\n\n\t\ttry {\n\t\t\tthis.agent.replaceContext(this.sessionManager.buildContext().messages);\n\t\t} catch (cause) {\n\t\t\tthis.sessionManager.setLeaf(oldLeafId);\n\t\t\tthrow cause;\n\t\t}\n\t\tawait this.emitSession({\n\t\t\ttype: \"tree_navigated\",\n\t\t\toldLeafId,\n\t\t\tnewLeafId: this.sessionManager.leafId,\n\t\t\tselectedEntryId: entry.id,\n\t\t\trestoredEditorText: editorText !== undefined,\n\t\t});\n\t\treturn { editorText, selectedEntryId: entry.id, leafId: this.sessionManager.leafId, imagesOmitted };\n\t}\n\n\tsubscribe(listener: AgentListener): () => void {\n\t\treturn this.agent.subscribe(listener);\n\t}\n\n\tsubscribeSession(listener: AgentSessionListener): () => void {\n\t\tthis.sessionListeners.add(listener);\n\t\treturn () => this.sessionListeners.delete(listener);\n\t}\n\n\tprivate async emitSession(event: AgentSessionEvent): Promise<void> {\n\t\tfor (const listener of this.sessionListeners) await listener(structuredClone(event));\n\t}\n\n\tprivate async emitQueueUpdate(): Promise<void> {\n\t\tawait this.emitSession({\n\t\t\ttype: \"queue_update\",\n\t\t\tsteering: this.steeringMessages.map((message) => message.displayText),\n\t\t});\n\t}\n\n\tprivate addUsage(usage: Usage): void {\n\t\tthis.usageTotals = {\n\t\t\trequestCount: this.usageTotals.requestCount + 1,\n\t\t\tinputTokens: this.usageTotals.inputTokens + usage.input,\n\t\t\toutputTokens: this.usageTotals.outputTokens + usage.output,\n\t\t\tcacheReadTokens: this.usageTotals.cacheReadTokens + usage.cacheRead,\n\t\t\tcacheWriteTokens: this.usageTotals.cacheWriteTokens + usage.cacheWrite,\n\t\t\ttotalTokens: this.usageTotals.totalTokens + usage.totalTokens,\n\t\t\tcost: {\n\t\t\t\tinput: this.usageTotals.cost.input + usage.cost.input,\n\t\t\t\toutput: this.usageTotals.cost.output + usage.cost.output,\n\t\t\t\tcacheRead: this.usageTotals.cost.cacheRead + usage.cost.cacheRead,\n\t\t\t\tcacheWrite: this.usageTotals.cost.cacheWrite + usage.cost.cacheWrite,\n\t\t\t\ttotal: this.usageTotals.cost.total + usage.cost.total,\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async compactIfNeeded(content: readonly UserContent[], signal?: AbortSignal): Promise<void> {\n\t\tif (!this.compactionEnabledValue || !this.sessionManager) return;\n\n\t\tconst context = this.sessionManager.buildContext();\n\t\tconst pendingUser: Message = {\n\t\t\trole: \"user\",\n\t\t\tcontent: structuredClone([...content]),\n\t\t\ttimestamp: 0,\n\t\t};\n\t\tconst estimatedTokens = estimateContextTokens([...context.messages, pendingUser]);\n\t\tif (!shouldCompact(estimatedTokens, this.contextBudget)) return;\n\n\t\tawait this.compactNow(signal, \"threshold\");\n\t}\n\n\tprivate async compactNow(signal: AbortSignal | undefined, reason: \"threshold\" | \"manual\"): Promise<void> {\n\t\tif (!this.sessionManager) throw new Error(\"Cannot compact without a persisted session.\");\n\t\tconst context = this.sessionManager.buildContext();\n\t\tawait this.emitSession({ type: \"compaction_start\", reason });\n\t\tlet messages: readonly Message[];\n\t\ttry {\n\t\t\tmessages = this.compactionTransform ? await this.compactionTransform(context.messages, signal) : context.messages;\n\t\t} catch (cause) {\n\t\t\tconst errorMessage = cause instanceof Error ? cause.message : String(cause);\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage });\n\t\t\tthrow cause;\n\t\t}\n\t\tif (messages.length !== context.messages.length) {\n\t\t\tconst error = new Error(\"Compaction message transform must preserve message count.\");\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage: error.message });\n\t\t\tthrow error;\n\t\t}\n\t\tconst preparation =\n\t\t\tprepareCompaction(messages, this.keepRecentTokens) ??\n\t\t\t(reason === \"manual\" ? this.prepareManualCompaction(messages) : undefined);\n\t\tconst firstKeptEntryId = preparation ? context.sourceEntryIds[preparation.firstKeptMessageIndex] : undefined;\n\t\tif (!preparation || typeof firstKeptEntryId !== \"string\") {\n\t\t\tconst errorMessage =\n\t\t\t\treason === \"manual\"\n\t\t\t\t\t? \"No valid compaction cut point was found for the current session.\"\n\t\t\t\t\t: \"Context limit reached but no valid compaction cut point was found.\";\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage });\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\n\t\tlet summary: string;\n\t\ttry {\n\t\t\tsummary = await generateCompactionSummary(preparation, this.provider, this.model, {\n\t\t\t\treserveTokens: this.contextBudget.reserveTokens,\n\t\t\t\tsignal,\n\t\t\t\tnow: this.now,\n\t\t\t\tonUsage: (usage) => this.addUsage(usage),\n\t\t\t});\n\t\t\tawait this.emitSession({ type: \"usage_update\", usage: this.usage });\n\t\t} catch (cause) {\n\t\t\tconst errorMessage = cause instanceof Error ? cause.message : String(cause);\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage });\n\t\t\tthrow cause;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.sessionManager.appendSummary({\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore: preparation.tokensBefore,\n\t\t\t});\n\t\t} catch (cause) {\n\t\t\tthis.persistenceError = cause;\n\t\t\tconst errorMessage = cause instanceof Error ? cause.message : String(cause);\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage });\n\t\t\tthrow cause;\n\t\t}\n\n\t\tthis.agent.replaceContext(this.sessionManager.buildContext().messages);\n\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: true });\n\t}\n\n\t/** A manual request may retain only the newest complete user turn when the configured suffix is larger than history. */\n\tprivate prepareManualCompaction(messages: readonly Message[]) {\n\t\tfor (let index = messages.length - 1; index > 0; index--) {\n\t\t\tif (messages[index]?.role !== \"user\") continue;\n\t\t\treturn prepareCompaction(messages, estimateContextTokens(messages.slice(index)));\n\t\t}\n\t\treturn undefined;\n\t}\n}\n"]}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AgentHookRegistration, AgentTool, AgentToolResult } from \"@di-code/agent\";\nimport {\n\tAgent,\n\ttype AgentListener,\n\ttype ContextBudget,\n\testimateContextTokens,\n\tgenerateCompactionSummary,\n\ttype PromptSectionRegistry,\n\tprepareCompaction,\n\tresolveContextBudget,\n\tshouldCompact,\n} from \"@di-code/agent\";\nimport type {\n\tAssistantMessage,\n\tImageContent,\n\tMessage,\n\tModel,\n\tProvider,\n\tThinkingLevel,\n\tTSchema,\n\tUsage,\n\tUserContent,\n} from \"@di-code/ai\";\nimport type { ToolPolicyCapability, ToolPolicyMode, ToolPolicySnapshot } from \"@di-code/builtins\";\nimport type { PlanModeController, PlanModeProjection } from \"@di-code/plan-mode\";\nimport type { SessionExtensionFacade, SessionProjectionRegistry } from \"@di-code/plugin-sdk\";\nimport { createSkillCatalog, resolveSkillInvocation, type SkillCatalog } from \"@di-code/skills\";\nimport type { SkillResource } from \"./resources/types.ts\";\nimport type { SessionManager } from \"./session/session-manager.ts\";\nimport type { SessionDiagnostic, SessionEntry, SessionTreeNode } from \"./session/types.ts\";\n\nexport interface AgentSessionCompactionOptions {\n\treadonly enabled?: boolean;\n\treadonly keepRecentTokens?: number;\n\t/** Optional registry-owned message transform applied before compaction cut selection. */\n\treadonly prepareMessages?: (\n\t\tmessages: readonly Message[],\n\t\tsignal?: AbortSignal,\n\t) => readonly Message[] | Promise<readonly Message[]>;\n}\n\nexport type AgentSessionTool = AgentTool<TSchema, AgentToolResult>;\n\nexport interface SessionUsage {\n\treadonly requestCount: number;\n\treadonly inputTokens: number;\n\treadonly outputTokens: number;\n\treadonly cacheReadTokens: number;\n\treadonly cacheWriteTokens: number;\n\treadonly totalTokens: number;\n\treadonly cost: Usage[\"cost\"];\n\treadonly estimatedContextTokens: number;\n\treadonly contextWindow: number;\n\treadonly reserveTokens: number;\n\treadonly triggerTokens: number;\n}\n\nexport interface AgentSessionOptions {\n\treadonly allowedRoot: string;\n\treadonly provider: Provider;\n\treadonly model: Model;\n\t/** Immutable tool snapshot selected by the owning SessionFactory. */\n\treadonly tools: readonly AgentSessionTool[];\n\t/** Valid initial override for the selected model's thinking level. */\n\treadonly thinkingLevel?: ThinkingLevel;\n\treadonly systemPrompt?: string;\n\treadonly promptSections?: PromptSectionRegistry;\n\t/** Returns an immutable, session-owned snapshot for dynamic prompt generators. */\n\treadonly getPromptSnapshot?: () => unknown;\n\treadonly skills?: readonly SkillResource[];\n\treadonly now?: () => number;\n\treadonly sessionManager?: SessionManager;\n\treadonly compaction?: AgentSessionCompactionOptions;\n\treadonly toolPolicy?: ToolPolicyCapability;\n\treadonly hooks?: readonly AgentHookRegistration[];\n\treadonly planMode?: PlanModeController;\n\treadonly projectionRegistry?: SessionProjectionRegistry;\n\treadonly extensionFacade?: SessionExtensionFacade;\n\t/** Called once when the owning product host releases this session scope. */\n\treadonly onDispose?: () => void | Promise<void>;\n}\n\nexport type AgentSessionEvent =\n\t| import(\"@di-code/agent\").AgentEvent\n\t| { type: \"compaction_start\"; reason: \"threshold\" | \"manual\" }\n\t| { type: \"compaction_end\"; reason: \"threshold\" | \"manual\"; success: boolean; errorMessage?: string }\n\t| { type: \"queue_update\"; steering: readonly string[] }\n\t| { type: \"usage_update\"; usage: SessionUsage }\n\t| {\n\t\t\ttype: \"tree_navigated\";\n\t\t\toldLeafId: string;\n\t\t\tnewLeafId: string;\n\t\t\tselectedEntryId: string;\n\t\t\trestoredEditorText: boolean;\n\t };\n\nexport interface TreeNavigationResult {\n\treadonly editorText?: string;\n\treadonly selectedEntryId: string;\n\treadonly leafId: string;\n\treadonly imagesOmitted: boolean;\n}\n\nexport type AgentSessionListener = (event: AgentSessionEvent) => void | Promise<void>;\n\nfunction defaultThinkingLevel(model: Model): ThinkingLevel | undefined {\n\tconst efforts = model.reasoningEfforts;\n\tif (!efforts || efforts.length === 0) return undefined;\n\treturn (\n\t\tmodel.defaultReasoningEffort ??\n\t\t(efforts.includes(\"medium\") ? \"medium\" : efforts.includes(\"high\") ? \"high\" : efforts[0])\n\t);\n}\n\nfunction textFromUserMessage(message: Extract<Message, { role: \"user\" }>): string {\n\treturn message.content\n\t\t.filter((content): content is Extract<UserContent, { type: \"text\" }> => content.type === \"text\")\n\t\t.map((content) => content.text)\n\t\t.join(\"\");\n}\n\nexport class AgentSession {\n\tprivate readonly agent: Agent;\n\tprivate readonly allowedRootValue: string;\n\tprivate readonly sessionManager?: SessionManager;\n\tprivate provider: Provider;\n\tprivate readonly skills: readonly SkillResource[];\n\tprivate readonly skillCatalog: SkillCatalog;\n\tprivate model: Model;\n\tprivate thinkingLevelValue?: ThinkingLevel;\n\tprivate readonly sessionIdValue: string;\n\tprivate readonly now: () => number;\n\tprivate compactionEnabledValue: boolean;\n\tprivate readonly compactionTransform?: AgentSessionCompactionOptions[\"prepareMessages\"];\n\tprivate contextBudget: ContextBudget;\n\tprivate keepRecentTokens: number;\n\tprivate usageTotals: Omit<\n\t\tSessionUsage,\n\t\t\"estimatedContextTokens\" | \"contextWindow\" | \"reserveTokens\" | \"triggerTokens\"\n\t>;\n\tprivate persistenceError?: unknown;\n\tprivate promptActive = false;\n\tprivate readonly steeringMessages: Array<{ displayText: string; deliveredText: string }> = [];\n\tprivate readonly sessionListeners = new Set<AgentSessionListener>();\n\tprivate readonly agentUnsubscribers: Array<() => void> = [];\n\tprivate readonly onDispose?: AgentSessionOptions[\"onDispose\"];\n\tprivate readonly toolPolicy?: ToolPolicyCapability;\n\tprivate readonly planModeController?: PlanModeController;\n\tprivate readonly projectionRegistry?: SessionProjectionRegistry;\n\tprivate readonly extensionFacade?: SessionExtensionFacade;\n\tprivate disposed = false;\n\n\tconstructor(options: AgentSessionOptions) {\n\t\tthis.allowedRootValue = options.allowedRoot;\n\t\tthis.onDispose = options.onDispose;\n\t\tthis.toolPolicy = options.toolPolicy;\n\t\tthis.planModeController = options.planMode;\n\t\tthis.projectionRegistry = options.projectionRegistry;\n\t\tthis.extensionFacade = options.extensionFacade;\n\t\tthis.sessionManager = options.sessionManager;\n\t\tthis.provider = options.provider;\n\t\tthis.skills = structuredClone(\n\t\t\t[...(options.skills ?? [])].map((skill) => ({\n\t\t\t\t...skill,\n\t\t\t\tsource:\n\t\t\t\t\tskill.source ?? (skill.scope === \"explicit\" ? \"explicit\" : skill.scope === \"project\" ? \"project\" : \"user\"),\n\t\t\t\tuserInvocable: skill.userInvocable ?? true,\n\t\t\t})),\n\t\t);\n\t\tthis.skillCatalog = createSkillCatalog(\n\t\t\tthis.skills.map((skill) => ({\n\t\t\t\tskill: {\n\t\t\t\t\t...skill,\n\t\t\t\t\tsource:\n\t\t\t\t\t\tskill.source ?? (skill.scope === \"explicit\" ? \"explicit\" : skill.scope === \"project\" ? \"project\" : \"user\"),\n\t\t\t\t\tuserInvocable: skill.userInvocable ?? true,\n\t\t\t\t},\n\t\t\t\tdiagnostics: [],\n\t\t\t})),\n\t\t);\n\t\tthis.model = options.model;\n\t\tthis.thinkingLevelValue =\n\t\t\toptions.thinkingLevel !== undefined && this.model.reasoningEfforts?.includes(options.thinkingLevel)\n\t\t\t\t? options.thinkingLevel\n\t\t\t\t: defaultThinkingLevel(this.model);\n\t\tthis.sessionIdValue = options.sessionManager?.header.id ?? randomUUID();\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.contextBudget = resolveContextBudget(options.model);\n\t\tif (options.compaction?.enabled !== undefined && typeof options.compaction.enabled !== \"boolean\") {\n\t\t\tthrow new TypeError(\"compaction.enabled must be a boolean\");\n\t\t}\n\t\tthis.compactionEnabledValue = options.sessionManager !== undefined && options.compaction?.enabled !== false;\n\t\tthis.compactionTransform = options.compaction?.prepareMessages;\n\t\tconst defaultKeepRecentTokens = Math.max(1, Math.min(20_000, Math.floor(this.contextBudget.triggerTokens / 2)));\n\t\tthis.keepRecentTokens = options.compaction?.keepRecentTokens ?? defaultKeepRecentTokens;\n\t\tif (!Number.isInteger(this.keepRecentTokens) || this.keepRecentTokens <= 0) {\n\t\t\tthrow new RangeError(\"compaction.keepRecentTokens must be a positive integer\");\n\t\t}\n\t\tthis.usageTotals = {\n\t\t\trequestCount: 0,\n\t\t\tinputTokens: 0,\n\t\t\toutputTokens: 0,\n\t\t\tcacheReadTokens: 0,\n\t\t\tcacheWriteTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t};\n\t\tfor (const message of options.sessionManager?.messages ?? []) {\n\t\t\tif (message.role === \"assistant\") this.addUsage(message.usage);\n\t\t}\n\t\tconst initialContext = options.sessionManager?.buildContext();\n\t\tthis.agent = new Agent({\n\t\t\tprovider: options.provider,\n\t\t\tmodel: options.model,\n\t\t\tthinkingLevel: this.thinkingLevelValue,\n\t\t\tsystemPrompt: options.systemPrompt,\n\t\t\tsessionId: this.sessionIdValue,\n\t\t\ttools: Object.freeze([...options.tools]),\n\t\t\tnow: this.now,\n\t\t\tinitialMessages: options.sessionManager?.messages,\n\t\t\tinitialContextMessages: initialContext?.messages,\n\t\t\tpromptSections: options.promptSections,\n\t\t\tgetPromptSnapshot: options.getPromptSnapshot,\n\t\t\thooks: options.hooks,\n\t\t});\n\t\tthis.agentUnsubscribers.push(\n\t\t\tthis.agent.subscribe(async (event) => {\n\t\t\t\tif (event.type !== \"message_end\" || this.sessionManager === undefined || this.persistenceError !== undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.sessionManager.appendMessage(event.message);\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tthis.persistenceError = cause;\n\t\t\t\t\tthrow cause;\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t\tthis.agentUnsubscribers.push(\n\t\t\tthis.agent.subscribe(async (event) => {\n\t\t\t\tif (event.type !== \"message_end\" || event.message.role !== \"assistant\") return;\n\t\t\t\tthis.addUsage(event.message.usage);\n\t\t\t\tawait this.emitSession({ type: \"usage_update\", usage: this.usage });\n\t\t\t}),\n\t\t);\n\t\tthis.agentUnsubscribers.push(\n\t\t\tthis.agent.subscribe(async (event, _signal) => {\n\t\t\t\tif (event.type === \"message_end\" && event.message.role === \"user\") {\n\t\t\t\t\tconst queued = this.steeringMessages[0];\n\t\t\t\t\tif (queued && textFromUserMessage(event.message) === queued.deliveredText) {\n\t\t\t\t\t\tthis.steeringMessages.shift();\n\t\t\t\t\t\tawait this.emitQueueUpdate();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.emitSession(event);\n\t\t\t}),\n\t\t);\n\t}\n\n\t/** Releases listeners and the isolated product scope. Repeated calls are harmless. */\n\tasync dispose(): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tthis.toolPolicy?.dispose?.();\n\t\tawait this.planModeController?.dispose();\n\t\tfor (const unsubscribe of this.agentUnsubscribers.splice(0)) unsubscribe();\n\t\tthis.sessionListeners.clear();\n\t\tawait this.onDispose?.();\n\t}\n\n\tprivate assertNotDisposed(): void {\n\t\tif (this.disposed) throw new Error(\"AgentSession has been disposed.\");\n\t}\n\n\tget transcript(): readonly Message[] {\n\t\tif (!this.sessionManager) return this.agent.transcript;\n\t\treturn this.sessionManager\n\t\t\t.getBranch()\n\t\t\t.filter((entry): entry is Extract<SessionEntry, { type: \"message\" }> => entry.type === \"message\")\n\t\t\t.map((entry) => structuredClone(entry.message));\n\t}\n\n\tget isStreaming(): boolean {\n\t\treturn this.promptActive;\n\t}\n\n\tget sessionId(): string {\n\t\treturn this.sessionIdValue;\n\t}\n\n\tget modelId(): string {\n\t\treturn this.model.id;\n\t}\n\n\tget providerId(): string {\n\t\treturn this.provider.id;\n\t}\n\n\tget thinkingLevel(): ThinkingLevel | undefined {\n\t\treturn this.thinkingLevelValue;\n\t}\n\n\tget allowedRoot(): string {\n\t\treturn this.allowedRootValue;\n\t}\n\n\tget availableModels(): readonly Model[] {\n\t\treturn structuredClone(this.provider.models);\n\t}\n\n\tget availableSkills(): readonly SkillResource[] {\n\t\treturn structuredClone(this.skills.filter((skill) => skill.userInvocable !== false));\n\t}\n\n\tsetModel(modelId: string): Model {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change model while AgentSession is processing a prompt.\");\n\t\tconst next = this.provider.models.find((model) => model.id === modelId);\n\t\tif (!next) throw new Error(`Unknown model \"${modelId}\" for provider \"${this.provider.id}\".`);\n\t\tthis.model = structuredClone(next);\n\t\tthis.thinkingLevelValue =\n\t\t\tthis.thinkingLevelValue !== undefined && this.model.reasoningEfforts?.includes(this.thinkingLevelValue)\n\t\t\t\t? this.thinkingLevelValue\n\t\t\t\t: defaultThinkingLevel(this.model);\n\t\tthis.agent.setModel(this.model);\n\t\tthis.agent.setThinkingLevel(this.thinkingLevelValue);\n\t\tthis.contextBudget = resolveContextBudget(this.model);\n\t\tthis.keepRecentTokens = Math.min(\n\t\t\tthis.keepRecentTokens,\n\t\t\tMath.max(1, Math.min(20_000, Math.floor(this.contextBudget.triggerTokens / 2))),\n\t\t);\n\t\treturn structuredClone(this.model);\n\t}\n\n\tsetRuntime(provider: Provider, model: Model): Model {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change runtime while AgentSession is processing a prompt.\");\n\t\tconst configuredModel = provider.models.find((candidate) => candidate.id === model.id);\n\t\tif (!configuredModel || configuredModel.provider !== provider.id || model.provider !== provider.id) {\n\t\t\tthrow new Error(`Model \"${model.id}\" does not belong to provider \"${provider.id}\".`);\n\t\t}\n\t\tthis.provider = provider;\n\t\tthis.model = structuredClone(configuredModel);\n\t\tthis.thinkingLevelValue = defaultThinkingLevel(this.model);\n\t\tthis.agent.setRuntime(provider, this.model);\n\t\tthis.agent.setThinkingLevel(this.thinkingLevelValue);\n\t\tthis.contextBudget = resolveContextBudget(this.model);\n\t\tthis.keepRecentTokens = Math.min(\n\t\t\tthis.keepRecentTokens,\n\t\t\tMath.max(1, Math.min(20_000, Math.floor(this.contextBudget.triggerTokens / 2))),\n\t\t);\n\t\treturn structuredClone(this.model);\n\t}\n\n\tcycleThinkingLevel(): ThinkingLevel | undefined {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change thinking level while AgentSession is processing a prompt.\");\n\t\tconst efforts = this.model.reasoningEfforts;\n\t\tif (!efforts || efforts.length === 0) return undefined;\n\t\tconst currentIndex = this.thinkingLevelValue === undefined ? -1 : efforts.indexOf(this.thinkingLevelValue);\n\t\tthis.thinkingLevelValue = efforts[(currentIndex + 1) % efforts.length];\n\t\tthis.agent.setThinkingLevel(this.thinkingLevelValue);\n\t\treturn this.thinkingLevelValue;\n\t}\n\n\tsetThinkingLevel(level: ThinkingLevel): ThinkingLevel {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change thinking level while AgentSession is processing a prompt.\");\n\t\tif (!this.model.reasoningEfforts?.includes(level)) {\n\t\t\tthrow new Error(`Thinking level \"${level}\" is not supported by model \"${this.model.id}\".`);\n\t\t}\n\t\tthis.thinkingLevelValue = level;\n\t\tthis.agent.setThinkingLevel(level);\n\t\treturn level;\n\t}\n\n\tget compactionEnabled(): boolean {\n\t\treturn this.compactionEnabledValue;\n\t}\n\n\tsetCompactionEnabled(enabled: boolean): boolean {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"Cannot change compaction while AgentSession is processing a prompt.\");\n\t\tthis.compactionEnabledValue = enabled && this.sessionManager !== undefined;\n\t\treturn this.compactionEnabledValue;\n\t}\n\n\tget sessionFile(): string | undefined {\n\t\treturn this.sessionManager?.filePath;\n\t}\n\n\tget sessionDiagnostics(): readonly SessionDiagnostic[] {\n\t\treturn this.sessionManager?.diagnostics ?? [];\n\t}\n\n\tget sessionTree(): readonly SessionTreeNode[] {\n\t\treturn this.sessionManager?.getTree() ?? [];\n\t}\n\n\tget sessionLeafId(): string | undefined {\n\t\treturn this.sessionManager?.leafId;\n\t}\n\n\tget toolPolicySnapshot(): ToolPolicySnapshot | undefined {\n\t\treturn this.toolPolicy?.snapshot?.();\n\t}\n\n\tget planModeProjection(): PlanModeProjection | undefined {\n\t\treturn this.planModeController?.get();\n\t}\n\n\tplanModeCommand(args: string): Promise<string> {\n\t\tif (!this.planModeController) return Promise.reject(new Error(\"Plan mode is unavailable.\"));\n\t\treturn this.planModeController.command(args, async (message) => {\n\t\t\tif (this.promptActive) {\n\t\t\t\tawait this.steer(message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.prompt(message);\n\t\t});\n\t}\n\n\tplanCommand(args: string): Promise<string> {\n\t\treturn this.planModeCommand(args);\n\t}\n\n\tplanMode(): PlanModeProjection | undefined {\n\t\treturn this.planModeProjection;\n\t}\n\n\tprojections(): readonly import(\"@di-code/plugin-sdk\").SessionProjectionSnapshot[] {\n\t\tif (!this.projectionRegistry || !this.sessionManager) return [];\n\t\treturn this.projectionRegistry.replay(\n\t\t\tthis.sessionManager.events.map((event) => ({\n\t\t\t\tnamespace: event.namespace,\n\t\t\t\teventName: event.eventName,\n\t\t\t\tschemaVersion: event.schemaVersion,\n\t\t\t\tpayload: event.payload,\n\t\t\t})),\n\t\t);\n\t}\n\n\textensions(): SessionExtensionFacade | undefined {\n\t\treturn this.extensionFacade;\n\t}\n\n\tasync setToolPolicyMode(mode: ToolPolicyMode, signal?: AbortSignal): Promise<ToolPolicySnapshot> {\n\t\tthis.assertNotDisposed();\n\t\tif (!this.toolPolicy?.setMode) throw new Error(\"Session tool policy is not dynamic.\");\n\t\treturn await this.toolPolicy.setMode(mode, signal);\n\t}\n\n\tget usage(): SessionUsage {\n\t\treturn {\n\t\t\t...this.usageTotals,\n\t\t\tcost: { ...this.usageTotals.cost },\n\t\t\testimatedContextTokens: estimateContextTokens(this.agent.contextMessages),\n\t\t\tcontextWindow: this.contextBudget.contextWindow,\n\t\t\treserveTokens: this.contextBudget.reserveTokens,\n\t\t\ttriggerTokens: this.contextBudget.triggerTokens,\n\t\t};\n\t}\n\n\tasync prompt(text: string, signal?: AbortSignal): Promise<AssistantMessage> {\n\t\treturn this.promptWithImages(text, [], signal);\n\t}\n\n\t/** Queues an instruction for the next provider request while this Session is running. */\n\tasync steer(text: string, signal?: AbortSignal): Promise<void> {\n\t\tawait this.steerWithImages(text, [], signal);\n\t}\n\n\t/** Queues provider-neutral text and image content for the active Agent run. */\n\tasync steerWithImages(text: string, images: readonly ImageContent[], signal?: AbortSignal): Promise<void> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.persistenceError !== undefined) throw this.persistenceError;\n\t\tif (!this.promptActive) throw new Error(\"AgentSession is not processing a prompt.\");\n\t\tif (images.length > 0 && !this.model.input.includes(\"image\")) {\n\t\t\tthrow new Error(`Model \"${this.model.id}\" does not support image input.`);\n\t\t}\n\t\tconst prompt = await resolveSkillInvocation(text, this.skillCatalog, signal);\n\t\tconst content: UserContent[] = [{ type: \"text\", text: prompt }, ...structuredClone([...images])];\n\t\tthis.agent.steerWithContent(content);\n\t\tthis.steeringMessages.push({ displayText: text, deliveredText: prompt });\n\t\tawait this.emitQueueUpdate();\n\t}\n\n\t/** Sends one text prompt with explicitly supplied image attachments. */\n\tasync promptWithImages(\n\t\ttext: string,\n\t\timages: readonly ImageContent[],\n\t\tsignal?: AbortSignal,\n\t): Promise<AssistantMessage> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.persistenceError !== undefined) {\n\t\t\tthrow this.persistenceError;\n\t\t}\n\t\tif (this.promptActive) {\n\t\t\tthrow new Error(\"AgentSession is already processing a prompt.\");\n\t\t}\n\n\t\tthis.promptActive = true;\n\t\ttry {\n\t\t\tif (images.length > 0 && !this.model.input.includes(\"image\")) {\n\t\t\t\tthrow new Error(`Model \"${this.model.id}\" does not support image input.`);\n\t\t\t}\n\t\t\tconst prompt = await resolveSkillInvocation(text, this.skillCatalog, signal);\n\t\t\tconst content: UserContent[] = [{ type: \"text\", text: prompt }, ...structuredClone([...images])];\n\t\t\tawait this.compactIfNeeded(content, signal);\n\t\t\treturn await this.agent.promptWithContent(content, signal);\n\t\t} finally {\n\t\t\tthis.promptActive = false;\n\t\t}\n\t}\n\n\tasync compact(signal?: AbortSignal): Promise<void> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive) throw new Error(\"AgentSession is already processing a prompt.\");\n\t\tif (!this.sessionManager) throw new Error(\"Cannot compact without a persisted session.\");\n\t\tthis.promptActive = true;\n\t\ttry {\n\t\t\tawait this.compactNow(signal, \"manual\");\n\t\t} finally {\n\t\t\tthis.promptActive = false;\n\t\t}\n\t}\n\n\t/** Changes the active persisted branch and replaces the next-request model context. */\n\tasync navigateTree(entryId: string): Promise<TreeNavigationResult> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.promptActive)\n\t\t\tthrow new Error(\"Cannot navigate the session tree while AgentSession is processing a prompt.\");\n\t\tif (!this.sessionManager) throw new Error(\"Cannot navigate an in-memory session.\");\n\t\tconst entry = this.sessionManager.getEntry(entryId);\n\t\tif (!entry) throw new Error(`Unknown session tree entry \"${entryId}\".`);\n\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\" && entry.message.stopReason === \"tool_use\") {\n\t\t\tthrow new Error(\"Select the final tool result for an assistant message with tool calls.\");\n\t\t}\n\n\t\tconst oldLeafId = this.sessionManager.leafId;\n\t\tlet editorText: string | undefined;\n\t\tlet imagesOmitted = false;\n\t\tif (entry.type === \"message\" && entry.message.role === \"user\") {\n\t\t\teditorText = textFromUserMessage(entry.message);\n\t\t\timagesOmitted = entry.message.content.some((content) => content.type === \"image\");\n\t\t\tthis.sessionManager.setLeaf(entry.parentId);\n\t\t} else {\n\t\t\tthis.sessionManager.setLeaf(entry.id);\n\t\t}\n\n\t\ttry {\n\t\t\tthis.agent.replaceContext(this.sessionManager.buildContext().messages);\n\t\t} catch (cause) {\n\t\t\tthis.sessionManager.setLeaf(oldLeafId);\n\t\t\tthrow cause;\n\t\t}\n\t\tawait this.emitSession({\n\t\t\ttype: \"tree_navigated\",\n\t\t\toldLeafId,\n\t\t\tnewLeafId: this.sessionManager.leafId,\n\t\t\tselectedEntryId: entry.id,\n\t\t\trestoredEditorText: editorText !== undefined,\n\t\t});\n\t\treturn { editorText, selectedEntryId: entry.id, leafId: this.sessionManager.leafId, imagesOmitted };\n\t}\n\n\tsubscribe(listener: AgentListener): () => void {\n\t\treturn this.agent.subscribe(listener);\n\t}\n\n\t/** Adds a lifecycle hook to the live Agent and returns an idempotent disposer. */\n\taddHook(hook: AgentHookRegistration): () => void {\n\t\treturn this.agent.addHook(hook);\n\t}\n\n\tsubscribeSession(listener: AgentSessionListener): () => void {\n\t\tthis.sessionListeners.add(listener);\n\t\treturn () => this.sessionListeners.delete(listener);\n\t}\n\n\tprivate async emitSession(event: AgentSessionEvent): Promise<void> {\n\t\tfor (const listener of this.sessionListeners) await listener(structuredClone(event));\n\t}\n\n\tprivate async emitQueueUpdate(): Promise<void> {\n\t\tawait this.emitSession({\n\t\t\ttype: \"queue_update\",\n\t\t\tsteering: this.steeringMessages.map((message) => message.displayText),\n\t\t});\n\t}\n\n\tprivate addUsage(usage: Usage): void {\n\t\tthis.usageTotals = {\n\t\t\trequestCount: this.usageTotals.requestCount + 1,\n\t\t\tinputTokens: this.usageTotals.inputTokens + usage.input,\n\t\t\toutputTokens: this.usageTotals.outputTokens + usage.output,\n\t\t\tcacheReadTokens: this.usageTotals.cacheReadTokens + usage.cacheRead,\n\t\t\tcacheWriteTokens: this.usageTotals.cacheWriteTokens + usage.cacheWrite,\n\t\t\ttotalTokens: this.usageTotals.totalTokens + usage.totalTokens,\n\t\t\tcost: {\n\t\t\t\tinput: this.usageTotals.cost.input + usage.cost.input,\n\t\t\t\toutput: this.usageTotals.cost.output + usage.cost.output,\n\t\t\t\tcacheRead: this.usageTotals.cost.cacheRead + usage.cost.cacheRead,\n\t\t\t\tcacheWrite: this.usageTotals.cost.cacheWrite + usage.cost.cacheWrite,\n\t\t\t\ttotal: this.usageTotals.cost.total + usage.cost.total,\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async compactIfNeeded(content: readonly UserContent[], signal?: AbortSignal): Promise<void> {\n\t\tif (!this.compactionEnabledValue || !this.sessionManager) return;\n\n\t\tconst context = this.sessionManager.buildContext();\n\t\tconst pendingUser: Message = {\n\t\t\trole: \"user\",\n\t\t\tcontent: structuredClone([...content]),\n\t\t\ttimestamp: 0,\n\t\t};\n\t\tconst estimatedTokens = estimateContextTokens([...context.messages, pendingUser]);\n\t\tif (!shouldCompact(estimatedTokens, this.contextBudget)) return;\n\n\t\tawait this.compactNow(signal, \"threshold\");\n\t}\n\n\tprivate async compactNow(signal: AbortSignal | undefined, reason: \"threshold\" | \"manual\"): Promise<void> {\n\t\tif (!this.sessionManager) throw new Error(\"Cannot compact without a persisted session.\");\n\t\tconst context = this.sessionManager.buildContext();\n\t\tawait this.emitSession({ type: \"compaction_start\", reason });\n\t\tlet messages: readonly Message[];\n\t\ttry {\n\t\t\tmessages = this.compactionTransform ? await this.compactionTransform(context.messages, signal) : context.messages;\n\t\t} catch (cause) {\n\t\t\tconst errorMessage = cause instanceof Error ? cause.message : String(cause);\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage });\n\t\t\tthrow cause;\n\t\t}\n\t\tif (messages.length !== context.messages.length) {\n\t\t\tconst error = new Error(\"Compaction message transform must preserve message count.\");\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage: error.message });\n\t\t\tthrow error;\n\t\t}\n\t\tconst preparation =\n\t\t\tprepareCompaction(messages, this.keepRecentTokens) ??\n\t\t\t(reason === \"manual\" ? this.prepareManualCompaction(messages) : undefined);\n\t\tconst firstKeptEntryId = preparation ? context.sourceEntryIds[preparation.firstKeptMessageIndex] : undefined;\n\t\tif (!preparation || typeof firstKeptEntryId !== \"string\") {\n\t\t\tconst errorMessage =\n\t\t\t\treason === \"manual\"\n\t\t\t\t\t? \"No valid compaction cut point was found for the current session.\"\n\t\t\t\t\t: \"Context limit reached but no valid compaction cut point was found.\";\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage });\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\n\t\tlet summary: string;\n\t\ttry {\n\t\t\tsummary = await generateCompactionSummary(preparation, this.provider, this.model, {\n\t\t\t\treserveTokens: this.contextBudget.reserveTokens,\n\t\t\t\tsignal,\n\t\t\t\tnow: this.now,\n\t\t\t\tonUsage: (usage) => this.addUsage(usage),\n\t\t\t});\n\t\t\tawait this.emitSession({ type: \"usage_update\", usage: this.usage });\n\t\t} catch (cause) {\n\t\t\tconst errorMessage = cause instanceof Error ? cause.message : String(cause);\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage });\n\t\t\tthrow cause;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.sessionManager.appendSummary({\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore: preparation.tokensBefore,\n\t\t\t});\n\t\t} catch (cause) {\n\t\t\tthis.persistenceError = cause;\n\t\t\tconst errorMessage = cause instanceof Error ? cause.message : String(cause);\n\t\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: false, errorMessage });\n\t\t\tthrow cause;\n\t\t}\n\n\t\tthis.agent.replaceContext(this.sessionManager.buildContext().messages);\n\t\tawait this.emitSession({ type: \"compaction_end\", reason, success: true });\n\t}\n\n\t/** A manual request may retain only the newest complete user turn when the configured suffix is larger than history. */\n\tprivate prepareManualCompaction(messages: readonly Message[]) {\n\t\tfor (let index = messages.length - 1; index > 0; index--) {\n\t\t\tif (messages[index]?.role !== \"user\") continue;\n\t\t\treturn prepareCompaction(messages, estimateContextTokens(messages.slice(index)));\n\t\t}\n\t\treturn undefined;\n\t}\n}\n"]}
package/dist/entry.js CHANGED
@@ -9,7 +9,7 @@ import { runWebCommand } from "./web-command.js";
9
9
  async function promptProjectTrust(cwd) {
10
10
  const readline = createInterface({ input: process.stdin, output: process.stdout });
11
11
  try {
12
- const answer = await readline.question(`Trust project-local Skills and MCP configuration in ${cwd}? [y/N] `);
12
+ const answer = await readline.question(`Trust project-local plugins, Skills, and MCP configuration in ${cwd}? [y/N] `);
13
13
  return /^(?:y|yes)$/i.test(answer.trim());
14
14
  }
15
15
  finally {
package/dist/entry.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,eAAe,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnF,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,uDAAuD,GAAG,UAAU,CAAC,CAAC;QAC7G,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACV,QAAQ,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;AACF,CAAC;AAED,IAAI,CAAC;IACJ,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACP,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE;YAChD,OAAO,EAAE,eAAe,CAAC,OAAO;YAChC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5C,WAAW,EAAE,EAAE,qBAAqB,EAAE,kBAAkB,EAAE;YAC1D,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnG,CAAC;YACD,iBAAiB,EAAE,GAAG,EAAE;gBACvB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACrG,CAAC;SACD,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACtG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,CAAC","sourcesContent":["#!/usr/bin/env node\n\nimport { createInterface } from \"node:readline/promises\";\nimport { redactSensitiveText } from \"@di-code/plugin-runtime\";\nimport packageMetadata from \"../package.json\" with { type: \"json\" };\nimport { parseCliArgs } from \"./cli.ts\";\nimport { runMinimalProfile } from \"./main.ts\";\nimport { resolveStartupArgs } from \"./startup.ts\";\nimport { runWebCommand } from \"./web-command.ts\";\n\nasync function promptProjectTrust(cwd: string): Promise<boolean> {\n\tconst readline = createInterface({ input: process.stdin, output: process.stdout });\n\ttry {\n\t\tconst answer = await readline.question(`Trust project-local Skills and MCP configuration in ${cwd}? [y/N] `);\n\t\treturn /^(?:y|yes)$/i.test(answer.trim());\n\t} finally {\n\t\treadline.close();\n\t}\n}\n\ntry {\n\tconst rawArgs = process.argv.slice(2);\n\tconst args = resolveStartupArgs(rawArgs);\n\tconst command = parseCliArgs(args);\n\tif (command.kind === \"web\") {\n\t\tprocess.exitCode = await runWebCommand(command);\n\t} else {\n\t\tconst isInteractiveTerminal = Boolean(process.stdin.isTTY && process.stdout.isTTY);\n\t\tprocess.exitCode = await runMinimalProfile(args, {\n\t\t\tversion: packageMetadata.version,\n\t\t\tstdout: (text) => process.stdout.write(text),\n\t\t\tstderr: (text) => process.stderr.write(text),\n\t\t\tinteractive: { isInteractiveTerminal, promptProjectTrust },\n\t\t\tonRuntimeEvent: (event) => {\n\t\t\t\tif (process.env.DI_CODE_TRACE_PLUGINS === \"1\") process.stderr.write(`${JSON.stringify(event)}\\n`);\n\t\t\t},\n\t\t\tonSessionDisposed: () => {\n\t\t\t\tif (process.env.DI_CODE_TRACE_PLUGINS === \"1\") process.stderr.write('{\"type\":\"session_dispose\"}\\n');\n\t\t\t},\n\t\t});\n\t}\n} catch (cause) {\n\tconst message = redactSensitiveText(cause instanceof Error ? cause.message : \"Unknown startup error\");\n\tprocess.stderr.write(`${message}\\n`);\n\tprocess.exitCode = 1;\n}\n"]}
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,eAAe,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnF,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CACrC,iEAAiE,GAAG,UAAU,CAC9E,CAAC;QACF,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACV,QAAQ,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;AACF,CAAC;AAED,IAAI,CAAC;IACJ,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACP,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE;YAChD,OAAO,EAAE,eAAe,CAAC,OAAO;YAChC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5C,WAAW,EAAE,EAAE,qBAAqB,EAAE,kBAAkB,EAAE;YAC1D,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnG,CAAC;YACD,iBAAiB,EAAE,GAAG,EAAE;gBACvB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACrG,CAAC;SACD,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACtG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,CAAC","sourcesContent":["#!/usr/bin/env node\n\nimport { createInterface } from \"node:readline/promises\";\nimport { redactSensitiveText } from \"@di-code/plugin-runtime\";\nimport packageMetadata from \"../package.json\" with { type: \"json\" };\nimport { parseCliArgs } from \"./cli.ts\";\nimport { runMinimalProfile } from \"./main.ts\";\nimport { resolveStartupArgs } from \"./startup.ts\";\nimport { runWebCommand } from \"./web-command.ts\";\n\nasync function promptProjectTrust(cwd: string): Promise<boolean> {\n\tconst readline = createInterface({ input: process.stdin, output: process.stdout });\n\ttry {\n\t\tconst answer = await readline.question(\n\t\t\t`Trust project-local plugins, Skills, and MCP configuration in ${cwd}? [y/N] `,\n\t\t);\n\t\treturn /^(?:y|yes)$/i.test(answer.trim());\n\t} finally {\n\t\treadline.close();\n\t}\n}\n\ntry {\n\tconst rawArgs = process.argv.slice(2);\n\tconst args = resolveStartupArgs(rawArgs);\n\tconst command = parseCliArgs(args);\n\tif (command.kind === \"web\") {\n\t\tprocess.exitCode = await runWebCommand(command);\n\t} else {\n\t\tconst isInteractiveTerminal = Boolean(process.stdin.isTTY && process.stdout.isTTY);\n\t\tprocess.exitCode = await runMinimalProfile(args, {\n\t\t\tversion: packageMetadata.version,\n\t\t\tstdout: (text) => process.stdout.write(text),\n\t\t\tstderr: (text) => process.stderr.write(text),\n\t\t\tinteractive: { isInteractiveTerminal, promptProjectTrust },\n\t\t\tonRuntimeEvent: (event) => {\n\t\t\t\tif (process.env.DI_CODE_TRACE_PLUGINS === \"1\") process.stderr.write(`${JSON.stringify(event)}\\n`);\n\t\t\t},\n\t\t\tonSessionDisposed: () => {\n\t\t\t\tif (process.env.DI_CODE_TRACE_PLUGINS === \"1\") process.stderr.write('{\"type\":\"session_dispose\"}\\n');\n\t\t\t},\n\t\t});\n\t}\n} catch (cause) {\n\tconst message = redactSensitiveText(cause instanceof Error ? cause.message : \"Unknown startup error\");\n\tprocess.stderr.write(`${message}\\n`);\n\tprocess.exitCode = 1;\n}\n"]}
package/dist/i18n.js CHANGED
@@ -12,8 +12,8 @@ const MESSAGES = {
12
12
  skill: "Add a SKILL.md file or skill directory (repeatable)",
13
13
  noSkills: "Disable all Skill loading",
14
14
  noContextFiles: "Disable AGENTS.md discovery and loading",
15
- trustProject: "Persist trust for project-local Skill discovery",
16
- untrustProject: "Persist denial for project-local Skill discovery",
15
+ trustProject: "Persist trust for project-local plugins, Skills, and MCP configuration",
16
+ untrustProject: "Persist denial for project-local plugins, Skills, and MCP configuration",
17
17
  plugin: "Install, list, enable, disable, update, or remove a plugin",
18
18
  mcp: "Manage MCP configuration (add <id> -- <command> defaults to local stdio)",
19
19
  help: "Show help",
@@ -119,8 +119,8 @@ const MESSAGES = {
119
119
  skill: "加载一个 SKILL.md 文件或技能目录(可重复)",
120
120
  noSkills: "禁用所有 Skill 加载",
121
121
  noContextFiles: "禁用 AGENTS.md 发现和加载",
122
- trustProject: "保存对项目本地 Skill 的信任",
123
- untrustProject: "保存对项目本地 Skill 的拒绝",
122
+ trustProject: "保存对项目本地插件、Skill 和 MCP 配置的信任",
123
+ untrustProject: "保存对项目本地插件、Skill 和 MCP 配置的拒绝",
124
124
  plugin: "安装、列出、启用、禁用、更新或移除插件",
125
125
  mcp: "管理 MCP 配置(add <id> -- <command> 默认为本地 stdio)",
126
126
  help: "显示帮助",