oricore 1.5.0 → 1.5.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.
- package/dist/{chunk-DO76AL42.js → chunk-D5X6YFSK.js} +2 -1
- package/dist/{chunk-4QYFQSAC.js → chunk-E7TB3WLC.js} +321 -88
- package/dist/chunk-E7TB3WLC.js.map +1 -0
- package/dist/{chunk-OYWDQD3F.js → chunk-P4RPHQOE.js} +2 -2
- package/dist/history-WTZON3PI.js +8 -0
- package/dist/index.cjs +609 -102
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +240 -4
- package/dist/index.d.ts +240 -4
- package/dist/index.js +282 -10
- package/dist/index.js.map +1 -1
- package/dist/{session-QMS6OYG2.js → session-Z2XIKFVN.js} +4 -4
- package/dist/undici-NSB7IUB7.js +5 -0
- package/package.json +2 -1
- package/src/core/model/models.ts +149 -0
- package/src/core/model/providers.ts +31 -0
- package/src/index.ts +12 -0
- package/src/skill/bundled.ts +225 -0
- package/src/skill/skill.ts +260 -4
- package/src/tools/tool.ts +14 -4
- package/src/tools/tools/skill.ts +86 -8
- package/dist/chunk-4QYFQSAC.js.map +0 -1
- package/dist/history-AGNMX5YW.js +0 -8
- package/dist/undici-326ZBRKH.js +0 -5
- /package/dist/{chunk-DO76AL42.js.map → chunk-D5X6YFSK.js.map} +0 -0
- /package/dist/{chunk-OYWDQD3F.js.map → chunk-P4RPHQOE.js.map} +0 -0
- /package/dist/{history-AGNMX5YW.js.map → history-WTZON3PI.js.map} +0 -0
- /package/dist/{session-QMS6OYG2.js.map → session-Z2XIKFVN.js.map} +0 -0
- /package/dist/{undici-326ZBRKH.js.map → undici-NSB7IUB7.js.map} +0 -0
|
@@ -3,13 +3,13 @@ import {
|
|
|
3
3
|
SessionConfigManager,
|
|
4
4
|
filterMessages,
|
|
5
5
|
loadSessionMessages
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-P4RPHQOE.js";
|
|
7
|
+
import "./chunk-E7TB3WLC.js";
|
|
8
|
+
import "./chunk-D5X6YFSK.js";
|
|
9
9
|
export {
|
|
10
10
|
Session,
|
|
11
11
|
SessionConfigManager,
|
|
12
12
|
filterMessages,
|
|
13
13
|
loadSessionMessages
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=session-
|
|
15
|
+
//# sourceMappingURL=session-Z2XIKFVN.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oricore",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.2",
|
|
4
4
|
"description": "OriCore - A powerful AI engine with multi-modal support, tool calling, and extensible architecture",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -73,6 +73,7 @@
|
|
|
73
73
|
"gpt-tokenizer": "^3.4.0",
|
|
74
74
|
"jiti": "^2.6.1",
|
|
75
75
|
"jsonrepair": "^3.10.0",
|
|
76
|
+
"minimatch": "^10.0.1",
|
|
76
77
|
"pathe": "^2.0.3",
|
|
77
78
|
"pdf-parse": "^2.4.5",
|
|
78
79
|
"resolve": "^1.22.11",
|
package/src/core/model/models.ts
CHANGED
|
@@ -1106,4 +1106,153 @@ export const models: ModelMap = {
|
|
|
1106
1106
|
open_weights: true,
|
|
1107
1107
|
limit: { context: 204800, output: 131072 },
|
|
1108
1108
|
},
|
|
1109
|
+
'gemini-3.1-flash-lite': {
|
|
1110
|
+
name: 'Gemini 3.1 Flash Lite',
|
|
1111
|
+
attachment: true,
|
|
1112
|
+
reasoning: true,
|
|
1113
|
+
temperature: true,
|
|
1114
|
+
tool_call: true,
|
|
1115
|
+
knowledge: '2025-01',
|
|
1116
|
+
release_date: '2026-03-03',
|
|
1117
|
+
last_updated: '2026-03-03',
|
|
1118
|
+
modalities: {
|
|
1119
|
+
input: ['text', 'image', 'audio', 'video', 'pdf'],
|
|
1120
|
+
output: ['text'],
|
|
1121
|
+
},
|
|
1122
|
+
open_weights: false,
|
|
1123
|
+
limit: { context: 1048576, output: 64000 },
|
|
1124
|
+
},
|
|
1125
|
+
'gemini-3.1-flash-live': {
|
|
1126
|
+
name: 'Gemini 3.1 Flash Live',
|
|
1127
|
+
attachment: true,
|
|
1128
|
+
reasoning: true,
|
|
1129
|
+
temperature: true,
|
|
1130
|
+
tool_call: true,
|
|
1131
|
+
knowledge: '2025-01',
|
|
1132
|
+
release_date: '2026-03-15',
|
|
1133
|
+
last_updated: '2026-03-15',
|
|
1134
|
+
modalities: {
|
|
1135
|
+
input: ['text', 'image', 'audio', 'video'],
|
|
1136
|
+
output: ['text', 'audio'],
|
|
1137
|
+
},
|
|
1138
|
+
open_weights: false,
|
|
1139
|
+
limit: { context: 131072, output: 64000 },
|
|
1140
|
+
},
|
|
1141
|
+
'glm-5.1': {
|
|
1142
|
+
name: 'GLM-5.1',
|
|
1143
|
+
attachment: false,
|
|
1144
|
+
reasoning: true,
|
|
1145
|
+
temperature: true,
|
|
1146
|
+
tool_call: true,
|
|
1147
|
+
knowledge: '2025-04',
|
|
1148
|
+
release_date: '2026-03-27',
|
|
1149
|
+
last_updated: '2026-03-27',
|
|
1150
|
+
modalities: { input: ['text'], output: ['text'] },
|
|
1151
|
+
open_weights: true,
|
|
1152
|
+
limit: { context: 204800, output: 131072 },
|
|
1153
|
+
},
|
|
1154
|
+
'qwen3.6-plus': {
|
|
1155
|
+
name: 'Qwen3.6 Plus',
|
|
1156
|
+
attachment: true,
|
|
1157
|
+
reasoning: true,
|
|
1158
|
+
temperature: true,
|
|
1159
|
+
tool_call: true,
|
|
1160
|
+
knowledge: '2025-04',
|
|
1161
|
+
release_date: '2026-03-31',
|
|
1162
|
+
last_updated: '2026-03-31',
|
|
1163
|
+
modalities: { input: ['text', 'image', 'video'], output: ['text'] },
|
|
1164
|
+
open_weights: false,
|
|
1165
|
+
limit: { context: 1048576, output: 65536 },
|
|
1166
|
+
},
|
|
1167
|
+
'kimi-k2.6': {
|
|
1168
|
+
name: 'Kimi K2.6',
|
|
1169
|
+
attachment: true,
|
|
1170
|
+
reasoning: true,
|
|
1171
|
+
temperature: true,
|
|
1172
|
+
tool_call: true,
|
|
1173
|
+
knowledge: '2025-04',
|
|
1174
|
+
release_date: '2026-04-21',
|
|
1175
|
+
last_updated: '2026-04-21',
|
|
1176
|
+
modalities: { input: ['text', 'image', 'video'], output: ['text'] },
|
|
1177
|
+
open_weights: true,
|
|
1178
|
+
limit: { context: 262144, output: 98304 },
|
|
1179
|
+
},
|
|
1180
|
+
'deepseek-v4-pro': {
|
|
1181
|
+
name: 'DeepSeek V4 Pro',
|
|
1182
|
+
attachment: false,
|
|
1183
|
+
reasoning: true,
|
|
1184
|
+
temperature: true,
|
|
1185
|
+
tool_call: true,
|
|
1186
|
+
knowledge: '2025-04',
|
|
1187
|
+
release_date: '2026-04-24',
|
|
1188
|
+
last_updated: '2026-04-24',
|
|
1189
|
+
modalities: { input: ['text'], output: ['text'] },
|
|
1190
|
+
open_weights: true,
|
|
1191
|
+
limit: { context: 1048576, output: 384000 },
|
|
1192
|
+
},
|
|
1193
|
+
'deepseek-v4-flash': {
|
|
1194
|
+
name: 'DeepSeek V4 Flash',
|
|
1195
|
+
attachment: false,
|
|
1196
|
+
reasoning: true,
|
|
1197
|
+
temperature: true,
|
|
1198
|
+
tool_call: true,
|
|
1199
|
+
knowledge: '2025-04',
|
|
1200
|
+
release_date: '2026-04-24',
|
|
1201
|
+
last_updated: '2026-04-24',
|
|
1202
|
+
modalities: { input: ['text'], output: ['text'] },
|
|
1203
|
+
open_weights: true,
|
|
1204
|
+
limit: { context: 1048576, output: 384000 },
|
|
1205
|
+
},
|
|
1206
|
+
'gpt-5.5': {
|
|
1207
|
+
name: 'GPT-5.5',
|
|
1208
|
+
attachment: true,
|
|
1209
|
+
reasoning: true,
|
|
1210
|
+
temperature: false,
|
|
1211
|
+
tool_call: true,
|
|
1212
|
+
knowledge: '2025-04',
|
|
1213
|
+
release_date: '2026-04-23',
|
|
1214
|
+
last_updated: '2026-04-23',
|
|
1215
|
+
modalities: { input: ['text', 'image', 'audio', 'video'], output: ['text'] },
|
|
1216
|
+
open_weights: false,
|
|
1217
|
+
limit: { context: 1048576, output: 128000 },
|
|
1218
|
+
},
|
|
1219
|
+
'seed3d-2.0': {
|
|
1220
|
+
name: 'Seed3D 2.0',
|
|
1221
|
+
attachment: true,
|
|
1222
|
+
reasoning: false,
|
|
1223
|
+
temperature: true,
|
|
1224
|
+
tool_call: false,
|
|
1225
|
+
knowledge: '2025-04',
|
|
1226
|
+
release_date: '2026-04-23',
|
|
1227
|
+
last_updated: '2026-04-23',
|
|
1228
|
+
modalities: { input: ['text', 'image'], output: ['text', 'image'] },
|
|
1229
|
+
open_weights: false,
|
|
1230
|
+
limit: { context: 32000, output: 32000 },
|
|
1231
|
+
},
|
|
1232
|
+
'mimo-v2.5-pro': {
|
|
1233
|
+
name: 'MiMo V2.5 Pro',
|
|
1234
|
+
attachment: false,
|
|
1235
|
+
reasoning: true,
|
|
1236
|
+
temperature: true,
|
|
1237
|
+
tool_call: true,
|
|
1238
|
+
knowledge: '2025-04',
|
|
1239
|
+
release_date: '2026-04-23',
|
|
1240
|
+
last_updated: '2026-04-23',
|
|
1241
|
+
modalities: { input: ['text'], output: ['text'] },
|
|
1242
|
+
open_weights: true,
|
|
1243
|
+
limit: { context: 1048576, output: 65536 },
|
|
1244
|
+
},
|
|
1245
|
+
'mimo-v2.5': {
|
|
1246
|
+
name: 'MiMo V2.5',
|
|
1247
|
+
attachment: true,
|
|
1248
|
+
reasoning: true,
|
|
1249
|
+
temperature: true,
|
|
1250
|
+
tool_call: true,
|
|
1251
|
+
knowledge: '2025-04',
|
|
1252
|
+
release_date: '2026-04-23',
|
|
1253
|
+
last_updated: '2026-04-23',
|
|
1254
|
+
modalities: { input: ['text', 'image', 'video', 'audio'], output: ['text'] },
|
|
1255
|
+
open_weights: true,
|
|
1256
|
+
limit: { context: 1048576, output: 65536 },
|
|
1257
|
+
},
|
|
1109
1258
|
};
|
|
@@ -147,6 +147,7 @@ export const providers: ProvidersMap = {
|
|
|
147
147
|
'gpt-5.2-pro': models['gpt-5.2-pro'],
|
|
148
148
|
'gpt-5.2-codex': models['gpt-5.2-codex'],
|
|
149
149
|
'gpt-5.3-codex': models['gpt-5.3-codex'],
|
|
150
|
+
'gpt-5.5': models['gpt-5.5'],
|
|
150
151
|
},
|
|
151
152
|
createModel: openaiModelCreator,
|
|
152
153
|
},
|
|
@@ -165,6 +166,8 @@ export const providers: ProvidersMap = {
|
|
|
165
166
|
'gemini-2.5-pro': models['gemini-2.5-pro'],
|
|
166
167
|
'gemini-3-pro-preview': models['gemini-3-pro-preview'],
|
|
167
168
|
'gemini-3.1-pro-preview': models['gemini-3.1-pro-preview'],
|
|
169
|
+
'gemini-3.1-flash-lite': models['gemini-3.1-flash-lite'],
|
|
170
|
+
'gemini-3.1-flash-live': models['gemini-3.1-flash-live'],
|
|
168
171
|
'gemini-3-flash-preview': models['gemini-3-flash-preview'],
|
|
169
172
|
},
|
|
170
173
|
createModel(name, provider) {
|
|
@@ -331,14 +334,19 @@ export const providers: ProvidersMap = {
|
|
|
331
334
|
'openai/gpt-5.2-pro': models['gpt-5.2-pro'],
|
|
332
335
|
'openai/gpt-5.2-codex': models['gpt-5.2-codex'],
|
|
333
336
|
'openai/gpt-5.3-codex': models['gpt-5.3-codex'],
|
|
337
|
+
'openai/gpt-5.5': models['gpt-5.5'],
|
|
334
338
|
'google/gemini-3-flash-preview': models['gemini-3-flash-preview'],
|
|
335
339
|
'google/gemini-3-pro-preview': models['gemini-3-pro-preview'],
|
|
340
|
+
'google/gemini-3.1-flash-lite': models['gemini-3.1-flash-lite'],
|
|
341
|
+
'google/gemini-3.1-flash-live': models['gemini-3.1-flash-live'],
|
|
336
342
|
'moonshotai/kimi-k2': models['kimi-k2'],
|
|
337
343
|
'moonshotai/kimi-k2-0905': models['kimi-k2-0905'],
|
|
338
344
|
'moonshotai/kimi-k2-thinking': models['kimi-k2-thinking'],
|
|
339
345
|
'moonshotai/kimi-k2.5': models['kimi-k2.5'],
|
|
346
|
+
'moonshotai/kimi-k2.6': models['kimi-k2.6'],
|
|
340
347
|
'qwen/qwen3-coder': models['qwen3-coder-480b-a35b-instruct'],
|
|
341
348
|
'qwen/qwen3-max': models['qwen3-max'],
|
|
349
|
+
'qwen/qwen3.6-plus': models['qwen3.6-plus'],
|
|
342
350
|
'x-ai/grok-code-fast-1': models['grok-code-fast-1'],
|
|
343
351
|
'x-ai/grok-4': models['grok-4'],
|
|
344
352
|
'x-ai/grok-4-fast': models['grok-4-fast'],
|
|
@@ -382,6 +390,7 @@ export const providers: ProvidersMap = {
|
|
|
382
390
|
'kimi-k2-thinking': models['kimi-k2-thinking'],
|
|
383
391
|
'kimi-k2-thinking-turbo': models['kimi-k2-thinking-turbo'],
|
|
384
392
|
'kimi-k2.5': models['kimi-k2.5'],
|
|
393
|
+
'kimi-k2.6': models['kimi-k2.6'],
|
|
385
394
|
},
|
|
386
395
|
createModel: defaultModelCreator,
|
|
387
396
|
},
|
|
@@ -398,6 +407,7 @@ export const providers: ProvidersMap = {
|
|
|
398
407
|
'kimi-k2-thinking': models['kimi-k2-thinking'],
|
|
399
408
|
'kimi-k2-thinking-turbo': models['kimi-k2-thinking-turbo'],
|
|
400
409
|
'kimi-k2.5': models['kimi-k2.5'],
|
|
410
|
+
'kimi-k2.6': models['kimi-k2.6'],
|
|
401
411
|
},
|
|
402
412
|
createModel: defaultModelCreator,
|
|
403
413
|
},
|
|
@@ -449,10 +459,15 @@ export const providers: ProvidersMap = {
|
|
|
449
459
|
'deepseek-ai/DeepSeek-V3': models['deepseek-v3-0324'],
|
|
450
460
|
'zai-org/GLM-4.5': models['glm-4.5'],
|
|
451
461
|
'Pro/moonshotai/Kimi-K2.5': models['kimi-k2-5'],
|
|
462
|
+
'Pro/moonshotai/Kimi-K2.6': models['kimi-k2.6'],
|
|
452
463
|
'Pro/zai-org/GLM-5': models['glm-5'],
|
|
464
|
+
'Pro/zai-org/GLM-5.1': models['glm-5.1'],
|
|
453
465
|
'Pro/zai-org/GLM-4.7': models['glm-4.7'],
|
|
454
466
|
'Pro/MiniMaxAI/MiniMax-M2.5': models['minimax-m2.5'],
|
|
455
467
|
'Pro/deepseek-ai/DeepSeek-V3.2': models['deepseek-v3.2'],
|
|
468
|
+
'Pro/deepseek-ai/DeepSeek-V4-Pro': models['deepseek-v4-pro'],
|
|
469
|
+
'Pro/deepseek-ai/DeepSeek-V4-Flash': models['deepseek-v4-flash'],
|
|
470
|
+
'Pro/Qwen/Qwen3.6-Plus': models['qwen3.6-plus'],
|
|
456
471
|
},
|
|
457
472
|
createModel: defaultModelCreator,
|
|
458
473
|
},
|
|
@@ -471,8 +486,11 @@ export const providers: ProvidersMap = {
|
|
|
471
486
|
'ZhipuAI/GLM-4.5V': models['glm-4.5v'],
|
|
472
487
|
'ZhipuAI/GLM-4.6': models['glm-4.6'],
|
|
473
488
|
'ZhipuAI/GLM-5': models['glm-5'],
|
|
489
|
+
'ZhipuAI/GLM-5.1': models['glm-5.1'],
|
|
474
490
|
'deepseek-ai/DeepSeek-V3.2': models['deepseek-v3.2'],
|
|
475
491
|
'deepseek-ai/DeepSeek-V3.2-Speciale': models['deepseek-v3.2-speciale'],
|
|
492
|
+
'deepseek-ai/DeepSeek-V4-Pro': models['deepseek-v4-pro'],
|
|
493
|
+
'deepseek-ai/DeepSeek-V4-Flash': models['deepseek-v4-flash'],
|
|
476
494
|
},
|
|
477
495
|
createModel: defaultModelCreator,
|
|
478
496
|
},
|
|
@@ -488,6 +506,7 @@ export const providers: ProvidersMap = {
|
|
|
488
506
|
'deepseek-v3-1-terminus': models['deepseek-v3-1-terminus'],
|
|
489
507
|
'doubao-seed-1-6-250615': models['doubao-seed-1.6'],
|
|
490
508
|
'kimi-k2-250905': models['kimi-k2-0905'],
|
|
509
|
+
'seed3d-2.0': models['seed3d-2.0'],
|
|
491
510
|
},
|
|
492
511
|
createModel: defaultModelCreator,
|
|
493
512
|
},
|
|
@@ -507,6 +526,7 @@ export const providers: ProvidersMap = {
|
|
|
507
526
|
'glm-4.6v': models['glm-4.6v'],
|
|
508
527
|
'glm-4.7': models['glm-4.7'],
|
|
509
528
|
'glm-5': models['glm-5'],
|
|
529
|
+
'glm-5.1': models['glm-5.1'],
|
|
510
530
|
},
|
|
511
531
|
createModel: defaultModelCreator,
|
|
512
532
|
},
|
|
@@ -526,6 +546,7 @@ export const providers: ProvidersMap = {
|
|
|
526
546
|
'glm-4.6v': models['glm-4.6v'],
|
|
527
547
|
'glm-4.7': models['glm-4.7'],
|
|
528
548
|
'glm-5': models['glm-5'],
|
|
549
|
+
'glm-5.1': models['glm-5.1'],
|
|
529
550
|
},
|
|
530
551
|
createModel: defaultModelCreator,
|
|
531
552
|
},
|
|
@@ -565,6 +586,7 @@ export const providers: ProvidersMap = {
|
|
|
565
586
|
'glm-4.6v': models['glm-4.6v'],
|
|
566
587
|
'glm-4.7': models['glm-4.7'],
|
|
567
588
|
'glm-5': models['glm-5'],
|
|
589
|
+
'glm-5.1': models['glm-5.1'],
|
|
568
590
|
},
|
|
569
591
|
createModel: defaultModelCreator,
|
|
570
592
|
},
|
|
@@ -600,9 +622,12 @@ export const providers: ProvidersMap = {
|
|
|
600
622
|
'z-ai/glm-4.6v-flash': models['glm-4.6v'],
|
|
601
623
|
'z-ai/glm-4.7': models['glm-4.7'],
|
|
602
624
|
'z-ai/glm-5': models['glm-5'],
|
|
625
|
+
'z-ai/glm-5.1': models['glm-5.1'],
|
|
603
626
|
'deepseek/deepseek-v3.2-speciale': models['deepseek-v3.2-speciale'],
|
|
604
627
|
'deepseek/deepseek-chat': models['deepseek-v3-2-exp'],
|
|
605
628
|
'deepseek/deepseek-reasoner': models['deepseek-r1-0528'],
|
|
629
|
+
'deepseek/deepseek-v4-pro': models['deepseek-v4-pro'],
|
|
630
|
+
'deepseek/deepseek-v4-flash': models['deepseek-v4-flash'],
|
|
606
631
|
'minimax/minimax-m2.5': models['minimax-m2.5'],
|
|
607
632
|
},
|
|
608
633
|
headers: {
|
|
@@ -661,6 +686,8 @@ export const providers: ProvidersMap = {
|
|
|
661
686
|
doc: 'https://platform.xiaomimimo.com/',
|
|
662
687
|
models: {
|
|
663
688
|
'mimo-v2-flash': models['mimo-v2-flash'],
|
|
689
|
+
'mimo-v2.5': models['mimo-v2.5'],
|
|
690
|
+
'mimo-v2.5-pro': models['mimo-v2.5-pro'],
|
|
664
691
|
},
|
|
665
692
|
createModel: createModelCreatorCompatible({}),
|
|
666
693
|
},
|
|
@@ -776,6 +803,8 @@ export const providers: ProvidersMap = {
|
|
|
776
803
|
'deepseek/deepseek-chat-v3.2': models['deepseek-v3-2-exp'],
|
|
777
804
|
'openai/gpt-oss-120b': models['gpt-oss-120b'],
|
|
778
805
|
'xiaomimimo/mimo-v2-flash': models['mimo-v2-flash'],
|
|
806
|
+
'xiaomimimo/mimo-v2.5': models['mimo-v2.5'],
|
|
807
|
+
'xiaomimimo/mimo-v2.5-pro': models['mimo-v2.5-pro'],
|
|
779
808
|
},
|
|
780
809
|
createModel: defaultModelCreator,
|
|
781
810
|
},
|
|
@@ -804,6 +833,7 @@ export const providers: ProvidersMap = {
|
|
|
804
833
|
'gpt-5.2': models['gpt-5.2'],
|
|
805
834
|
'gpt-5.2-codex': models['gpt-5.2-codex'],
|
|
806
835
|
'gpt-5.3-codex': models['gpt-5.3-codex'],
|
|
836
|
+
'gpt-5.5': models['gpt-5.5'],
|
|
807
837
|
},
|
|
808
838
|
createModel: (name, provider) => {
|
|
809
839
|
if (name.startsWith('claude-') || name.startsWith('gemini-')) {
|
|
@@ -836,6 +866,7 @@ export const providers: ProvidersMap = {
|
|
|
836
866
|
'minimax/minimax-m2.5:free': models['minimax-m2.5'],
|
|
837
867
|
'minimax/minimax-m2.5': models['minimax-m2.5'],
|
|
838
868
|
'moonshotai/kimi-k2.5': models['kimi-k2-5'],
|
|
869
|
+
'moonshotai/kimi-k2.6': models['kimi-k2.6'],
|
|
839
870
|
},
|
|
840
871
|
createModel: (name, provider) => {
|
|
841
872
|
if (name.includes('claude-')) {
|
package/src/index.ts
CHANGED
|
@@ -56,9 +56,21 @@ export type {
|
|
|
56
56
|
SkillPreview,
|
|
57
57
|
PreviewSkillsResult,
|
|
58
58
|
AddSkillResult,
|
|
59
|
+
SkillContext,
|
|
59
60
|
} from './skill/skill';
|
|
60
61
|
export { SkillSource } from './skill/skill';
|
|
61
62
|
|
|
63
|
+
// Bundled skills
|
|
64
|
+
export {
|
|
65
|
+
bundledSkillRegistry,
|
|
66
|
+
registerBundledSkill,
|
|
67
|
+
createBundledSkill,
|
|
68
|
+
bundledSkillToMetadata,
|
|
69
|
+
} from './skill/bundled';
|
|
70
|
+
export type {
|
|
71
|
+
BundledSkillDefinition,
|
|
72
|
+
} from './skill/bundled';
|
|
73
|
+
|
|
62
74
|
// Loop result type (for sendMessage return value)
|
|
63
75
|
export type { LoopResult } from './core/loop';
|
|
64
76
|
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import type { Context } from '../core/context';
|
|
2
|
+
import type { SkillMetadata, SkillSource } from './skill';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Bundled skill definition for TypeScript-encoded skills.
|
|
6
|
+
* This allows skills to be defined programmatically with dynamic behavior.
|
|
7
|
+
*/
|
|
8
|
+
export interface BundledSkillDefinition {
|
|
9
|
+
/** Unique skill name */
|
|
10
|
+
name: string;
|
|
11
|
+
/** Skill description */
|
|
12
|
+
description: string;
|
|
13
|
+
/**
|
|
14
|
+
* Tools that this skill is allowed to use.
|
|
15
|
+
* If specified, only these tools will be available when the skill executes.
|
|
16
|
+
*/
|
|
17
|
+
allowedTools?: string[];
|
|
18
|
+
/**
|
|
19
|
+
* Execution context for the skill.
|
|
20
|
+
* - 'inline': Skill content is injected into current conversation (default)
|
|
21
|
+
* - 'fork': Skill runs in an isolated sub-agent
|
|
22
|
+
*/
|
|
23
|
+
context?: 'inline' | 'fork';
|
|
24
|
+
/**
|
|
25
|
+
* Agent type to use when context is 'fork'.
|
|
26
|
+
* If not specified, defaults to 'general-purpose'.
|
|
27
|
+
*/
|
|
28
|
+
agent?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Whether this skill can be invoked by users via slash commands.
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
33
|
+
userInvocable?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Whether this skill can be invoked by the model via SkillTool.
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
modelInvocable?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Aliases for the skill name.
|
|
41
|
+
* Allows the skill to be invoked by alternative names.
|
|
42
|
+
*/
|
|
43
|
+
aliases?: string[];
|
|
44
|
+
/**
|
|
45
|
+
* When to use this skill.
|
|
46
|
+
* Provides guidance to the model about when to invoke this skill.
|
|
47
|
+
*/
|
|
48
|
+
whenToUse?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Hint for arguments that can be passed to the skill.
|
|
51
|
+
* Example: '[file_path] [issue_description]'
|
|
52
|
+
*/
|
|
53
|
+
argumentHint?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Function to determine if this skill is enabled in the current context.
|
|
56
|
+
* Can be a boolean or a function that receives the context.
|
|
57
|
+
*/
|
|
58
|
+
isEnabled?: boolean | ((context: Context) => boolean);
|
|
59
|
+
/**
|
|
60
|
+
* Embedded reference files that will be extracted when the skill runs.
|
|
61
|
+
* Key is the filename, value is the file content.
|
|
62
|
+
*/
|
|
63
|
+
files?: Record<string, string>;
|
|
64
|
+
/**
|
|
65
|
+
* Generate the skill prompt content.
|
|
66
|
+
* This function is called when the skill is invoked.
|
|
67
|
+
* @param args Arguments passed to the skill
|
|
68
|
+
* @param context The execution context
|
|
69
|
+
* @returns Promise resolving to the skill prompt content
|
|
70
|
+
*/
|
|
71
|
+
getPrompt: (args: string, context: Context) => Promise<string> | string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Registry for bundled skills.
|
|
76
|
+
* Skills registered here are built into the engine binary.
|
|
77
|
+
*/
|
|
78
|
+
class BundledSkillRegistry {
|
|
79
|
+
private skills: Map<string, BundledSkillDefinition> = new Map();
|
|
80
|
+
private aliases: Map<string, string> = new Map();
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Register a bundled skill.
|
|
84
|
+
* @param definition The skill definition
|
|
85
|
+
*/
|
|
86
|
+
register(definition: BundledSkillDefinition): void {
|
|
87
|
+
if (!definition.name) {
|
|
88
|
+
throw new Error('Bundled skill must have a name');
|
|
89
|
+
}
|
|
90
|
+
if (!definition.description) {
|
|
91
|
+
throw new Error('Bundled skill must have a description');
|
|
92
|
+
}
|
|
93
|
+
if (!definition.getPrompt) {
|
|
94
|
+
throw new Error('Bundled skill must have a getPrompt function');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
this.skills.set(definition.name, definition);
|
|
98
|
+
|
|
99
|
+
// Register aliases
|
|
100
|
+
if (definition.aliases) {
|
|
101
|
+
for (const alias of definition.aliases) {
|
|
102
|
+
this.aliases.set(alias, definition.name);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Get a bundled skill by name or alias.
|
|
109
|
+
* @param name Skill name or alias
|
|
110
|
+
* @returns The skill definition or undefined if not found
|
|
111
|
+
*/
|
|
112
|
+
get(name: string): BundledSkillDefinition | undefined {
|
|
113
|
+
// Check direct name first
|
|
114
|
+
const skill = this.skills.get(name);
|
|
115
|
+
if (skill) return skill;
|
|
116
|
+
|
|
117
|
+
// Check aliases
|
|
118
|
+
const aliasedName = this.aliases.get(name);
|
|
119
|
+
if (aliasedName) {
|
|
120
|
+
return this.skills.get(aliasedName);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Get all registered bundled skills.
|
|
128
|
+
* @param context Optional context to filter by isEnabled
|
|
129
|
+
* @returns Array of skill definitions
|
|
130
|
+
*/
|
|
131
|
+
getAll(context?: Context): BundledSkillDefinition[] {
|
|
132
|
+
return Array.from(this.skills.values()).filter((skill) => {
|
|
133
|
+
if (skill.isEnabled === undefined) return true;
|
|
134
|
+
if (typeof skill.isEnabled === 'boolean') return skill.isEnabled;
|
|
135
|
+
if (typeof skill.isEnabled === 'function' && context) {
|
|
136
|
+
return skill.isEnabled(context);
|
|
137
|
+
}
|
|
138
|
+
return true;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Check if a skill is registered.
|
|
144
|
+
* @param name Skill name or alias
|
|
145
|
+
*/
|
|
146
|
+
has(name: string): boolean {
|
|
147
|
+
return this.skills.has(name) || this.aliases.has(name);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Unregister a skill.
|
|
152
|
+
* @param name Skill name
|
|
153
|
+
*/
|
|
154
|
+
unregister(name: string): void {
|
|
155
|
+
const skill = this.skills.get(name);
|
|
156
|
+
if (skill && skill.aliases) {
|
|
157
|
+
for (const alias of skill.aliases) {
|
|
158
|
+
this.aliases.delete(alias);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
this.skills.delete(name);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Clear all registered skills.
|
|
166
|
+
*/
|
|
167
|
+
clear(): void {
|
|
168
|
+
this.skills.clear();
|
|
169
|
+
this.aliases.clear();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Global registry instance
|
|
174
|
+
export const bundledSkillRegistry = new BundledSkillRegistry();
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Convert a bundled skill definition to SkillMetadata format.
|
|
178
|
+
* This is used internally when loading bundled skills into the SkillManager.
|
|
179
|
+
*/
|
|
180
|
+
export function bundledSkillToMetadata(
|
|
181
|
+
definition: BundledSkillDefinition,
|
|
182
|
+
source: SkillSource = 'builtin' as SkillSource,
|
|
183
|
+
): SkillMetadata {
|
|
184
|
+
return {
|
|
185
|
+
name: definition.name,
|
|
186
|
+
description: definition.description,
|
|
187
|
+
path: `bundled://${definition.name}`,
|
|
188
|
+
source,
|
|
189
|
+
allowedTools: definition.allowedTools,
|
|
190
|
+
context: definition.context,
|
|
191
|
+
agent: definition.agent,
|
|
192
|
+
userInvocable: definition.userInvocable ?? true,
|
|
193
|
+
modelInvocable: definition.modelInvocable ?? true,
|
|
194
|
+
// Note: bundled skills don't support 'paths' conditional activation
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Helper function to create a simple bundled skill.
|
|
200
|
+
*/
|
|
201
|
+
export function createBundledSkill(
|
|
202
|
+
config: Omit<BundledSkillDefinition, 'getPrompt'> & {
|
|
203
|
+
prompt: string | ((args: string, context: Context) => Promise<string> | string);
|
|
204
|
+
},
|
|
205
|
+
): BundledSkillDefinition {
|
|
206
|
+
return {
|
|
207
|
+
...config,
|
|
208
|
+
getPrompt:
|
|
209
|
+
typeof config.prompt === 'string'
|
|
210
|
+
? () => config.prompt as string
|
|
211
|
+
: config.prompt,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Register a bundled skill using a simplified configuration.
|
|
217
|
+
*/
|
|
218
|
+
export function registerBundledSkill(
|
|
219
|
+
config: Omit<BundledSkillDefinition, 'getPrompt'> & {
|
|
220
|
+
prompt: string | ((args: string, context: Context) => Promise<string> | string);
|
|
221
|
+
},
|
|
222
|
+
): void {
|
|
223
|
+
const skill = createBundledSkill(config);
|
|
224
|
+
bundledSkillRegistry.register(skill);
|
|
225
|
+
}
|