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.
@@ -24817,6 +24817,7 @@ ${captureLines}` : capture.stack;
24817
24817
  });
24818
24818
 
24819
24819
  export {
24820
+ __require,
24820
24821
  __toESM,
24821
24822
  require_undici
24822
24823
  };
@@ -24828,4 +24829,4 @@ undici/lib/web/fetch/body.js:
24828
24829
  undici/lib/web/websocket/frame.js:
24829
24830
  (*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
24830
24831
  */
24831
- //# sourceMappingURL=chunk-DO76AL42.js.map
24832
+ //# sourceMappingURL=chunk-D5X6YFSK.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  __toESM,
3
3
  require_undici
4
- } from "./chunk-DO76AL42.js";
4
+ } from "./chunk-D5X6YFSK.js";
5
5
 
6
6
  // src/core/history.ts
7
7
  import createDebug7 from "debug";
@@ -2444,6 +2444,155 @@ var models = {
2444
2444
  modalities: { input: ["text"], output: ["text"] },
2445
2445
  open_weights: true,
2446
2446
  limit: { context: 204800, output: 131072 }
2447
+ },
2448
+ "gemini-3.1-flash-lite": {
2449
+ name: "Gemini 3.1 Flash Lite",
2450
+ attachment: true,
2451
+ reasoning: true,
2452
+ temperature: true,
2453
+ tool_call: true,
2454
+ knowledge: "2025-01",
2455
+ release_date: "2026-03-03",
2456
+ last_updated: "2026-03-03",
2457
+ modalities: {
2458
+ input: ["text", "image", "audio", "video", "pdf"],
2459
+ output: ["text"]
2460
+ },
2461
+ open_weights: false,
2462
+ limit: { context: 1048576, output: 64e3 }
2463
+ },
2464
+ "gemini-3.1-flash-live": {
2465
+ name: "Gemini 3.1 Flash Live",
2466
+ attachment: true,
2467
+ reasoning: true,
2468
+ temperature: true,
2469
+ tool_call: true,
2470
+ knowledge: "2025-01",
2471
+ release_date: "2026-03-15",
2472
+ last_updated: "2026-03-15",
2473
+ modalities: {
2474
+ input: ["text", "image", "audio", "video"],
2475
+ output: ["text", "audio"]
2476
+ },
2477
+ open_weights: false,
2478
+ limit: { context: 131072, output: 64e3 }
2479
+ },
2480
+ "glm-5.1": {
2481
+ name: "GLM-5.1",
2482
+ attachment: false,
2483
+ reasoning: true,
2484
+ temperature: true,
2485
+ tool_call: true,
2486
+ knowledge: "2025-04",
2487
+ release_date: "2026-03-27",
2488
+ last_updated: "2026-03-27",
2489
+ modalities: { input: ["text"], output: ["text"] },
2490
+ open_weights: true,
2491
+ limit: { context: 204800, output: 131072 }
2492
+ },
2493
+ "qwen3.6-plus": {
2494
+ name: "Qwen3.6 Plus",
2495
+ attachment: true,
2496
+ reasoning: true,
2497
+ temperature: true,
2498
+ tool_call: true,
2499
+ knowledge: "2025-04",
2500
+ release_date: "2026-03-31",
2501
+ last_updated: "2026-03-31",
2502
+ modalities: { input: ["text", "image", "video"], output: ["text"] },
2503
+ open_weights: false,
2504
+ limit: { context: 1048576, output: 65536 }
2505
+ },
2506
+ "kimi-k2.6": {
2507
+ name: "Kimi K2.6",
2508
+ attachment: true,
2509
+ reasoning: true,
2510
+ temperature: true,
2511
+ tool_call: true,
2512
+ knowledge: "2025-04",
2513
+ release_date: "2026-04-21",
2514
+ last_updated: "2026-04-21",
2515
+ modalities: { input: ["text", "image", "video"], output: ["text"] },
2516
+ open_weights: true,
2517
+ limit: { context: 262144, output: 98304 }
2518
+ },
2519
+ "deepseek-v4-pro": {
2520
+ name: "DeepSeek V4 Pro",
2521
+ attachment: false,
2522
+ reasoning: true,
2523
+ temperature: true,
2524
+ tool_call: true,
2525
+ knowledge: "2025-04",
2526
+ release_date: "2026-04-24",
2527
+ last_updated: "2026-04-24",
2528
+ modalities: { input: ["text"], output: ["text"] },
2529
+ open_weights: true,
2530
+ limit: { context: 1048576, output: 384e3 }
2531
+ },
2532
+ "deepseek-v4-flash": {
2533
+ name: "DeepSeek V4 Flash",
2534
+ attachment: false,
2535
+ reasoning: true,
2536
+ temperature: true,
2537
+ tool_call: true,
2538
+ knowledge: "2025-04",
2539
+ release_date: "2026-04-24",
2540
+ last_updated: "2026-04-24",
2541
+ modalities: { input: ["text"], output: ["text"] },
2542
+ open_weights: true,
2543
+ limit: { context: 1048576, output: 384e3 }
2544
+ },
2545
+ "gpt-5.5": {
2546
+ name: "GPT-5.5",
2547
+ attachment: true,
2548
+ reasoning: true,
2549
+ temperature: false,
2550
+ tool_call: true,
2551
+ knowledge: "2025-04",
2552
+ release_date: "2026-04-23",
2553
+ last_updated: "2026-04-23",
2554
+ modalities: { input: ["text", "image", "audio", "video"], output: ["text"] },
2555
+ open_weights: false,
2556
+ limit: { context: 1048576, output: 128e3 }
2557
+ },
2558
+ "seed3d-2.0": {
2559
+ name: "Seed3D 2.0",
2560
+ attachment: true,
2561
+ reasoning: false,
2562
+ temperature: true,
2563
+ tool_call: false,
2564
+ knowledge: "2025-04",
2565
+ release_date: "2026-04-23",
2566
+ last_updated: "2026-04-23",
2567
+ modalities: { input: ["text", "image"], output: ["text", "image"] },
2568
+ open_weights: false,
2569
+ limit: { context: 32e3, output: 32e3 }
2570
+ },
2571
+ "mimo-v2.5-pro": {
2572
+ name: "MiMo V2.5 Pro",
2573
+ attachment: false,
2574
+ reasoning: true,
2575
+ temperature: true,
2576
+ tool_call: true,
2577
+ knowledge: "2025-04",
2578
+ release_date: "2026-04-23",
2579
+ last_updated: "2026-04-23",
2580
+ modalities: { input: ["text"], output: ["text"] },
2581
+ open_weights: true,
2582
+ limit: { context: 1048576, output: 65536 }
2583
+ },
2584
+ "mimo-v2.5": {
2585
+ name: "MiMo V2.5",
2586
+ attachment: true,
2587
+ reasoning: true,
2588
+ temperature: true,
2589
+ tool_call: true,
2590
+ knowledge: "2025-04",
2591
+ release_date: "2026-04-23",
2592
+ last_updated: "2026-04-23",
2593
+ modalities: { input: ["text", "image", "video", "audio"], output: ["text"] },
2594
+ open_weights: true,
2595
+ limit: { context: 1048576, output: 65536 }
2447
2596
  }
2448
2597
  };
2449
2598
 
@@ -2560,7 +2709,7 @@ function createProxyFetch(proxyUrl) {
2560
2709
  }
2561
2710
  return async (input, init) => {
2562
2711
  if (!undiciFetch) {
2563
- undiciFetch = (await import("./undici-326ZBRKH.js")).fetch;
2712
+ undiciFetch = (await import("./undici-NSB7IUB7.js")).fetch;
2564
2713
  }
2565
2714
  let url;
2566
2715
  let requestInit = init;
@@ -2715,7 +2864,8 @@ var providers = {
2715
2864
  "gpt-5.2": models["gpt-5.2"],
2716
2865
  "gpt-5.2-pro": models["gpt-5.2-pro"],
2717
2866
  "gpt-5.2-codex": models["gpt-5.2-codex"],
2718
- "gpt-5.3-codex": models["gpt-5.3-codex"]
2867
+ "gpt-5.3-codex": models["gpt-5.3-codex"],
2868
+ "gpt-5.5": models["gpt-5.5"]
2719
2869
  },
2720
2870
  createModel: openaiModelCreator
2721
2871
  },
@@ -2733,6 +2883,8 @@ var providers = {
2733
2883
  "gemini-2.5-pro": models["gemini-2.5-pro"],
2734
2884
  "gemini-3-pro-preview": models["gemini-3-pro-preview"],
2735
2885
  "gemini-3.1-pro-preview": models["gemini-3.1-pro-preview"],
2886
+ "gemini-3.1-flash-lite": models["gemini-3.1-flash-lite"],
2887
+ "gemini-3.1-flash-live": models["gemini-3.1-flash-live"],
2736
2888
  "gemini-3-flash-preview": models["gemini-3-flash-preview"]
2737
2889
  },
2738
2890
  createModel(name, provider) {
@@ -2899,14 +3051,19 @@ var providers = {
2899
3051
  "openai/gpt-5.2-pro": models["gpt-5.2-pro"],
2900
3052
  "openai/gpt-5.2-codex": models["gpt-5.2-codex"],
2901
3053
  "openai/gpt-5.3-codex": models["gpt-5.3-codex"],
3054
+ "openai/gpt-5.5": models["gpt-5.5"],
2902
3055
  "google/gemini-3-flash-preview": models["gemini-3-flash-preview"],
2903
3056
  "google/gemini-3-pro-preview": models["gemini-3-pro-preview"],
3057
+ "google/gemini-3.1-flash-lite": models["gemini-3.1-flash-lite"],
3058
+ "google/gemini-3.1-flash-live": models["gemini-3.1-flash-live"],
2904
3059
  "moonshotai/kimi-k2": models["kimi-k2"],
2905
3060
  "moonshotai/kimi-k2-0905": models["kimi-k2-0905"],
2906
3061
  "moonshotai/kimi-k2-thinking": models["kimi-k2-thinking"],
2907
3062
  "moonshotai/kimi-k2.5": models["kimi-k2.5"],
3063
+ "moonshotai/kimi-k2.6": models["kimi-k2.6"],
2908
3064
  "qwen/qwen3-coder": models["qwen3-coder-480b-a35b-instruct"],
2909
3065
  "qwen/qwen3-max": models["qwen3-max"],
3066
+ "qwen/qwen3.6-plus": models["qwen3.6-plus"],
2910
3067
  "x-ai/grok-code-fast-1": models["grok-code-fast-1"],
2911
3068
  "x-ai/grok-4": models["grok-4"],
2912
3069
  "x-ai/grok-4-fast": models["grok-4-fast"],
@@ -2949,7 +3106,8 @@ var providers = {
2949
3106
  "kimi-k2-turbo-preview": models["kimi-k2-turbo-preview"],
2950
3107
  "kimi-k2-thinking": models["kimi-k2-thinking"],
2951
3108
  "kimi-k2-thinking-turbo": models["kimi-k2-thinking-turbo"],
2952
- "kimi-k2.5": models["kimi-k2.5"]
3109
+ "kimi-k2.5": models["kimi-k2.5"],
3110
+ "kimi-k2.6": models["kimi-k2.6"]
2953
3111
  },
2954
3112
  createModel: defaultModelCreator
2955
3113
  },
@@ -2965,7 +3123,8 @@ var providers = {
2965
3123
  "kimi-k2-turbo-preview": models["kimi-k2-turbo-preview"],
2966
3124
  "kimi-k2-thinking": models["kimi-k2-thinking"],
2967
3125
  "kimi-k2-thinking-turbo": models["kimi-k2-thinking-turbo"],
2968
- "kimi-k2.5": models["kimi-k2.5"]
3126
+ "kimi-k2.5": models["kimi-k2.5"],
3127
+ "kimi-k2.6": models["kimi-k2.6"]
2969
3128
  },
2970
3129
  createModel: defaultModelCreator
2971
3130
  },
@@ -3015,10 +3174,15 @@ var providers = {
3015
3174
  "deepseek-ai/DeepSeek-V3": models["deepseek-v3-0324"],
3016
3175
  "zai-org/GLM-4.5": models["glm-4.5"],
3017
3176
  "Pro/moonshotai/Kimi-K2.5": models["kimi-k2-5"],
3177
+ "Pro/moonshotai/Kimi-K2.6": models["kimi-k2.6"],
3018
3178
  "Pro/zai-org/GLM-5": models["glm-5"],
3179
+ "Pro/zai-org/GLM-5.1": models["glm-5.1"],
3019
3180
  "Pro/zai-org/GLM-4.7": models["glm-4.7"],
3020
3181
  "Pro/MiniMaxAI/MiniMax-M2.5": models["minimax-m2.5"],
3021
- "Pro/deepseek-ai/DeepSeek-V3.2": models["deepseek-v3.2"]
3182
+ "Pro/deepseek-ai/DeepSeek-V3.2": models["deepseek-v3.2"],
3183
+ "Pro/deepseek-ai/DeepSeek-V4-Pro": models["deepseek-v4-pro"],
3184
+ "Pro/deepseek-ai/DeepSeek-V4-Flash": models["deepseek-v4-flash"],
3185
+ "Pro/Qwen/Qwen3.6-Plus": models["qwen3.6-plus"]
3022
3186
  },
3023
3187
  createModel: defaultModelCreator
3024
3188
  },
@@ -3036,8 +3200,11 @@ var providers = {
3036
3200
  "ZhipuAI/GLM-4.5V": models["glm-4.5v"],
3037
3201
  "ZhipuAI/GLM-4.6": models["glm-4.6"],
3038
3202
  "ZhipuAI/GLM-5": models["glm-5"],
3203
+ "ZhipuAI/GLM-5.1": models["glm-5.1"],
3039
3204
  "deepseek-ai/DeepSeek-V3.2": models["deepseek-v3.2"],
3040
- "deepseek-ai/DeepSeek-V3.2-Speciale": models["deepseek-v3.2-speciale"]
3205
+ "deepseek-ai/DeepSeek-V3.2-Speciale": models["deepseek-v3.2-speciale"],
3206
+ "deepseek-ai/DeepSeek-V4-Pro": models["deepseek-v4-pro"],
3207
+ "deepseek-ai/DeepSeek-V4-Flash": models["deepseek-v4-flash"]
3041
3208
  },
3042
3209
  createModel: defaultModelCreator
3043
3210
  },
@@ -3052,7 +3219,8 @@ var providers = {
3052
3219
  "deepseek-v3-1-250821": models["deepseek-v3-1"],
3053
3220
  "deepseek-v3-1-terminus": models["deepseek-v3-1-terminus"],
3054
3221
  "doubao-seed-1-6-250615": models["doubao-seed-1.6"],
3055
- "kimi-k2-250905": models["kimi-k2-0905"]
3222
+ "kimi-k2-250905": models["kimi-k2-0905"],
3223
+ "seed3d-2.0": models["seed3d-2.0"]
3056
3224
  },
3057
3225
  createModel: defaultModelCreator
3058
3226
  },
@@ -3071,7 +3239,8 @@ var providers = {
3071
3239
  "glm-4.6": models["glm-4.6"],
3072
3240
  "glm-4.6v": models["glm-4.6v"],
3073
3241
  "glm-4.7": models["glm-4.7"],
3074
- "glm-5": models["glm-5"]
3242
+ "glm-5": models["glm-5"],
3243
+ "glm-5.1": models["glm-5.1"]
3075
3244
  },
3076
3245
  createModel: defaultModelCreator
3077
3246
  },
@@ -3090,7 +3259,8 @@ var providers = {
3090
3259
  "glm-4.5-flash": models["glm-4.5-flash"],
3091
3260
  "glm-4.6v": models["glm-4.6v"],
3092
3261
  "glm-4.7": models["glm-4.7"],
3093
- "glm-5": models["glm-5"]
3262
+ "glm-5": models["glm-5"],
3263
+ "glm-5.1": models["glm-5.1"]
3094
3264
  },
3095
3265
  createModel: defaultModelCreator
3096
3266
  },
@@ -3129,7 +3299,8 @@ var providers = {
3129
3299
  "glm-4.5-flash": models["glm-4.5-flash"],
3130
3300
  "glm-4.6v": models["glm-4.6v"],
3131
3301
  "glm-4.7": models["glm-4.7"],
3132
- "glm-5": models["glm-5"]
3302
+ "glm-5": models["glm-5"],
3303
+ "glm-5.1": models["glm-5.1"]
3133
3304
  },
3134
3305
  createModel: defaultModelCreator
3135
3306
  },
@@ -3165,9 +3336,12 @@ var providers = {
3165
3336
  "z-ai/glm-4.6v-flash": models["glm-4.6v"],
3166
3337
  "z-ai/glm-4.7": models["glm-4.7"],
3167
3338
  "z-ai/glm-5": models["glm-5"],
3339
+ "z-ai/glm-5.1": models["glm-5.1"],
3168
3340
  "deepseek/deepseek-v3.2-speciale": models["deepseek-v3.2-speciale"],
3169
3341
  "deepseek/deepseek-chat": models["deepseek-v3-2-exp"],
3170
3342
  "deepseek/deepseek-reasoner": models["deepseek-r1-0528"],
3343
+ "deepseek/deepseek-v4-pro": models["deepseek-v4-pro"],
3344
+ "deepseek/deepseek-v4-flash": models["deepseek-v4-flash"],
3171
3345
  "minimax/minimax-m2.5": models["minimax-m2.5"]
3172
3346
  },
3173
3347
  headers: {
@@ -3225,7 +3399,9 @@ var providers = {
3225
3399
  api: "https://api.xiaomimimo.com/v1",
3226
3400
  doc: "https://platform.xiaomimimo.com/",
3227
3401
  models: {
3228
- "mimo-v2-flash": models["mimo-v2-flash"]
3402
+ "mimo-v2-flash": models["mimo-v2-flash"],
3403
+ "mimo-v2.5": models["mimo-v2.5"],
3404
+ "mimo-v2.5-pro": models["mimo-v2.5-pro"]
3229
3405
  },
3230
3406
  createModel: createModelCreatorCompatible({})
3231
3407
  },
@@ -3338,7 +3514,9 @@ var providers = {
3338
3514
  "moonshotai/kimi-k2.5": models["kimi-k2.5"],
3339
3515
  "deepseek/deepseek-chat-v3.2": models["deepseek-v3-2-exp"],
3340
3516
  "openai/gpt-oss-120b": models["gpt-oss-120b"],
3341
- "xiaomimimo/mimo-v2-flash": models["mimo-v2-flash"]
3517
+ "xiaomimimo/mimo-v2-flash": models["mimo-v2-flash"],
3518
+ "xiaomimimo/mimo-v2.5": models["mimo-v2.5"],
3519
+ "xiaomimimo/mimo-v2.5-pro": models["mimo-v2.5-pro"]
3342
3520
  },
3343
3521
  createModel: defaultModelCreator
3344
3522
  },
@@ -3366,7 +3544,8 @@ var providers = {
3366
3544
  "gpt-5.1-codex-mini": models["gpt-5.1-codex-mini"],
3367
3545
  "gpt-5.2": models["gpt-5.2"],
3368
3546
  "gpt-5.2-codex": models["gpt-5.2-codex"],
3369
- "gpt-5.3-codex": models["gpt-5.3-codex"]
3547
+ "gpt-5.3-codex": models["gpt-5.3-codex"],
3548
+ "gpt-5.5": models["gpt-5.5"]
3370
3549
  },
3371
3550
  createModel: (name, provider) => {
3372
3551
  if (name.startsWith("claude-") || name.startsWith("gemini-")) {
@@ -3398,7 +3577,8 @@ var providers = {
3398
3577
  "google/gemini-3-pro-preview": models["gemini-3-pro-preview"],
3399
3578
  "minimax/minimax-m2.5:free": models["minimax-m2.5"],
3400
3579
  "minimax/minimax-m2.5": models["minimax-m2.5"],
3401
- "moonshotai/kimi-k2.5": models["kimi-k2-5"]
3580
+ "moonshotai/kimi-k2.5": models["kimi-k2-5"],
3581
+ "moonshotai/kimi-k2.6": models["kimi-k2.6"]
3402
3582
  },
3403
3583
  createModel: (name, provider) => {
3404
3584
  if (name.includes("claude-")) {
@@ -6991,72 +7171,10 @@ function readFileWithOffsetLimit(filePath, offset = 1, limit = MAX_LINES_TO_READ
6991
7171
 
6992
7172
  // src/tools/tools/skill.ts
6993
7173
  import path9 from "pathe";
6994
- import { z as z10 } from "zod";
6995
- function renderAvailableSkills(skills) {
6996
- return skills.map(
6997
- (skill) => `<skill>
6998
- <name>${skill.name}</name>
6999
- <description>${skill.description}</description>
7000
- </skill>`
7001
- ).join("\n");
7002
- }
7003
- function generateDescription(skillManager) {
7004
- const skills = skillManager.getSkills();
7005
- return `Execute a skill within the main conversation
7006
- <skills_instructions>
7007
- When users ask you to perform tasks, check if any of the available skills below match the task. If a skill matches, use this tool to invoke it. Skills provide specialized knowledge and procedures for specific tasks.
7008
- </skills_instructions>
7009
- <available_skills>
7010
- ${renderAvailableSkills(skills)}
7011
- </available_skills>`;
7012
- }
7013
- function createSkillTool(opts) {
7014
- return createTool({
7015
- name: "skill",
7016
- description: generateDescription(opts.skillManager),
7017
- parameters: z10.object({
7018
- skill: z10.string().describe("The skill name to execute")
7019
- }),
7020
- getDescription: ({ params }) => {
7021
- return params.skill;
7022
- },
7023
- async execute({ skill }) {
7024
- const trimmed = skill.trim();
7025
- const skillName = trimmed.startsWith("/") ? trimmed.substring(1) : trimmed;
7026
- const foundSkill = opts.skillManager.getSkill(skillName);
7027
- if (!foundSkill) {
7028
- return {
7029
- isError: true,
7030
- llmContent: `Skill "${skillName}" not found`
7031
- };
7032
- }
7033
- const body = await opts.skillManager.readSkillBody(foundSkill);
7034
- const baseDir = path9.dirname(foundSkill.path);
7035
- const messages = [
7036
- {
7037
- type: "text",
7038
- text: `<command-message>${skillName} is running\u2026</command-message>
7039
- <command-name>${skillName}</command-name>`
7040
- },
7041
- {
7042
- type: "text",
7043
- text: `Base directory for this skill: ${baseDir}
7044
-
7045
- ${body}`,
7046
- isMeta: true
7047
- }
7048
- ];
7049
- return {
7050
- llmContent: safeStringify(messages),
7051
- returnDisplay: `Loaded skill: ${foundSkill.name}`
7052
- };
7053
- },
7054
- approval: { category: "read" }
7055
- });
7056
- }
7174
+ import { z as z11 } from "zod";
7057
7175
 
7058
7176
  // src/tools/tools/task.ts
7059
- import { z as z11 } from "zod";
7177
+ import { z as z10 } from "zod";
7060
7178
  function createTaskTool(opts) {
7061
7179
  const { signal, sessionId } = opts;
7062
7180
  const { cwd, agentManager, messageBus } = opts.context;
@@ -7122,11 +7240,11 @@ Since the user is greeting, use the greeting-responder agent to respond with a f
7122
7240
  assistant: "I'm going to use the ${"task" /* TASK */} tool to launch the with the greeting-responder agent"
7123
7241
  </example>
7124
7242
  `,
