mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-21 21:31:12 +02:00
initial new skill system:
- allow users to edit skills - ui for skills insdie settings - alerts for updated skills + skill diff
This commit is contained in:
parent
c41586b85d
commit
5cbe388096
15 changed files with 851 additions and 17 deletions
|
|
@ -11,4 +11,5 @@ export * as inlineTask from './inline-task.js';
|
|||
export * as blocks from './blocks.js';
|
||||
export * as frontmatter from './frontmatter.js';
|
||||
export * as bases from './bases.js';
|
||||
export * as skill from './skill.js';
|
||||
export { PrefixLogger };
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import { AgentScheduleConfig, AgentScheduleEntry } from './agent-schedule.js';
|
|||
import { AgentScheduleState } from './agent-schedule-state.js';
|
||||
import { ServiceEvent } from './service-events.js';
|
||||
import { UserMessageContent } from './message.js';
|
||||
import { ResolvedSkill, SkillOverride } from './skill.js';
|
||||
|
||||
// ============================================================================
|
||||
// Runtime Validation Schemas (Single Source of Truth)
|
||||
|
|
@ -550,6 +551,43 @@ const ipcSchemas = {
|
|||
}),
|
||||
},
|
||||
// Billing channels
|
||||
// Skills channels
|
||||
'skills:list': {
|
||||
req: z.null(),
|
||||
res: z.object({
|
||||
skills: z.array(ResolvedSkill),
|
||||
}),
|
||||
},
|
||||
'skills:get': {
|
||||
req: z.object({
|
||||
id: z.string(),
|
||||
}),
|
||||
res: ResolvedSkill.nullable(),
|
||||
},
|
||||
'skills:getOfficial': {
|
||||
req: z.object({
|
||||
id: z.string(),
|
||||
}),
|
||||
res: ResolvedSkill.nullable(),
|
||||
},
|
||||
'skills:saveOverride': {
|
||||
req: z.object({
|
||||
skillId: z.string(),
|
||||
meta: SkillOverride,
|
||||
content: z.string(),
|
||||
}),
|
||||
res: z.object({
|
||||
success: z.literal(true),
|
||||
}),
|
||||
},
|
||||
'skills:deleteOverride': {
|
||||
req: z.object({
|
||||
skillId: z.string(),
|
||||
}),
|
||||
res: z.object({
|
||||
success: z.literal(true),
|
||||
}),
|
||||
},
|
||||
'billing:getInfo': {
|
||||
req: z.null(),
|
||||
res: z.object({
|
||||
|
|
|
|||
42
apps/x/packages/shared/src/skill.ts
Normal file
42
apps/x/packages/shared/src/skill.ts
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
import { z } from 'zod';
|
||||
|
||||
// Official skill metadata (bundled with app)
|
||||
export const OfficialSkillMeta = z.object({
|
||||
id: z.string(),
|
||||
title: z.string(),
|
||||
summary: z.string(),
|
||||
version: z.string(),
|
||||
source: z.literal("official"),
|
||||
});
|
||||
|
||||
// User override metadata (stored on disk as YAML frontmatter)
|
||||
export const SkillOverride = z.object({
|
||||
base_skill_id: z.string(),
|
||||
base_version: z.string(),
|
||||
title: z.string().optional(),
|
||||
summary: z.string().optional(),
|
||||
});
|
||||
|
||||
// Parsed override entry (metadata + content)
|
||||
export const SkillOverrideEntry = z.object({
|
||||
skillId: z.string(),
|
||||
meta: SkillOverride,
|
||||
content: z.string(),
|
||||
});
|
||||
|
||||
// Resolved skill seen by the agent (source-agnostic)
|
||||
export const ResolvedSkill = z.object({
|
||||
id: z.string(),
|
||||
title: z.string(),
|
||||
summary: z.string(),
|
||||
version: z.string(),
|
||||
source: z.enum(["official", "override", "installed"]),
|
||||
content: z.string(),
|
||||
hasUpdate: z.boolean().optional(),
|
||||
baseVersion: z.string().optional(),
|
||||
});
|
||||
|
||||
export type OfficialSkillMeta = z.infer<typeof OfficialSkillMeta>;
|
||||
export type SkillOverride = z.infer<typeof SkillOverride>;
|
||||
export type SkillOverrideEntry = z.infer<typeof SkillOverrideEntry>;
|
||||
export type ResolvedSkill = z.infer<typeof ResolvedSkill>;
|
||||
Loading…
Add table
Add a link
Reference in a new issue