pybao-cli 1.3.3

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 (185) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +440 -0
  3. package/README.zh-CN.md +338 -0
  4. package/cli-acp.js +82 -0
  5. package/cli.js +105 -0
  6. package/dist/REPL-WPV32MTF.js +42 -0
  7. package/dist/REPL-WPV32MTF.js.map +7 -0
  8. package/dist/acp-75HO2LBV.js +1357 -0
  9. package/dist/acp-75HO2LBV.js.map +7 -0
  10. package/dist/agentsValidate-6Z57ARKC.js +373 -0
  11. package/dist/agentsValidate-6Z57ARKC.js.map +7 -0
  12. package/dist/ask-NXXXCGY4.js +125 -0
  13. package/dist/ask-NXXXCGY4.js.map +7 -0
  14. package/dist/autoUpdater-PJMGNPUG.js +17 -0
  15. package/dist/autoUpdater-PJMGNPUG.js.map +7 -0
  16. package/dist/chunk-27GYWUY2.js +72 -0
  17. package/dist/chunk-27GYWUY2.js.map +7 -0
  18. package/dist/chunk-3DFBSQIT.js +23 -0
  19. package/dist/chunk-3DFBSQIT.js.map +7 -0
  20. package/dist/chunk-3KNGJX7Q.js +794 -0
  21. package/dist/chunk-3KNGJX7Q.js.map +7 -0
  22. package/dist/chunk-3PDD7M4T.js +164 -0
  23. package/dist/chunk-3PDD7M4T.js.map +7 -0
  24. package/dist/chunk-3ZNSAB7B.js +515 -0
  25. package/dist/chunk-3ZNSAB7B.js.map +7 -0
  26. package/dist/chunk-4SNFQYCY.js +511 -0
  27. package/dist/chunk-4SNFQYCY.js.map +7 -0
  28. package/dist/chunk-4XPNRLJG.js +1609 -0
  29. package/dist/chunk-4XPNRLJG.js.map +7 -0
  30. package/dist/chunk-5P7HBXTD.js +12 -0
  31. package/dist/chunk-5P7HBXTD.js.map +7 -0
  32. package/dist/chunk-6RZIUY5K.js +191 -0
  33. package/dist/chunk-6RZIUY5K.js.map +7 -0
  34. package/dist/chunk-6WELHKDA.js +240 -0
  35. package/dist/chunk-6WELHKDA.js.map +7 -0
  36. package/dist/chunk-7AAE6EO2.js +145 -0
  37. package/dist/chunk-7AAE6EO2.js.map +7 -0
  38. package/dist/chunk-A3BVXXA3.js +47 -0
  39. package/dist/chunk-A3BVXXA3.js.map +7 -0
  40. package/dist/chunk-A6PUMROK.js +152 -0
  41. package/dist/chunk-A6PUMROK.js.map +7 -0
  42. package/dist/chunk-BH3Y62E3.js +11 -0
  43. package/dist/chunk-BH3Y62E3.js.map +7 -0
  44. package/dist/chunk-BJSWTHRM.js +16 -0
  45. package/dist/chunk-BJSWTHRM.js.map +7 -0
  46. package/dist/chunk-BQA2EOUU.js +124 -0
  47. package/dist/chunk-BQA2EOUU.js.map +7 -0
  48. package/dist/chunk-CZZKRPE2.js +19 -0
  49. package/dist/chunk-CZZKRPE2.js.map +7 -0
  50. package/dist/chunk-ERMQRV55.js +24 -0
  51. package/dist/chunk-ERMQRV55.js.map +7 -0
  52. package/dist/chunk-HB2P6645.js +34 -0
  53. package/dist/chunk-HB2P6645.js.map +7 -0
  54. package/dist/chunk-HIRIJ2LQ.js +1256 -0
  55. package/dist/chunk-HIRIJ2LQ.js.map +7 -0
  56. package/dist/chunk-ICTEVBLN.js +735 -0
  57. package/dist/chunk-ICTEVBLN.js.map +7 -0
  58. package/dist/chunk-JKGOGSFT.js +128 -0
  59. package/dist/chunk-JKGOGSFT.js.map +7 -0
  60. package/dist/chunk-JZDE77EH.js +836 -0
  61. package/dist/chunk-JZDE77EH.js.map +7 -0
  62. package/dist/chunk-M624LT6O.js +17 -0
  63. package/dist/chunk-M624LT6O.js.map +7 -0
  64. package/dist/chunk-OMELVAJD.js +96 -0
  65. package/dist/chunk-OMELVAJD.js.map +7 -0
  66. package/dist/chunk-OUXHGDLH.js +95 -0
  67. package/dist/chunk-OUXHGDLH.js.map +7 -0
  68. package/dist/chunk-PCXUZ6AT.js +249 -0
  69. package/dist/chunk-PCXUZ6AT.js.map +7 -0
  70. package/dist/chunk-Q24ZGKIE.js +1097 -0
  71. package/dist/chunk-Q24ZGKIE.js.map +7 -0
  72. package/dist/chunk-QBHEERCF.js +30254 -0
  73. package/dist/chunk-QBHEERCF.js.map +7 -0
  74. package/dist/chunk-QIHB5PYM.js +472 -0
  75. package/dist/chunk-QIHB5PYM.js.map +7 -0
  76. package/dist/chunk-RQVLBMP7.js +24 -0
  77. package/dist/chunk-RQVLBMP7.js.map +7 -0
  78. package/dist/chunk-SWYJOV5E.js +490 -0
  79. package/dist/chunk-SWYJOV5E.js.map +7 -0
  80. package/dist/chunk-T6GVXTNQ.js +21 -0
  81. package/dist/chunk-T6GVXTNQ.js.map +7 -0
  82. package/dist/chunk-T7GPUZVK.js +766 -0
  83. package/dist/chunk-T7GPUZVK.js.map +7 -0
  84. package/dist/chunk-TXFCNQDE.js +2934 -0
  85. package/dist/chunk-TXFCNQDE.js.map +7 -0
  86. package/dist/chunk-UNNVICVU.js +95 -0
  87. package/dist/chunk-UNNVICVU.js.map +7 -0
  88. package/dist/chunk-UUNVJZWA.js +515 -0
  89. package/dist/chunk-UUNVJZWA.js.map +7 -0
  90. package/dist/chunk-VRGR4ZTQ.js +49 -0
  91. package/dist/chunk-VRGR4ZTQ.js.map +7 -0
  92. package/dist/chunk-VTVTEE5N.js +2613 -0
  93. package/dist/chunk-VTVTEE5N.js.map +7 -0
  94. package/dist/chunk-WPTPPOYN.js +936 -0
  95. package/dist/chunk-WPTPPOYN.js.map +7 -0
  96. package/dist/chunk-XXFY63TM.js +196 -0
  97. package/dist/chunk-XXFY63TM.js.map +7 -0
  98. package/dist/chunk-Z3HMXDXP.js +654 -0
  99. package/dist/chunk-Z3HMXDXP.js.map +7 -0
  100. package/dist/chunk-ZJGXEWKF.js +138 -0
  101. package/dist/chunk-ZJGXEWKF.js.map +7 -0
  102. package/dist/cli-RFYBXM7F.js +3917 -0
  103. package/dist/cli-RFYBXM7F.js.map +7 -0
  104. package/dist/commands-YOXMODDO.js +46 -0
  105. package/dist/commands-YOXMODDO.js.map +7 -0
  106. package/dist/config-5OPX3H2K.js +81 -0
  107. package/dist/config-5OPX3H2K.js.map +7 -0
  108. package/dist/context-THRRBPFP.js +30 -0
  109. package/dist/context-THRRBPFP.js.map +7 -0
  110. package/dist/costTracker-ELNBZ2DN.js +19 -0
  111. package/dist/costTracker-ELNBZ2DN.js.map +7 -0
  112. package/dist/customCommands-4XOZH44N.js +25 -0
  113. package/dist/customCommands-4XOZH44N.js.map +7 -0
  114. package/dist/env-EL4KBHMB.js +22 -0
  115. package/dist/env-EL4KBHMB.js.map +7 -0
  116. package/dist/index.js +34 -0
  117. package/dist/index.js.map +7 -0
  118. package/dist/kodeAgentSessionId-PROTVRBR.js +13 -0
  119. package/dist/kodeAgentSessionId-PROTVRBR.js.map +7 -0
  120. package/dist/kodeAgentSessionLoad-UMPV7MC3.js +18 -0
  121. package/dist/kodeAgentSessionLoad-UMPV7MC3.js.map +7 -0
  122. package/dist/kodeAgentSessionResume-YJS4FVQM.js +16 -0
  123. package/dist/kodeAgentSessionResume-YJS4FVQM.js.map +7 -0
  124. package/dist/kodeAgentStreamJson-3T26CHCP.js +13 -0
  125. package/dist/kodeAgentStreamJson-3T26CHCP.js.map +7 -0
  126. package/dist/kodeAgentStreamJsonSession-BZS2VDCY.js +131 -0
  127. package/dist/kodeAgentStreamJsonSession-BZS2VDCY.js.map +7 -0
  128. package/dist/kodeAgentStructuredStdio-TNB6U6SP.js +10 -0
  129. package/dist/kodeAgentStructuredStdio-TNB6U6SP.js.map +7 -0
  130. package/dist/kodeHooks-VUAWIY2D.js +36 -0
  131. package/dist/kodeHooks-VUAWIY2D.js.map +7 -0
  132. package/dist/llm-A3BCM4Q2.js +3118 -0
  133. package/dist/llm-A3BCM4Q2.js.map +7 -0
  134. package/dist/llmLazy-ZJSRLZVD.js +15 -0
  135. package/dist/llmLazy-ZJSRLZVD.js.map +7 -0
  136. package/dist/loader-HZQBWO74.js +28 -0
  137. package/dist/loader-HZQBWO74.js.map +7 -0
  138. package/dist/mcp-XKOJ55B2.js +49 -0
  139. package/dist/mcp-XKOJ55B2.js.map +7 -0
  140. package/dist/mentionProcessor-ANYU5MLF.js +211 -0
  141. package/dist/mentionProcessor-ANYU5MLF.js.map +7 -0
  142. package/dist/messages-75DL5XBP.js +63 -0
  143. package/dist/messages-75DL5XBP.js.map +7 -0
  144. package/dist/model-OPJGJZRC.js +30 -0
  145. package/dist/model-OPJGJZRC.js.map +7 -0
  146. package/dist/openai-DT54BAFP.js +29 -0
  147. package/dist/openai-DT54BAFP.js.map +7 -0
  148. package/dist/outputStyles-TPFVI52O.js +28 -0
  149. package/dist/outputStyles-TPFVI52O.js.map +7 -0
  150. package/dist/package.json +4 -0
  151. package/dist/pluginRuntime-W74PYSZ4.js +218 -0
  152. package/dist/pluginRuntime-W74PYSZ4.js.map +7 -0
  153. package/dist/pluginValidation-FALYRVI2.js +17 -0
  154. package/dist/pluginValidation-FALYRVI2.js.map +7 -0
  155. package/dist/prompts-J4TPRMJ3.js +48 -0
  156. package/dist/prompts-J4TPRMJ3.js.map +7 -0
  157. package/dist/query-K3QKBVDN.js +50 -0
  158. package/dist/query-K3QKBVDN.js.map +7 -0
  159. package/dist/responsesStreaming-HMB74TRD.js +10 -0
  160. package/dist/responsesStreaming-HMB74TRD.js.map +7 -0
  161. package/dist/ripgrep-XJGSUBG7.js +17 -0
  162. package/dist/ripgrep-XJGSUBG7.js.map +7 -0
  163. package/dist/skillMarketplace-AUGKNCPW.js +37 -0
  164. package/dist/skillMarketplace-AUGKNCPW.js.map +7 -0
  165. package/dist/state-DQYRXKTG.js +16 -0
  166. package/dist/state-DQYRXKTG.js.map +7 -0
  167. package/dist/theme-MS5HDUBJ.js +14 -0
  168. package/dist/theme-MS5HDUBJ.js.map +7 -0
  169. package/dist/toolPermissionContext-GYD5LYFK.js +17 -0
  170. package/dist/toolPermissionContext-GYD5LYFK.js.map +7 -0
  171. package/dist/toolPermissionSettings-4MPZVYDR.js +18 -0
  172. package/dist/toolPermissionSettings-4MPZVYDR.js.map +7 -0
  173. package/dist/tools-QW6SIJLJ.js +47 -0
  174. package/dist/tools-QW6SIJLJ.js.map +7 -0
  175. package/dist/userInput-F2PGBRFU.js +311 -0
  176. package/dist/userInput-F2PGBRFU.js.map +7 -0
  177. package/dist/uuid-GYYCQ6QK.js +9 -0
  178. package/dist/uuid-GYYCQ6QK.js.map +7 -0
  179. package/dist/yoga.wasm +0 -0
  180. package/package.json +136 -0
  181. package/scripts/binary-utils.cjs +62 -0
  182. package/scripts/cli-acp-wrapper.cjs +82 -0
  183. package/scripts/cli-wrapper.cjs +105 -0
  184. package/scripts/postinstall.js +144 -0
  185. package/yoga.wasm +0 -0