7125
- parameters: z11.object({
7126
- description: z11.string().describe("A short (3-5 word) description of task"),
7127
- prompt: z11.string().describe("The task for the agent to perform"),
7128
- subagent_type: z11.string().describe("The type of specialized agent to use for this task"),
7129
- resume: z11.string().optional().describe(
7243
+ parameters: z10.object({
7244
+ description: z10.string().describe("A short (3-5 word) description of task"),
7245
+ prompt: z10.string().describe("The task for the agent to perform"),
7246
+ subagent_type: z10.string().describe("The type of specialized agent to use for this task"),
7247
+ resume: z10.string().optional().describe(
7130
7248
  "Optional agent ID to resume from. If provided, the agent will continue from the previous execution transcript."
7131
7249
  )
7132
7250
  }),
@@ -7298,6 +7416,112 @@ Agent ID: ${result.agentId}`,
7298
7416
  });
7299
7417
  }
7300
7418
 
7419
+ // src/tools/tools/skill.ts
7420
+ function renderAvailableSkills(skills) {
7421
+ return skills.filter((skill) => skill.modelInvocable !== false).map(
7422
+ (skill) => `<skill>
7423
+ <name>${skill.name}</name>
7424
+ <description>${skill.description}</description>
7425
+ </skill>`
7426
+ ).join("\n");
7427
+ }
7428
+ function generateDescription(skillManager) {
7429
+ const skills = skillManager.getSkills({ modelInvocable: true });
7430
+ return `Execute a skill within the main conversation
7431
+ <skills_instructions>
7432
+ When users ask you to perform tasks, check if any of the available skills below match the task. If a skill matches, use this tool to invoke it. Skills provide specialized knowledge and procedures for specific tasks.
7433
+ </skills_instructions>
7434
+ <available_skills>
7435
+ ${renderAvailableSkills(skills)}
7436
+ </available_skills>`;
7437
+ }
7438
+ function createSkillTool(opts) {
7439
+ const { skillManager, context, tools, sessionId, signal } = opts;
7440
+ return createTool({
7441
+ name: "skill",
7442
+ description: generateDescription(skillManager),
7443
+ parameters: z11.object({
7444
+ skill: z11.string().describe("The skill name to execute"),
7445
+ args: z11.string().optional().describe("Optional arguments to pass to the skill")
7446
+ }),
7447
+ getDescription: ({ params }) => {
7448
+ return params.args ? `${params.skill} ${params.args}` : params.skill;
7449
+ },
7450
+ async execute({ skill, args }) {
7451
+ const trimmed = skill.trim();
7452
+ const skillName = trimmed.startsWith("/") ? trimmed.substring(1) : trimmed;
7453
+ const foundSkill = skillManager.getSkill(skillName);
7454
+ if (!foundSkill) {
7455
+ return {
7456
+ isError: true,
7457
+ llmContent: `Skill "${skillName}" not found`
7458
+ };
7459
+ }
7460
+ if (foundSkill.modelInvocable === false) {
7461
+ return {
7462
+ isError: true,
7463
+ llmContent: `Skill "${skillName}" cannot be invoked by the model`
7464
+ };
7465
+ }
7466
+ const skillArgs = args || "";
7467
+ const body = await skillManager.readSkillBody(foundSkill, skillArgs);
7468
+ const baseDir = path9.dirname(foundSkill.path);
7469
+ if (foundSkill.context === "fork") {
7470
+ if (!context.agentManager) {
7471
+ return {
7472
+ isError: true,
7473
+ llmContent: `Skill "${skillName}" requires fork execution but agent manager is not available`
7474
+ };
7475
+ }
7476
+ const allowedTools = foundSkill.allowedTools;
7477
+ const filteredTools = allowedTools ? tools.filter(
7478
+ (t) => t.name !== "skill" && allowedTools.some(
7479
+ (allowed) => allowed.toLowerCase() === t.name.toLowerCase()
7480
+ )
7481
+ ) : tools.filter((t) => t.name !== "skill");
7482
+ const taskTool = createTaskTool({
7483
+ context,
7484
+ tools: filteredTools,
7485
+ sessionId,
7486
+ signal
7487
+ });
7488
+ const agentType = foundSkill.agent || "general-purpose";
7489
+ const prompt = `Base directory for this skill: ${baseDir}
7490
+
7491
+ ${body}`;
7492
+ const toolCallId = `skill-${skillName}-${randomUUID()}`;
7493
+ return taskTool.execute(
7494
+ {
7495
+ description: `Execute skill: ${skillName}`,
7496
+ prompt,
7497
+ subagent_type: agentType
7498
+ },
7499
+ toolCallId
7500
+ );
7501
+ }
7502
+ const messages = [
7503
+ {
7504
+ type: "text",
7505
+ text: `<command-message>${skillName} is running\u2026</command-message>
7506
+ <command-name>${skillName}</command-name>`
7507
+ },
7508
+ {
7509
+ type: "text",
7510
+ text: `Base directory for this skill: ${baseDir}
7511
+
7512
+ ${body}`,
7513
+ isMeta: true
7514
+ }
7515
+ ];
7516
+ return {
7517
+ llmContent: safeStringify(messages),
7518
+ returnDisplay: `Loaded skill: ${foundSkill.name}`
7519
+ };
7520
+ },
7521
+ approval: { category: "read" }
7522
+ });
7523
+ }
7524
+
7301
7525
  // src/tools/tools/todo.ts
7302
7526
  import fs10 from "fs";
7303
7527
  import { readFile, writeFile } from "fs/promises";
@@ -7624,8 +7848,7 @@ async function resolveTools(opts) {
7624
7848
  createLSTool({ cwd }),
7625
7849
  createGlobTool({ cwd }),
7626
7850
  createGrepTool({ cwd }),
7627
- createFetchTool({ model, fetch: opts.context.fetch }),
7628
- ...hasSkills ? [createSkillTool({ skillManager: opts.context.skillManager })] : []
7851
+ createFetchTool({ model, fetch: opts.context.fetch })
7629
7852
  ];
7630
7853
  const askUserQuestionTools = opts.askUserQuestion ? [createAskUserQuestionTool()] : [];
7631
7854
  const writeTools = opts.write ? [
@@ -7653,7 +7876,7 @@ async function resolveTools(opts) {
7653
7876
  })
7654
7877
  ] : [];
7655
7878
  const mcpTools = await getMcpTools(opts.context);
7656
- const allTools = [
7879
+ let allTools = [
7657
7880
  ...readonlyTools,
7658
7881
  ...askUserQuestionTools,
7659
7882
  ...writeTools,
@@ -7661,6 +7884,16 @@ async function resolveTools(opts) {
7661
7884
  ...backgroundTools,
7662
7885
  ...mcpTools
7663
7886
  ];
7887
+ if (hasSkills) {
7888
+ const skillTool = createSkillTool({
7889
+ skillManager: opts.context.skillManager,
7890
+ context: opts.context,
7891
+ tools: allTools,
7892
+ sessionId: opts.sessionId,
7893
+ signal: opts.signal
7894
+ });
7895
+ allTools = [...allTools, skillTool];
7896
+ }
7664
7897
  let availableTools = allTools;
7665
7898
  try {
7666
7899
  availableTools = await opts.context.apply({
@@ -8498,4 +8731,4 @@ export {
8498
8731
  Tools,
8499
8732
  createLSTool
8500
8733
  };
8501
- //# sourceMappingURL=chunk-4QYFQSAC.js.map
8734
+ //# sourceMappingURL=chunk-E7TB3WLC.js.map