feat(skills): add effective skill resolution and actions (#377)

* feat(skills): add effective skill resolution and actions

* refactor(workspace): normalize skill-related env and prompt

* chore(api): regenerate skills OpenAPI and SDK artifacts

* feat(web): surface effective skill state in console

* test(skills): cover API and runtime effective state

* fix(web): show adopt action for discovered skills

* fix(web): align skill header and show stateful visibility icon

* refactor(web): compact skill metadata on narrow layouts

* fix(web): constrain long skill text in cards

* refactor(skills): narrow default discovery roots

* fix(skills): harden managed skill path validation

* feat: add path in the results of `use_skill`

---------

Co-authored-by: Acbox <acbox0328@gmail.com>
This commit is contained in:
Chrys
2026-04-16 13:50:39 +08:00
committed by GitHub
parent 8e1ed3683f
commit 33e18e7e64
27 changed files with 2223 additions and 209 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+52
View File
@@ -951,11 +951,22 @@ export type HandlersSessionInfoResponse = {
export type HandlersSkillItem = {
content?: string;
description?: string;
managed?: boolean;
metadata?: {
[key: string]: unknown;
};
name?: string;
raw?: string;
shadowed_by?: string;
source_kind?: string;
source_path?: string;
source_root?: string;
state?: string;
};
export type HandlersSkillsActionRequest = {
action?: string;
target_path?: string;
};
export type HandlersSkillsDeleteRequest = {
@@ -3046,6 +3057,47 @@ export type PostBotsByBotIdContainerSkillsResponses = {
export type PostBotsByBotIdContainerSkillsResponse = PostBotsByBotIdContainerSkillsResponses[keyof PostBotsByBotIdContainerSkillsResponses];
export type PostBotsByBotIdContainerSkillsActionsData = {
/**
* Skill action payload
*/
body: HandlersSkillsActionRequest;
path: {
/**
* Bot ID
*/
bot_id: string;
};
query?: never;
url: '/bots/{bot_id}/container/skills/actions';
};
export type PostBotsByBotIdContainerSkillsActionsErrors = {
/**
* Bad Request
*/
400: HandlersErrorResponse;
/**
* Not Found
*/
404: HandlersErrorResponse;
/**
* Internal Server Error
*/
500: HandlersErrorResponse;
};
export type PostBotsByBotIdContainerSkillsActionsError = PostBotsByBotIdContainerSkillsActionsErrors[keyof PostBotsByBotIdContainerSkillsActionsErrors];
export type PostBotsByBotIdContainerSkillsActionsResponses = {
/**
* OK
*/
200: HandlersSkillsOpResponse;
};
export type PostBotsByBotIdContainerSkillsActionsResponse = PostBotsByBotIdContainerSkillsActionsResponses[keyof PostBotsByBotIdContainerSkillsActionsResponses];
export type GetBotsByBotIdContainerSnapshotsData = {
body?: never;
path: {