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.
- package/LICENSE +201 -0
- package/README.md +440 -0
- package/README.zh-CN.md +338 -0
- package/cli-acp.js +82 -0
- package/cli.js +105 -0
- package/dist/REPL-WPV32MTF.js +42 -0
- package/dist/REPL-WPV32MTF.js.map +7 -0
- package/dist/acp-75HO2LBV.js +1357 -0
- package/dist/acp-75HO2LBV.js.map +7 -0
- package/dist/agentsValidate-6Z57ARKC.js +373 -0
- package/dist/agentsValidate-6Z57ARKC.js.map +7 -0
- package/dist/ask-NXXXCGY4.js +125 -0
- package/dist/ask-NXXXCGY4.js.map +7 -0
- package/dist/autoUpdater-PJMGNPUG.js +17 -0
- package/dist/autoUpdater-PJMGNPUG.js.map +7 -0
- package/dist/chunk-27GYWUY2.js +72 -0
- package/dist/chunk-27GYWUY2.js.map +7 -0
- package/dist/chunk-3DFBSQIT.js +23 -0
- package/dist/chunk-3DFBSQIT.js.map +7 -0
- package/dist/chunk-3KNGJX7Q.js +794 -0
- package/dist/chunk-3KNGJX7Q.js.map +7 -0
- package/dist/chunk-3PDD7M4T.js +164 -0
- package/dist/chunk-3PDD7M4T.js.map +7 -0
- package/dist/chunk-3ZNSAB7B.js +515 -0
- package/dist/chunk-3ZNSAB7B.js.map +7 -0
- package/dist/chunk-4SNFQYCY.js +511 -0
- package/dist/chunk-4SNFQYCY.js.map +7 -0
- package/dist/chunk-4XPNRLJG.js +1609 -0
- package/dist/chunk-4XPNRLJG.js.map +7 -0
- package/dist/chunk-5P7HBXTD.js +12 -0
- package/dist/chunk-5P7HBXTD.js.map +7 -0
- package/dist/chunk-6RZIUY5K.js +191 -0
- package/dist/chunk-6RZIUY5K.js.map +7 -0
- package/dist/chunk-6WELHKDA.js +240 -0
- package/dist/chunk-6WELHKDA.js.map +7 -0
- package/dist/chunk-7AAE6EO2.js +145 -0
- package/dist/chunk-7AAE6EO2.js.map +7 -0
- package/dist/chunk-A3BVXXA3.js +47 -0
- package/dist/chunk-A3BVXXA3.js.map +7 -0
- package/dist/chunk-A6PUMROK.js +152 -0
- package/dist/chunk-A6PUMROK.js.map +7 -0
- package/dist/chunk-BH3Y62E3.js +11 -0
- package/dist/chunk-BH3Y62E3.js.map +7 -0
- package/dist/chunk-BJSWTHRM.js +16 -0
- package/dist/chunk-BJSWTHRM.js.map +7 -0
- package/dist/chunk-BQA2EOUU.js +124 -0
- package/dist/chunk-BQA2EOUU.js.map +7 -0
- package/dist/chunk-CZZKRPE2.js +19 -0
- package/dist/chunk-CZZKRPE2.js.map +7 -0
- package/dist/chunk-ERMQRV55.js +24 -0
- package/dist/chunk-ERMQRV55.js.map +7 -0
- package/dist/chunk-HB2P6645.js +34 -0
- package/dist/chunk-HB2P6645.js.map +7 -0
- package/dist/chunk-HIRIJ2LQ.js +1256 -0
- package/dist/chunk-HIRIJ2LQ.js.map +7 -0
- package/dist/chunk-ICTEVBLN.js +735 -0
- package/dist/chunk-ICTEVBLN.js.map +7 -0
- package/dist/chunk-JKGOGSFT.js +128 -0
- package/dist/chunk-JKGOGSFT.js.map +7 -0
- package/dist/chunk-JZDE77EH.js +836 -0
- package/dist/chunk-JZDE77EH.js.map +7 -0
- package/dist/chunk-M624LT6O.js +17 -0
- package/dist/chunk-M624LT6O.js.map +7 -0
- package/dist/chunk-OMELVAJD.js +96 -0
- package/dist/chunk-OMELVAJD.js.map +7 -0
- package/dist/chunk-OUXHGDLH.js +95 -0
- package/dist/chunk-OUXHGDLH.js.map +7 -0
- package/dist/chunk-PCXUZ6AT.js +249 -0
- package/dist/chunk-PCXUZ6AT.js.map +7 -0
- package/dist/chunk-Q24ZGKIE.js +1097 -0
- package/dist/chunk-Q24ZGKIE.js.map +7 -0
- package/dist/chunk-QBHEERCF.js +30254 -0
- package/dist/chunk-QBHEERCF.js.map +7 -0
- package/dist/chunk-QIHB5PYM.js +472 -0
- package/dist/chunk-QIHB5PYM.js.map +7 -0
- package/dist/chunk-RQVLBMP7.js +24 -0
- package/dist/chunk-RQVLBMP7.js.map +7 -0
- package/dist/chunk-SWYJOV5E.js +490 -0
- package/dist/chunk-SWYJOV5E.js.map +7 -0
- package/dist/chunk-T6GVXTNQ.js +21 -0
- package/dist/chunk-T6GVXTNQ.js.map +7 -0
- package/dist/chunk-T7GPUZVK.js +766 -0
- package/dist/chunk-T7GPUZVK.js.map +7 -0
- package/dist/chunk-TXFCNQDE.js +2934 -0
- package/dist/chunk-TXFCNQDE.js.map +7 -0
- package/dist/chunk-UNNVICVU.js +95 -0
- package/dist/chunk-UNNVICVU.js.map +7 -0
- package/dist/chunk-UUNVJZWA.js +515 -0
- package/dist/chunk-UUNVJZWA.js.map +7 -0
- package/dist/chunk-VRGR4ZTQ.js +49 -0
- package/dist/chunk-VRGR4ZTQ.js.map +7 -0
- package/dist/chunk-VTVTEE5N.js +2613 -0
- package/dist/chunk-VTVTEE5N.js.map +7 -0
- package/dist/chunk-WPTPPOYN.js +936 -0
- package/dist/chunk-WPTPPOYN.js.map +7 -0
- package/dist/chunk-XXFY63TM.js +196 -0
- package/dist/chunk-XXFY63TM.js.map +7 -0
- package/dist/chunk-Z3HMXDXP.js +654 -0
- package/dist/chunk-Z3HMXDXP.js.map +7 -0
- package/dist/chunk-ZJGXEWKF.js +138 -0
- package/dist/chunk-ZJGXEWKF.js.map +7 -0
- package/dist/cli-RFYBXM7F.js +3917 -0
- package/dist/cli-RFYBXM7F.js.map +7 -0
- package/dist/commands-YOXMODDO.js +46 -0
- package/dist/commands-YOXMODDO.js.map +7 -0
- package/dist/config-5OPX3H2K.js +81 -0
- package/dist/config-5OPX3H2K.js.map +7 -0
- package/dist/context-THRRBPFP.js +30 -0
- package/dist/context-THRRBPFP.js.map +7 -0
- package/dist/costTracker-ELNBZ2DN.js +19 -0
- package/dist/costTracker-ELNBZ2DN.js.map +7 -0
- package/dist/customCommands-4XOZH44N.js +25 -0
- package/dist/customCommands-4XOZH44N.js.map +7 -0
- package/dist/env-EL4KBHMB.js +22 -0
- package/dist/env-EL4KBHMB.js.map +7 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +7 -0
- package/dist/kodeAgentSessionId-PROTVRBR.js +13 -0
- package/dist/kodeAgentSessionId-PROTVRBR.js.map +7 -0
- package/dist/kodeAgentSessionLoad-UMPV7MC3.js +18 -0
- package/dist/kodeAgentSessionLoad-UMPV7MC3.js.map +7 -0
- package/dist/kodeAgentSessionResume-YJS4FVQM.js +16 -0
- package/dist/kodeAgentSessionResume-YJS4FVQM.js.map +7 -0
- package/dist/kodeAgentStreamJson-3T26CHCP.js +13 -0
- package/dist/kodeAgentStreamJson-3T26CHCP.js.map +7 -0
- package/dist/kodeAgentStreamJsonSession-BZS2VDCY.js +131 -0
- package/dist/kodeAgentStreamJsonSession-BZS2VDCY.js.map +7 -0
- package/dist/kodeAgentStructuredStdio-TNB6U6SP.js +10 -0
- package/dist/kodeAgentStructuredStdio-TNB6U6SP.js.map +7 -0
- package/dist/kodeHooks-VUAWIY2D.js +36 -0
- package/dist/kodeHooks-VUAWIY2D.js.map +7 -0
- package/dist/llm-A3BCM4Q2.js +3118 -0
- package/dist/llm-A3BCM4Q2.js.map +7 -0
- package/dist/llmLazy-ZJSRLZVD.js +15 -0
- package/dist/llmLazy-ZJSRLZVD.js.map +7 -0
- package/dist/loader-HZQBWO74.js +28 -0
- package/dist/loader-HZQBWO74.js.map +7 -0
- package/dist/mcp-XKOJ55B2.js +49 -0
- package/dist/mcp-XKOJ55B2.js.map +7 -0
- package/dist/mentionProcessor-ANYU5MLF.js +211 -0
- package/dist/mentionProcessor-ANYU5MLF.js.map +7 -0
- package/dist/messages-75DL5XBP.js +63 -0
- package/dist/messages-75DL5XBP.js.map +7 -0
- package/dist/model-OPJGJZRC.js +30 -0
- package/dist/model-OPJGJZRC.js.map +7 -0
- package/dist/openai-DT54BAFP.js +29 -0
- package/dist/openai-DT54BAFP.js.map +7 -0
- package/dist/outputStyles-TPFVI52O.js +28 -0
- package/dist/outputStyles-TPFVI52O.js.map +7 -0
- package/dist/package.json +4 -0
- package/dist/pluginRuntime-W74PYSZ4.js +218 -0
- package/dist/pluginRuntime-W74PYSZ4.js.map +7 -0
- package/dist/pluginValidation-FALYRVI2.js +17 -0
- package/dist/pluginValidation-FALYRVI2.js.map +7 -0
- package/dist/prompts-J4TPRMJ3.js +48 -0
- package/dist/prompts-J4TPRMJ3.js.map +7 -0
- package/dist/query-K3QKBVDN.js +50 -0
- package/dist/query-K3QKBVDN.js.map +7 -0
- package/dist/responsesStreaming-HMB74TRD.js +10 -0
- package/dist/responsesStreaming-HMB74TRD.js.map +7 -0
- package/dist/ripgrep-XJGSUBG7.js +17 -0
- package/dist/ripgrep-XJGSUBG7.js.map +7 -0
- package/dist/skillMarketplace-AUGKNCPW.js +37 -0
- package/dist/skillMarketplace-AUGKNCPW.js.map +7 -0
- package/dist/state-DQYRXKTG.js +16 -0
- package/dist/state-DQYRXKTG.js.map +7 -0
- package/dist/theme-MS5HDUBJ.js +14 -0
- package/dist/theme-MS5HDUBJ.js.map +7 -0
- package/dist/toolPermissionContext-GYD5LYFK.js +17 -0
- package/dist/toolPermissionContext-GYD5LYFK.js.map +7 -0
- package/dist/toolPermissionSettings-4MPZVYDR.js +18 -0
- package/dist/toolPermissionSettings-4MPZVYDR.js.map +7 -0
- package/dist/tools-QW6SIJLJ.js +47 -0
- package/dist/tools-QW6SIJLJ.js.map +7 -0
- package/dist/userInput-F2PGBRFU.js +311 -0
- package/dist/userInput-F2PGBRFU.js.map +7 -0
- package/dist/uuid-GYYCQ6QK.js +9 -0
- package/dist/uuid-GYYCQ6QK.js.map +7 -0
- package/dist/yoga.wasm +0 -0
- package/package.json +136 -0
- package/scripts/binary-utils.cjs +62 -0
- package/scripts/cli-acp-wrapper.cjs +82 -0
- package/scripts/cli-wrapper.cjs +105 -0
- package/scripts/postinstall.js +144 -0
- 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,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,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,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,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": ";;;;;;;;;;;;AAAA,SAAS,YAAY,cAAc,gBAAgB;AACnD,SAAS,eAAe;AACxB,SAAS,MAAM,eAAe;AAC9B,SAAS,SAAS;AAClB,SAAS,QAAQ,eAAe;AAIhC,IAAM,uBAAuB,EAC1B,OAAO;AAAA,EACN,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AACxB,CAAC,EACA,YAAY;AAEf,SAAS,WAAW,OAAuB;AACzC,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,YAAY,IAAK,QAAO,QAAQ;AACpC,MAAI,QAAQ,WAAW,IAAI,KAAK,QAAQ,WAAW,KAAK,GAAG;AACzD,WAAO,KAAK,QAAQ,GAAG,QAAQ,MAAM,CAAC,CAAC;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,aAAa,OAAwB;AAC5C,SAAO,UAAU,KAAK,KAAK;AAC7B;AAEA,eAAe,sBACb,YACA,SACmB;AACnB,QAAM,MAAgB,CAAC;AACvB,aAAW,OAAO,YAAY;AAC5B,UAAM,UAAU,OAAO,OAAO,EAAE,EAAE,KAAK;AACvC,QAAI,CAAC,QAAS;AACd,UAAM,WAAW,WAAW,OAAO;AACnC,UAAM,MAAM,QAAQ,SAAS,QAAQ;AAErC,QAAI,aAAa,OAAO,KAAK,aAAa,QAAQ,GAAG;AACnD,YAAM,gBAAgB,aAAa,UAAU,CAAC,UAAU,OAAO,IAAI,CAAC,OAAO;AAC3E,UAAI,UAAU;AACd,iBAAW,WAAW,eAAe;AACnC,YAAI;AACF,gBAAM,UAAU,MAAM,QAAQ,SAAS;AAAA,YACrC,KAAK;AAAA,YACL,UAAU;AAAA,YACV,OAAO;AAAA,YACP,QAAQ,QAAQ,aAAa;AAAA,UAC/B,CAAC;AACD,gBAAM,OAAO,QAAQ,OAAO,WAAS;AACnC,gBAAI;AACF,qBAAO,WAAW,KAAK,KAAK,SAAS,KAAK,EAAE,YAAY;AAAA,YAC1D,QAAQ;AACN,qBAAO;AAAA,YACT;AAAA,UACF,CAAC;AACD,cAAI,KAAK,SAAS,GAAG;AACnB,gBAAI,KAAK,GAAG,IAAI;AAChB,sBAAU;AACV;AAAA,UACF;AAAA,QACF,QAAQ;AAAA,QACR;AAAA,MACF;AACA,UAAI,QAAS;AAAA,IACf;AAEA,QAAI,KAAK,GAAG;AAAA,EACd;AAEA,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,SAAmB,CAAC;AAC1B,aAAW,QAAQ,KAAK;AACtB,UAAM,MAAM;AACZ,QAAI,KAAK,IAAI,GAAG,EAAG;AACnB,SAAK,IAAI,GAAG;AACZ,WAAO,KAAK,IAAI;AAAA,EAClB;AACA,SAAO;AACT;AAEA,SAAS,UAAU,MAAwB;AACzC,MAAI;AACF,QAAI,CAAC,WAAW,IAAI,EAAG,QAAO,CAAC;AAC/B,QAAI,CAAC,SAAS,IAAI,EAAE,YAAY,EAAG,QAAO,CAAC;AAC3C,WAAO,CAAC,IAAI;AAAA,EACd,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,aAAa,MAAwB;AAC5C,MAAI;AACF,QAAI,CAAC,WAAW,IAAI,EAAG,QAAO,CAAC;AAC/B,QAAI,CAAC,SAAS,IAAI,EAAE,OAAO,EAAG,QAAO,CAAC;AACtC,WAAO,CAAC,IAAI;AAAA,EACd,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,qBACP,SACA,OACqC;AACrC,QAAM,OAAiB,CAAC;AACxB,QAAM,QAAkB,CAAC;AACzB,QAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC,KAAK,IAAI,CAAC;AAC/D,aAAW,QAAQ,MAAM;AACvB,QAAI,OAAO,SAAS,SAAU;AAC9B,UAAM,MAAM,QAAQ,SAAS,IAAI;AACjC,SAAK,KAAK,GAAG,UAAU,GAAG,CAAC;AAC3B,UAAM,KAAK,GAAG,aAAa,GAAG,CAAC;AAAA,EACjC;AACA,SAAO,EAAE,MAAM,MAAM;AACvB;AAEA,SAAS,kBAAkB,SAAgC;AACzD,QAAM,sBAAsB,KAAK,SAAS,gBAAgB,aAAa;AACvE,QAAM,qBAAqB,KAAK,SAAS,kBAAkB,aAAa;AACxE,QAAM,eAAe,WAAW,mBAAmB,IAC/C,sBACA;AACJ,MAAI,CAAC,WAAW,YAAY,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,kBAAc,aAAa,cAAc,MAAM;AAAA,EACjD,SAAS,KAAK;AACZ,UAAM,IAAI,MAAM,kBAAkB,YAAY,KAAK,OAAO,GAAG,CAAC,EAAE;AAAA,EAClE;AAEA,MAAI;AACJ,MAAI;AACF,mBAAe,KAAK,MAAM,WAAW;AAAA,EACvC,SAAS,KAAK;AACZ,UAAM,IAAI,MAAM,mBAAmB,YAAY,KAAK,OAAO,GAAG,CAAC,EAAE;AAAA,EACnE;AAEA,QAAM,SAAS,qBAAqB,UAAU,YAAY;AAC1D,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI;AAAA,MACR,qCAAqC,YAAY,KAAK,OAAO,MAAM,OAAO;AAAA,IAC5E;AAAA,EACF;AAEA,QAAM,OAAO,OAAO,KAAK;AACzB,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACC,OAAO,KAAa;AAAA,EACvB;AACA,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACC,OAAO,KAAa;AAAA,EACvB;AACA,QAAM,eAAe;AAAA,IACnB,GAAG,UAAU,KAAK,SAAS,UAAU,CAAC;AAAA,IACtC,GAAG,iBAAiB;AAAA,IACpB,GAAG,iBAAiB;AAAA,EACtB;AACA,QAAM,aAAa;AAAA,IACjB,GAAG,UAAU,KAAK,SAAS,QAAQ,CAAC;AAAA,IACpC,GAAG,qBAAqB,SAAU,OAAO,KAAa,MAAM,EAAE;AAAA,EAChE;AACA,QAAM,aAAa;AAAA,IACjB,GAAG,UAAU,KAAK,SAAS,QAAQ,CAAC;AAAA,IACpC,GAAG,eAAe;AAAA,IAClB,GAAG,eAAe;AAAA,EACpB;AACA,QAAM,uBAAuB;AAAA,IAC3B;AAAA,IACC,OAAO,KAAa;AAAA,EACvB;AACA,QAAM,mBAAmB;AAAA,IACvB,GAAG,UAAU,KAAK,SAAS,eAAe,CAAC;AAAA,IAC3C,GAAG,qBAAqB;AAAA,IACxB,GAAG,qBAAqB;AAAA,EAC1B;AAEA,QAAM,eAAe,aAAa,KAAK,SAAS,SAAS,YAAY,CAAC;AACtE,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACC,OAAO,KAAa;AAAA,EACvB,EAAE;AACF,QAAM,aAAa,CAAC,GAAG,cAAc,GAAG,gBAAgB;AAExD,QAAM,iBAAiB;AAAA,IACrB,GAAG,aAAa,KAAK,SAAS,WAAW,CAAC;AAAA,IAC1C,GAAG,aAAa,KAAK,SAAS,YAAY,CAAC;AAAA,IAC3C,GAAG,qBAAqB,SAAU,OAAO,KAAa,UAAU,EAAE;AAAA,EACpE;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,OAAO;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,wBAAwB,MAGc;AAC1D,QAAM,UAAU,KAAK,WAAW,OAAO;AACvC,QAAM,OAAO,MAAM,sBAAsB,KAAK,cAAc,CAAC,GAAG,OAAO;AAEvE,QAAM,UAA2B,CAAC;AAClC,QAAM,SAAmB,CAAC;AAE1B,aAAW,OAAO,MAAM;AACtB,QAAI;AACF,cAAQ,KAAK,kBAAkB,GAAG,CAAC;AAAA,IACrC,SAAS,KAAK;AACZ,aAAO,KAAK,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAC9D;AAAA,EACF;AAEA,oBAAkB,OAAO;AAEzB,QAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,8BAA0B;AACxE,uBAAqB;AACrB,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,wBAAW;AAChD,cAAY,MAAM,QAAQ;AAE1B,QAAM,EAAE,YAAY,YAAY,IAAI,MAAM,OAAO,mBAAqB;AACrE,EAAC,WAAmB,OAAO,QAAQ;AACnC,EAAC,YAAoB,OAAO,QAAQ;AAErC,QAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,4BAAwB;AACvE,wBAAsB;AAEtB,SAAO,EAAE,SAAS,OAAO;AAC3B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|