@kanyun-ai-infra/band-cli 0.1.1 → 0.2.0
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/bundled/examples/aitutor-tool/band/views/release/package.json +1 -1
- package/bundled/examples/aitutor-tool/band/views/tool-preview/package.json +1 -1
- package/bundled/examples/analysis/band/views/intake/package.json +1 -1
- package/bundled/examples/compliance/band/views/compliance/package.json +1 -1
- package/bundled/examples/content-review/band/views/checklist/package.json +1 -1
- package/bundled/examples/rush-site/band/views/rush-db/package.json +1 -1
- package/bundled/examples/rush-site/band/views/rush-deploy/package.json +1 -1
- package/bundled/examples/video/band/views/timeline/package.json +1 -1
- package/bundled/kernel/fixture.js +1 -1
- package/bundled/kernel/index.js +1 -1
- package/bundled/official/activity/package.json +4 -4
- package/bundled/official/approval/package.json +4 -4
- package/bundled/official/artifacts/package.json +4 -4
- package/bundled/official/chat/package.json +4 -4
- package/bundled/official/chunks/{chunk-SB74RUTN.js → chunk-DIL5YSVK.js} +1 -1
- package/bundled/official/comment/dist/index.js +1 -1
- package/bundled/official/comment/package.json +4 -4
- package/bundled/official/header/package.json +4 -4
- package/bundled/official/home/package.json +4 -4
- package/bundled/official/layouts/package.json +4 -4
- package/bundled/official/library/dist/index.js +1 -1
- package/bundled/official/library/package.json +4 -4
- package/bundled/official/members/package.json +4 -4
- package/bundled/official/memory/package.json +4 -4
- package/bundled/official/native/package.json +2 -2
- package/bundled/official/params-form/package.json +4 -4
- package/bundled/official/plugins/package.json +4 -4
- package/bundled/official/project/dist/index.js +1 -1
- package/bundled/official/project/package.json +4 -4
- package/bundled/official/queue/package.json +4 -4
- package/bundled/official/settings/package.json +4 -4
- package/bundled/official/shell/dist/index.js +1 -1
- package/bundled/official/shell/package.json +4 -4
- package/bundled/official/stages/package.json +4 -4
- package/bundled/official/threads/package.json +4 -4
- package/bundled/official/turn-bar/package.json +4 -4
- package/bundled/official/turn-trace/package.json +4 -4
- package/bundled/official/version-switch/dist/index.js +1 -1
- package/bundled/official/version-switch/package.json +4 -4
- package/bundled/official/viewer-entity/package.json +2 -2
- package/bundled/official/viewer-external/package.json +2 -2
- package/bundled/official/viewer-image/package.json +2 -2
- package/bundled/official/viewer-media/package.json +2 -2
- package/bundled/official/viewer-storyboard/package.json +2 -2
- package/bundled/official/viewer-text/package.json +4 -4
- package/bundled/official/viewer-tool/package.json +2 -2
- package/bundled/official/viewer-web/package.json +2 -2
- package/bundled/official/viewer-web-app/package.json +2 -2
- package/bundled/official/workshops/dist/index.js +2 -2
- package/bundled/official/workshops/package.json +4 -4
- package/bundled/official/workshops/plugin.yaml +2 -2
- package/bundled/skills/band-plugin/references/code.md +2 -2
- package/bundled/skills/band-plugin/references/manifest.md +2 -2
- package/bundled/skills/band-plugin/references/rules.md +1 -0
- package/bundled/skills/band-plugin/references/testing-publish.md +1 -1
- package/bundled/skills/band-plugin/templates/panel/package.json +1 -1
- package/dev-host/app.tsx +9 -5
- package/dist/bin.js +3 -3
- package/dist/build-plugin.d.ts +1 -1
- package/dist/build-plugin.js +1 -1
- package/dist/{chunk-TQHHHXXU.js → chunk-LGYGWMSY.js} +18 -16
- package/dist/{chunk-VTAJX7NN.js → chunk-Q2XJXNVH.js} +16 -9
- package/dist/{chunk-JWZU3NOD.js → chunk-XPLYTHNX.js} +1 -1
- package/dist/{dev-server-SB5FMSVP.js → dev-server-Q7NTJ3QD.js} +19 -4
- package/dist/fixture.d.ts +11 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/vite.d.ts +1 -1
- package/dist/vite.js +2 -2
- package/dist/{workshop-repo-Uq6blxyt.d.ts → workshop-repo-DqoVdcGu.d.ts} +9 -9
- package/package.json +9 -7
- package/src/dev-managers.ts +16 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kanyun-ai-infra/band-workshops",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "工坊目录、工坊详情、新建项目、新建与复制工坊、工坊设置与对话改工坊九个页面",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./dist/index.js"
|
|
8
8
|
},
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@kanyun-ai-infra/band-plugin-sdk": "^
|
|
11
|
-
"react": "^
|
|
12
|
-
"react-dom": "^
|
|
10
|
+
"@kanyun-ai-infra/band-plugin-sdk": "^2.0.0",
|
|
11
|
+
"react": "^19.0.0",
|
|
12
|
+
"react-dom": "^19.0.0",
|
|
13
13
|
"@kanyun-ai-infra/band-shell": "*"
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 官方插件:工坊目录、工坊详情、新建项目、新建工坊与基于已有工坊新建、工坊设置(v8 §7)。往外壳的 pages 贡献九页:/workshops 目录,
|
|
2
2
|
# /w/<工坊>/about 详情(工坊轻应用的「关于工坊」),/w/<工坊>/new 用这个工坊新建项目,/workshops/new 新建工坊,
|
|
3
3
|
# /workshops/<工坊>/copy 复制这个工坊(不放在 /w/ 下:那一层的第二段是项目短名),/w/<工坊>/about/model 工坊设置 ·
|
|
4
4
|
# 模型,/w/<工坊>/about/secrets 工坊设置 · 密钥,/w/<工坊>/new/resume 从「我的模型与凭据」配好回来后接着新建。旧地址写在 aliases,打开时改写成新地址。
|
|
@@ -39,7 +39,7 @@ contributes:
|
|
|
39
39
|
- slot: "@kanyun-ai-infra/band-shell/pages"
|
|
40
40
|
id: copy
|
|
41
41
|
route: /workshops/:workshop/copy
|
|
42
|
-
title:
|
|
42
|
+
title: 基于已有工坊新建
|
|
43
43
|
frame: shell
|
|
44
44
|
# 工坊设置 · 模型(建工坊的第 2 步也是这一页):/w/<工坊>/about/model,比 about 更具体;部署没开代建时页面写明没有这一步
|
|
45
45
|
- slot: "@kanyun-ai-infra/band-shell/pages"
|
|
@@ -44,7 +44,7 @@ export default definePlugin({
|
|
|
44
44
|
|
|
45
45
|
- `ctx.version`:`current()` 当前版本(可能是 null),`subscribe` 换版本,`list(artifactId)` 一份产物的全部版本(从旧到新),`readFile(path)`、`objectUrl(path)` 读当前版本的文件(可传 `{ versionId }` 读别的版本)。查看器的 `ctx.version` 钉在正在看的版本上,换版本时整个重挂。
|
|
46
46
|
- `ctx.selection`:本项目里插件共享的选中,`get` / `set` / `subscribe`。五种:`{ kind: "artifact", artifactId }`、`{ kind: "entity", entityType, id, artifactId? }`、`{ kind: "timecode", seconds, end?, artifactId?, path? }`、`{ kind: "anchor", anchor }`、`{ kind: "stage", stage }`。`subscribe` 收到 `{ value, source }`,`source === ctx.plugin` 是自己的回声,跳过;不认识的 `kind` 当作与己无关。插件之间联动只靠它,不要互相 import 状态。
|
|
47
|
-
- `ctx.anchors.make(kind, payload, snapshot?)`:在当前版本上造锚点。内置类型直接写;自己注册的写短名,内核补成 `plugin:<包名>/<kind>`。内置类型的 payload 都要带 `label`,内容在文件里的还要带 `path
|
|
47
|
+
- `ctx.anchors.make(kind, payload, snapshot?)`:在当前版本上造锚点。内置类型直接写;自己注册的写短名,内核补成 `plugin:<包名>/<kind>`。内置类型的 payload 都要带 `label`,内容在文件里的还要带 `path`,多写字段也算不合写法(当前只在控制台警告,以后的协议大版本会改成报错;`shot` 现在就抛错)。自己注册的类型也把 `label` 写进 payload:线程里显示的位置文字取它,`AnchorType.label` 现在没人调用。形状:`entity` 是 `{ path, label, entityType, id, hash?, point? }`,`text-range` 是 `{ path, label, quote: { exact, prefix?, suffix? }, pos?, lines? }`,`region` 是 `{ path, label, rect: { x, y, w, h }, page? }`(0–1 比例),`timecode` 是 `{ path, label, seconds, end?, rect? }`,`shot` 是 `{ path: "storyboard.json", label, shotId, takeId? }`。
|
|
48
48
|
- `ctx.threads.list(filter)` 读线程;`ctx.threads.openAt(anchor, { draft, handToAgent, intent })` 请锁定的评论框在锚点上打开(`intent` 只有 `"pick"`:镜头候选上「用这条」,锚点是带 `takeId` 的 `shot`);`ctx.threads.open(id)` 打开已有线程。插件不能自己建线程。
|
|
49
49
|
- 引用:`ctx.threads.quote(threadId, commentId)` 把一条消息、`ctx.threads.quoteAnchor(anchor)` 把一处位置作为引用放进发送框,都不发送。
|
|
50
50
|
- `ctx.gate.open(stage, key?)` 请批准面板打开;`ctx.stages.list / get / start / rerun / rerunWith` 读写阶段运行。
|
|
@@ -55,4 +55,4 @@ export default definePlugin({
|
|
|
55
55
|
- `ctx.events.subscribe("thread.*", fn)`:按类型或前缀订阅事件。事件名以 `EVENT_TYPES`(`@kanyun-ai-infra/band-plugin-sdk` 导出)为准;关心意见就订 `EVENT_GROUPS.threads`(含评论、改动请求、回合),关心流程就订 `EVENT_GROUPS.stages`,别只订 `thread.*`。
|
|
56
56
|
- 打开停靠位:`(ctx.services.get("@kanyun-ai-infra/band-project/dock") as { open(key: string): void }).open("<包名>/<停靠位 id>")`。工具栏按钮写了 `dock` 的,查看器替你开。
|
|
57
57
|
- `ctx.member`(`can("comment")` 判能不能提意见)、`ctx.params`、`ctx.plugin`(本插件的包名)。
|
|
58
|
-
- 只给官方插件、工坊插件拿到 `undefined` 的:`notify`、`approvalSettings`、`memberSettings`、`visibilitySettings`、`artifactShares`、`version.archiveUrl`、`turns.requestStop`、`project.shared`、`project.notices`、`project.upgrade`、`project.remove`;`app.data.write.workshopArchive
|
|
58
|
+
- 只给官方插件、工坊插件拿到 `undefined` 的:`notify`、`approvalSettings`、`memberSettings`、`visibilitySettings`、`artifactShares`、`version.archiveUrl`、`turns.requestStop`、`project.shared`、`project.notices`、`project.upgrade`、`project.remove`;`app.data.write.workshopArchive`、`people`(人员目录)只给部署方案插件。不要写依赖它们的功能。
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"keywords": ["数据库", "表格"],
|
|
14
14
|
"type": "module",
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"@kanyun-ai-infra/band-plugin-sdk": "^
|
|
16
|
+
"@kanyun-ai-infra/band-plugin-sdk": "^2.0.0",
|
|
17
17
|
"@kanyun-ai-infra/band-project": "*",
|
|
18
18
|
"@kanyun-ai-infra/band-viewer-web": "*"
|
|
19
19
|
},
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
- 包名带作用域,工坊插件用工坊名(`band new plugin` 取工坊仓库的目录名,去掉 `band-` 前缀);`@kanyun-ai-infra/band-` 前缀只留给官方插件。
|
|
25
25
|
- `description`(一句话说明)与 `keywords` 显示在插件目录里,人和 Rondo 靠它们挑插件,写上。`"private": true` 表示只在本工坊用;工坊插件不发 npm 包。
|
|
26
|
-
- `peerDependencies` 必须有 `@kanyun-ai-infra/band-plugin-sdk`(协议版本,`^
|
|
26
|
+
- `peerDependencies` 必须有 `@kanyun-ai-infra/band-plugin-sdk`(协议版本,`^2.0.0`)。往谁的插槽贡献、用谁的服务,就把谁写进来;官方插件还没有对外版本号,写 `"*"`。
|
|
27
27
|
|
|
28
28
|
`plugin.yaml`:Band 的声明,不写 `name`(顶层写了 `name` 的是已废弃的 0.x 清单,`band check` 直接报错)。
|
|
29
29
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
- **异步要防乱序**:换版本、切环境时旧请求的结果可能晚到。每次加载记一个序号,结果回来时对不上就丢掉;读不到新数据时清空界面,不留旧数据(尤其是带「删除」按钮的表格)。
|
|
7
7
|
- **读不到不抛错**:版本里可能没有你要的文件、JSON 可能坏了。界面显示「这个版本没有……」,锚点解析返回 null。
|
|
8
8
|
- **路径参数要编码**:`ctx.resources.fetch` 的 path 里拼进去的 id 用 `encodeURIComponent`。
|
|
9
|
+
- **选人/选产物、标签、列表筛选、回执用现成组件**:`@kanyun-ai-infra/band-plugin-react` 导出 `Combobox`(可搜索单选/多选,受控 `items`/`value`/`onChange`,`label` 必写)、`TagInput`(字符串数组,回车或逗号确认、粘贴拆开、重复提示)、`FilterMenu` + `filterRows`(按几个单值维度筛,带计数)、`toast()`(一次性回执,只调不挂 `ToastHost`;失败用 `kind: "bad"` 带「重试」)。不要手写下拉搜索、标签输入、临时提示条。设置与表单里的保存反馈不弹 toast。详见用户文档「用 React 写插件」与 Band Design 站「组件」。
|
|
9
10
|
- **样式只用 Band Design token**:页面提供 `--panel`、`--ink`、`--muted`、`--accent`、`--r-lg` 等 CSS 变量,插件里不写死颜色,类名带插件名前缀。琥珀色(`--warn*`)只给部署方案装的插件(锁定插件、应用级页面)用,工坊插件不用。
|
|
10
11
|
- **工坊页面跟工坊最新发布走,项目页跟项目钉住的版本走**:同一工坊里两者可能是不同版本的插件代码。页面里不要假设项目页的面板、服务是同一版;页面只读本工坊的应用数据(`ctx.app.data` 已固定在本工坊,没有 `write`)。路由只写 `/w/:workshop/x/<页面>`,不写 `aliases`、`opens`。
|
|
11
12
|
- **不放凭据**:接口身份由 Band 代理注入,插件代码和仓库里都不出现 token、连接串。
|
|
@@ -32,4 +32,4 @@ bed.dispose();
|
|
|
32
32
|
|
|
33
33
|
`band publish <工坊仓库目录> --url <Band 服务地址> --workshop <id>` 先校验并要求工作区干净,用作者的 git 凭据推送远端同名分支(须与工坊发布分支一致),再用 `BAND_TOKEN` 的 Bearer 身份只调一次 POST releases,不调用工坊 GET。`--workshop` 必填,id 从工坊页地址 `/w/<id>` 获取。可 `--no-push` 跳过推送。不要将 token 写进工坊仓库或命令文本;真实服务发布依赖平台 token 功能,缺少鉴权时继续用页面。构建命令与带依赖预设在生产隔离端口未装配前仍关闭。
|
|
34
34
|
|
|
35
|
-
`band preview [分支] --workshop <id> [--project <项目 id>]`:把已 push 的分支建成预览快照(只读工坊仓库、不发新版本),带 `--project` 时打印 `?preview=` 的项目链接,只有工坊管理员能打开;token 要 `workshops:preview` scope
|
|
35
|
+
`band preview [分支] --workshop <id> [--project <项目 id>]`:把已 push 的分支建成预览快照(只读工坊仓库、不发新版本),带 `--project` 时打印 `?preview=` 的项目链接,只有工坊管理员能打开;token 要 `workshops:preview` scope。预览页的写入会落到打开的那个项目(试用项目就落在试用项目里)。
|
package/dev-host/app.tsx
CHANGED
|
@@ -34,6 +34,7 @@ import "./host.css";
|
|
|
34
34
|
import * as dev from "virtual:band-dev";
|
|
35
35
|
import { useEffect, useRef, useState } from "react";
|
|
36
36
|
import { createRoot } from "react-dom/client";
|
|
37
|
+
import { devManagers } from "../src/dev-managers.ts";
|
|
37
38
|
import { DEV_HOST_PLUGIN } from "../src/inspector-plugins.ts";
|
|
38
39
|
import { loadPlugins } from "../src/load-plugins.ts";
|
|
39
40
|
import { Inspector } from "./Inspector.tsx";
|
|
@@ -117,11 +118,14 @@ async function boot() {
|
|
|
117
118
|
}
|
|
118
119
|
: base;
|
|
119
120
|
const fixture = withStageDefs(withArtifacts(dev.fixture));
|
|
120
|
-
const transport = createFixtureTransport(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
const transport = createFixtureTransport(
|
|
122
|
+
{ ...fixture, managers: devManagers(roleParam, dev.roles, member.id) },
|
|
123
|
+
{
|
|
124
|
+
actor: { kind: "human", id: member.id },
|
|
125
|
+
defaultAgent: dev.agent,
|
|
126
|
+
resources: dev.resources,
|
|
127
|
+
},
|
|
128
|
+
);
|
|
125
129
|
|
|
126
130
|
// 插件入口并行导入;一个失败只让它进「没加载的插件」
|
|
127
131
|
const official: LoadedPlugin[] = [];
|
package/dist/bin.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
main
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Q2XJXNVH.js";
|
|
5
5
|
import "./chunk-CL3FV65M.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-XPLYTHNX.js";
|
|
7
|
+
import "./chunk-LGYGWMSY.js";
|
|
8
8
|
|
|
9
9
|
// src/bin.ts
|
|
10
10
|
process.exitCode = await main(process.argv.slice(2));
|
package/dist/build-plugin.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { SHARED_MODULES } from '@kanyun-ai-infra/band-plugin-sdk';
|
|
2
|
-
export { W as WORKSHOP_FORBIDDEN_IMPORTS, c as checkPlugin, a as checkPluginSources } from './workshop-repo-
|
|
2
|
+
export { W as WORKSHOP_FORBIDDEN_IMPORTS, c as checkPlugin, a as checkPluginSources } from './workshop-repo-DqoVdcGu.js';
|
|
3
3
|
import '@kanyun-ai-infra/band-contracts';
|
|
4
4
|
import 'zod';
|
|
5
5
|
|
package/dist/build-plugin.js
CHANGED
|
@@ -442,7 +442,7 @@ var ROLE_PERMISSIONS = [
|
|
|
442
442
|
"confirm",
|
|
443
443
|
"approve",
|
|
444
444
|
"publish",
|
|
445
|
-
/** @deprecated 管理权限由服务端的工坊与项目成员管理角色决定(`workshop_members`、`members.role`),这里照常校验但不起作用,`band check`
|
|
445
|
+
/** @deprecated 管理权限由服务端的工坊与项目成员管理角色决定(`workshop_members`、`members.role`),这里照常校验但不起作用,`band check` 告警;以后的协议大版本会改成拒绝。 */
|
|
446
446
|
"admin"
|
|
447
447
|
];
|
|
448
448
|
var RolePermissions = z2.array(z2.enum(ROLE_PERMISSIONS));
|
|
@@ -539,7 +539,7 @@ var WorkshopSchema = z2.object({
|
|
|
539
539
|
* 工坊的缺省 agent(1.11.0),缺省 `rondo`;agent 阶段写了 `agent` 就用阶段的(owner 11-02 启用阶段级 agent,
|
|
540
540
|
* [note](../../../.agents/notes/proposed/architecture/2026-10-27-single-agent-per-flow.md) 的部分取代头)。
|
|
541
541
|
* 写工坊项目里的 agent slug;阶段级 `agent` 覆盖它。`{ hubProject, slug }`(1.18.0)已弃用:1.x 照收并给告警,
|
|
542
|
-
* 解析出同一个 agent
|
|
542
|
+
* 解析出同一个 agent,以后的协议大版本会改成报错。
|
|
543
543
|
*/
|
|
544
544
|
agent: z2.union([Name, AgentRefSchema]).optional(),
|
|
545
545
|
/**
|
|
@@ -555,9 +555,9 @@ var WorkshopSchema = z2.object({
|
|
|
555
555
|
* 决定 3)。这里只认字段;发布检查与派发在服务端读它。
|
|
556
556
|
*/
|
|
557
557
|
userModelKey: z2.enum(["off", "allow", "require"]).optional(),
|
|
558
|
-
/** 已弃用:工坊只复制、不继承。1.x
|
|
558
|
+
/** 已弃用:工坊只复制、不继承。1.x 照旧合并并给警告,以后的协议大版本会改成报错;`overrides` 同。 */
|
|
559
559
|
extends: z2.string().min(1).optional(),
|
|
560
|
-
/** 已弃用:迭代方式写在 `repos.<名>.iteration` 上。1.x 只在没写 `repos`
|
|
560
|
+
/** 已弃用:迭代方式写在 `repos.<名>.iteration` 上。1.x 只在没写 `repos` 时接受并给警告(不再起作用),以后的协议大版本会改成报错。 */
|
|
561
561
|
iteration: IterationSchema.optional(),
|
|
562
562
|
repos: recordSchema2(Name, RepoSchema).optional(),
|
|
563
563
|
connectors: recordSchema2(Name, WorkshopConnectorSchema).optional(),
|
|
@@ -847,17 +847,17 @@ function inferConcept(s, kind, at, warnings) {
|
|
|
847
847
|
case "human":
|
|
848
848
|
if (s.gate !== void 0) return "check";
|
|
849
849
|
warnings.push(
|
|
850
|
-
`${at}: human \u9636\u6BB5\u65E2\u6CA1\u5199 produces \u4E5F\u6CA1\u5199\u95E8\u7981\uFF0C\u65E0\u4E8B\u53EF\u505A\uFF1B\u8981\u4EBA\u4EA4\u4E1C\u897F\u5199 produces\uFF08type: collect\uFF09\uFF0C\u8981\u4EBA\u9A8C\u5199\u95E8\u7981\uFF08type: review\uFF09\
|
|
850
|
+
`${at}: human \u9636\u6BB5\u65E2\u6CA1\u5199 produces \u4E5F\u6CA1\u5199\u95E8\u7981\uFF0C\u65E0\u4E8B\u53EF\u505A\uFF1B\u8981\u4EBA\u4EA4\u4E1C\u897F\u5199 produces\uFF08type: collect\uFF09\uFF0C\u8981\u4EBA\u9A8C\u5199\u95E8\u7981\uFF08type: review\uFF09\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519`
|
|
851
851
|
);
|
|
852
852
|
return "produce";
|
|
853
853
|
case "agent":
|
|
854
854
|
warnings.push(
|
|
855
|
-
`${at}: agent \u9636\u6BB5\u6CA1\u5199 produces\
|
|
855
|
+
`${at}: agent \u9636\u6BB5\u6CA1\u5199 produces\uFF0C\u5F53\u524D\u5F53\u4EA7\u51FA\u9636\u6BB5\u5904\u7406\uFF0C\u4EA7\u7269\u7C7B\u578B\u7B49\u4EA4\u4ED8\u65F6\u5B9A\uFF1B\u8865\u4E0A produces\uFF0C\u6216\u5199 type\uFF08\u4EA7\u51FA\u5199 generate\uFF09\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519`
|
|
856
856
|
);
|
|
857
857
|
return "produce";
|
|
858
858
|
case "external":
|
|
859
859
|
warnings.push(
|
|
860
|
-
`${at}: external \u9636\u6BB5\u6CA1\u5199 produces\
|
|
860
|
+
`${at}: external \u9636\u6BB5\u6CA1\u5199 produces\uFF0C\u5F53\u524D\u5F53\u4EA7\u51FA\u9636\u6BB5\u5904\u7406\uFF0C\u4EA7\u7269\u7C7B\u578B\u7B49\u5916\u90E8\u56DE\u8C03\u65F6\u5B9A\uFF1B\u8865\u4E0A produces\uFF0C\u6216\u5199 type\uFF08\u4EA7\u51FA\u5199 generate\uFF0C\u53D1\u5E03\u5199 publish\uFF0C\u68C0\u6D4B\u5199 check\uFF09\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519`
|
|
861
861
|
);
|
|
862
862
|
return "produce";
|
|
863
863
|
}
|
|
@@ -1388,12 +1388,12 @@ function compileWorkshop(input, options = {}) {
|
|
|
1388
1388
|
checkConnectors(def, options.connectors, issues, warnings);
|
|
1389
1389
|
if (isPlainObject(input) && (input.extends !== void 0 || input.overrides !== void 0))
|
|
1390
1390
|
warnings.push(
|
|
1391
|
-
"extends / overrides: \u5DF2\u5F03\u7528\uFF0C\u5DE5\u574A\u53EA\u590D\u5236\u3001\u4E0D\u7EE7\u627F\uFF1B\u8981\u5728\u522B\u7684\u5DE5\u574A\u4E0A\u6539\uFF0C\u5230\u5B83\u7684\u8BE6\u60C5\u9875\u70B9\u300C\u590D\u5236\u4E00\u4EFD\u300D\uFF0C\u4E4B\u540E\u4E24\u8FB9\u5404\u6539\u5404\u7684\
|
|
1391
|
+
"extends / overrides: \u5DF2\u5F03\u7528\uFF0C\u5DE5\u574A\u53EA\u590D\u5236\u3001\u4E0D\u7EE7\u627F\uFF1B\u8981\u5728\u522B\u7684\u5DE5\u574A\u4E0A\u6539\uFF0C\u5230\u5B83\u7684\u8BE6\u60C5\u9875\u70B9\u300C\u590D\u5236\u4E00\u4EFD\u300D\uFF0C\u4E4B\u540E\u4E24\u8FB9\u5404\u6539\u5404\u7684\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519"
|
|
1392
1392
|
);
|
|
1393
1393
|
for (const [name, role] of Object.entries(def.roles ?? {}))
|
|
1394
1394
|
if (permissionsOf(role).includes("admin"))
|
|
1395
1395
|
warnings.push(
|
|
1396
|
-
`roles.${name}: admin \u6743\u9650\u5DF2\u5F03\u7528\uFF0C\u5199\u4E86\u4E0D\u8D77\u4F5C\u7528\uFF1B\u7BA1\u7406\u6743\u9650\u6539\u7531\u5DE5\u574A\u4E0E\u9879\u76EE\u7684\u7BA1\u7406\u89D2\u8272\u7ED9\uFF08\u5DE5\u574A\u6210\u5458 workshop_members\u3001\u9879\u76EE\u6210\u5458 members.role\uFF09\
|
|
1396
|
+
`roles.${name}: admin \u6743\u9650\u5DF2\u5F03\u7528\uFF0C\u5199\u4E86\u4E0D\u8D77\u4F5C\u7528\uFF1B\u7BA1\u7406\u6743\u9650\u6539\u7531\u5DE5\u574A\u4E0E\u9879\u76EE\u7684\u7BA1\u7406\u89D2\u8272\u7ED9\uFF08\u5DE5\u574A\u6210\u5458 workshop_members\u3001\u9879\u76EE\u6210\u5458 members.role\uFF09\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519`
|
|
1397
1397
|
);
|
|
1398
1398
|
const types = def.artifactTypes ?? {};
|
|
1399
1399
|
const repos = compileRepos(def, options, issues, warnings);
|
|
@@ -1492,14 +1492,14 @@ function compileWorkshop(input, options = {}) {
|
|
|
1492
1492
|
const reservedFor = d.artifactType ? reservedTypeUse(d.artifactType) : void 0;
|
|
1493
1493
|
if (d.artifactType && d.artifactType !== PASS_ARTIFACT_TYPE && reservedFor !== void 0) {
|
|
1494
1494
|
warnings.push(
|
|
1495
|
-
`${at}.needs: ${d.stage}:${d.artifactType} \u6307\u5411\u5E73\u53F0\u4FDD\u7559\u540D\uFF08${reservedFor}\uFF09\uFF1B\u7ED9\u5DE5\u574A\u7684\u4EA7\u7269\u7C7B\u578B\u6362\u4E2A\u540D\u5B57\
|
|
1495
|
+
`${at}.needs: ${d.stage}:${d.artifactType} \u6307\u5411\u5E73\u53F0\u4FDD\u7559\u540D\uFF08${reservedFor}\uFF09\uFF1B\u7ED9\u5DE5\u574A\u7684\u4EA7\u7269\u7C7B\u578B\u6362\u4E2A\u540D\u5B57\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519`
|
|
1496
1496
|
);
|
|
1497
1497
|
}
|
|
1498
1498
|
}
|
|
1499
1499
|
for (const w of bypasses(stages, st)) warnings.push(`${at}.needs: ${w}`);
|
|
1500
1500
|
if (st.concept === "check" && st.deps.length === 0) {
|
|
1501
1501
|
warnings.push(
|
|
1502
|
-
`${at}: \u68C0\u67E5\u9636\u6BB5\u6CA1\u5199 needs\uFF0C\u6CA1\u6709\u4E1C\u897F\u53EF\u9A8C\uFF0C\u4E0D\u51FA\u5019\u9009\u4E5F\u4E0D\u53D1\u4EFB\u52A1\uFF1B\u5199\u4E0A\u8981\u9A8C\u7684\u4E0A\u6E38\u9636\u6BB5\
|
|
1502
|
+
`${at}: \u68C0\u67E5\u9636\u6BB5\u6CA1\u5199 needs\uFF0C\u6CA1\u6709\u4E1C\u897F\u53EF\u9A8C\uFF0C\u4E0D\u51FA\u5019\u9009\u4E5F\u4E0D\u53D1\u4EFB\u52A1\uFF1B\u5199\u4E0A\u8981\u9A8C\u7684\u4E0A\u6E38\u9636\u6BB5\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519`
|
|
1503
1503
|
);
|
|
1504
1504
|
}
|
|
1505
1505
|
if (st.concept === "check" && st.fanOut !== void 0) {
|
|
@@ -1639,7 +1639,7 @@ function compileWorkshop(input, options = {}) {
|
|
|
1639
1639
|
warnNonAgentStageAgent(workflows, warnings);
|
|
1640
1640
|
if (typeof def.agent === "object")
|
|
1641
1641
|
warnings.push(
|
|
1642
|
-
`agent: { hubProject, slug } \u5199\u6CD5\u5DF2\u5F03\u7528\uFF1B\u5DE5\u574A\u7EA7 agent \u76F4\u63A5\u5199\u5DE5\u574A\u9879\u76EE\u91CC\u7684 agent slug\uFF08agent: ${def.agent.slug}\uFF09\uFF0C\u9636\u6BB5\u7EA7 agent \u8986\u76D6\u5B83\u3002\u6539\u5199\u540E\u8FD9\u4E2A agent \u8981\u5728 agents \u91CC\u58F0\u660E\uFF0C\u4E14\u4E0D\u518D\u6309\u539F hubProject \u6D3E\u53D1\
|
|
1642
|
+
`agent: { hubProject, slug } \u5199\u6CD5\u5DF2\u5F03\u7528\uFF1B\u5DE5\u574A\u7EA7 agent \u76F4\u63A5\u5199\u5DE5\u574A\u9879\u76EE\u91CC\u7684 agent slug\uFF08agent: ${def.agent.slug}\uFF09\uFF0C\u9636\u6BB5\u7EA7 agent \u8986\u76D6\u5B83\u3002\u6539\u5199\u540E\u8FD9\u4E2A agent \u8981\u5728 agents \u91CC\u58F0\u660E\uFF0C\u4E14\u4E0D\u518D\u6309\u539F hubProject \u6D3E\u53D1\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519`
|
|
1643
1643
|
);
|
|
1644
1644
|
const agents = compileAgents(
|
|
1645
1645
|
def,
|
|
@@ -1777,7 +1777,7 @@ function compileRepos(def, options, issues, warnings) {
|
|
|
1777
1777
|
issues.push("iteration: \u8FED\u4EE3\u65B9\u5F0F\u5199\u5728 repos.<\u540D>.iteration \u4E0A\uFF0C\u5DE5\u574A\u7EA7\u7684 iteration \u5220\u6389");
|
|
1778
1778
|
} else {
|
|
1779
1779
|
warnings.push(
|
|
1780
|
-
"iteration: \u5DF2\u5F03\u7528\uFF0C\u4E0D\u518D\u8D77\u4F5C\u7528\uFF08\u5DE5\u574A\u4ED3\u5E93\u4E0D\u653E\u4EA7\u7269\uFF0C\u4E5F\u6CA1\u6709\u9879\u76EE\u5206\u652F\uFF09\uFF1B\u8981\u63D0\u4EA4\u4EE3\u7801\u7684\u4EA7\u7269\u5199\u5230 repos \u58F0\u660E\u7684\u76EE\u6807\u4ED3\u5E93\uFF0Citeration \u5199\u5728 repos.<\u540D> \u4E0A\
|
|
1780
|
+
"iteration: \u5DF2\u5F03\u7528\uFF0C\u4E0D\u518D\u8D77\u4F5C\u7528\uFF08\u5DE5\u574A\u4ED3\u5E93\u4E0D\u653E\u4EA7\u7269\uFF0C\u4E5F\u6CA1\u6709\u9879\u76EE\u5206\u652F\uFF09\uFF1B\u8981\u63D0\u4EA4\u4EE3\u7801\u7684\u4EA7\u7269\u5199\u5230 repos \u58F0\u660E\u7684\u76EE\u6807\u4ED3\u5E93\uFF0Citeration \u5199\u5728 repos.<\u540D> \u4E0A\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519"
|
|
1781
1781
|
);
|
|
1782
1782
|
}
|
|
1783
1783
|
}
|
|
@@ -1819,7 +1819,9 @@ function compileRepos(def, options, issues, warnings) {
|
|
|
1819
1819
|
function checkSurfaces(def, warnings) {
|
|
1820
1820
|
const surfaces = def.views?.surfaces;
|
|
1821
1821
|
if (surfaces === void 0) return;
|
|
1822
|
-
warnings.push(
|
|
1822
|
+
warnings.push(
|
|
1823
|
+
"views.surfaces: \u5F53\u524D\u8FD8\u6CA1\u6709\u6E32\u67D3\uFF0C\u5199\u4E86\u4E0D\u8D77\u4F5C\u7528\uFF1B\u5F62\u72B6\u5F85\u5B9A\uFF0C\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6309 schema \u6821\u9A8C"
|
|
1824
|
+
);
|
|
1823
1825
|
for (const [name, fields] of Object.entries(surfaces)) {
|
|
1824
1826
|
const at = `views.surfaces.${name}`;
|
|
1825
1827
|
if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(name))
|
|
@@ -1877,7 +1879,7 @@ function checkArtifactTypes(def, repos, issues, warnings) {
|
|
|
1877
1879
|
const reservedFor = reservedTypeUse(name);
|
|
1878
1880
|
if (reservedFor !== void 0) {
|
|
1879
1881
|
warnings.push(
|
|
1880
|
-
`${at}: ${name} \u662F\u5E73\u53F0\u4FDD\u7559\u7684\u4EA7\u7269\u7C7B\u578B\u540D\uFF08${reservedFor}\uFF09\uFF0C\u6362\u4E2A\u540D\u5B57\
|
|
1882
|
+
`${at}: ${name} \u662F\u5E73\u53F0\u4FDD\u7559\u7684\u4EA7\u7269\u7C7B\u578B\u540D\uFF08${reservedFor}\uFF09\uFF0C\u6362\u4E2A\u540D\u5B57\u3002\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519`
|
|
1881
1883
|
);
|
|
1882
1884
|
}
|
|
1883
1885
|
if (t.role === "process" && t.storage !== void 0 && t.storage !== "store") {
|
|
@@ -1901,7 +1903,7 @@ function checkArtifactTypes(def, repos, issues, warnings) {
|
|
|
1901
1903
|
}
|
|
1902
1904
|
if (t.repo === void 0 && t.paths === void 0) {
|
|
1903
1905
|
warnings.push(
|
|
1904
|
-
`${at}: storage: git \u8981\u5199 repo\uFF08repos \u91CC\u7684\u540D\u5B57\uFF09\u4E0E paths\uFF1B\u6CA1\u5199\u7684\u4EA7\u7269\u6CA1\u6709\u76EE\u6807\u4ED3\u5E93\
|
|
1906
|
+
`${at}: storage: git \u8981\u5199 repo\uFF08repos \u91CC\u7684\u540D\u5B57\uFF09\u4E0E paths\uFF1B\u6CA1\u5199\u7684\u4EA7\u7269\u6CA1\u6709\u76EE\u6807\u4ED3\u5E93\uFF0C\u4EE5\u540E\u7684\u534F\u8BAE\u5927\u7248\u672C\u4F1A\u6539\u6210\u62A5\u9519`
|
|
1905
1907
|
);
|
|
1906
1908
|
continue;
|
|
1907
1909
|
}
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
officialProfilePath,
|
|
11
11
|
resolvePluginRepo,
|
|
12
12
|
workshopNameOf
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-XPLYTHNX.js";
|
|
14
14
|
import {
|
|
15
15
|
IMPLICIT_STAGE,
|
|
16
16
|
SELF_CONTAINED_EXTENSIONS,
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
rolePermissions,
|
|
30
30
|
selfContainedProblems,
|
|
31
31
|
workshopFileReader
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-LGYGWMSY.js";
|
|
33
33
|
|
|
34
34
|
// src/index.ts
|
|
35
35
|
import { execFileSync } from "child_process";
|
|
@@ -310,6 +310,8 @@ function newPlugin(root, name, opts) {
|
|
|
310
310
|
description: title,
|
|
311
311
|
type: "module",
|
|
312
312
|
peerDependencies: {
|
|
313
|
+
react: "^19.0.0",
|
|
314
|
+
"react-dom": "^19.0.0",
|
|
313
315
|
"@kanyun-ai-infra/band-plugin-sdk": `^${BAND_PROTOCOL_VERSION}`,
|
|
314
316
|
[PROJECT]: "*"
|
|
315
317
|
}
|
|
@@ -432,6 +434,8 @@ ${t.manifest}`,
|
|
|
432
434
|
// 不带 --passWithNoTests:收不到测试要红,不吞成绿(band#456)
|
|
433
435
|
scripts: { check: "tsc -p tsconfig.json", test: "vitest run" },
|
|
434
436
|
peerDependencies: {
|
|
437
|
+
react: "^19.0.0",
|
|
438
|
+
"react-dom": "^19.0.0",
|
|
435
439
|
"@kanyun-ai-infra/band-plugin-sdk": "workspace:*",
|
|
436
440
|
[PROJECT]: "workspace:*"
|
|
437
441
|
},
|
|
@@ -642,7 +646,7 @@ import { parse } from "yaml";
|
|
|
642
646
|
// package.json
|
|
643
647
|
var package_default = {
|
|
644
648
|
name: "@kanyun-ai-infra/band-cli",
|
|
645
|
-
version: "0.
|
|
649
|
+
version: "0.2.0",
|
|
646
650
|
description: "band \u547D\u4EE4\u884C\uFF1A\u65B0\u5EFA\u3001\u672C\u5730\u8C03\u8BD5\u3001\u6821\u9A8C\u4E0E\u53D1\u5E03 Band \u5DE5\u574A\u548C\u63D2\u4EF6",
|
|
647
651
|
license: "UNLICENSED",
|
|
648
652
|
type: "module",
|
|
@@ -657,7 +661,8 @@ var package_default = {
|
|
|
657
661
|
},
|
|
658
662
|
"./build": {
|
|
659
663
|
types: "./dist/build-plugin.d.ts",
|
|
660
|
-
import: "./dist/build-plugin.js"
|
|
664
|
+
import: "./dist/build-plugin.js",
|
|
665
|
+
default: "./dist/build-plugin.js"
|
|
661
666
|
},
|
|
662
667
|
"./catalog": {
|
|
663
668
|
types: "./dist/plugin-entry.d.ts",
|
|
@@ -692,8 +697,8 @@ var package_default = {
|
|
|
692
697
|
"@kanyun-ai-infra/band-plugin-react": "workspace:^",
|
|
693
698
|
"@kanyun-ai-infra/band-plugin-sdk": "workspace:^",
|
|
694
699
|
"es-module-lexer": "^2.3.2",
|
|
695
|
-
react: "^
|
|
696
|
-
"react-dom": "^
|
|
700
|
+
react: "^19.3.1",
|
|
701
|
+
"react-dom": "^19.3.1",
|
|
697
702
|
semver: "^7.8.5",
|
|
698
703
|
vite: "^6.0.7",
|
|
699
704
|
yaml: "^2.6.1",
|
|
@@ -705,8 +710,8 @@ var package_default = {
|
|
|
705
710
|
"@kanyun-ai-infra/band-tokens": "workspace:*",
|
|
706
711
|
"@kanyun-ai-infra/band-workshop": "workspace:*",
|
|
707
712
|
"@types/node": "^22.10.0",
|
|
708
|
-
"@types/react": "^
|
|
709
|
-
"@types/react-dom": "^
|
|
713
|
+
"@types/react": "^19.3.0",
|
|
714
|
+
"@types/react-dom": "^19.3.0",
|
|
710
715
|
tsup: "^8.4.0",
|
|
711
716
|
typescript: "5.9.3",
|
|
712
717
|
vitest: "^4.0.17"
|
|
@@ -796,6 +801,8 @@ function packageJson(packageName, title) {
|
|
|
796
801
|
files: ["src", "plugin.yaml", "README.md"],
|
|
797
802
|
scripts: { dev: "band dev .", check: "band check ." },
|
|
798
803
|
peerDependencies: {
|
|
804
|
+
react: "^19.0.0",
|
|
805
|
+
"react-dom": "^19.0.0",
|
|
799
806
|
"@kanyun-ai-infra/band-plugin-sdk": `^${BAND_PROTOCOL_VERSION2}`,
|
|
800
807
|
[PROJECT2]: "*"
|
|
801
808
|
},
|
|
@@ -1980,7 +1987,7 @@ async function main(argv) {
|
|
|
1980
1987
|
if (cmd === "dev") {
|
|
1981
1988
|
const { args, flags } = parseArgs(rest, ["port", "host"]);
|
|
1982
1989
|
const port = flags.port === void 0 ? void 0 : parsePort(flags.port);
|
|
1983
|
-
const { startDevServer } = await import("./dev-server-
|
|
1990
|
+
const { startDevServer } = await import("./dev-server-Q7NTJ3QD.js");
|
|
1984
1991
|
const server = await startDevServer(args[0] ?? ".", {
|
|
1985
1992
|
...port !== void 0 ? { port } : {},
|
|
1986
1993
|
...flags.host ? { host: flags.host } : {}
|
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
bundledDir,
|
|
6
6
|
renderDevModule,
|
|
7
7
|
resolveDevWorkshop
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-XPLYTHNX.js";
|
|
9
|
+
import "./chunk-LGYGWMSY.js";
|
|
10
10
|
|
|
11
11
|
// src/dev-server.ts
|
|
12
12
|
import { createHash as createHash2 } from "crypto";
|
|
@@ -140,15 +140,30 @@ function upstreamKeyGuard(key) {
|
|
|
140
140
|
return {
|
|
141
141
|
name: "band-upstream-key",
|
|
142
142
|
configureServer(server) {
|
|
143
|
-
|
|
144
|
-
if (
|
|
143
|
+
const deny = (req, res) => {
|
|
144
|
+
if (req.method === "GET" && req.url === "/") {
|
|
145
|
+
res.statusCode = 204;
|
|
146
|
+
res.setHeader("Cache-Control", "no-store");
|
|
147
|
+
res.end();
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
145
150
|
res.statusCode = 403;
|
|
146
151
|
res.setHeader("Content-Type", "text/plain; charset=utf-8");
|
|
147
152
|
res.end("Forbidden");
|
|
153
|
+
};
|
|
154
|
+
server.middlewares.use((req, res, next) => {
|
|
155
|
+
if (upstreamKeyMatches(req.headers[UPSTREAM_KEY_HEADER], key)) return next();
|
|
156
|
+
deny(req, res);
|
|
148
157
|
});
|
|
149
158
|
const http = server.httpServer;
|
|
150
159
|
if (!http) return;
|
|
151
160
|
const original = http.listeners("upgrade");
|
|
161
|
+
const originalRequest = http.listeners("request");
|
|
162
|
+
http.removeAllListeners("request");
|
|
163
|
+
http.on("request", (req, res) => {
|
|
164
|
+
if (!upstreamKeyMatches(req.headers[UPSTREAM_KEY_HEADER], key)) return deny(req, res);
|
|
165
|
+
for (const listener of originalRequest) listener.call(http, req, res);
|
|
166
|
+
});
|
|
152
167
|
http.removeAllListeners("upgrade");
|
|
153
168
|
http.on("upgrade", (req, socket, head) => {
|
|
154
169
|
if (!upstreamKeyMatches(req.headers[UPSTREAM_KEY_HEADER], key)) return reject(socket);
|
package/dist/fixture.d.ts
CHANGED
|
@@ -43,6 +43,17 @@ interface FixtureData {
|
|
|
43
43
|
stages?: StageRunSummary[];
|
|
44
44
|
gates?: GateState[];
|
|
45
45
|
members?: MemberView[];
|
|
46
|
+
/**
|
|
47
|
+
* 项目创建人的用户 id(服务端里创建人就是 owner 角色,天然是管理员)。缺省没有创建人:不从起始身份推,
|
|
48
|
+
* 否则 `band dev` 这类固定身份的宿主里任何角色都会被当成管理员。`apps/web` 的 `kernelData()` 传
|
|
49
|
+
* `project.createdBy`,`band dev` 的 dev-host 按 `?role=` 传 `managers`,各自传。
|
|
50
|
+
*/
|
|
51
|
+
createdBy?: string;
|
|
52
|
+
/**
|
|
53
|
+
* 创建人之外的项目管理员(服务端 `members.role` 是 maintainer 的人;dev-host 里按角色参数决定)。
|
|
54
|
+
* `MemberView.roles` 是业务标签,不是管理角色,不参与。缺省没有管理员。
|
|
55
|
+
*/
|
|
56
|
+
managers?: string[];
|
|
46
57
|
/** 初始回合状态;缺省没有回合、队列为空。 */
|
|
47
58
|
turn?: TurnState;
|
|
48
59
|
/** 产物列表;缺省按版本里出现过的 artifactId 生成(名字即 id)。 */
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as WorkshopRepo, R as ResolvedPlugin, S as SkippedPlugin } from './workshop-repo-
|
|
2
|
-
export { W as WORKSHOP_FORBIDDEN_IMPORTS, d as WorkshopRepoError, c as checkPlugin, a as checkPluginSources, p as pluginName, r as readPlugin, e as readProfileLocked, f as resolveOfficialPlugins, g as resolveWorkshopRepo } from './workshop-repo-
|
|
1
|
+
import { b as WorkshopRepo, R as ResolvedPlugin, S as SkippedPlugin } from './workshop-repo-DqoVdcGu.js';
|
|
2
|
+
export { W as WORKSHOP_FORBIDDEN_IMPORTS, d as WorkshopRepoError, c as checkPlugin, a as checkPluginSources, p as pluginName, r as readPlugin, e as readProfileLocked, f as resolveOfficialPlugins, g as resolveWorkshopRepo } from './workshop-repo-DqoVdcGu.js';
|
|
3
3
|
import { LockedRole, StageRunSummary, GateState } from '@kanyun-ai-infra/band-plugin-sdk';
|
|
4
4
|
import { PluginEntry } from './plugin-entry.js';
|
|
5
5
|
import '@kanyun-ai-infra/band-contracts';
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
officialPluginCatalog,
|
|
11
11
|
renderOfficialCatalog,
|
|
12
12
|
writeOfficialCatalog
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-Q2XJXNVH.js";
|
|
14
14
|
import "./chunk-CL3FV65M.js";
|
|
15
15
|
import {
|
|
16
16
|
DevSetupError,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
renderDevModule,
|
|
19
19
|
resolveDevWorkshop,
|
|
20
20
|
resolvePluginRepo
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-XPLYTHNX.js";
|
|
22
22
|
import {
|
|
23
23
|
WORKSHOP_FORBIDDEN_IMPORTS,
|
|
24
24
|
WorkshopRepoError,
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
readProfileLocked,
|
|
30
30
|
resolveOfficialPlugins,
|
|
31
31
|
resolveWorkshopRepo
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-LGYGWMSY.js";
|
|
33
33
|
export {
|
|
34
34
|
DevSetupError,
|
|
35
35
|
NewPluginError,
|
package/dist/vite.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LockedRole } from '@kanyun-ai-infra/band-plugin-sdk';
|
|
2
2
|
import { Plugin } from 'vite';
|
|
3
|
-
import { b as WorkshopRepo, R as ResolvedPlugin, S as SkippedPlugin } from './workshop-repo-
|
|
3
|
+
import { b as WorkshopRepo, R as ResolvedPlugin, S as SkippedPlugin } from './workshop-repo-DqoVdcGu.js';
|
|
4
4
|
import '@kanyun-ai-infra/band-contracts';
|
|
5
5
|
import 'zod';
|
|
6
6
|
|
package/dist/vite.js
CHANGED
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
officialPluginsDir,
|
|
6
6
|
officialProfilePath
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-XPLYTHNX.js";
|
|
8
8
|
import {
|
|
9
9
|
readProfileLocked,
|
|
10
10
|
resolveOfficialPlugins,
|
|
11
11
|
resolveWorkshopRepo
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-LGYGWMSY.js";
|
|
13
13
|
|
|
14
14
|
// src/vite.ts
|
|
15
15
|
import { existsSync } from "fs";
|
|
@@ -37,9 +37,9 @@ interface PayloadSchema {
|
|
|
37
37
|
}
|
|
38
38
|
declare const StageSchema: z.ZodObject<{
|
|
39
39
|
kind: z.ZodOptional<z.ZodEnum<{
|
|
40
|
-
human: "human";
|
|
41
40
|
external: "external";
|
|
42
41
|
agent: "agent";
|
|
42
|
+
human: "human";
|
|
43
43
|
job: "job";
|
|
44
44
|
workflow: "workflow";
|
|
45
45
|
}>>;
|
|
@@ -194,13 +194,13 @@ declare const WorkshopSchema: z.ZodObject<{
|
|
|
194
194
|
}>>>;
|
|
195
195
|
connectors: z.ZodOptional<z.ZodPreprocess<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
196
196
|
scope: z.ZodEnum<{
|
|
197
|
-
workshop: "workshop";
|
|
198
197
|
personal: "personal";
|
|
198
|
+
workshop: "workshop";
|
|
199
199
|
deployment: "deployment";
|
|
200
200
|
}>;
|
|
201
201
|
inTurn: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
202
202
|
}, z.core.$strict>>, Record<string, {
|
|
203
|
-
scope: "
|
|
203
|
+
scope: "personal" | "workshop" | "deployment";
|
|
204
204
|
inTurn?: string[] | undefined;
|
|
205
205
|
}>>>;
|
|
206
206
|
overrides: z.ZodOptional<z.ZodPreprocess<z.ZodRecord<z.ZodString, z.ZodUnknown>, Record<string, unknown>>>;
|
|
@@ -264,9 +264,9 @@ declare const WorkshopSchema: z.ZodObject<{
|
|
|
264
264
|
workflows: z.ZodOptional<z.ZodPreprocess<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
265
265
|
stages: z.ZodPreprocess<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
266
266
|
kind: z.ZodOptional<z.ZodEnum<{
|
|
267
|
-
human: "human";
|
|
268
267
|
external: "external";
|
|
269
268
|
agent: "agent";
|
|
269
|
+
human: "human";
|
|
270
270
|
job: "job";
|
|
271
271
|
workflow: "workflow";
|
|
272
272
|
}>>;
|
|
@@ -517,13 +517,13 @@ declare const WorkshopSchema: z.ZodObject<{
|
|
|
517
517
|
surfaces: z.ZodOptional<z.ZodPreprocess<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>, Record<string, string[]>>>;
|
|
518
518
|
statusLabels: z.ZodOptional<z.ZodPreprocess<z.ZodRecord<z.ZodEnum<{
|
|
519
519
|
failed: "failed";
|
|
520
|
-
ready: "ready";
|
|
521
|
-
approved: "approved";
|
|
522
|
-
stale: "stale";
|
|
523
520
|
blocked: "blocked";
|
|
521
|
+
ready: "ready";
|
|
524
522
|
in_progress: "in_progress";
|
|
525
523
|
in_review: "in_review";
|
|
526
|
-
|
|
524
|
+
approved: "approved";
|
|
525
|
+
stale: "stale";
|
|
526
|
+
}> & z.core.$partial, z.ZodString>, Partial<Record<"failed" | "blocked" | "ready" | "in_progress" | "in_review" | "approved" | "stale", string>>>>;
|
|
527
527
|
}, z.core.$strict>>;
|
|
528
528
|
}, z.core.$strict>;
|
|
529
529
|
type WorkshopDef = z.infer<typeof WorkshopSchema>;
|
|
@@ -600,7 +600,7 @@ interface CompiledWorkshop {
|
|
|
600
600
|
agents: Record<string, CompiledAgent>;
|
|
601
601
|
/** 进行中的流程实例钉住这个哈希;新版工坊只影响新项目。 */
|
|
602
602
|
workshopHash: string;
|
|
603
|
-
/**
|
|
603
|
+
/** 当前仍接受、以后的协议大版本会改成报错的写法;`band check` 原样打印,不算失败。 */
|
|
604
604
|
warnings: string[];
|
|
605
605
|
}
|
|
606
606
|
interface CompileOptions {
|