@@ -0,0 +1,211 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ emitReminderEvent
5
+ } from "./chunk-UUNVJZWA.js";
6
+ import "./chunk-ERMQRV55.js";
7
+ import {
8
+ getAvailableAgentTypes
9
+ } from "./chunk-ICTEVBLN.js";
10
+ import "./chunk-A3BVXXA3.js";
11
+ import "./chunk-BJSWTHRM.js";
12
+ import {
13
+ debug
14
+ } from "./chunk-3KNGJX7Q.js";
15
+ import {
16
+ getCwd,
17
+ logError
18
+ } from "./chunk-TXFCNQDE.js";
19
+ import "./chunk-A6PUMROK.js";
20
+ import "./chunk-BH3Y62E3.js";
21
+
22
+ // src/services/context/mentionProcessor.ts
23
+ import { existsSync } from "fs";
24
+ import { resolve } from "path";
25
+ var MentionProcessorService = class _MentionProcessorService {
26
+ static MENTION_PATTERNS = {
27
+ runAgent: /@(run-agent-[\w\-]+)/g,
28
+ agent: /@(agent-[\w\-]+)/g,
29
+ askModel: /@(ask-[\w\-]+)/g,
30
+ file: /@(?:"([^"\n]+)"|'([^'\n]+)'|([a-zA-Z0-9/._~:\\\\-]+))/g
31
+ };
32
+ agentCache = /* @__PURE__ */ new Map();
33
+ lastAgentCheck = 0;
34
+ CACHE_TTL = 6e4;
35
+ async processMentions(input) {
36
+ const result = {
37
+ agents: [],
38
+ files: [],
39
+ hasAgentMentions: false,
40
+ hasFileMentions: false
41
+ };
42
+ try {
43
+ const agentMentions = this.extractAgentMentions(input);
44
+ if (agentMentions.length > 0) {
45
+ await this.refreshAgentCache();
46
+ for (const { mention, agentType, isAskModel } of agentMentions) {
47
+ if (isAskModel || this.agentCache.has(agentType)) {
48
+ result.agents.push({
49
+ type: "agent",
50
+ mention,
51
+ resolved: agentType,
52
+ exists: true,
53
+ metadata: isAskModel ? { type: "ask-model" } : void 0
54
+ });
55
+ result.hasAgentMentions = true;
56
+ this.emitAgentMentionEvent(mention, agentType, isAskModel);
57
+ }
58
+ }
59
+ }
60
+ const fileMatches = [
61
+ ...input.matchAll(_MentionProcessorService.MENTION_PATTERNS.file)
62
+ ];
63
+ const processedAgentMentions = new Set(
64
+ agentMentions.map((am) => am.mention)
65
+ );
66
+ for (const match of fileMatches) {
67
+ const rawMention = match[0]?.slice(1) || "";
68
+ const mention = (match[1] ?? match[2] ?? match[3] ?? "").trim();
69
+ if (mention.startsWith("run-agent-") || mention.startsWith("agent-") || mention.startsWith("ask-") || processedAgentMentions.has(mention)) {
70
+ continue;
71
+ }
72
+ if (!mention) continue;
73
+ const filePath = this.resolveFilePath(
74
+ this.normalizeFileMentionPath(mention)
75
+ );
76
+ if (existsSync(filePath)) {
77
+ result.files.push({
78
+ type: "file",
79
+ mention: rawMention || mention,
80
+ resolved: filePath,
81
+ exists: true
82
+ });
83
+ result.hasFileMentions = true;
84
+ emitReminderEvent("file:mentioned", {
85
+ filePath,
86
+ originalMention: rawMention || mention,
87
+ timestamp: Date.now()
88
+ });
89
+ }
90
+ }
91
+ return result;
92
+ } catch (error) {
93
+ logError(error);
94
+ debug.warn("MENTION_PROCESSOR_PROCESS_FAILED", {
95
+ input: input.substring(0, 100) + (input.length > 100 ? "..." : ""),
96
+ error: error instanceof Error ? error.message : error
97
+ });
98
+ return {
99
+ agents: [],
100
+ files: [],
101
+ hasAgentMentions: false,
102
+ hasFileMentions: false
103
+ };
104
+ }
105
+ }
106
+ resolveFilePath(mention) {
107
+ return resolve(getCwd(), mention);
108
+ }
109
+ normalizeFileMentionPath(mention) {
110
+ return mention.replace(/\\ /g, " ");
111
+ }
112
+ async refreshAgentCache() {
113
+ const now = Date.now();
114
+ if (now - this.lastAgentCheck < this.CACHE_TTL) {
115
+ return;
116
+ }
117
+ try {
118
+ const agents = await getAvailableAgentTypes();
119
+ const previousCacheSize = this.agentCache.size;
120
+ this.agentCache.clear();
121
+ for (const agent of agents) {
122
+ this.agentCache.set(agent.agentType, true);
123
+ }
124
+ this.lastAgentCheck = now;
125
+ if (agents.length !== previousCacheSize) {
126
+ debug.info("MENTION_PROCESSOR_CACHE_REFRESHED", {
127
+ agentCount: agents.length,
128
+ previousCacheSize,
129
+ cacheAge: now - this.lastAgentCheck
130
+ });
131
+ }
132
+ } catch (error) {
133
+ logError(error);
134
+ debug.warn("MENTION_PROCESSOR_CACHE_REFRESH_FAILED", {
135
+ error: error instanceof Error ? error.message : error,
136
+ cacheSize: this.agentCache.size,
137
+ lastRefresh: new Date(this.lastAgentCheck).toISOString()
138
+ });
139
+ }
140
+ }
141
+ extractAgentMentions(input) {
142
+ const mentions = [];
143
+ const runAgentMatches = [
144
+ ...input.matchAll(_MentionProcessorService.MENTION_PATTERNS.runAgent)
145
+ ];
146
+ for (const match of runAgentMatches) {
147
+ const mention = match[1];
148
+ const agentType = mention.replace(/^run-agent-/, "");
149
+ mentions.push({ mention, agentType, isAskModel: false });
150
+ }
151
+ const agentMatches = [
152
+ ...input.matchAll(_MentionProcessorService.MENTION_PATTERNS.agent)
153
+ ];
154
+ for (const match of agentMatches) {
155
+ const mention = match[1];
156
+ const agentType = mention.replace(/^agent-/, "");
157
+ mentions.push({ mention, agentType, isAskModel: false });
158
+ }
159
+ const askModelMatches = [
160
+ ...input.matchAll(_MentionProcessorService.MENTION_PATTERNS.askModel)
161
+ ];
162
+ for (const match of askModelMatches) {
163
+ const mention = match[1];
164
+ mentions.push({ mention, agentType: mention, isAskModel: true });
165
+ }
166
+ return mentions;
167
+ }
168
+ emitAgentMentionEvent(mention, agentType, isAskModel) {
169
+ try {
170
+ const eventData = {
171
+ originalMention: mention,
172
+ timestamp: Date.now()
173
+ };
174
+ if (isAskModel) {
175
+ emitReminderEvent("ask-model:mentioned", {
176
+ ...eventData,
177
+ modelName: mention
178
+ });
179
+ } else {
180
+ emitReminderEvent("agent:mentioned", {
181
+ ...eventData,
182
+ agentType
183
+ });
184
+ }
185
+ debug.info("MENTION_PROCESSOR_EVENT_EMITTED", {
186
+ type: isAskModel ? "ask-model" : "agent",
187
+ mention,
188
+ agentType: isAskModel ? void 0 : agentType
189
+ });
190
+ } catch (error) {
191
+ debug.error("MENTION_PROCESSOR_EVENT_FAILED", {
192
+ mention,
193
+ agentType,
194
+ isAskModel,
195
+ error: error instanceof Error ? error.message : error
196
+ });
197
+ }
198
+ }
199
+ clearCache() {
200
+ this.agentCache.clear();
201
+ this.lastAgentCheck = 0;
202
+ }
203
+ };
204
+ var mentionProcessor = new MentionProcessorService();
205
+ var processMentions = (input) => mentionProcessor.processMentions(input);
206
+ var clearMentionCache = () => mentionProcessor.clearCache();
207
+ export {
208
+ clearMentionCache,
209
+ mentionProcessor,
210
+ processMentions
211
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/services/context/mentionProcessor.ts"],
4
+ "sourcesContent": ["import { emitReminderEvent } from '@services/systemReminder'\nimport { getAvailableAgentTypes } from '@utils/agent/loader'\nimport { existsSync } from 'fs'\nimport { resolve } from 'path'\nimport { getCwd } from '@utils/state'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\n\nexport interface MentionContext {\n type: 'agent' | 'file'\n mention: string\n resolved: string\n exists: boolean\n metadata?: any\n}\n\nexport interface ProcessedMentions {\n agents: MentionContext[]\n files: MentionContext[]\n hasAgentMentions: boolean\n hasFileMentions: boolean\n}\n\nclass MentionProcessorService {\n private static readonly MENTION_PATTERNS = {\n runAgent: /@(run-agent-[\\w\\-]+)/g,\n agent: /@(agent-[\\w\\-]+)/g,\n askModel: /@(ask-[\\w\\-]+)/g,\n file: /@(?:\"([^\"\\n]+)\"|'([^'\\n]+)'|([a-zA-Z0-9/._~:\\\\\\\\-]+))/g,\n } as const\n\n private agentCache: Map<string, boolean> = new Map()\n private lastAgentCheck: number = 0\n private CACHE_TTL = 60_000\n\n public async processMentions(input: string): Promise<ProcessedMentions> {\n const result: ProcessedMentions = {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n\n try {\n const agentMentions = this.extractAgentMentions(input)\n if (agentMentions.length > 0) {\n await this.refreshAgentCache()\n\n for (const { mention, agentType, isAskModel } of agentMentions) {\n if (isAskModel || this.agentCache.has(agentType)) {\n result.agents.push({\n type: 'agent',\n mention,\n resolved: agentType,\n exists: true,\n metadata: isAskModel ? { type: 'ask-model' } : undefined,\n })\n result.hasAgentMentions = true\n\n this.emitAgentMentionEvent(mention, agentType, isAskModel)\n }\n }\n }\n\n const fileMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.file),\n ]\n const processedAgentMentions = new Set(\n agentMentions.map(am => am.mention),\n )\n\n for (const match of fileMatches) {\n const rawMention = match[0]?.slice(1) || ''\n const mention = (match[1] ?? match[2] ?? match[3] ?? '').trim()\n\n if (\n mention.startsWith('run-agent-') ||\n mention.startsWith('agent-') ||\n mention.startsWith('ask-') ||\n processedAgentMentions.has(mention)\n ) {\n continue\n }\n\n if (!mention) continue\n const filePath = this.resolveFilePath(\n this.normalizeFileMentionPath(mention),\n )\n if (existsSync(filePath)) {\n result.files.push({\n type: 'file',\n mention: rawMention || mention,\n resolved: filePath,\n exists: true,\n })\n result.hasFileMentions = true\n\n emitReminderEvent('file:mentioned', {\n filePath: filePath,\n originalMention: rawMention || mention,\n timestamp: Date.now(),\n })\n }\n }\n\n return result\n } catch (error) {\n logError(error)\n debugLogger.warn('MENTION_PROCESSOR_PROCESS_FAILED', {\n input: input.substring(0, 100) + (input.length > 100 ? '...' : ''),\n error: error instanceof Error ? error.message : error,\n })\n\n return {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n }\n }\n\n private resolveFilePath(mention: string): string {\n return resolve(getCwd(), mention)\n }\n\n private normalizeFileMentionPath(mention: string): string {\n return mention.replace(/\\\\ /g, ' ')\n }\n\n private async refreshAgentCache(): Promise<void> {\n const now = Date.now()\n if (now - this.lastAgentCheck < this.CACHE_TTL) {\n return\n }\n\n try {\n const agents = await getAvailableAgentTypes()\n const previousCacheSize = this.agentCache.size\n this.agentCache.clear()\n\n for (const agent of agents) {\n this.agentCache.set(agent.agentType, true)\n }\n\n this.lastAgentCheck = now\n\n if (agents.length !== previousCacheSize) {\n debugLogger.info('MENTION_PROCESSOR_CACHE_REFRESHED', {\n agentCount: agents.length,\n previousCacheSize,\n cacheAge: now - this.lastAgentCheck,\n })\n }\n } catch (error) {\n logError(error)\n debugLogger.warn('MENTION_PROCESSOR_CACHE_REFRESH_FAILED', {\n error: error instanceof Error ? error.message : error,\n cacheSize: this.agentCache.size,\n lastRefresh: new Date(this.lastAgentCheck).toISOString(),\n })\n }\n }\n\n private extractAgentMentions(\n input: string,\n ): Array<{ mention: string; agentType: string; isAskModel: boolean }> {\n const mentions: Array<{\n mention: string\n agentType: string\n isAskModel: boolean\n }> = []\n\n const runAgentMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.runAgent),\n ]\n for (const match of runAgentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^run-agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n\n const agentMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.agent),\n ]\n for (const match of agentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n\n const askModelMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.askModel),\n ]\n for (const match of askModelMatches) {\n const mention = match[1]\n mentions.push({ mention, agentType: mention, isAskModel: true })\n }\n\n return mentions\n }\n\n private emitAgentMentionEvent(\n mention: string,\n agentType: string,\n isAskModel: boolean,\n ): void {\n try {\n const eventData = {\n originalMention: mention,\n timestamp: Date.now(),\n }\n\n if (isAskModel) {\n emitReminderEvent('ask-model:mentioned', {\n ...eventData,\n modelName: mention,\n })\n } else {\n emitReminderEvent('agent:mentioned', {\n ...eventData,\n agentType,\n })\n }\n\n debugLogger.info('MENTION_PROCESSOR_EVENT_EMITTED', {\n type: isAskModel ? 'ask-model' : 'agent',\n mention,\n agentType: isAskModel ? undefined : agentType,\n })\n } catch (error) {\n debugLogger.error('MENTION_PROCESSOR_EVENT_FAILED', {\n mention,\n agentType,\n isAskModel,\n error: error instanceof Error ? error.message : error,\n })\n }\n }\n\n public clearCache(): void {\n this.agentCache.clear()\n this.lastAgentCheck = 0\n }\n}\n\nexport const mentionProcessor = new MentionProcessorService()\n\nexport const processMentions = (input: string) =>\n mentionProcessor.processMentions(input)\n\nexport const clearMentionCache = () => mentionProcessor.clearCache()\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,63 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ CANCEL_MESSAGE,
5
+ INTERRUPT_MESSAGE,
6
+ INTERRUPT_MESSAGE_FOR_TOOL_USE,
7
+ NO_RESPONSE_REQUESTED,
8
+ REJECTED_PLAN_PREFIX,
9
+ REJECT_MESSAGE,
10
+ REJECT_MESSAGE_WITH_FEEDBACK_PREFIX,
11
+ SYNTHETIC_ASSISTANT_MESSAGES,
12
+ createAssistantAPIErrorMessage,
13
+ createAssistantMessage,
14
+ createProgressMessage,
15
+ createToolResultStopMessage,
16
+ createUserMessage,
17
+ extractTag,
18
+ extractTagFromMessage,
19
+ getErroredToolUseMessages,
20
+ getInProgressToolUseIDs,
21
+ getLastAssistantMessageId,
22
+ getToolUseID,
23
+ getUnresolvedToolUseIDs,
24
+ isEmptyMessageText,
25
+ isNotEmptyMessage,
26
+ normalizeContentFromAPI,
27
+ normalizeMessages,
28
+ normalizeMessagesForAPI,
29
+ processUserInput,
30
+ reorderMessages,
31
+ stripSystemMessages
32
+ } from "./chunk-SWYJOV5E.js";
33
+ import "./chunk-BH3Y62E3.js";
34
+ export {
35
+ CANCEL_MESSAGE,
36
+ INTERRUPT_MESSAGE,
37
+ INTERRUPT_MESSAGE_FOR_TOOL_USE,
38
+ NO_RESPONSE_REQUESTED,
39
+ REJECTED_PLAN_PREFIX,
40
+ REJECT_MESSAGE,
41
+ REJECT_MESSAGE_WITH_FEEDBACK_PREFIX,
42
+ SYNTHETIC_ASSISTANT_MESSAGES,
43
+ createAssistantAPIErrorMessage,
44
+ createAssistantMessage,
45
+ createProgressMessage,
46
+ createToolResultStopMessage,
47
+ createUserMessage,
48
+ extractTag,
49
+ extractTagFromMessage,
50
+ getErroredToolUseMessages,
51
+ getInProgressToolUseIDs,
52
+ getLastAssistantMessageId,
53
+ getToolUseID,
54
+ getUnresolvedToolUseIDs,
55
+ isEmptyMessageText,
56
+ isNotEmptyMessage,
57
+ normalizeContentFromAPI,
58
+ normalizeMessages,
59
+ normalizeMessagesForAPI,
60
+ processUserInput,
61
+ reorderMessages,
62
+ stripSystemMessages
63
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,30 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ ModelManager,
5
+ USE_BEDROCK,
6
+ USE_VERTEX,
7
+ getModelManager,
8
+ getQuickModel,
9
+ getSlowAndCapableModel,
10
+ getVertexRegionForModel,
11
+ isDefaultSlowAndCapableModel,
12
+ reloadModelManager
13
+ } from "./chunk-Z3HMXDXP.js";
14
+ import "./chunk-JZDE77EH.js";
15
+ import "./chunk-RQVLBMP7.js";
16
+ import "./chunk-3KNGJX7Q.js";
17
+ import "./chunk-TXFCNQDE.js";
18
+ import "./chunk-A6PUMROK.js";
19
+ import "./chunk-BH3Y62E3.js";
20
+ export {
21
+ ModelManager,
22
+ USE_BEDROCK,
23
+ USE_VERTEX,
24
+ getModelManager,
25
+ getQuickModel,
26
+ getSlowAndCapableModel,
27
+ getVertexRegionForModel,
28
+ isDefaultSlowAndCapableModel,
29
+ reloadModelManager
30
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,29 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ applyModelSpecificTransformations,
5
+ callGPT5ResponsesAPI,
6
+ createStreamProcessor,
7
+ fetchCustomModels,
8
+ getCompletionWithProfile,
9
+ getGPT5CompletionWithProfile,
10
+ getModelFeatures,
11
+ streamCompletion
12
+ } from "./chunk-WPTPPOYN.js";
13
+ import "./chunk-ERMQRV55.js";
14
+ import "./chunk-JZDE77EH.js";
15
+ import "./chunk-RQVLBMP7.js";
16
+ import "./chunk-3KNGJX7Q.js";
17
+ import "./chunk-TXFCNQDE.js";
18
+ import "./chunk-A6PUMROK.js";
19
+ import "./chunk-BH3Y62E3.js";
20
+ export {
21
+ applyModelSpecificTransformations,
22
+ callGPT5ResponsesAPI,
23
+ createStreamProcessor,
24
+ fetchCustomModels,
25
+ getCompletionWithProfile,
26
+ getGPT5CompletionWithProfile,
27
+ getModelFeatures,
28
+ streamCompletion
29
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,28 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ DEFAULT_OUTPUT_STYLE,
5
+ clearOutputStyleCache,
6
+ getAvailableOutputStyles,
7
+ getCurrentOutputStyle,
8
+ getCurrentOutputStyleDefinition,
9
+ getOutputStyleSystemPromptAdditions,
10
+ resolveOutputStyleName,
11
+ setCurrentOutputStyle
12
+ } from "./chunk-4SNFQYCY.js";
13
+ import "./chunk-7AAE6EO2.js";
14
+ import "./chunk-A3BVXXA3.js";
15
+ import "./chunk-BJSWTHRM.js";
16
+ import "./chunk-TXFCNQDE.js";
17
+ import "./chunk-A6PUMROK.js";
18
+ import "./chunk-BH3Y62E3.js";
19
+ export {
20
+ DEFAULT_OUTPUT_STYLE,
21
+ clearOutputStyleCache,
22
+ getAvailableOutputStyles,
23
+ getCurrentOutputStyle,
24
+ getCurrentOutputStyleDefinition,
25
+ getOutputStyleSystemPromptAdditions,
26
+ resolveOutputStyleName,
27
+ setCurrentOutputStyle
28
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "type": "module",
3
+ "main": "./index.js"
4
+ }
@@ -0,0 +1,218 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ setSessionPlugins
5
+ } from "./chunk-BJSWTHRM.js";
6
+ import {
7
+ getCwd
8
+ } from "./chunk-TXFCNQDE.js";
9
+ import "./chunk-A6PUMROK.js";
10
+ import "./chunk-BH3Y62E3.js";
11
+
12
+ // src/services/plugins/pluginRuntime.ts
13
+ import { existsSync, readFileSync, statSync } from "fs";
14
+ import { homedir } from "os";
15
+ import { join, resolve } from "path";
16
+ import { z } from "zod";
17
+ import { glob as globLib } from "glob";
18
+ var PluginManifestSchema = z.object({
19
+ name: z.string().min(1)
20
+ }).passthrough();
21
+ function expandHome(input) {
22
+ const trimmed = input.trim();
23
+ if (trimmed === "~") return homedir();
24
+ if (trimmed.startsWith("~/") || trimmed.startsWith("~\\")) {
25
+ return join(homedir(), trimmed.slice(2));
26
+ }
27
+ return trimmed;
28
+ }
29
+ function isLikelyGlob(value) {
30
+ return /[*?[\]]/.test(value);
31
+ }
32
+ async function expandPluginDirInputs(pluginDirs, baseDir) {
33
+ const out = [];
34
+ for (const raw of pluginDirs) {
35
+ const trimmed = String(raw ?? "").trim();
36
+ if (!trimmed) continue;
37
+ const expanded = expandHome(trimmed);
38
+ const abs = resolve(baseDir, expanded);
39
+ if (isLikelyGlob(trimmed) || isLikelyGlob(expanded)) {
40
+ const patternsToTry = expanded !== trimmed ? [expanded, trimmed] : [trimmed];
41
+ let matched = false;
42
+ for (const pattern of patternsToTry) {
43
+ try {
44
+ const matches = await globLib(pattern, {
45
+ cwd: baseDir,
46
+ absolute: true,
47
+ nodir: false,
48
+ nocase: process.platform === "win32"
49
+ });
50
+ const dirs = matches.filter((match) => {
51
+ try {
52
+ return existsSync(match) && statSync(match).isDirectory();
53
+ } catch {
54
+ return false;
55
+ }
56
+ });
57
+ if (dirs.length > 0) {
58
+ out.push(...dirs);
59
+ matched = true;
60
+ break;
61
+ }
62
+ } catch {
63
+ }
64
+ }
65
+ if (matched) continue;
66
+ }
67
+ out.push(abs);
68
+ }
69
+ const seen = /* @__PURE__ */ new Set();
70
+ const unique = [];
71
+ for (const item of out) {
72
+ const key = item;
73
+ if (seen.has(key)) continue;
74
+ seen.add(key);
75
+ unique.push(item);
76
+ }
77
+ return unique;
78
+ }
79
+ function listIfDir(path) {
80
+ try {
81
+ if (!existsSync(path)) return [];
82
+ if (!statSync(path).isDirectory()) return [];
83
+ return [path];
84
+ } catch {
85
+ return [];
86
+ }
87
+ }
88
+ function fileIfExists(path) {
89
+ try {
90
+ if (!existsSync(path)) return [];
91
+ if (!statSync(path).isFile()) return [];
92
+ return [path];
93
+ } catch {
94
+ return [];
95
+ }
96
+ }
97
+ function resolveManifestPaths(rootDir, value) {
98
+ const dirs = [];
99
+ const files = [];
100
+ const list = Array.isArray(value) ? value : value ? [value] : [];
101
+ for (const item of list) {
102
+ if (typeof item !== "string") continue;
103
+ const abs = resolve(rootDir, item);
104
+ dirs.push(...listIfDir(abs));
105
+ files.push(...fileIfExists(abs));
106
+ }
107
+ return { dirs, files };
108
+ }
109
+ function loadPluginFromDir(rootDir) {
110
+ const primaryManifestPath = join(rootDir, ".kode-plugin", "plugin.json");
111
+ const legacyManifestPath = join(rootDir, ".claude-plugin", "plugin.json");
112
+ const manifestPath = existsSync(primaryManifestPath) ? primaryManifestPath : legacyManifestPath;
113
+ if (!existsSync(manifestPath)) {
114
+ throw new Error(
115
+ `Plugin manifest not found (expected .kode-plugin/plugin.json or .claude-plugin/plugin.json)`
116
+ );
117
+ }
118
+ let manifestRaw;
119
+ try {
120
+ manifestRaw = readFileSync(manifestPath, "utf8");
121
+ } catch (err) {
122
+ throw new Error(`Failed to read ${manifestPath}: ${String(err)}`);
123
+ }
124
+ let manifestJson;
125
+ try {
126
+ manifestJson = JSON.parse(manifestRaw);
127
+ } catch (err) {
128
+ throw new Error(`Invalid JSON in ${manifestPath}: ${String(err)}`);
129
+ }
130
+ const parsed = PluginManifestSchema.safeParse(manifestJson);
131
+ if (!parsed.success) {
132
+ throw new Error(
133
+ `Invalid plugin manifest schema in ${manifestPath}: ${parsed.error.message}`
134
+ );
135
+ }
136
+ const name = parsed.data.name;
137
+ const manifestCommands = resolveManifestPaths(
138
+ rootDir,
139
+ parsed.data.commands
140
+ );
141
+ const manifestAgents = resolveManifestPaths(
142
+ rootDir,
143
+ parsed.data.agents
144
+ );
145
+ const commandsDirs = [
146
+ ...listIfDir(join(rootDir, "commands")),
147
+ ...manifestCommands.dirs,
148
+ ...manifestCommands.files
149
+ ];
150
+ const skillsDirs = [
151
+ ...listIfDir(join(rootDir, "skills")),
152
+ ...resolveManifestPaths(rootDir, parsed.data.skills).dirs
153
+ ];
154
+ const agentsDirs = [
155
+ ...listIfDir(join(rootDir, "agents")),
156
+ ...manifestAgents.dirs,
157
+ ...manifestAgents.files
158
+ ];
159
+ const manifestOutputStyles = resolveManifestPaths(
160
+ rootDir,
161
+ parsed.data.outputStyles
162
+ );
163
+ const outputStylesDirs = [
164
+ ...listIfDir(join(rootDir, "output-styles")),
165
+ ...manifestOutputStyles.dirs,
166
+ ...manifestOutputStyles.files
167
+ ];
168
+ const standardHook = fileIfExists(join(rootDir, "hooks", "hooks.json"));
169
+ const hookFromManifest = resolveManifestPaths(
170
+ rootDir,
171
+ parsed.data.hooks
172
+ ).files;
173
+ const hooksFiles = [...standardHook, ...hookFromManifest];
174
+ const mcpConfigFiles = [
175
+ ...fileIfExists(join(rootDir, ".mcp.json")),
176
+ ...fileIfExists(join(rootDir, ".mcp.jsonc")),
177
+ ...resolveManifestPaths(rootDir, parsed.data.mcpServers).files
178
+ ];
179
+ return {
180
+ name,
181
+ rootDir,
182
+ manifestPath,
183
+ manifest: parsed.data,
184
+ commandsDirs,
185
+ skillsDirs,
186
+ agentsDirs,
187
+ hooksFiles,
188
+ outputStylesDirs,
189
+ mcpConfigFiles
190
+ };
191
+ }
192
+ async function configureSessionPlugins(args) {
193
+ const baseDir = args.baseDir ?? getCwd();
194
+ const dirs = await expandPluginDirInputs(args.pluginDirs ?? [], baseDir);
195
+ const plugins = [];
196
+ const errors = [];
197
+ for (const dir of dirs) {
198
+ try {
199
+ plugins.push(loadPluginFromDir(dir));
200
+ } catch (err) {
201
+ errors.push(err instanceof Error ? err.message : String(err));
202
+ }
203
+ }
204
+ setSessionPlugins(plugins);
205
+ const { reloadCustomCommands } = await import("./customCommands-4XOZH44N.js");
206
+ reloadCustomCommands();
207
+ const { getCommands } = await import("./commands-YOXMODDO.js");
208
+ getCommands.cache.clear?.();
209
+ const { getClients, getMCPTools } = await import("./mcp-XKOJ55B2.js");
210
+ getClients.cache?.clear?.();
211
+ getMCPTools.cache?.clear?.();
212
+ const { clearOutputStyleCache } = await import("./outputStyles-TPFVI52O.js");
213
+ clearOutputStyleCache();
214
+ return { plugins, errors };
215
+ }
216
+ export {
217
+ configureSessionPlugins
218
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/services/plugins/pluginRuntime.ts"],
4
+ "sourcesContent": ["import { existsSync, readFileSync, statSync } from 'fs'\nimport { homedir } from 'os'\nimport { join, resolve } from 'path'\nimport { z } from 'zod'\nimport { glob as globLib } from 'glob'\nimport { getCwd } from '@utils/state'\nimport { setSessionPlugins, type SessionPlugin } from '@utils/session/sessionPlugins'\n\nconst PluginManifestSchema = z\n .object({\n name: z.string().min(1),\n })\n .passthrough()\n\nfunction expandHome(input: string): string {\n const trimmed = input.trim()\n if (trimmed === '~') return homedir()\n if (trimmed.startsWith('~/') || trimmed.startsWith('~\\\\')) {\n return join(homedir(), trimmed.slice(2))\n }\n return trimmed\n}\n\nfunction isLikelyGlob(value: string): boolean {\n return /[*?[\\]]/.test(value)\n}\n\nasync function expandPluginDirInputs(\n pluginDirs: string[],\n baseDir: string,\n): Promise<string[]> {\n const out: string[] = []\n for (const raw of pluginDirs) {\n const trimmed = String(raw ?? '').trim()\n if (!trimmed) continue\n const expanded = expandHome(trimmed)\n const abs = resolve(baseDir, expanded)\n\n if (isLikelyGlob(trimmed) || isLikelyGlob(expanded)) {\n const patternsToTry = expanded !== trimmed ? [expanded, trimmed] : [trimmed]\n let matched = false\n for (const pattern of patternsToTry) {\n try {\n const matches = await globLib(pattern, {\n cwd: baseDir,\n absolute: true,\n nodir: false,\n nocase: process.platform === 'win32',\n })\n const dirs = matches.filter(match => {\n try {\n return existsSync(match) && statSync(match).isDirectory()\n } catch {\n return false\n }\n })\n if (dirs.length > 0) {\n out.push(...dirs)\n matched = true\n break\n }\n } catch {\n }\n }\n if (matched) continue\n }\n\n out.push(abs)\n }\n\n const seen = new Set<string>()\n const unique: string[] = []\n for (const item of out) {\n const key = item\n if (seen.has(key)) continue\n seen.add(key)\n unique.push(item)\n }\n return unique\n}\n\nfunction listIfDir(path: string): string[] {\n try {\n if (!existsSync(path)) return []\n if (!statSync(path).isDirectory()) return []\n return [path]\n } catch {\n return []\n }\n}\n\nfunction fileIfExists(path: string): string[] {\n try {\n if (!existsSync(path)) return []\n if (!statSync(path).isFile()) return []\n return [path]\n } catch {\n return []\n }\n}\n\nfunction resolveManifestPaths(\n rootDir: string,\n value: unknown,\n): { dirs: string[]; files: string[] } {\n const dirs: string[] = []\n const files: string[] = []\n const list = Array.isArray(value) ? value : value ? [value] : []\n for (const item of list) {\n if (typeof item !== 'string') continue\n const abs = resolve(rootDir, item)\n dirs.push(...listIfDir(abs))\n files.push(...fileIfExists(abs))\n }\n return { dirs, files }\n}\n\nfunction loadPluginFromDir(rootDir: string): SessionPlugin {\n const primaryManifestPath = join(rootDir, '.kode-plugin', 'plugin.json')\n const legacyManifestPath = join(rootDir, '.claude-plugin', 'plugin.json')\n const manifestPath = existsSync(primaryManifestPath)\n ? primaryManifestPath\n : legacyManifestPath\n if (!existsSync(manifestPath)) {\n throw new Error(\n `Plugin manifest not found (expected .kode-plugin/plugin.json or .claude-plugin/plugin.json)`,\n )\n }\n\n let manifestRaw: string\n try {\n manifestRaw = readFileSync(manifestPath, 'utf8')\n } catch (err) {\n throw new Error(`Failed to read ${manifestPath}: ${String(err)}`)\n }\n\n let manifestJson: unknown\n try {\n manifestJson = JSON.parse(manifestRaw)\n } catch (err) {\n throw new Error(`Invalid JSON in ${manifestPath}: ${String(err)}`)\n }\n\n const parsed = PluginManifestSchema.safeParse(manifestJson)\n if (!parsed.success) {\n throw new Error(\n `Invalid plugin manifest schema in ${manifestPath}: ${parsed.error.message}`,\n )\n }\n\n const name = parsed.data.name\n const manifestCommands = resolveManifestPaths(\n rootDir,\n (parsed.data as any).commands,\n )\n const manifestAgents = resolveManifestPaths(\n rootDir,\n (parsed.data as any).agents,\n )\n const commandsDirs = [\n ...listIfDir(join(rootDir, 'commands')),\n ...manifestCommands.dirs,\n ...manifestCommands.files,\n ]\n const skillsDirs = [\n ...listIfDir(join(rootDir, 'skills')),\n ...resolveManifestPaths(rootDir, (parsed.data as any).skills).dirs,\n ]\n const agentsDirs = [\n ...listIfDir(join(rootDir, 'agents')),\n ...manifestAgents.dirs,\n ...manifestAgents.files,\n ]\n const manifestOutputStyles = resolveManifestPaths(\n rootDir,\n (parsed.data as any).outputStyles,\n )\n const outputStylesDirs = [\n ...listIfDir(join(rootDir, 'output-styles')),\n ...manifestOutputStyles.dirs,\n ...manifestOutputStyles.files,\n ]\n\n const standardHook = fileIfExists(join(rootDir, 'hooks', 'hooks.json'))\n const hookFromManifest = resolveManifestPaths(\n rootDir,\n (parsed.data as any).hooks,\n ).files\n const hooksFiles = [...standardHook, ...hookFromManifest]\n\n const mcpConfigFiles = [\n ...fileIfExists(join(rootDir, '.mcp.json')),\n ...fileIfExists(join(rootDir, '.mcp.jsonc')),\n ...resolveManifestPaths(rootDir, (parsed.data as any).mcpServers).files,\n ]\n\n return {\n name,\n rootDir,\n manifestPath,\n manifest: parsed.data,\n commandsDirs,\n skillsDirs,\n agentsDirs,\n hooksFiles,\n outputStylesDirs,\n mcpConfigFiles,\n }\n}\n\nexport async function configureSessionPlugins(args: {\n pluginDirs: string[]\n baseDir?: string\n}): Promise<{ plugins: SessionPlugin[]; errors: string[] }> {\n const baseDir = args.baseDir ?? getCwd()\n const dirs = await expandPluginDirInputs(args.pluginDirs ?? [], baseDir)\n\n const plugins: SessionPlugin[] = []\n const errors: string[] = []\n\n for (const dir of dirs) {\n try {\n plugins.push(loadPluginFromDir(dir))\n } catch (err) {\n errors.push(err instanceof Error ? err.message : String(err))\n }\n }\n\n setSessionPlugins(plugins)\n\n const { reloadCustomCommands } = await import('@services/customCommands')\n reloadCustomCommands()\n const { getCommands } = await import('@commands')\n getCommands.cache.clear?.()\n\n const { getClients, getMCPTools } = await import('@services/mcpClient')\n ;(getClients as any).cache?.clear?.()\n ;(getMCPTools as any).cache?.clear?.()\n\n const { clearOutputStyleCache } = await import('@services/outputStyles')\n clearOutputStyleCache()\n\n return { plugins, errors }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }