skill-flow 1.0.2 → 1.0.4
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/README.md +62 -23
- package/README.zh.md +63 -25
- package/dist/cli.js +13 -39
- package/dist/cli.js.map +1 -1
- package/dist/domain/types.d.ts +12 -1
- package/dist/services/doctor-service.js +1 -1
- package/dist/services/doctor-service.js.map +1 -1
- package/dist/services/skill-flow.d.ts +16 -13
- package/dist/services/skill-flow.js +158 -5
- package/dist/services/skill-flow.js.map +1 -1
- package/dist/services/source-service.d.ts +11 -1
- package/dist/services/source-service.js +60 -18
- package/dist/services/source-service.js.map +1 -1
- package/dist/services/workflow-service.d.ts +2 -2
- package/dist/services/workflow-service.js +17 -4
- package/dist/services/workflow-service.js.map +1 -1
- package/dist/services/workspace-bootstrap-service.d.ts +25 -0
- package/dist/services/workspace-bootstrap-service.js +148 -0
- package/dist/services/workspace-bootstrap-service.js.map +1 -0
- package/dist/state/store.js +1 -0
- package/dist/state/store.js.map +1 -1
- package/dist/tests/skill-flow.test.js +1458 -0
- package/dist/tests/skill-flow.test.js.map +1 -1
- package/dist/tui/config-app.d.ts +3 -0
- package/dist/tui/config-app.js +61 -1
- package/dist/tui/config-app.js.map +1 -1
- package/dist/tui/find-app.d.ts +1 -1
- package/dist/tui/find-app.js +36 -4
- package/dist/tui/find-app.js.map +1 -1
- package/dist/utils/format.js +1 -1
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/naming.d.ts +1 -0
- package/dist/utils/naming.js +7 -1
- package/dist/utils/naming.js.map +1 -1
- package/dist/utils/source-id.js +4 -0
- package/dist/utils/source-id.js.map +1 -1
- package/package.json +10 -1
- package/.gstack/browse-network.log +0 -1
- package/.gstack/browse.json +0 -7
- package/.gstack/qa-reports/base-branch.txt +0 -1
- package/.gstack/qa-reports/qa-report-skill-flow-cli-2026-03-22.md +0 -159
- package/.gstack/qa-reports/qa-report-skill-manager-2026-03-22.md +0 -60
- package/docs/DESIGN.md +0 -407
- package/docs/PRD/PRD-1.0.0.md +0 -1862
- package/docs/PRD/renew/PRD-0.0.0.md +0 -26
- package/docs/PRD/renew/PRD-0.0.1.md +0 -408
- package/docs/PRD/renew/PRD-0.0.2.md +0 -705
- package/docs/PRD/renew/PRD-0.0.3.md +0 -740
- package/docs/PRD/renew/PRD-0.0.4.md +0 -1494
- package/docs/README.md +0 -242
- package/docs/plan/PLAN_v1.0.0.md +0 -663
- package/docs/plan/PLAN_v1.0.1.md +0 -845
- package/docs/refrences/README.md +0 -9
- package/docs/refrences/agent-skill-paths.md +0 -274
- package/docs/refrences/config-state-reconciliation.md +0 -199
- package/docs/refrences/naming-dedupe-warning-rules.md +0 -482
- package/img/img-1.jpg +0 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Skill Flow
|
|
2
2
|
|
|
3
3
|
> **Workflow-first management for AI agent skills.**
|
|
4
|
-
>
|
|
4
|
+
> Skill grouping · Deploy everywhere · Clear config · Quick diagnosis
|
|
5
5
|
|
|
6
6
|

