kiki-agent-lite 0.3.1 → 0.3.2
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 +13 -10
- package/dist/docs/en/configuration/config-files.md +63 -20
- package/dist/docs/en/configuration/data-locations.md +12 -4
- package/dist/docs/en/configuration/env-vars.md +4 -6
- package/dist/docs/en/configuration/overrides.md +13 -14
- package/dist/docs/en/configuration/providers.md +8 -6
- package/dist/docs/en/customization/agent-profiles.md +33 -38
- package/dist/docs/en/customization/agents.md +129 -107
- package/dist/docs/en/customization/hooks.md +41 -48
- package/dist/docs/en/customization/personas.md +19 -21
- package/dist/docs/en/customization/plugins.md +180 -156
- package/dist/docs/en/customization/prompt-fields.md +10 -6
- package/dist/docs/en/customization/skills.md +11 -13
- package/dist/docs/en/customization/skins.md +23 -27
- package/dist/docs/en/customization/themes.md +15 -15
- package/dist/docs/en/features/agents.md +85 -0
- package/dist/docs/en/features/daily.md +37 -7
- package/dist/docs/en/features/ecosystem.md +3 -1
- package/dist/docs/en/features/extend.md +7 -1
- package/dist/docs/en/features/freedom.md +4 -0
- package/dist/docs/en/features/index.md +6 -5
- package/dist/docs/en/features/long-work.md +23 -5
- package/dist/docs/en/features/look.md +1 -1
- package/dist/docs/en/features/people.md +10 -2
- package/dist/docs/en/features/spaces.md +16 -4
- package/dist/docs/en/features/workbench.md +11 -3
- package/dist/docs/en/getting-started/desktop-app.md +44 -29
- package/dist/docs/en/getting-started/first-launch.md +32 -21
- package/dist/docs/en/getting-started/installation.md +27 -12
- package/dist/docs/en/getting-started/use-cases.md +35 -35
- package/dist/docs/en/guides/goals.md +9 -7
- package/dist/docs/en/guides/interaction.md +26 -26
- package/dist/docs/en/guides/interface.md +18 -14
- package/dist/docs/en/guides/memory.md +43 -14
- package/dist/docs/en/guides/sessions.md +32 -26
- package/dist/docs/en/guides/settings.md +60 -29
- package/dist/docs/en/index.md +8 -2
- package/dist/docs/en/reference/command.md +8 -4
- package/dist/docs/en/reference/keyboard.md +18 -4
- package/dist/docs/en/reference/model-vocabulary.md +6 -8
- package/dist/docs/en/reference/slash-commands.md +4 -4
- package/dist/docs/en/reference/tools.md +92 -15
- package/dist/docs/en/release-notes/changelog.md +1 -9
- package/dist/docs/en/server/acp.md +1 -1
- package/dist/docs/en/server/ide.md +1 -1
- package/dist/docs/en/server/local-server.md +5 -5
- package/dist/docs/en/server/mcp.md +2 -2
- package/dist/docs/en/server/rest-api.md +79 -5
- package/dist/docs/en/server/sdk.md +2 -2
- package/dist/docs/zh/configuration/config-files.md +56 -15
- package/dist/docs/zh/configuration/data-locations.md +12 -4
- package/dist/docs/zh/configuration/env-vars.md +4 -6
- package/dist/docs/zh/configuration/overrides.md +13 -14
- package/dist/docs/zh/configuration/providers.md +7 -5
- package/dist/docs/zh/customization/agent-profiles.md +31 -36
- package/dist/docs/zh/customization/agents.md +120 -98
- package/dist/docs/zh/customization/hooks.md +35 -42
- package/dist/docs/zh/customization/personas.md +16 -18
- package/dist/docs/zh/customization/plugins.md +167 -142
- package/dist/docs/zh/customization/prompt-fields.md +9 -5
- package/dist/docs/zh/customization/skills.md +10 -12
- package/dist/docs/zh/customization/skins.md +19 -23
- package/dist/docs/zh/customization/themes.md +12 -12
- package/dist/docs/zh/features/agents.md +85 -0
- package/dist/docs/zh/features/daily.md +37 -7
- package/dist/docs/zh/features/ecosystem.md +3 -1
- package/dist/docs/zh/features/extend.md +7 -1
- package/dist/docs/zh/features/freedom.md +4 -0
- package/dist/docs/zh/features/index.md +6 -5
- package/dist/docs/zh/features/long-work.md +22 -4
- package/dist/docs/zh/features/look.md +1 -1
- package/dist/docs/zh/features/people.md +10 -2
- package/dist/docs/zh/features/spaces.md +15 -3
- package/dist/docs/zh/features/workbench.md +11 -3
- package/dist/docs/zh/getting-started/desktop-app.md +43 -28
- package/dist/docs/zh/getting-started/first-launch.md +32 -21
- package/dist/docs/zh/getting-started/installation.md +26 -11
- package/dist/docs/zh/getting-started/use-cases.md +35 -37
- package/dist/docs/zh/guides/goals.md +8 -8
- package/dist/docs/zh/guides/interaction.md +25 -25
- package/dist/docs/zh/guides/interface.md +18 -14
- package/dist/docs/zh/guides/memory.md +43 -14
- package/dist/docs/zh/guides/sessions.md +30 -24
- package/dist/docs/zh/guides/settings.md +54 -23
- package/dist/docs/zh/index.md +7 -1
- package/dist/docs/zh/reference/command.md +7 -3
- package/dist/docs/zh/reference/keyboard.md +18 -4
- package/dist/docs/zh/reference/model-vocabulary.md +6 -8
- package/dist/docs/zh/reference/slash-commands.md +3 -3
- package/dist/docs/zh/reference/tools.md +74 -9
- package/dist/docs/zh/release-notes/changelog.md +1 -9
- package/dist/docs/zh/server/acp.md +1 -1
- package/dist/docs/zh/server/ide.md +1 -1
- package/dist/docs/zh/server/local-server.md +5 -5
- package/dist/docs/zh/server/mcp.md +2 -2
- package/dist/docs/zh/server/rest-api.md +69 -1
- package/dist/docs/zh/server/sdk.md +2 -2
- package/dist/main.mjs +12545 -3456
- package/dist/web/assets/AppErrorBoundary-RFIAb-Uf.js +1 -0
- package/dist/web/assets/NavScopeBoundary-DY_ET7A-.js +1 -0
- package/dist/web/assets/{arc-y2SkSoyr.js → arc-CMgTB1m7.js} +1 -1
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-uCwLz53m.js → architectureDiagram-3BPJPVTR-BU79ou2C.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-BZyWv36G.js → blockDiagram-GPEHLZMM-Bkuldod2.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-DKGx9i50.js → c4Diagram-AAUBKEIU-C3WMeqyu.js} +1 -1
- package/dist/web/assets/channel-DpDZUJRn.js +1 -0
- package/dist/web/assets/{chunk-2J33WTMH-CSkrhrsp.js → chunk-2J33WTMH-CesyWmwo.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-CtxMoJ68.js → chunk-4BX2VUAB-C7rghYTf.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-Dos3ftEy.js → chunk-55IACEB6-BqRHhwtz.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-wbzEYK9z.js → chunk-727SXJPM-BhSqCRBc.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-B9GKvCD6.js → chunk-AQP2D5EJ-DdYE2ZVZ.js} +1 -1
- package/dist/web/assets/{chunk-FMBD7UC4-u5Y2P6IX.js → chunk-FMBD7UC4-BCRPUxDF.js} +1 -1
- package/dist/web/assets/{chunk-ND2GUHAM-B8rFKkTV.js → chunk-ND2GUHAM-CuvyDjTR.js} +1 -1
- package/dist/web/assets/{chunk-QZHKN3VN-EQsKtuD-.js → chunk-QZHKN3VN-BU5vAS78.js} +1 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-Bju1GfNu.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-Bju1GfNu.js +1 -0
- package/dist/web/assets/client-C0oH7-8r.js +2 -0
- package/dist/web/assets/connection-BhO2nh7P.js +1 -0
- package/dist/web/assets/{cose-bilkent-S5V4N54A-D6dr5mIW.js → cose-bilkent-S5V4N54A-CXrvsA1a.js} +1 -1
- package/dist/web/assets/{dagre-BM42HDAG-Dnyhc4Hn.js → dagre-BM42HDAG-TaAea3Rt.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-CYXkWdne.js → diagram-2AECGRRQ-CdEH4jGt.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-DPwBf5Ag.js → diagram-5GNKFQAL-A0jZ_p-T.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-DNeLYZ8X.js → diagram-KO2AKTUF-miHWORz3.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-zU8RsQTX.js → diagram-LMA3HP47-BlUIwEIg.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-Cf9Mm94H.js → diagram-OG6HWLK6-DwDzMhEg.js} +1 -1
- package/dist/web/assets/{erDiagram-TEJ5UH35-Ch4CeiUI.js → erDiagram-TEJ5UH35-BJr5w62i.js} +1 -1
- package/dist/web/assets/export-BlxaZKEe.js +2 -0
- package/dist/web/assets/{flowDiagram-I6XJVG4X-Csn6WqEH.js → flowDiagram-I6XJVG4X-BP7KSFjx.js} +1 -1
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-DsuBgEyu.js → ganttDiagram-6RSMTGT7-BstLBBof.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-CPA7jCxU.js → gitGraphDiagram-PVQCEYII-C57s7nZ-.js} +1 -1
- package/dist/web/assets/highlighted-body-OFNGDK62-BVb-7KsA.js +1 -0
- package/dist/web/assets/index-69qhvTvD.js +1 -0
- package/dist/web/assets/{index-BYUHmd8w.js → index-BDNM6yJI.js} +2 -2
- package/dist/web/assets/{index-BGgZxlEQ.js → index-BJF_gEDs.js} +2 -2
- package/dist/web/assets/index-BOwMP6BP.js +1 -0
- package/dist/web/assets/{index-C69a5Mcz.js → index-BZsyXCqm.js} +1 -1
- package/dist/web/assets/{index-C7EA7a_g.js → index-Bfl4JiNq.js} +2 -2
- package/dist/web/assets/index-BlD3AKX-.js +1 -0
- package/dist/web/assets/{index-CIymCfcP.js → index-BnvW0EvQ.js} +1 -1
- package/dist/web/assets/index-C4rmWyOm.js +1 -0
- package/dist/web/assets/index-CGLcb3HY.js +1 -0
- package/dist/web/assets/{index-kWBxPqIX.js → index-CPvOeQPX.js} +1 -1
- package/dist/web/assets/index-Cjbe0JKM.js +1 -0
- package/dist/web/assets/index-CmYoJWUm.js +1 -0
- package/dist/web/assets/index-CtUFrjKe.js +1 -0
- package/dist/web/assets/index-DDvDRMTK.js +1 -0
- package/dist/web/assets/index-DSpndwAR.css +1 -0
- package/dist/web/assets/index-D_JjTHxi.js +1 -0
- package/dist/web/assets/index-DbuwcnbT.js +1 -0
- package/dist/web/assets/index-DcXyS0nN.js +1 -0
- package/dist/web/assets/index-Dcl9ruKA.js +1 -0
- package/dist/web/assets/index-DgwALPNA.js +121 -0
- package/dist/web/assets/{index-DoN1FTEe.js → index-DkE8hRT1.js} +2 -2
- package/dist/web/assets/index-DsyRBZ4h.js +1 -0
- package/dist/web/assets/{index-29zav3JI.js → index-DuudNhLL.js} +4 -4
- package/dist/web/assets/index-Gc4F0b2f.js +1 -0
- package/dist/web/assets/index-HGqqwKoV.js +13 -0
- package/dist/web/assets/index-KchrJnno.js +3 -0
- package/dist/web/assets/{index-B0KNSyji.js → index-Tmi2BPYU.js} +1 -1
- package/dist/web/assets/index-Ya4GuDs0.js +1 -0
- package/dist/web/assets/index-_aDaKqLB.js +1 -0
- package/dist/web/assets/index-_qwOAotB.js +1 -0
- package/dist/web/assets/index-hnIkczza.js +7 -0
- package/dist/web/assets/{infoDiagram-5YYISTIA-D3Q__m62.js → infoDiagram-5YYISTIA-CifuVY6C.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-CcvCBuZ5.js → ishikawaDiagram-YF4QCWOH-Cd60vQUi.js} +1 -1
- package/dist/web/assets/{journeyDiagram-JHISSGLW-COZU4LNt.js → journeyDiagram-JHISSGLW-Cb3Xl_wl.js} +1 -1
- package/dist/web/assets/{kanban-definition-UN3LZRKU-BrXjBoAU.js → kanban-definition-UN3LZRKU-Ei6ThuZt.js} +1 -1
- package/dist/web/assets/{linear-BgP1STFi.js → linear-CDZJx-o2.js} +1 -1
- package/dist/web/assets/mermaid-GHXKKRXX-DFxyxD7G.js +331 -0
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-CgjSrE5r.js → mindmap-definition-RKZ34NQL-B0ygxzkx.js} +1 -1
- package/dist/web/assets/navViewState-Ck_HK-TK.js +1 -0
- package/dist/web/assets/{pieDiagram-4H26LBE5-DTfe1sKA.js → pieDiagram-4H26LBE5-B2FdrvDv.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-D95hfh0q.js → quadrantDiagram-W4KKPZXB-CwpOTy3d.js} +1 -1
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-DtSLi7Mh.js → requirementDiagram-4Y6WPE33-ExdZNzLQ.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-gi_dJpcU.js → sankeyDiagram-5OEKKPKP-u0EZKD7D.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-DKQ9a72t.js → sequenceDiagram-3UESZ5HK-BXHMy5DY.js} +1 -1
- package/dist/web/assets/{spaces-B2Ccyh_T.js → spaces-C8n7xQPx.js} +1 -1
- package/dist/web/assets/{stateDiagram-AJRCARHV-Bz7tmSqa.js → stateDiagram-AJRCARHV-DMXx7ell.js} +1 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Bydq1_By.js +1 -0
- package/dist/web/assets/theme-BBnHttAf.js +1 -0
- package/dist/web/assets/{timeline-definition-PNZ67QCA-BfMXPwhV.js → timeline-definition-PNZ67QCA-DtqVG_4u.js} +1 -1
- package/dist/web/assets/{vennDiagram-CIIHVFJN-WLxW2KT5.js → vennDiagram-CIIHVFJN-Dom0ex8r.js} +1 -1
- package/dist/web/assets/{wardley-L42UT6IY-DiiqwIdq.js → wardley-L42UT6IY-C-RstmuQ.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-DmCukWuw.js → wardleyDiagram-YWT4CUSO-C8CzNfdf.js} +1 -1
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-Cfq1W2tT.js → xychartDiagram-2RQKCTM6-1AxVTyB6.js} +1 -1
- package/dist/web/index.html +2 -2
- package/native/auth-native/prebuilds/linux-arm64/auth-native.node +0 -0
- package/native/auth-native/prebuilds/linux-x64/auth-native.node +0 -0
- package/native/auth-native/prebuilds/win32-arm64/auth-native.node +0 -0
- package/native/auth-native/prebuilds/win32-x64/auth-native.node +0 -0
- package/package.json +1 -1
- package/dist/web/assets/AppErrorBoundary-DWpgwxFV.js +0 -1
- package/dist/web/assets/NavScopeBoundary-D8Lf1G0U.js +0 -1
- package/dist/web/assets/channel-BGdXootG.js +0 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-CPcnLy_H.js +0 -1
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CPcnLy_H.js +0 -1
- package/dist/web/assets/client-DSIbyfoz.js +0 -2
- package/dist/web/assets/connection-DYZn9oPZ.js +0 -1
- package/dist/web/assets/export-Bq8ZECqX.js +0 -2
- package/dist/web/assets/highlighted-body-OFNGDK62-CDPBxM_E.js +0 -1
- package/dist/web/assets/index-AksnytJj.js +0 -1
- package/dist/web/assets/index-B8xhhYDh.css +0 -1
- package/dist/web/assets/index-BUrlrKap.js +0 -1
- package/dist/web/assets/index-B_5-HLed.js +0 -62
- package/dist/web/assets/index-BfmoxdpP.js +0 -1
- package/dist/web/assets/index-Bo3e-ohM.js +0 -3
- package/dist/web/assets/index-BrYV9gV_.js +0 -1
- package/dist/web/assets/index-C8XUtAvK.js +0 -1
- package/dist/web/assets/index-C9uil5my.js +0 -13
- package/dist/web/assets/index-CKpWHSp9.js +0 -1
- package/dist/web/assets/index-CLKBgQxV.js +0 -1
- package/dist/web/assets/index-CTyyUNWj.js +0 -7
- package/dist/web/assets/index-D7cg9qYZ.js +0 -1
- package/dist/web/assets/index-D7dg8R_q.js +0 -1
- package/dist/web/assets/index-DCSpedV_.js +0 -1
- package/dist/web/assets/index-DLbD0Nx5.js +0 -1
- package/dist/web/assets/index-DaEzbvvu.js +0 -1
- package/dist/web/assets/index-DhbcjMZF.js +0 -1
- package/dist/web/assets/index-Dw2h88mF.js +0 -1
- package/dist/web/assets/index-FcMtfmKv.js +0 -1
- package/dist/web/assets/index-XFq9Kgg0.js +0 -1
- package/dist/web/assets/index-iI2mM43w.js +0 -1
- package/dist/web/assets/index-oXOF7lko.js +0 -1
- package/dist/web/assets/locale-CANfezJ4.js +0 -17
- package/dist/web/assets/mermaid-GHXKKRXX-_JLagMll.js +0 -321
- package/dist/web/assets/navViewState-DS5LnMYc.js +0 -1
- package/dist/web/assets/settings-CcwMWXbp.js +0 -42
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-D6-wdUbw.js +0 -1
- package/dist/web/assets/theme-DlDhDxeD.js +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Hooks
|
|
2
2
|
|
|
3
|
-
Hooks
|
|
3
|
+
Hooks 用来响应引擎事件。声明式(v2)规则不需要启动任何进程,就能附加指导文本或观察事件;legacy hook 则执行本机 Shell 命令。常见用途:
|
|
4
4
|
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
5
|
+
- **拦截风险操作**:Shell 命令执行前检查是否包含 `rm -rf` 之类的危险操作并阻断
|
|
6
|
+
- **桌面通知**:后台任务结束时弹出系统通知,提醒你回来看结果
|
|
7
|
+
- **补充上下文**:把模型应该始终看到的信息(如当前 Git 分支)附加到每条提交的消息上
|
|
8
8
|
|
|
9
9
|
## 声明式规则(v2)
|
|
10
10
|
|
|
@@ -34,54 +34,47 @@ type = "inject"
|
|
|
34
34
|
text = "继续前核对目标、已有证据和下一步。"
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
一步指一次模型响应连同其全部工具结果已提交,不是一次工具调用。完成五步后,提醒会在下一次模型请求前注入;若第五步恰好结束了本轮,它会等该模型的下一个请求,不会为此新开一轮。计数按 Agent 和模型规范身份分别记录,A → B → A 仍保留 A 的计数,`counter_scope = "turn"` 则在新轮次清零。恢复、压缩和 undo 既不倒拨计数也不重放提醒;改 matcher 或节拍会从零开始新计数,只改文本则在下一个到期点用新文本。
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
目前只有 `inject` 和 `observe` 两种动作。`inject` 用于 `step.before` 和 `prompt.submit`;`observe` 除这两个事件外还支持 `step.after`、`tool.before`、`tool.after`、`turn.stopping`、`turn.after` 和 `session.start`,只记录元数据。节拍仅适用于 step 事件。写 `command`、`block`、`gate` 或 `continue` 会在加载时被拒绝,它们属于下文的 legacy 协议。
|
|
40
40
|
|
|
41
41
|
### 来源与匹配
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
规则来自用户配置、已信任项目的 `.kiki/hooks.toml` 和已启用插件的 manifest,并各自带上 `user/evidence-check`、`workspace/check` 这样的全限定 id。`priority` 小的先执行,同优先级按全限定 id 排序。同一命名空间内 id 重复是错误,不同命名空间用相同短 id 没问题。未信任项目的规则仍可见但不激活,纯文本规则同样如此。
|
|
44
44
|
|
|
45
|
-
`match.models`、`profiles`、`routes`、`executors` 和 `agent_roles`
|
|
45
|
+
`match.models`、`profiles`、`routes`、`executors` 和 `agent_roles` 取精确值:你写了几个字段就必须同时命中,同一字段里的多个值是备选项,省略即不限。模型别名在加载时解析,拼错会在第一个请求前报出来。工具名写在 `match.tools`,工具结果写在 `match.statuses`(`success`、`error`、`cancelled`、`denied`)。`prompt.submit` 默认只匹配 `source = user`,其他来源要在 `match.sources` 里写明。无法原生拦截 step 或 tool 的外部 executor 会被标为不支持,而不是靠工具调用次数模拟。
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
长文本可以用 `text_file = "reminders/check.md"` 代替 `text`(二者互斥),`[hooks] files = ["hooks.toml"]` 可以引入其他 v2 文档。路径相对于声明文件,解析后必须仍在其来源作用域内;include 不能是 URL、不能重复或形成循环。缺文件、空文本、不支持的动作、无效节拍以及超过 8 KiB 的注入都是加载期错误。注入的指导文本是带来源标记的对话上下文,不替换系统提示词,也无法覆盖更高优先级的指令。
|
|
48
48
|
|
|
49
|
-
在规则上设 `enabled = false`
|
|
49
|
+
在规则上设 `enabled = false` 可停用。用户配置可以用 `disabled = ["workspace/check"]` 停用任意来源的规则,也可以用 `enabled = false` 关掉全部 v2 规则;项目和插件只能停用自己的。改动在下一个安全事件边界生效。
|
|
50
50
|
|
|
51
|
-
###
|
|
51
|
+
### 查看生效规则
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
`hooks-inspect` 命令会报告每条规则的来源、生效或失败原因、执行顺序、绑定、已计数和下一次到期计数:
|
|
54
54
|
|
|
55
55
|
```ts
|
|
56
56
|
await klient.session(sessionId).agent("main").runCommand({ name: "hooks-inspect" });
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
结果是 `hook.result` 诊断事件(`hookEvent = "hooks.inspect"
|
|
59
|
+
结果是 `hook.result` 诊断事件(`hookEvent = "hooks.inspect"`),不会进入模型对话。GUI 里会话 Agent 面板的**自动规则**显示同样的信息,读取 `GET /api/sessions/{session_id}/agents/{agent_id}/hooks`——规则保存成功但在该会话未激活时,原因就显示在这里。没有配置任何规则、也没有需要修复的来源时,这个区块整个不出现。
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
在**设置 → 能力 → 钩子**(`/settings/hooks`)里编辑用户配置:选中规则直接编辑,或用 **高级:编辑 JSON** 处理整个 legacy 数组或 v2 对象。添加第一条声明式规则会把 legacy 数组切换为 v2,原命令保留在 `legacy` 下;打开或保存这个页面都不会执行它们。**保存自动操作** 校验完整的 hooks 值并显示服务器实际保存的内容,保存失败时你的草稿还在。v2 开关和停用 id 只影响声明式规则。
|
|
62
62
|
|
|
63
|
-
TOML 不能在同一个 key
|
|
63
|
+
TOML 不能在同一个 key 下同时写 `[[hooks]]` 和 `[hooks]`,已有数组继续照常工作。要在 v2 文档里保留 legacy 命令,把它们显式移到 `[[hooks.legacy]]`,保留 `event`、`matcher`、`command` 和以秒计的 `timeout`;它们仍按 legacy runner 和输出协议执行。
|
|
64
64
|
|
|
65
|
-
##
|
|
65
|
+
## Legacy 命令 hook
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
以下都是 legacy 协议:一条规则写明触发事件、要匹配的目标,以及要执行的 Shell 命令。
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
命中时,CLI 把事件详情(触发原因、工具名、命令内容等)打包成 JSON,通过**标准输入**(stdin,程序运行时接收外部数据的通道)传给脚本,由脚本决定怎么做。**退出码**(exit code,程序结束时向系统报告的状态数字)决定放行还是阻断——`0` 放行,非零值在阻断类事件上阻止原操作,纯观察事件则继续;**标准输出**(stdout,`console.log` 打印的内容)可以附带说明。
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
脚本的响应结果由两样东西决定:
|
|
74
|
-
|
|
75
|
-
- **退出码**(exit code,程序结束时向操作系统报告的状态数字):`0` 表示放行;非零值在阻断类事件上阻止原操作,纯观察事件则继续。
|
|
76
|
-
- **标准输出**(stdout,就是你用 `console.log` 或 `print` 打印出来的内容):可以附带说明文字。
|
|
77
|
-
|
|
78
|
-
阻断类事件在脚本失败或超时时采用 fail-closed(失败即拒绝):尚未执行的操作停止,并提供原因。纯观察事件不打断主流程。[返回值表](#返回值)列出两类行为。
|
|
71
|
+
阻断类事件在脚本失败或超时时按 fail-closed 处理:尚未执行的操作停止并给出原因。纯观察事件不打断主流程。[返回值表](#返回值)列出两类行为。
|
|
79
72
|
|
|
80
73
|
::: warning 注意
|
|
81
|
-
|
|
74
|
+
Hook 是权限规则的补充,不是操作系统沙箱,也不能代你批准工具执行。高风险操作仍要保留权限检查和人工确认。
|
|
82
75
|
:::
|
|
83
76
|
|
|
84
|
-
##
|
|
77
|
+
## 一个最简单的 hook
|
|
85
78
|
|
|
86
79
|
下面这条 hook 会在每次后台任务完成时,在终端标题栏闪一下通知(macOS 需要安装 `terminal-notifier`):
|
|
87
80
|
|
|
@@ -95,9 +88,9 @@ command = "terminal-notifier -title Kimi -message 'Task done'"
|
|
|
95
88
|
|
|
96
89
|
保存配置、重开会话,下次后台任务完成时就会弹出通知。
|
|
97
90
|
|
|
98
|
-
##
|
|
91
|
+
## Legacy 规则字段
|
|
99
92
|
|
|
100
|
-
|
|
93
|
+
每条 legacy 规则是 `~/.kiki/config.toml` 中 `[[hooks]]` 数组里的一项:
|
|
101
94
|
|
|
102
95
|
| 字段 | 类型 | 必填 | 说明 |
|
|
103
96
|
| --- | --- | --- | --- |
|
|
@@ -126,11 +119,11 @@ Hook 命令的工作目录是当前会话的项目目录。非 Windows 平台上
|
|
|
126
119
|
}
|
|
127
120
|
```
|
|
128
121
|
|
|
129
|
-
|
|
122
|
+
具体事件会附带各自的字段(工具名、命令内容等),见下方事件一览。所有字段名使用下划线命名(snake_case)。
|
|
130
123
|
|
|
131
124
|
## 返回值
|
|
132
125
|
|
|
133
|
-
脚本结束后,CLI
|
|
126
|
+
脚本结束后,CLI 按退出码判断它的意图:
|
|
134
127
|
|
|
135
128
|
| 退出码 | 含义 | CLI 怎么处理 |
|
|
136
129
|
| --- | --- | --- |
|
|
@@ -141,11 +134,11 @@ Hook 命令的工作目录是当前会话的项目目录。非 Windows 平台上
|
|
|
141
134
|
|
|
142
135
|
### JSON 协议判定
|
|
143
136
|
|
|
144
|
-
退出码为 `0` 时,CLI
|
|
137
|
+
退出码为 `0` 时,CLI 这样判断标准输出:
|
|
145
138
|
|
|
146
|
-
- **有效 JSON
|
|
147
|
-
-
|
|
148
|
-
-
|
|
139
|
+
- **有效 JSON** 会被递归检查。任意深度的对象里出现 `message` 或 `hookSpecificOutput` 键,就认为这是协议输出,顶层必须符合严格的 hook 响应对象格式;顶层形态不同或协议字段非法时阻断该操作。两个键都没有的 JSON 仍是非结构化输出,放行。
|
|
140
|
+
- **畸形的对象文本** 只有在含有可识别的精确 `message` 或 `hookSpecificOutput` 键时才算协议尝试。以 `[` 开头时,只有第一个非空白字符能作为 JSON 值开头才按数组处理,因此 `[INFO]`、`[DEBUG]` 这类日志保持非结构化。单引号、缺少分隔符、键值之间漏冒号都能识别,而 `messageCount` 这样的前缀不算协议键。识别出的畸形协议输出会阻断该操作。
|
|
141
|
+
- **其余内容** —— 没有可识别协议键的畸形文本,例如引用了 "message" 字样的日志行 —— 无法与普通日志区分,保持非结构化并放行。
|
|
149
142
|
|
|
150
143
|
也可以通过标准输出返回一段 JSON 来阻断:
|
|
151
144
|
|
|
@@ -158,8 +151,8 @@ Hook 命令的工作目录是当前会话的项目目录。非 Windows 平台上
|
|
|
158
151
|
}
|
|
159
152
|
```
|
|
160
153
|
|
|
161
|
-
::: info
|
|
162
|
-
|
|
154
|
+
::: info 哪些事件可以阻断?
|
|
155
|
+
只有 `PreToolUse`、`Stop` 和 `UserPromptSubmit` 的返回值会影响主流程。其余都是观察型事件,触发后不管脚本返回什么都不改变主流程。
|
|
163
156
|
:::
|
|
164
157
|
|
|
165
158
|
## 事件一览
|
|
@@ -217,13 +210,13 @@ process.stdin.on('end', () => {
|
|
|
217
210
|
});
|
|
218
211
|
```
|
|
219
212
|
|
|
220
|
-
阻断后,Kiki
|
|
213
|
+
阻断后,Kiki 会把原因写回上下文,模型可以据此选择更安全的做法。
|
|
221
214
|
|
|
222
215
|
::: warning 注意
|
|
223
|
-
|
|
216
|
+
这个示例只演示阻断机制,按子串匹配不是安全解析器。真正要做防护,请用白名单列出允许的命令,或使用能处理引号、变量展开和命令串联的 Shell 解析器。
|
|
224
217
|
:::
|
|
225
218
|
|
|
226
219
|
## 下一步
|
|
227
220
|
|
|
228
|
-
- [
|
|
229
|
-
- [Agent 与 subagent](./agents.md) —
|
|
221
|
+
- [Legacy 规则字段](#legacy-规则字段) — `[[hooks]]` 的完整字段说明
|
|
222
|
+
- [Agent 与 subagent](./agents.md) — 用 `SubagentStop` 事件在 subagent 完成后触发通知
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# 角色、Bot 与房间
|
|
2
2
|
|
|
3
|
-
**角色(persona
|
|
4
|
-
|
|
5
|
-
角色是长期身份,profile 是执行配置。它们回答的是不同的问题——它是谁、记得什么,对应它能调用哪些工具、用哪个模型和思考档位、从哪份提示词起步。角色卡会写明它挂在哪个 profile 上,你也可以换掉这个绑定而不丢掉身份,但两者不是同一个东西的两种叫法。
|
|
3
|
+
**角色(persona)**是一个跨会话保留记忆的身份,并有一个随时可以回去的固定地址;它的 [profile](./agent-profiles.md) 负责工具、权限、模型和执行方式。角色回答「它是谁、记得什么」,profile 回答「它能调用什么、怎么运行」,换掉 profile 绑定不会丢掉身份。**Bot** 是角色背后的常驻对话,定时提示词、另一个角色或房间都通过它找到这个角色;**房间**让多个角色在各自独立的成员会话里讨论同一主题。
|
|
6
4
|
|
|
7
5
|
## 从角色开始
|
|
8
6
|
|
|
@@ -21,7 +19,7 @@ memory:
|
|
|
21
19
|
你负责协调发布准备工作。主动询问缺失的证据,区分已确认事实与待解决问题。
|
|
22
20
|
```
|
|
23
21
|
|
|
24
|
-
目录名就是稳定 ID:使用小写字母、数字,以单个连字符分隔单词。Markdown 正文定义身份。可选的 `model_alias` 和 `thinking_effort`
|
|
22
|
+
目录名就是稳定 ID:使用小写字母、数字,以单个连字符分隔单词。Markdown 正文定义身份。可选的 `model_alias` 和 `thinking_effort` 指定已配置模型及思考档位,但不授予权限;`tools` 等字段会被拒绝,因为权限属于 profile。
|
|
25
23
|
|
|
26
24
|
在 GUI 新建会话时选择角色,或从终端启动:
|
|
27
25
|
|
|
@@ -29,25 +27,25 @@ memory:
|
|
|
29
27
|
kiki --persona release-guide
|
|
30
28
|
```
|
|
31
29
|
|
|
32
|
-
|
|
30
|
+
每个角色都有一段固定的**日常对话**,侧栏那一行、切换器、会话顶栏和角色页打开的都是它,所以「找这个角色」每次都是同一段对话。一个角色可以同时持有多段,在它的对话列表里切换即可。终端里用 `/persona switch release-guide` 会打开**新会话**,旧会话保持原样;`/persona list` 列出全部角色。
|
|
33
31
|
|
|
34
|
-
|
|
32
|
+
显式选择的模型优先于角色模型;否则先看角色模型,再看 profile 或默认模型。显式选择其他 profile 会替换角色预设的 profile,但不会丢掉角色身份。
|
|
35
33
|
|
|
36
|
-
|
|
34
|
+
每个会话都会冻结自己的角色快照,编辑角色卡不会影响进行中的会话——新建会话或重建上下文后才会生效。开场白在你明确回复之前只是本地展示,打开会话不会把它写进模型历史。
|
|
37
35
|
|
|
38
36
|
## 记忆与角色卡
|
|
39
37
|
|
|
40
|
-
角色记忆跟随角色,不随 profile
|
|
38
|
+
角色记忆跟随角色,不随 profile 或模型切换而丢失。角色专属条目与其他角色隔离,默认也能读取公共 global 和 workspace 记忆,设置 `memory.shared: []` 可排除。记忆页提供角色范围;模型、审批收件箱和可撤销的改动历史见[记忆](../guides/memory.md)。删除角色会一并删除其记忆,清理失败时删除操作会报错并保留角色卡,方便重试。
|
|
41
39
|
|
|
42
|
-
角色页支持 Character Card V3 的 JSON、PNG、CHARX
|
|
40
|
+
角色页支持 Character Card V3 的 JSON、PNG、CHARX 导入导出,保存前先看导入预览:lorebook 条目会转成角色记忆并影响后续模型请求。未知扩展字段在导出时保留,但头像之外的二进制素材无法完整保留,这类卡片请留好原件。头像选择器接受不超过 20 MB 的 PNG、JPEG、WebP,裁剪后上传 256 像素的圆形或方形图,重载后保留。**移除头像**只恢复首字母,不删除角色或记忆。直接调 API 上传仍限制 2 MiB。**复制**创建新身份,不带会话状态和私有记忆;**归档**把角色从常规选择列表隐藏,但保留数据。
|
|
43
41
|
|
|
44
|
-
保存后的 `persona.md`
|
|
42
|
+
保存后的 `persona.md` 上限 1 MiB,示例和扩展各 256 KiB,按 UTF-8 字节计算。超限内容会在改动角色卡和记忆之前失败,缩短后重试即可。旧版无效或超限的角色卡仍可用 `PUT /api/personas/{id}` 替换,或用 `DELETE /api/personas/{id}` 删除,后者会先清理该角色的记忆。
|
|
45
43
|
|
|
46
44
|
## 常驻对话
|
|
47
45
|
|
|
48
46
|
角色无论你有没有跟它说过话,都有一个稳定的地址。它的**日常对话**就是这个地址:侧栏那一行、切换器、会话顶栏和角色页打开的都是同一个;角色页还会列出该角色的其它对话,你可以把日常入口换成其中另一段。第一次打开时会创建它。
|
|
49
47
|
|
|
50
|
-
|
|
48
|
+
定时提示词、来自另一个角色的消息、房间里的席位访问的都是这同一个对话,不需要另外配置角色。它有独立的工作目录,默认 `$KIKI_HOME/bots/<id>`,也可以由角色卡用 `home_workspace` 指定。相关限制在 `config.toml` 里配置:
|
|
51
49
|
|
|
52
50
|
```toml
|
|
53
51
|
[bot]
|
|
@@ -62,21 +60,21 @@ room_budget = 12
|
|
|
62
60
|
|
|
63
61
|
## 在房间中讨论
|
|
64
62
|
|
|
65
|
-
创建房间时选择两到六个成员、归类工作区和主持人。角色成员获得独立的消息模式会话;API 也接受现有线程(`kind: "thread"
|
|
63
|
+
创建房间时选择两到六个成员、归类工作区和主持人。角色成员获得独立的消息模式会话;API 也接受现有线程(`kind: "thread"`),沿用其原会话、工作区和权限,要求 `[thread_communication] enabled = true`,且不能是 subagent。GUI 里可以在侧栏按住 Ctrl/⌘ 多选线程后选「拉进新房间」,在线程菜单用「加入房间…」,在房间「添加成员」的「线程」页签里加入,或在线程链接上选「和这些线程开房间」。谁会被唤醒由三条规则决定:
|
|
66
64
|
|
|
67
65
|
1. 用户 @ 谁就唤醒谁;`@everyone` 或 `@所有人` 选择全部成员。
|
|
68
66
|
2. 用户没有 @ 任何人时交给主持人,主持人不论是角色还是线程。
|
|
69
|
-
3.
|
|
67
|
+
3. 角色或线程的房间消息只唤醒它 @ 到的成员。没有 @ 的发言会记入房间,但不会唤醒任何人。
|
|
70
68
|
|
|
71
|
-
|
|
69
|
+
角色成员依次运行,已有线程则各有自己的队列。静音成员不会被 Agent 提及和主持兜底唤醒,但用户显式 @ 它时仍会唤醒。成员收到自上次成功完成汇总以来的消息,不含自己已记录的发言。成功批次已经覆盖的通知不会再单独开启轮次;失败或取消的轮次不会确认该批消息已处理。
|
|
72
70
|
|
|
73
|
-
预算限制每条用户消息之后的成员发言数,默认 12
|
|
71
|
+
预算限制每条用户消息之后的成员发言数,默认 12 条。用尽后讨论暂停,「继续」重置预算并恢复保留的任务。「暂停」取消排队唤醒但让当前轮次跑完;「停止所有」还会中断角色成员的活动轮次,但不会中断原线程任务,也不回滚已完成的动作。纯角色房间保留用户插话,混合房间保留排队任务。同一时刻只展示一张问题卡,后续排队。
|
|
74
72
|
|
|
75
|
-
线程成员默认 `queueWhenBusy: true
|
|
73
|
+
线程成员默认 `queueWhenBusy: true`:房间输入等当前轮次结束,不会 steer。冷线程在自己的工作区恢复;没有选中某成员的消息会在该成员下次唤醒时汇总,不单独产生模型调用。线程必须用 `ThreadSend({room, content, mentions?})` 发言,普通 Assistant 文本不会进入房间。`mentions` 使用准确的成员 ID(线程用 `sessionId`,角色用 `personaId`),不用显示名。不带 mentions 的发送不会唤醒主持人;主持人兜底只适用于用户消息。
|
|
76
74
|
|
|
77
|
-
|
|
75
|
+
改名、换主持人、静音和更换归类工作区都不会重写成员的系统提示词或权限。移除线程会在其会话留下系统记录、保留房间日志,不归档原线程。创建时要求两到六个成员,离开后可以少于两个。
|
|
78
76
|
|
|
79
|
-
|
|
77
|
+
成员无法唤醒时,房间会显示失败原因和恢复办法。模型未登录时,到「设置 → 模型与提供商 → 连接服务」登录,或打开该成员的会话选择一个可用模型——已有成员会话保留绑定的模型,改角色卡不会改变它。修好后再发一条房间消息,失败成员不是主持人时请 @ 它。「继续」恢复的是暂停的房间,不会重试尚未暂停的失败唤醒。
|
|
80
78
|
|
|
81
79
|
## API 入口
|
|
82
80
|
|