ChickenPige0n
854c6189bb
feat(hub): org-scoped agent role/skill folder tree (ADR-0028)
...
Add a shared transparent OrganizationAgentConfigFolder tree for grouping
agent roles and skills in the admin UI without affecting identity, bindings,
run loading, or slash commands.
2026-07-19 14:18:19 +08:00
hongjr03
7f09fb1f13
feat(hub): drop redundant /admin/org/:slug path + release v0.0.35 ( #11 )
...
Silo hostname already carries tenancy. Admin SPA routes become /admin/..., legacy bookmarks redirect, login lands on /admin.
Co-authored-by: Hong Jiarong <me@jrhim.com >
Co-committed-by: Hong Jiarong <me@jrhim.com >
2026-07-19 01:36:10 +08:00
hongjr03
eb0be43eac
feat(hub): usage fact breakdown API + admin usage/session UI + release v0.0.34 ( #10 )
...
Expose UsageFact kind/capability rollups on org and project usage reports, and add admin pages that separate model tokens from external-capability meters.
Co-authored-by: Hong Jiarong <me@jrhim.com >
Co-committed-by: Hong Jiarong <me@jrhim.com >
2026-07-19 01:19:59 +08:00
hongjr03
64b3d1fc64
feat(hub): switch capability provider to Aliyun Doc Mind (ADR-0027) ( #6 )
...
Co-authored-by: Hong Jiarong <me@jrhim.com >
Co-committed-by: Hong Jiarong <me@jrhim.com >
2026-07-18 16:42:42 +08:00
hongjr03
97f7972cc5
chore(hub): remove markdown_to_pdf tool ( #3 )
...
Drop markdown_to_pdf MCP surface, implementation, tests, and md-to-pdf dependency.
Roles that still list markdown_to_pdf must be cleaned before startup.
Co-authored-by: Hong Jiarong <me@jrhim.com >
Co-committed-by: Hong Jiarong <me@jrhim.com >
2026-07-18 13:57:27 +08:00
hongjr03
4e01c18cac
feat(hub): add markdown_to_pdf tool and default web tools
...
Teachers need ad-hoc Markdown → PDF. Ship an MCP tool powered by
md-to-pdf (Marked + headless Chrome) so remote images/CSS work, with
workspace-scoped basedir, front-matter stripped so untrusted markdown
cannot override dest/basedir/launch options, and MathJax for $/$ math.
Also include WebFetch and WebSearch in the unrestricted role tool
surface by default. Deploy skips Puppeteer's browser download and
expects a host Chrome/Chromium (PUPPETEER_EXECUTABLE_PATH / CHROME_PATH).
2026-07-18 13:38:07 +08:00
hongjr03
3ee6da7ceb
chore: release v0.0.29
...
Web-based skill management: create, read, edit, disable skills from the
org admin surface. File tree editor with SKILL.md manifest support.
2026-07-16 01:12:51 +08:00
hongjr03
ae5f78f036
chore: release v0.0.28
...
Exempt SPA static assets and admin HTML shell from silo HTTP rate limit so
page loads no longer exhaust HUB_HTTP_REQUESTS_PER_MINUTE.
2026-07-15 22:33:07 +08:00
hongjr03
0782e155f6
chore: release v0.0.27
...
Agent role/skill admin restore, OAuth login URL fixes, project create 404 fix.
2026-07-15 21:35:26 +08:00
hongjr03
8990277916
chore: release v0.0.26
...
Org admin SPA, capacity policy admin, fleet deploy CI for educraft/educraft-dev.
2026-07-15 00:29:31 +08:00
hongjr03
78f94fcc8c
fix(ci): sync npm lockfiles so fleet deploy npm ci succeeds
...
Hub and admin-web package-lock.json were missing @emnapi/* entries that
npm 11 on the Alpha host requires, so deploy_fleet_release failed at
npm ci. Regenerate both lockfiles and retry incomplete release trees.
2026-07-15 00:18:22 +08:00
ChickenPige0n
acf7ae0cd7
style: update surface colors and typography for improved contrast and readability across various components
...
- Changed text colors from surface-400 to surface-600 and surface-500 to surface-700 for better visibility in multiple Svelte files.
- Updated background and border colors in app.css for a more cohesive industrial design.
- Adjusted font weights and sizes for headings, labels, and buttons to enhance clarity and user experience.
- Refined styles for tables, badges, and buttons to align with the new design language.
- Added new styles for input fields and switches to maintain consistency in the UI.
2026-07-14 19:13:27 +08:00
ChickenPige0n
552c1c353e
feat: add org admin SPA for models, roles and provider
...
Introduce admin-web (Skeleton/SvelteKit), Prisma models for provider connection / OrgModel / OrgRole, DB-backed runtime settings, and admin API routes so org admins can manage agent configuration end-to-end.
2026-07-14 19:13:14 +08:00
hongjr03
93f252b177
chore: release v0.0.25
2026-07-13 17:05:47 +08:00
hongjr03
2f0e0f2cd7
chore: release v0.0.24
2026-07-13 16:52:51 +08:00
hongjr03
07aa10ef27
chore: release v0.0.23
2026-07-12 02:42:49 +08:00
hongjr03
53d372e29b
fix: report untracked legacy symlinks
2026-07-11 23:37:25 +08:00
hongjr03
530fcdd2b7
feat: migrate legacy projects through binding search
2026-07-11 23:33:23 +08:00
hongjr03
53998d2651
fix: enable proxy use in new silos
2026-07-11 15:07:28 +08:00
hongjr03
5b55cf18a8
Revert "fix: accept SDK provider capability headers"
...
This reverts commit e7ad5580ec .
2026-07-11 15:06:48 +08:00
hongjr03
b0d691d53f
Revert "fix: pass provider capability as API key"
...
This reverts commit f065f9f978 .
2026-07-11 15:06:48 +08:00
hongjr03
1f48c5b707
Revert "fix: provide capability for both SDK auth modes"
...
This reverts commit ebf870249f .
2026-07-11 15:06:48 +08:00
hongjr03
12a2f3117f
Revert "fix: preserve run provider capability"
...
This reverts commit 63c86322de .
2026-07-11 15:06:48 +08:00
hongjr03
2ee84d9543
Revert "fix: carry provider capability in dedicated header"
...
This reverts commit 3087132083 .
2026-07-11 15:06:47 +08:00
hongjr03
3087132083
fix: carry provider capability in dedicated header
2026-07-11 15:02:51 +08:00
hongjr03
63c86322de
fix: preserve run provider capability
2026-07-11 15:00:34 +08:00
hongjr03
ebf870249f
fix: provide capability for both SDK auth modes
2026-07-11 14:59:00 +08:00
hongjr03
f065f9f978
fix: pass provider capability as API key
2026-07-11 14:57:22 +08:00
hongjr03
e7ad5580ec
fix: accept SDK provider capability headers
2026-07-11 14:55:29 +08:00
hongjr03
df0b12e38b
fix: hide per-run cost from Feishu replies
2026-07-11 14:11:59 +08:00
hongjr03
83ec835d4c
fix: show Feishu OAuth completion page
2026-07-11 14:07:43 +08:00
hongjr03
6ed56ddfc8
feat: auto-join scoped Feishu OAuth users
2026-07-11 14:00:43 +08:00
hongjr03
3bf643ff4d
fix: guide Feishu users through onboarding
2026-07-11 13:52:19 +08:00
hongjr03
d36b00bbec
feat: make agent roles and skills dynamic
2026-07-11 12:55:05 +08:00
hongjr03
17c0536958
fix: enable only curated agent skills
2026-07-11 12:25:52 +08:00
hongjr03
96e120e02c
feat: add curated curriculum agent skills
2026-07-11 12:22:01 +08:00
hongjr03
1a892ccb54
chore: release hub 0.0.7
2026-07-11 02:42:35 +08:00
hongjr03
7fcb57013e
fix: restore bounded agent sandbox execution
2026-07-11 02:34:56 +08:00
hongjr03
035c264179
fix: keep agent sandbox sockets on short paths
2026-07-11 02:22:19 +08:00
hongjr03
38d9a9c6cb
fix: bootstrap fresh alpha silo
2026-07-11 01:40:20 +08:00
hongjr03
cb1a9e823a
chore: release hub 0.0.3
2026-07-11 00:29:32 +08:00
hongjr03
9e954790dc
feat: add deployable alpha silo
2026-07-11 00:25:45 +08:00
hongjr03
e049cb6880
fix: clear dependency security advisories
2026-07-10 18:59:03 +08:00
hongjr03
250f918346
chore: delete dead code
2026-07-08 02:37:44 +08:00
hongjr03
4bd5b03bb1
refactor(hub): Vercel AI SDK → Claude Code SDK
...
用 @anthropic-ai/claude-agent-sdk 的 query() 替换 Vercel AI SDK 的
streamText。SDK 自带 Read/Write/Bash/Glob/Grep 工具——read_file/
write_file/list_files/cph_check/cph_build 全部不需要了,Bash 跑
cph 直接。
UX 同时改成 workbuddy 风格:
- 收到 @bot → 表情回复(👍 )确认收到,不发'已开始处理'
- agent 回复作为文本流式发送(text-as-card patch,markdown 渲染)
- 超长自动续发新消息,不截断
- 完成/出错不再额外发状态消息
- 去掉卡片(model选择器/取消按钮)
ADR-0017 更新:放弃 provider-agnostic,Claude Code SDK 是 Anthropic
专有。换来:compaction、工具审批、partial message 流式、成熟 agent
loop。
tsc rc=0。旧文件(workspace.ts/cph.ts/provider.ts/tools.ts)暂留,
下个 commit 清理。
2026-07-08 01:36:59 +08:00
hongjr03
a2c8fa8eaf
refactor(hub): 手搓 agent loop 换成 Vercel AI SDK
...
将 provider/runner/tools 三件手搓轮子替换为 AI SDK v7 的 generateText + tool:
- 删 openrouter-provider.ts(翻译层消失)、provider.ts 自定义消息类型
- runner.ts 循环体改为 generateText({stopWhen: stepCountIs}),保留 RunRequest/RunResult 公共签名
- tools.ts ToolRegistry 改为 ToolFactory + build(ctx, names?) 按 role 白名单构建 tools record
- workspace/cph/feishu 工具改写为 tool() 定义,execute 闭包捕获 per-run ToolContext
- transcript.ts 改为 ModelMessage[] JSONL(0.0.0 cutover,无迁移)
- server.ts/trigger.ts 接 modelFactory + toolWhitelist
- 测试:helpers 写 MockLanguageModel implements LanguageModelV4;5 个测试改写 + 新增 runner.test.ts
- 移除未使用的 openai 依赖
- ADR-0017 Consequences 同步:loop 委托给 AI SDK,provider seam 是 LanguageModel
tsc 干净,54 tests 全过。
2026-07-07 20:07:02 +08:00
hongjr03
09cadd0148
test(hub): Vitest suite + 三组 unit 测试(22 tests)
...
用 Vitest 组织测试,对齐 Courseware 半边的测试纪律(非散脚本):
- test/unit/workspace.test.ts: 路径 confinement(读写回环/..逃逸/绝对路径逃逸/
父目录创建/列举/不存在 error JSON)—— 11 tests
- test/unit/prompt.test.ts: @bot 提取(单 mention/多 mention/纯@bot/无 mention/
非 JSON/无 text 字段)—— 8 tests
- test/unit/permission.test.ts: roleGrantsEdit 单调性(READ 不含 / EDIT 含 /
MANAGE 含,ADR-0004 can_mono)—— 3 tests
extractPrompt 导出供测试。修了 test helper 默认参数 bug(显式传 undefined 触发
默认值,绕过 mentions 检查)。
vitest run 22/22 通过;tsc rc=0。
Integration 层(trigger 全链路 + lock WellFormed + 真 cph)待本地 postgres
后再起。
2026-07-07 15:26:53 +08:00
hongjr03
313e890b6c
feat(hub): 飞书 @bot 触发链路 + ProjectAgentLock 不变式(ADR-0001/0002)
...
群消息事件 → 创建 AgentRun → 获锁 → 调 runAgent → 释放锁 + 状态回写:
- feishu/client.ts: lark WSClient 长连接接收 im.message.receive_v1;
sendText 经 client.im.v1 发送(SDK 运行时动态 API,类型弱化务实收口)
- feishu/trigger.ts: @bot 识别(chat 绑定解析 ADR-0001)→ 创建 run+
session(provider-bound ADR-0017)→ acquireLock(ADR-0002,竞态回退 busy)→
runAgent(fire-and-forget)→ finally releaseLock;非项目群/无 @bot/非文本
全部忽略
- lock.ts: ADR-0002 WellFormed 落代码——currentLockRunId 读锁时校验
持锁 run 非终止,终止 run 持锁即 release-path bug(抛而非静默)
- models.ts: resolve 提到 ModelRegistry 接口(之前漏在实现上)
- server.ts: Fastify + lark ws 启动,/api/healthz
prompt 提取 smoke 通过(@bot+prompt→prompt;纯@bot→null;无mention→null;
非文本→null)。修了 mention 正则 bug(/@_\w+_/ 的回溯错误)。tsc rc=0。
2026-07-06 23:11:35 +08:00
hongjr03
b4dd8f09e1
feat(hub): Prisma schema + DB singleton,对齐 spec/System 契约
...
按 ADR-0001..0004/0017 重塑 schema,非照搬旧服务:
- ADR-0001: ProjectGroupBinding project↔chat 1:1(chatId @unique 钉单射不变式)
- ADR-0002: ProjectAgentLock projectId @id(at-most-one)+runId @unique;holder=run 非 session
- ADR-0004: PermissionGrant(resource×principal×role)+PermissionSettings(六旋钮)新落;
PermissionRole=read/edit/manage 与 PlatformRole=admin/teacher 分离(旧 schema 混淆了)
- ADR-0017: AgentSession 无 claudeSessionId,改 provider+model(切 model 即新 session)
- RunState 对齐 spec:加 WAITING_FOR_USER/TIMED_OUT(枚举完整性 OPEN)
- Audit:runId 是 PINNED 关系,其余 OPEN
旧 schema 的 FeishuProjectBinding(user/chat 混表)拆为单一 ProjectGroupBinding。
prisma validate 通过;generate 通过;tsc --noEmit rc=0;
类型级 schema 约束检查全部通过(ADR-0002 主键/唯一、ADR-0017 无 claudeSessionId 等)。
2026-07-06 22:48:28 +08:00
hongjr03
3bca137b48
feat(hub): provider-agnostic agent seam 骨架(ADR-0001/0003/0017)
...
hub/ TS 新部件,平级于 spec/。本仓从零 TS 重写(非迁移旧服务),栈:
Fastify+Prisma 待补;本提交落 provider-agnostic agent runtime 骨架:
- provider.ts: AgentProvider seam,OpenAI-compatible messages+tools+tool_calls
形状(语言通解,非 OpenAI 承诺);@Claude 仅为触发品牌(ADR-0017)
- openrouter-provider.ts: openai SDK 指向 OpenRouter 的具体适配器,仅做
Message↔SDK 翻译;agent loop 不 import SDK,换 provider 不改 loop
- runner.ts: 自有 agent loop(dispatch tools/循环到 stop/budget),per-run
model(ADR-0017 role-based routing,run 带其 model)
- tools.ts: 窄工具面 + ADR-0003 McpReadRequest.Authorized 落代码:
feishu_read_context 拒绝非本项目绑定 chat 的读取(实测错 chat 抛
UnauthorizedChatRead,对 chat 放行)
- models.ts: ModelRegistry seam(role→default 映射策略 OPEN)
- server.ts: 接线入口(stub Feishu read,无活凭证即可编译)
tsc --noEmit rc=0;ADR-0003 不变式 smoke 通过。
2026-07-06 22:38:04 +08:00