|
|
7
7
|
|
|
@@ -10,26 +10,31 @@
|
|
|
10
10
|
[](https://nodejs.org)
|
|
11
11
|
[](./LICENSE)
|
|
12
12
|
|
|
13
|
-
As your AI agent skills grow, management
|
|
13
|
+
As your AI agent skills grow, management gets messy: one Git repo has a bunch of related skills, they end up scattered across different agents, and updates become a headache.
|
|
14
14
|
|
|
15
|
-
`skill-flow`
|
|
15
|
+
`skill-flow` fixes this by organizing skills around groups: add skill groups from Git repos, pick where to deploy, update all at once, spot problems fast. Keep your skill setup clean, organized, and stress-free.
|
|
16
16
|
|
|
17
17
|
## Key Features
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
One Git source = one workflow group. Related skills stay together, updates and maintenance happen at the workflow level.
|
|
19
|
+

|
|
21
20
|
|
|
22
|
-
**
|
|
23
|
-
|
|
21
|
+
**Skill-Based Grouping**
|
|
22
|
+
One Git repo = one skills group. Related skills stay together, updates and maintenance happen at the group level.
|
|
23
|
+
|
|
24
|
+
**Deploy Everywhere**
|
|
25
|
+
Set it up once, deploy to multiple agents (Claude Code, Cursor, Windsurf, and 13+ targets).
|
|
24
26
|
|
|
25
27
|
**Interactive Terminal UI**
|
|
26
28
|
Intuitive TUI: view groups → select skills → choose targets → save configuration.
|
|
27
29
|
|
|
30
|
+
**Bootstrap On Config Open**
|
|
31
|
+
`config` renders immediately, shows boot progress, adopts unmanaged skills already found in agent roots, then audits current projections before entering the main UI.
|
|
32
|
+
|
|
28
33
|
**Explicit State Tracking**
|
|
29
|
-
`manifest.json`
|
|
34
|
+
`manifest.json` = what you want, `lock.json` = what's actually installed. Both are readable and queryable.
|
|
30
35
|
|
|
31
36
|
**Health Diagnosis**
|
|
32
|
-
`doctor`
|
|
37
|
+
`doctor` catches broken links, mismatches, and conflicts — tells you exactly what's wrong.
|
|
33
38
|
|
|
34
39
|
## Installation
|
|
35
40
|
|
|
@@ -64,7 +69,7 @@ npm link
|
|
|
64
69
|
# Add a skill source
|
|
65
70
|
skill-flow add /path/to/skills-repo
|
|
66
71
|
|
|
67
|
-
# View
|
|
72
|
+
# View skills groups
|
|
68
73
|
skill-flow list
|
|
69
74
|
|
|
70
75
|
# Interactive configuration (select skills and targets)
|
|
@@ -76,7 +81,7 @@ skill-flow update --all
|
|
|
76
81
|
# Health check
|
|
77
82
|
skill-flow doctor
|
|
78
83
|
|
|
79
|
-
# Remove a
|
|
84
|
+
# Remove a skills group
|
|
80
85
|
skill-flow uninstall my-source-id
|
|
81
86
|
```
|
|
82
87
|
|
|
@@ -84,32 +89,66 @@ skill-flow uninstall my-source-id
|
|
|
84
89
|
|
|
85
90
|
By default, `add` preselects all discovered skills and all detected agent targets. When `--path <repoSubpath>` is provided, the full repo is still imported, but only skills under that path are preselected.
|
|
86
91
|
|
|
92
|
+
Examples:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Local repo
|
|
96
|
+
skill-flow add ~/code/my-skills
|
|
97
|
+
|
|
98
|
+
# GitHub shorthand
|
|
99
|
+
skill-flow add garrytan/gstack
|
|
100
|
+
|
|
101
|
+
# Full Git URL
|
|
102
|
+
skill-flow add https://github.com/garrytan/gstack.git
|
|
103
|
+
skill-flow add git@github.com:garrytan/gstack.git
|
|
104
|
+
|
|
105
|
+
# GitHub tree URL
|
|
106
|
+
skill-flow add https://github.com/garrytan/gstack/tree/main/skills
|
|
107
|
+
|
|
108
|
+
# Import the repo, but only preselect skills under a subpath
|
|
109
|
+
skill-flow add garrytan/gstack --path skills
|
|
110
|
+
|
|
111
|
+
# ClawHub package
|
|
112
|
+
skill-flow add clawhub:example/skill-pack
|
|
113
|
+
skill-flow add clawhub:example/skill-pack@1.2.3
|
|
114
|
+
```
|
|
115
|
+
|
|
87
116
|
## Command Reference
|
|
88
117
|
|
|
89
118
|
| Command | Description |
|
|
90
119
|
|---|---|
|
|
91
|
-
| `add <source>` | Add a source
|
|
120
|
+
| `add <source>` | Add a skill source (local path, Git repo, or ClawHub) |
|
|
92
121
|
| `find <query>` | Search installed skills, built-in Git catalogs, and ClawHub |
|
|
93
122
|
| `search <query>` | Alias of `find` |
|
|
94
|
-
| `list` | Show
|
|
123
|
+
| `list` | Show skills groups |
|
|
95
124
|
| `config` | Open interactive configuration UI |
|
|
96
|
-
| `update [sourceId] --all` | Update
|
|
97
|
-
| `doctor` |
|
|
98
|
-
| `uninstall <sourceIds...>` | Remove
|
|
125
|
+
| `update [sourceId] --all` | Update all skills and re-deploy |
|
|
126
|
+
| `doctor` | Check for problems |
|
|
127
|
+
| `uninstall <sourceIds...>` | Remove skills groups and their deployments |
|
|
99
128
|
|
|
100
129
|
When selected skills collide by name, `skill-flow` keeps identical duplicates as warnings and renames different-content collisions with repo/author-prefixed link names such as `gstack-browse`, `gstack(garrytan)-browse`, or `garrytan-skill-creator`.
|
|
101
130
|
|
|
102
131
|
## How It Works
|
|
103
132
|
|
|
104
133
|
**State Management**
|
|
105
|
-
- `~/.skillflow/manifest.json` - Your configuration
|
|
106
|
-
- `~/.skillflow/lock.json` - Actual
|
|
107
|
-
- `~/.skillflow/source/
|
|
108
|
-
- `~/.skillflow/source/
|
|
134
|
+
- `~/.skillflow/manifest.json` - Your configuration (what you want)
|
|
135
|
+
- `~/.skillflow/lock.json` - Actual state (what's installed)
|
|
136
|
+
- `~/.skillflow/source/local/<source-id>/` - Imported local sources and adopted unmanaged external skills
|
|
137
|
+
- `~/.skillflow/source/git/<source-id>/` - Git repo cache
|
|
138
|
+
- `~/.skillflow/source/clawhub/<source-id>/` - ClawHub cache
|
|
109
139
|
- `~/.skillflow/catalog/git/<source-id>/` - Built-in Git catalog cache
|
|
110
140
|
|
|
111
|
-
**
|
|
112
|
-
|
|
141
|
+
**Deployment Strategy**
|
|
142
|
+
Uses symlinks when possible, file copies when needed. Target directories are just deploy points — real state lives in lock.json.
|
|
143
|
+
|
|
144
|
+
**Config Bootstrap**
|
|
145
|
+
- detect available agent targets
|
|
146
|
+
- scan known agent `skills/` roots for unmanaged skills
|
|
147
|
+
- import unmanaged external skills into `~/.skillflow/source/local/`
|
|
148
|
+
- refresh inventory, normalize bindings, and audit projections
|
|
149
|
+
- enter the interactive config UI
|
|
150
|
+
|
|
151
|
+
Already-managed projections are not imported again. For example, if an agent root contains symlinks that already point into `~/.skillflow/source/*`, bootstrap treats them as managed state and skips them.
|
|
113
152
|
|
|
114
153
|
## Supported Agents
|
|
115
154
|
|
|
@@ -117,7 +156,7 @@ Claude Code · Codex · Cursor · GitHub Copilot · Gemini CLI · OpenCode · Op
|
|
|
117
156
|
|
|
118
157
|
Customize target paths via environment variables (e.g., `SKILL_FLOW_TARGET_CLAUDE_CODE`).
|
|
119
158
|
|
|
120
|
-
Broader ecosystem path references, including project-level rules and instructions paths
|
|
159
|
+
Broader ecosystem path references, including project-level rules and instructions paths (docs TBD).
|
|
121
160
|
|
|
122
161
|
## Built-in Discovery Catalogs
|
|
123
162
|
|
package/README.zh.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Skill Flow
|
|
2
2
|
|
|
3
|
-
> **让
|
|
4
|
-
>
|
|
3
|
+
> **让 Skill 管理回归本质。**
|
|
4
|
+
> Skill 分组 · 一键部署到多个工具 · 配置清晰 · 问题快速定位
|
|
5
5
|
|
|
6
6
|

|
|
7
7
|
|
|
@@ -10,26 +10,30 @@
|
|
|
10
10
|
[](https://nodejs.org)
|
|
11
11
|
[](./LICENSE)
|
|
12
12
|
|
|
13
|
-
当你的
|
|
13
|
+
当你的 Skill 越装越多,管理就会变得混乱:从 Github 仓库下载了一堆相关技能,部署到不同 agent 后结构被打散,更新和排障变得困难。
|
|
14
14
|
|
|
15
|
-
`skill-flow`
|
|
15
|
+
`skill-flow` 用 Skill 视角重新组织管理:以 Github 仓库作为 Skill 分组依据,选择部署目标,统一更新,快速诊断问题。让 Skill 管理清晰、可控、高效。
|
|
16
16
|
|
|
17
17
|
## 核心特性
|
|
18
|
+

|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
一个
|
|
20
|
+
**Skill 分组管理**
|
|
21
|
+
一个 Github 仓库 = 一个 Skill 分组。相关 Skills 保持在一起,更新和维护以分组为单位进行。
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
**一键部署到多个工具**
|
|
24
|
+
一次配置,部署到多个 agent(Claude Code、Cursor、Windsurf 等 13+ 目标)。
|
|
24
25
|
|
|
25
26
|
**交互式终端 UI**
|
|
26
27
|
直观的 TUI 界面:查看分组 → 选择技能 → 选择目标 → 保存配置。
|
|
27
28
|
|
|
29
|
+
**进入 Config 自动自举**
|
|
30
|
+
`config` 会先立即渲染,再显示启动进度;启动阶段会识别 agent 根目录里尚未纳入管理的 skill,回填到 `skill-flow`,并在进入主界面前完成状态审计。
|
|
31
|
+
|
|
28
32
|
**显式状态追踪**
|
|
29
|
-
`manifest.json` 记录你的意图,`lock.json`
|
|
33
|
+
`manifest.json` 记录你的意图,`lock.json` 记录实际安装状态。状态清晰可查。
|
|
30
34
|
|
|
31
|
-
|
|
32
|
-
`doctor`
|
|
35
|
+
**一键体检**
|
|
36
|
+
`doctor` 命令检测断链、不一致、冲突,精准定位问题。
|
|
33
37
|
|
|
34
38
|
## 安装
|
|
35
39
|
|
|
@@ -64,7 +68,7 @@ npm link
|
|
|
64
68
|
# 添加技能源
|
|
65
69
|
skill-flow add /path/to/skills-repo
|
|
66
70
|
|
|
67
|
-
#
|
|
71
|
+
# 查看 Skill 分组
|
|
68
72
|
skill-flow list
|
|
69
73
|
|
|
70
74
|
# 交互式配置(选择技能和目标)
|
|
@@ -76,7 +80,7 @@ skill-flow update --all
|
|
|
76
80
|
# 健康检查
|
|
77
81
|
skill-flow doctor
|
|
78
82
|
|
|
79
|
-
#
|
|
83
|
+
# 移除 Skill 分组
|
|
80
84
|
skill-flow uninstall my-source-id
|
|
81
85
|
```
|
|
82
86
|
|
|
@@ -84,32 +88,66 @@ skill-flow uninstall my-source-id
|
|
|
84
88
|
|
|
85
89
|
`add` 默认会预选该源的全部 skill,以及当前检测到的全部 agent 目标。传入 `--path <repoSubpath>` 时,仍然会导入整个仓库,但只会预选该路径下的 skill。
|
|
86
90
|
|
|
91
|
+
示例:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# 本地仓库
|
|
95
|
+
skill-flow add ~/code/my-skills
|
|
96
|
+
|
|
97
|
+
# GitHub 简写
|
|
98
|
+
skill-flow add garrytan/gstack
|
|
99
|
+
|
|
100
|
+
# 完整 Git URL
|
|
101
|
+
skill-flow add https://github.com/garrytan/gstack.git
|
|
102
|
+
skill-flow add git@github.com:garrytan/gstack.git
|
|
103
|
+
|
|
104
|
+
# GitHub tree URL
|
|
105
|
+
skill-flow add https://github.com/garrytan/gstack/tree/main/skills
|
|
106
|
+
|
|
107
|
+
# 导入整个仓库,但只预选某个子路径下的 skill
|
|
108
|
+
skill-flow add garrytan/gstack --path skills
|
|
109
|
+
|
|
110
|
+
# ClawHub 包
|
|
111
|
+
skill-flow add clawhub:example/skill-pack
|
|
112
|
+
skill-flow add clawhub:example/skill-pack@1.2.3
|
|
113
|
+
```
|
|
114
|
+
|
|
87
115
|
## 命令参考
|
|
88
116
|
|
|
89
117
|
| 命令 | 说明 |
|
|
90
118
|
|---|---|
|
|
91
|
-
| `add <source>` |
|
|
119
|
+
| `add <source>` | 添加技能源(本地路径、Git 仓库或 ClawHub) |
|
|
92
120
|
| `find <query>` | 搜索本地已安装技能、内置 Git 仓库和 ClawHub |
|
|
93
121
|
| `search <query>` | `find` 的别名 |
|
|
94
|
-
| `list` |
|
|
122
|
+
| `list` | 显示 Skill 分组 |
|
|
95
123
|
| `config` | 打开交互式配置界面 |
|
|
96
|
-
| `update [sourceId] --all` |
|
|
97
|
-
| `doctor` |
|
|
98
|
-
| `uninstall <sourceIds...>` |
|
|
124
|
+
| `update [sourceId] --all` | 更新所有技能并重新部署 |
|
|
125
|
+
| `doctor` | 体检,排查问题 |
|
|
126
|
+
| `uninstall <sourceIds...>` | 移除 Skill 分组及其部署 |
|
|
99
127
|
|
|
100
128
|
当已选 skill 出现同名冲突时,`skill-flow` 会把内容完全相同的重复项保留为 warning,把内容不同的冲突项改成带 repo / author 前缀的链接名,例如 `gstack-browse`、`gstack(garrytan)-browse` 或 `garrytan-skill-creator`。
|
|
101
129
|
|
|
102
130
|
## 工作原理
|
|
103
131
|
|
|
104
132
|
**状态管理**
|
|
105
|
-
- `~/.skillflow/manifest.json` -
|
|
106
|
-
- `~/.skillflow/lock.json` -
|
|
107
|
-
- `~/.skillflow/source/
|
|
108
|
-
- `~/.skillflow/source/
|
|
133
|
+
- `~/.skillflow/manifest.json` - 你的配置(你想要什么)
|
|
134
|
+
- `~/.skillflow/lock.json` - 实际状态(实际装了什么)
|
|
135
|
+
- `~/.skillflow/source/local/<source-id>/` - 本地导入源,以及启动时接管的外部 skill
|
|
136
|
+
- `~/.skillflow/source/git/<source-id>/` - Git 仓库缓存
|
|
137
|
+
- `~/.skillflow/source/clawhub/<source-id>/` - ClawHub 缓存
|
|
109
138
|
- `~/.skillflow/catalog/git/<source-id>/` - 内置 Git 仓库缓存
|
|
110
139
|
|
|
111
|
-
|
|
112
|
-
|
|
140
|
+
**部署策略**
|
|
141
|
+
优先使用符号链接,必要时使用文件复制。目标目录只是部署点,真正的状态在 lock.json 里。
|
|
142
|
+
|
|
143
|
+
**Config 启动时会做什么**
|
|
144
|
+
- 检测当前可用 agent 目标
|
|
145
|
+
- 扫描已知 agent `skills/` 根目录中的未受管 skill
|
|
146
|
+
- 将这些外部 skill 导入到 `~/.skillflow/source/local/`
|
|
147
|
+
- 刷新 inventory、归一化 bindings、审计当前投影状态
|
|
148
|
+
- 然后进入交互式 config 界面
|
|
149
|
+
|
|
150
|
+
如果某个 agent 根目录里的 symlink 本来就已经指向 `~/.skillflow/source/*` 下的受管内容,bootstrap 会把它视为已管理状态,不会重复回填。
|
|
113
151
|
|
|
114
152
|
## 支持的 Agent
|
|
115
153
|
|
|
@@ -117,7 +155,7 @@ Claude Code · Codex · Cursor · GitHub Copilot · Gemini CLI · OpenCode · Op
|
|
|
117
155
|
|
|
118
156
|
可通过环境变量自定义目标路径(如 `SKILL_FLOW_TARGET_CLAUDE_CODE`)。
|
|
119
157
|
|
|
120
|
-
更广义的生态路径参考,包括 project 级 rules / instructions
|
|
158
|
+
更广义的生态路径参考,包括 project 级 rules / instructions 路径(文档整理中)。
|
|
121
159
|
|
|
122
160
|
## 默认内置发现仓库
|
|
123
161
|
|
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { Command } from "commander";
|
|
4
4
|
import { render } from "ink";
|
|
5
5
|
import { SkillFlowApp } from "./services/skill-flow.js";
|
|
6
|
-
import {
|
|
6
|
+
import { ConfigBootstrapApp } from "./tui/config-app.js";
|
|
7
7
|
import { FindApp } from "./tui/find-app.js";
|
|
8
8
|
import { formatGroupRef } from "./utils/naming.js";
|
|
9
9
|
import { formatDoctorIssue, formatWorkflowList, } from "./utils/format.js";
|
|
@@ -13,7 +13,7 @@ const app = new SkillFlowApp();
|
|
|
13
13
|
program
|
|
14
14
|
.name("skill-flow")
|
|
15
15
|
.description("Workflow-first skill projection manager")
|
|
16
|
-
.version("1.0.
|
|
16
|
+
.version("1.0.3");
|
|
17
17
|
program
|
|
18
18
|
.command("add")
|
|
19
19
|
.argument("<source>", "Source locator")
|
|
@@ -48,13 +48,13 @@ program
|
|
|
48
48
|
.argument("<query>", "Search query")
|
|
49
49
|
.option("--json", "Print JSON output")
|
|
50
50
|
.action(async (query, options) => {
|
|
51
|
-
const result = await app.findSkills(query);
|
|
52
|
-
if (!result.ok) {
|
|
53
|
-
printErrors(result.errors);
|
|
54
|
-
process.exitCode = 1;
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
51
|
if (options.json) {
|
|
52
|
+
const result = await app.findSkills(query);
|
|
53
|
+
if (!result.ok) {
|
|
54
|
+
printErrors(result.errors);
|
|
55
|
+
process.exitCode = 1;
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
58
|
console.log(JSON.stringify(result.data.candidates.map((candidate) => ({
|
|
59
59
|
...candidate,
|
|
60
60
|
nextCommand: buildFindCommand(candidate),
|
|
@@ -62,43 +62,17 @@ program
|
|
|
62
62
|
printWarnings(result.warnings.map((warning) => warning.message));
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
|
-
const instance = render(_jsx(FindApp, { app: app, query: query
|
|
66
|
-
if (result.warnings.length > 0) {
|
|
67
|
-
for (const warning of result.warnings) {
|
|
68
|
-
console.warn(`warning: ${warning.message}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
65
|
+
const instance = render(_jsx(FindApp, { app: app, query: query }));
|
|
71
66
|
await instance.waitUntilExit();
|
|
72
67
|
});
|
|
73
68
|
program.command("config").action(async () => {
|
|
74
|
-
const
|
|
75
|
-
if (!result.ok) {
|
|
76
|
-
printErrors(result.errors);
|
|
77
|
-
process.exitCode = 1;
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
const initialDrafts = Object.fromEntries(result.data.summaries.map((summary) => {
|
|
81
|
-
const targets = summary.bindings.targets;
|
|
82
|
-
const enabledTargets = Object.entries(targets)
|
|
83
|
-
.filter(([, value]) => value?.enabled)
|
|
84
|
-
.map(([target]) => target);
|
|
85
|
-
const selectedLeafIds = [...new Set(enabledTargets.flatMap((target) => targets[target]?.leafIds ?? []))];
|
|
86
|
-
return [
|
|
87
|
-
summary.source.id,
|
|
88
|
-
{
|
|
89
|
-
enabledTargets,
|
|
90
|
-
selectedLeafIds,
|
|
91
|
-
},
|
|
92
|
-
];
|
|
93
|
-
}));
|
|
94
|
-
const availableTargets = await app.getAvailableTargets();
|
|
95
|
-
const instance = render(_jsx(ConfigApp, { app: app, availableTargets: availableTargets, summaries: result.data.summaries, initialDrafts: initialDrafts }));
|
|
69
|
+
const instance = render(_jsx(ConfigBootstrapApp, { app: app }));
|
|
96
70
|
await instance.waitUntilExit();
|
|
97
71
|
});
|
|
98
72
|
program
|
|
99
73
|
.command("update")
|
|
100
|
-
.argument("[sourceId]", "Optional
|
|
101
|
-
.option("--all", "Update all registered
|
|
74
|
+
.argument("[sourceId]", "Optional skills group id")
|
|
75
|
+
.option("--all", "Update all registered skills groups")
|
|
102
76
|
.action(async (sourceId, options) => {
|
|
103
77
|
const ids = options.all || !sourceId ? undefined : [sourceId];
|
|
104
78
|
const result = await app.updateSources(ids);
|
|
@@ -134,7 +108,7 @@ program.command("doctor").action(async () => {
|
|
|
134
108
|
});
|
|
135
109
|
program
|
|
136
110
|
.command("uninstall")
|
|
137
|
-
.argument("<sourceIds...>", "
|
|
111
|
+
.argument("<sourceIds...>", "Skills group ids to remove")
|
|
138
112
|
.action(async (sourceIds) => {
|
|
139
113
|
const result = await app.uninstall(sourceIds);
|
|
140
114
|
if (!result.ok) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";;AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":"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"}
|
package/dist/domain/types.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export type Result<T> = {
|
|
|
17
17
|
warnings: Warning[];
|
|
18
18
|
errors: Failure[];
|
|
19
19
|
};
|
|
20
|
-
export type SourceKind = "git" | "clawhub";
|
|
20
|
+
export type SourceKind = "local" | "git" | "clawhub";
|
|
21
21
|
export type DeploymentTargetName = "claude-code" | "codex" | "cursor" | "github-copilot" | "gemini-cli" | "opencode" | "openclaw" | "pi" | "windsurf" | "roo-code" | "cline" | "amp" | "kiro";
|
|
22
22
|
export type DeploymentStrategy = "symlink" | "copy";
|
|
23
23
|
export type HealthStatus = "HEALTHY" | "ACTIVE" | "INACTIVE" | "PARTIAL" | "BLOCKED" | "INVALID" | "UPDATE AVAILABLE" | "UP TO DATE" | "DRIFT DETECTED";
|
|
@@ -28,6 +28,9 @@ export type SourceManifestRecord = {
|
|
|
28
28
|
displayName: string;
|
|
29
29
|
addedAt: string;
|
|
30
30
|
requestedPath?: string;
|
|
31
|
+
selectionMode?: "all" | "partial";
|
|
32
|
+
originLocator?: string;
|
|
33
|
+
originRequestedPath?: string;
|
|
31
34
|
};
|
|
32
35
|
export type TargetBinding = {
|
|
33
36
|
enabled: boolean;
|
|
@@ -59,6 +62,9 @@ export type SourceLockRecord = {
|
|
|
59
62
|
resolvedVersion?: string;
|
|
60
63
|
contentHash?: string;
|
|
61
64
|
versionMode?: "pinned" | "floating";
|
|
65
|
+
originBranch?: string;
|
|
66
|
+
importedFromTargets?: DeploymentTargetName[];
|
|
67
|
+
importMode?: "explicit-add" | "bootstrap-detected";
|
|
62
68
|
};
|
|
63
69
|
export type LeafRecord = {
|
|
64
70
|
id: string;
|
|
@@ -138,6 +144,11 @@ export type WorkflowSummary = {
|
|
|
138
144
|
bindings: SourceBinding;
|
|
139
145
|
activeTargetCount: number;
|
|
140
146
|
health: HealthStatus;
|
|
147
|
+
issueCounts?: {
|
|
148
|
+
warning: number;
|
|
149
|
+
error: number;
|
|
150
|
+
};
|
|
151
|
+
healthReason?: string;
|
|
141
152
|
};
|
|
142
153
|
export type SkillCandidateAction = {
|
|
143
154
|
type: "none";
|
|
@@ -125,7 +125,7 @@ export class DoctorService {
|
|
|
125
125
|
target: deployment.target,
|
|
126
126
|
leafId: deployment.leafId,
|
|
127
127
|
code: "STALE_DEPLOYMENT",
|
|
128
|
-
message: "Saved deployment exists for a
|
|
128
|
+
message: "Saved deployment exists for a skills group that is no longer registered.",
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-service.js","sourceRoot":"","sources":["../../src/services/doctor-service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"doctor-service.js","sourceRoot":"","sources":["../../src/services/doctor-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DeploymentAction, DeploymentPlan, DeploymentTargetName, DoctorReport, LockFile, Manifest, Result, SkillCandidate, SourceBinding,
|
|
1
|
+
import type { DeploymentAction, DeploymentPlan, DeploymentTargetName, DoctorReport, LockFile, Manifest, Result, SkillCandidate, SourceBinding, WorkflowSummary } from "../domain/types.js";
|
|
2
2
|
import { StateStore } from "../state/store.js";
|
|
3
3
|
import { DeploymentApplier } from "./deployment-applier.js";
|
|
4
4
|
import { DeploymentPlanner } from "./deployment-planner.js";
|
|
@@ -6,7 +6,8 @@ import { DoctorService } from "./doctor-service.js";
|
|
|
6
6
|
import { InventoryService } from "./inventory-service.js";
|
|
7
7
|
import { SourceService } from "./source-service.js";
|
|
8
8
|
import { WorkflowService } from "./workflow-service.js";
|
|
9
|
-
import type { AddSourceOptions } from "./source-service.js";
|
|
9
|
+
import type { AddSourceOptions, SourceSnapshot } from "./source-service.js";
|
|
10
|
+
import { WorkspaceBootstrapService, type BootstrapEvent } from "./workspace-bootstrap-service.js";
|
|
10
11
|
export type DraftBinding = {
|
|
11
12
|
enabledTargets: DeploymentTargetName[];
|
|
12
13
|
selectedLeafIds: string[];
|
|
@@ -19,17 +20,8 @@ export declare class SkillFlowApp {
|
|
|
19
20
|
readonly applier: DeploymentApplier;
|
|
20
21
|
readonly doctorService: DoctorService;
|
|
21
22
|
readonly workflowService: WorkflowService;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
data: import("./source-service.js").SourceSnapshot;
|
|
25
|
-
warnings: Warning[];
|
|
26
|
-
errors: [];
|
|
27
|
-
} | {
|
|
28
|
-
ok: false;
|
|
29
|
-
data?: import("./source-service.js").SourceSnapshot;
|
|
30
|
-
warnings: Warning[];
|
|
31
|
-
errors: import("../domain/types.js").Failure[];
|
|
32
|
-
}>;
|
|
23
|
+
readonly workspaceBootstrapService: WorkspaceBootstrapService;
|
|
24
|
+
addSource(locator: string, options?: AddSourceOptions): Promise<Result<SourceSnapshot>>;
|
|
33
25
|
findSkills(query: string): Promise<Result<{
|
|
34
26
|
candidates: SkillCandidate[];
|
|
35
27
|
}>>;
|
|
@@ -41,6 +33,15 @@ export declare class SkillFlowApp {
|
|
|
41
33
|
lockFile: LockFile;
|
|
42
34
|
summaries: WorkflowSummary[];
|
|
43
35
|
}>>;
|
|
36
|
+
bootstrapWorkspaceState(onEvent?: (event: BootstrapEvent) => void): Promise<Result<{
|
|
37
|
+
availableTargets: DeploymentTargetName[];
|
|
38
|
+
manifest: Manifest;
|
|
39
|
+
lockFile: LockFile;
|
|
40
|
+
summaries: WorkflowSummary[];
|
|
41
|
+
initialDrafts: Record<string, DraftBinding>;
|
|
42
|
+
audit: DoctorReport;
|
|
43
|
+
importedSourceIds: string[];
|
|
44
|
+
}>>;
|
|
44
45
|
getAvailableTargets(): Promise<DeploymentTargetName[]>;
|
|
45
46
|
previewDraft(sourceId: string, draft: DraftBinding): Promise<Result<{
|
|
46
47
|
plan: DeploymentPlan;
|
|
@@ -89,4 +90,6 @@ export declare class SkillFlowApp {
|
|
|
89
90
|
private getQueryScore;
|
|
90
91
|
private getCandidateKey;
|
|
91
92
|
private formatSourceLabel;
|
|
93
|
+
private buildInitialDrafts;
|
|
94
|
+
private applySelectionModeForUpdatedSources;
|
|
92
95
|
}
|