@h-ai/cli 0.1.0-alpha9 → 1.0.0-beta.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.
Files changed (438) hide show
  1. package/README.en.md +229 -0
  2. package/README.ja.md +229 -0
  3. package/README.md +175 -113
  4. package/dist/chunk-AKV2CQZV.js +1497 -0
  5. package/dist/chunk-AKV2CQZV.js.map +1 -0
  6. package/dist/chunk-EF7WOFWZ.js +7557 -0
  7. package/dist/chunk-EF7WOFWZ.js.map +1 -0
  8. package/dist/chunk-MUHRBJSW.js +29272 -0
  9. package/dist/chunk-MUHRBJSW.js.map +1 -0
  10. package/dist/chunk-ZSDEVXZ7.js +38 -0
  11. package/dist/{chunk-2H7UOFLK.js.map → chunk-ZSDEVXZ7.js.map} +1 -1
  12. package/dist/cli-config-templates-HHFHNXBN.js +5 -0
  13. package/dist/cli-config-templates-HHFHNXBN.js.map +1 -0
  14. package/dist/cli-skill-templates-PN4FLGBC.js +5 -0
  15. package/dist/cli-skill-templates-PN4FLGBC.js.map +1 -0
  16. package/dist/index.js +4444 -554
  17. package/dist/index.js.map +1 -1
  18. package/dist/metafile-esm.json +1 -0
  19. package/dist/src-TEBHR5I5.js +5 -0
  20. package/dist/src-TEBHR5I5.js.map +1 -0
  21. package/package.json +35 -15
  22. package/templates/README.md +56 -114
  23. package/templates/apps/admin/messages/en-US.json +7 -0
  24. package/templates/apps/admin/messages/ja-JP.json +40 -0
  25. package/templates/apps/admin/messages/zh-CN.json +7 -0
  26. package/templates/apps/admin/src/routes/+layout.svelte.hbs +65 -8
  27. package/templates/apps/admin/src/routes/+page.svelte.hbs +35 -14
  28. package/templates/apps/admin/src/routes/admin/+layout.svelte.hbs +54 -22
  29. package/templates/apps/admin/src/routes/admin/+page.svelte.hbs +33 -24
  30. package/templates/apps/admin/src/routes/admin/settings/+page.svelte.hbs +16 -13
  31. package/templates/apps/api/.dockerignore.hbs +25 -0
  32. package/templates/apps/api/.gitignore.hbs +22 -0
  33. package/templates/apps/api/.npmrc.hbs +1 -0
  34. package/templates/apps/api/apps/{{projectName}}-contract/README.md.hbs +39 -0
  35. package/templates/apps/api/apps/{{projectName}}-contract/package.json.hbs +41 -0
  36. package/templates/apps/api/apps/{{projectName}}-contract/src/app-contract.ts.hbs +27 -0
  37. package/templates/apps/api/apps/{{projectName}}-contract/src/app-schemas.ts.hbs +28 -0
  38. package/templates/apps/api/apps/{{projectName}}-contract/src/index.ts.hbs +5 -0
  39. package/templates/apps/api/apps/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +16 -0
  40. package/templates/apps/api/apps/{{projectName}}-contract/tests/contract.test.ts.hbs +18 -0
  41. package/templates/apps/api/apps/{{projectName}}-contract/tsconfig.json.hbs +12 -0
  42. package/templates/apps/api/apps/{{projectName}}-contract/tsup.config.ts.hbs +11 -0
  43. package/templates/apps/api/apps/{{projectName}}-contract/vitest.config.ts.hbs +9 -0
  44. package/templates/apps/api/apps/{{projectName}}-serv/README.md.hbs +60 -0
  45. package/templates/apps/api/apps/{{projectName}}-serv/config/_core.yml.hbs +17 -0
  46. package/templates/apps/api/apps/{{projectName}}-serv/config/_serv.yml.hbs +54 -0
  47. package/templates/apps/api/apps/{{projectName}}-serv/data/.gitkeep.hbs +1 -0
  48. package/templates/apps/api/apps/{{projectName}}-serv/package.json.hbs +66 -0
  49. package/templates/apps/api/apps/{{projectName}}-serv/src/app.ts.hbs +119 -0
  50. package/templates/apps/api/apps/{{projectName}}-serv/src/build-metadata.ts.hbs +7 -0
  51. package/templates/apps/api/apps/{{projectName}}-serv/src/index.ts.hbs +41 -0
  52. package/templates/apps/api/apps/{{projectName}}-serv/src/lib/server/init.ts.hbs +165 -0
  53. package/templates/apps/api/apps/{{projectName}}-serv/src/server/procedures/app-procedures.ts.hbs +57 -0
  54. package/templates/apps/api/apps/{{projectName}}-serv/src/server/procedures/index.ts.hbs +41 -0
  55. package/templates/apps/api/apps/{{projectName}}-serv/tests/service.test.ts.hbs +176 -0
  56. package/templates/apps/api/apps/{{projectName}}-serv/tsconfig.json.hbs +16 -0
  57. package/templates/apps/api/apps/{{projectName}}-serv/tsup.config.ts.hbs +20 -0
  58. package/templates/apps/api/apps/{{projectName}}-serv/vitest.config.ts.hbs +12 -0
  59. package/templates/apps/api/e2e/api-serv.spec.ts.hbs +113 -0
  60. package/templates/apps/api/e2e/capture-evidence.ts.hbs +23 -0
  61. package/templates/apps/api/eslint.config.js.hbs +30 -0
  62. package/templates/apps/api/hai.json.hbs +4 -0
  63. package/templates/apps/api/images/serv.Dockerfile.hbs +37 -0
  64. package/templates/apps/api/package.json.hbs +53 -0
  65. package/templates/apps/api/playwright.config.ts.hbs +67 -0
  66. package/templates/apps/api/pnpm-workspace.yaml.hbs +40 -0
  67. package/templates/apps/api/tsconfig.base.json +14 -0
  68. package/templates/apps/fullstack/.dockerignore.hbs +25 -0
  69. package/templates/apps/fullstack/.gitignore.hbs +38 -0
  70. package/templates/apps/fullstack/.npmrc.hbs +1 -0
  71. package/templates/apps/fullstack/apps/{{projectName}}-app/.env.example.hbs +10 -0
  72. package/templates/apps/fullstack/apps/{{projectName}}-app/README.md.hbs +67 -0
  73. package/templates/apps/fullstack/apps/{{projectName}}-app/capacitor.config.ts.hbs +20 -0
  74. package/templates/apps/fullstack/apps/{{projectName}}-app/eslint.config.js.hbs +20 -0
  75. package/templates/apps/fullstack/apps/{{projectName}}-app/index.html.hbs +22 -0
  76. package/templates/apps/fullstack/apps/{{projectName}}-app/messages/en-US.json.hbs +7 -0
  77. package/templates/apps/fullstack/apps/{{projectName}}-app/messages/ja-JP.json.hbs +7 -0
  78. package/templates/apps/fullstack/apps/{{projectName}}-app/messages/zh-CN.json.hbs +7 -0
  79. package/templates/apps/fullstack/apps/{{projectName}}-app/package.json.hbs +86 -0
  80. package/templates/apps/fullstack/apps/{{projectName}}-app/project.inlang/settings.json.hbs +17 -0
  81. package/templates/apps/fullstack/apps/{{projectName}}-app/public/runtime-config.js.hbs +4 -0
  82. package/templates/apps/fullstack/apps/{{projectName}}-app/src/App.svelte.hbs +59 -0
  83. package/templates/apps/fullstack/apps/{{projectName}}-app/src/app.css.hbs +20 -0
  84. package/templates/apps/fullstack/apps/{{projectName}}-app/src/app.d.ts.hbs +8 -0
  85. package/templates/apps/fullstack/apps/{{projectName}}-app/src/build-metadata.ts.hbs +9 -0
  86. package/templates/apps/fullstack/apps/{{projectName}}-app/src/lib/capacitor.ts.hbs +19 -0
  87. package/templates/apps/fullstack/apps/{{projectName}}-app/src/main.ts.hbs +21 -0
  88. package/templates/apps/fullstack/apps/{{projectName}}-app/svelte.config.js.hbs +16 -0
  89. package/templates/apps/fullstack/apps/{{projectName}}-app/tsconfig.json.hbs +23 -0
  90. package/templates/apps/fullstack/apps/{{projectName}}-app/vite.config.ts.hbs +74 -0
  91. package/templates/apps/fullstack/apps/{{projectName}}-desktop/.env.example.hbs +6 -0
  92. package/templates/apps/fullstack/apps/{{projectName}}-desktop/README.md.hbs +64 -0
  93. package/templates/apps/fullstack/apps/{{projectName}}-desktop/eslint.config.js.hbs +20 -0
  94. package/templates/apps/fullstack/apps/{{projectName}}-desktop/index.html.hbs +20 -0
  95. package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/en-US.json.hbs +7 -0
  96. package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/ja-JP.json.hbs +7 -0
  97. package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/zh-CN.json.hbs +7 -0
  98. package/templates/apps/fullstack/apps/{{projectName}}-desktop/package.json.hbs +66 -0
  99. package/templates/apps/fullstack/apps/{{projectName}}-desktop/project.inlang/settings.json.hbs +17 -0
  100. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/App.svelte.hbs +25 -0
  101. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/app.css.hbs +18 -0
  102. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/app.d.ts.hbs +8 -0
  103. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/build-metadata.ts.hbs +9 -0
  104. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/main.ts.hbs +20 -0
  105. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/Cargo.toml.hbs +33 -0
  106. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/build.rs.hbs +6 -0
  107. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/capabilities/default.json.hbs +16 -0
  108. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/128x128.png +0 -0
  109. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/128x128@2x.png +0 -0
  110. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/32x32.png +0 -0
  111. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/icon.icns +0 -0
  112. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/icon.ico +0 -0
  113. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/src/lib.rs.hbs +91 -0
  114. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/src/main.rs.hbs +8 -0
  115. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/tauri.conf.json.hbs +46 -0
  116. package/templates/apps/fullstack/apps/{{projectName}}-desktop/svelte.config.js.hbs +14 -0
  117. package/templates/apps/fullstack/apps/{{projectName}}-desktop/tsconfig.json.hbs +22 -0
  118. package/templates/apps/fullstack/apps/{{projectName}}-desktop/vite.config.ts.hbs +89 -0
  119. package/templates/apps/fullstack/apps/{{projectName}}-miniapp/README.md.hbs +25 -0
  120. package/templates/apps/fullstack/apps/{{projectName}}-miniapp/messages/en-US.json.hbs +12 -0
  121. package/templates/apps/fullstack/apps/{{projectName}}-miniapp/messages/ja-JP.json.hbs +12 -0
  122. package/templates/apps/fullstack/apps/{{projectName}}-miniapp/messages/zh-CN.json.hbs +12 -0
  123. package/templates/apps/fullstack/apps/{{projectName}}-miniapp/project.inlang/settings.json.hbs +17 -0
  124. package/templates/apps/fullstack/apps/{{projectName}}-web/README.md.hbs +54 -0
  125. package/templates/apps/fullstack/apps/{{projectName}}-web/eslint.config.js.hbs +20 -0
  126. package/templates/apps/fullstack/apps/{{projectName}}-web/index.html.hbs +21 -0
  127. package/templates/apps/fullstack/apps/{{projectName}}-web/messages/en-US.json.hbs +7 -0
  128. package/templates/apps/fullstack/apps/{{projectName}}-web/messages/ja-JP.json.hbs +7 -0
  129. package/templates/apps/fullstack/apps/{{projectName}}-web/messages/zh-CN.json.hbs +7 -0
  130. package/templates/apps/fullstack/apps/{{projectName}}-web/package.json.hbs +53 -0
  131. package/templates/apps/fullstack/apps/{{projectName}}-web/project.inlang/settings.json.hbs +17 -0
  132. package/templates/apps/fullstack/apps/{{projectName}}-web/public/runtime-config.js.hbs +1 -0
  133. package/templates/apps/fullstack/apps/{{projectName}}-web/src/App.svelte.hbs +18 -0
  134. package/templates/apps/fullstack/apps/{{projectName}}-web/src/app.css.hbs +18 -0
  135. package/templates/apps/fullstack/apps/{{projectName}}-web/src/app.d.ts.hbs +8 -0
  136. package/templates/apps/fullstack/apps/{{projectName}}-web/src/build-metadata.ts.hbs +9 -0
  137. package/templates/apps/fullstack/apps/{{projectName}}-web/src/main.ts.hbs +14 -0
  138. package/templates/apps/fullstack/apps/{{projectName}}-web/svelte.config.js.hbs +16 -0
  139. package/templates/apps/fullstack/apps/{{projectName}}-web/tsconfig.json.hbs +23 -0
  140. package/templates/apps/fullstack/apps/{{projectName}}-web/vite.config.ts.hbs +76 -0
  141. package/templates/apps/fullstack/docs/security-configuration.md.hbs +349 -0
  142. package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +988 -0
  143. package/templates/apps/fullstack/e2e/session-close.spec.ts.hbs +119 -0
  144. package/templates/apps/fullstack/eslint.config.js.hbs +41 -0
  145. package/templates/apps/fullstack/hai.json.hbs +11 -0
  146. package/templates/apps/fullstack/images/serv.Dockerfile.hbs +38 -0
  147. package/templates/apps/fullstack/images/web/19-runtime-config.envsh.hbs +5 -0
  148. package/templates/apps/fullstack/images/web/nginx.conf.hbs +24 -0
  149. package/templates/apps/fullstack/images/web/runtime-config.js.template.hbs +3 -0
  150. package/templates/apps/fullstack/images/web.Dockerfile.hbs +37 -0
  151. package/templates/apps/fullstack/package.json.hbs +61 -0
  152. package/templates/apps/fullstack/packages/{{projectName}}-contract/README.md.hbs +40 -0
  153. package/templates/apps/fullstack/packages/{{projectName}}-contract/package.json.hbs +30 -0
  154. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-contract.ts.hbs +78 -0
  155. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-schemas.ts.hbs +134 -0
  156. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/app-contract.ts.hbs +20 -0
  157. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/app-schemas.ts.hbs +35 -0
  158. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/index.ts.hbs +7 -0
  159. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +23 -0
  160. package/templates/apps/fullstack/packages/{{projectName}}-contract/tests/contract.test.ts.hbs +31 -0
  161. package/templates/apps/fullstack/packages/{{projectName}}-contract/tsconfig.json.hbs +9 -0
  162. package/templates/apps/fullstack/packages/{{projectName}}-contract/tsup.config.ts.hbs +9 -0
  163. package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +84 -0
  164. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_ai.yml.hbs +1 -0
  165. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_audit.yml.hbs +1 -0
  166. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_cache.yml.hbs +1 -0
  167. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_core.yml.hbs +22 -0
  168. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_db.yml.hbs +1 -0
  169. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_feedback.yml.hbs +1 -0
  170. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_iam.yml.hbs +1 -0
  171. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_payment.yml.hbs +1 -0
  172. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_reach.yml.hbs +60 -0
  173. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_scheduler.yml.hbs +1 -0
  174. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_serv.yml.hbs +64 -0
  175. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_storage.yml.hbs +1 -0
  176. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_vecdb.yml.hbs +1 -0
  177. package/templates/apps/fullstack/packages/{{projectName}}-serv/data/.gitkeep.hbs +1 -0
  178. package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +62 -0
  179. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/app-server.ts.hbs +115 -0
  180. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/build-metadata.ts.hbs +7 -0
  181. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/index.ts.hbs +40 -0
  182. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/admin-service.ts.hbs +294 -0
  183. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/audit-jobs.ts.hbs +28 -0
  184. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/business-settings.ts.hbs +50 -0
  185. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/messages.ts.hbs +50 -0
  186. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/admin-procedures.ts.hbs +106 -0
  187. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/app-procedures.ts.hbs +49 -0
  188. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/index.ts.hbs +34 -0
  189. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/runtime.ts.hbs +159 -0
  190. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/security-roles.ts.hbs +73 -0
  191. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/app-server.test.ts.hbs +505 -0
  192. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/runtime.test.ts.hbs +72 -0
  193. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/security.test.ts.hbs +183 -0
  194. package/templates/apps/fullstack/packages/{{projectName}}-serv/tsconfig.json.hbs +10 -0
  195. package/templates/apps/fullstack/packages/{{projectName}}-serv/tsup.config.ts.hbs +18 -0
  196. package/templates/apps/fullstack/packages/{{projectName}}-serv/vitest.config.ts.hbs +12 -0
  197. package/templates/apps/fullstack/packages/{{projectName}}-shared/.gitignore.hbs +10 -0
  198. package/templates/apps/fullstack/packages/{{projectName}}-shared/README.md.hbs +97 -0
  199. package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/en-US.json.hbs +164 -0
  200. package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/ja-JP.json.hbs +164 -0
  201. package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/zh-CN.json.hbs +164 -0
  202. package/templates/apps/fullstack/packages/{{projectName}}-shared/package.json.hbs +55 -0
  203. package/templates/apps/fullstack/packages/{{projectName}}-shared/project.inlang/settings.json.hbs +11 -0
  204. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/index.ts.hbs +7 -0
  205. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/api-client.ts.hbs +94 -0
  206. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/feedback-client.ts.hbs +36 -0
  207. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/sensitive-actions.svelte.ts.hbs +16 -0
  208. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/session-recovery.svelte.ts.hbs +4 -0
  209. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AdminWorkspace.svelte.hbs +122 -0
  210. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AppShell.svelte.hbs +90 -0
  211. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/FeedbackEntry.svelte.hbs +86 -0
  212. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/audit.svelte.hbs +94 -0
  213. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/configuration.svelte.hbs +25 -0
  214. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/feedback.svelte.hbs +157 -0
  215. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/roles.svelte.hbs +77 -0
  216. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/settings.svelte.hbs +44 -0
  217. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/users.svelte.hbs +216 -0
  218. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/security/role-label.ts.hbs +12 -0
  219. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/guide-store.ts.hbs +55 -0
  220. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/management-store.svelte.ts.hbs +614 -0
  221. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/theme-store.svelte.ts.hbs +23 -0
  222. package/templates/apps/fullstack/packages/{{projectName}}-shared/svelte.config.js.hbs +1 -0
  223. package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/api-client.test.ts.hbs +150 -0
  224. package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/management-store.test.ts.hbs +253 -0
  225. package/templates/apps/fullstack/packages/{{projectName}}-shared/tsconfig.json.hbs +17 -0
  226. package/templates/apps/fullstack/packages/{{projectName}}-shared/vitest.config.ts.hbs +7 -0
  227. package/templates/apps/fullstack/playwright.config.ts.hbs +114 -0
  228. package/templates/apps/fullstack/playwright.session-close.config.ts.hbs +18 -0
  229. package/templates/apps/fullstack/pnpm-workspace.yaml.hbs +38 -0
  230. package/templates/apps/fullstack/tsconfig.base.json +14 -0
  231. package/templates/apps/h5/messages/en-US.json +3 -0
  232. package/templates/apps/h5/messages/ja-JP.json +40 -0
  233. package/templates/apps/h5/messages/zh-CN.json +3 -0
  234. package/templates/apps/h5/src/routes/+layout.svelte.hbs +85 -30
  235. package/templates/apps/h5/src/routes/+page.svelte.hbs +20 -8
  236. package/templates/apps/h5/src/routes/discover/+page.svelte.hbs +17 -6
  237. package/templates/apps/h5/src/routes/profile/+page.svelte.hbs +17 -6
  238. package/templates/apps/mobile-app/.env.hbs +3 -0
  239. package/templates/apps/{android-app → mobile-app}/capacitor.config.ts.hbs +2 -2
  240. package/templates/apps/mobile-app/index.html.hbs +14 -0
  241. package/templates/apps/mobile-app/messages/en-US.json +36 -0
  242. package/templates/apps/mobile-app/messages/ja-JP.json +36 -0
  243. package/templates/apps/mobile-app/messages/zh-CN.json +36 -0
  244. package/templates/apps/mobile-app/public/runtime-config.js +1 -0
  245. package/templates/apps/mobile-app/src/App.svelte.hbs +153 -0
  246. package/templates/apps/mobile-app/src/lib/api.ts.hbs +213 -0
  247. package/templates/apps/mobile-app/src/lib/app-config.ts.hbs +14 -0
  248. package/templates/apps/{android-app → mobile-app}/src/lib/capacitor.ts +6 -7
  249. package/templates/apps/mobile-app/src/lib/pages/home.svelte.hbs +58 -0
  250. package/templates/apps/mobile-app/src/lib/pages/profile.svelte.hbs +13 -0
  251. package/templates/apps/mobile-app/src/lib/pages/tasks.svelte.hbs +16 -0
  252. package/templates/apps/mobile-app/src/main.ts.hbs +11 -0
  253. package/templates/apps/website/messages/en-US.json +4 -2
  254. package/templates/apps/website/messages/ja-JP.json +34 -0
  255. package/templates/apps/website/messages/zh-CN.json +4 -2
  256. package/templates/apps/website/scripts/static-website.mjs.hbs +67 -0
  257. package/templates/apps/website/src/routes/+layout.svelte.hbs +77 -26
  258. package/templates/apps/website/src/routes/+layout.ts +3 -0
  259. package/templates/apps/website/src/routes/+page.svelte.hbs +31 -12
  260. package/templates/apps/website/src/routes/about/+page.svelte.hbs +11 -6
  261. package/templates/apps/website/src/routes/api/health/+server.ts +3 -0
  262. package/templates/apps/website/src/routes/contact/+page.svelte.hbs +44 -34
  263. package/templates/apps/website/src/routes/services/+page.svelte.hbs +27 -40
  264. package/templates/base/.dockerignore.hbs +27 -0
  265. package/templates/base/.gitignore.hbs +41 -0
  266. package/templates/base/.npmrc.hbs +1 -0
  267. package/templates/base/e2e/app.spec.ts.hbs +213 -0
  268. package/templates/base/e2e/helpers.ts +1 -1
  269. package/templates/base/eslint-rules.js +45 -0
  270. package/templates/base/eslint.config.js.hbs +34 -0
  271. package/templates/base/hai.json.hbs +4 -0
  272. package/templates/base/images/web/nginx.conf.hbs +24 -0
  273. package/templates/base/images/web.Dockerfile.hbs +72 -0
  274. package/templates/base/package.json.hbs +125 -49
  275. package/templates/base/playwright.config.ts +44 -6
  276. package/templates/base/pnpm-workspace.yaml.hbs +40 -0
  277. package/templates/base/src/app.css.hbs +40 -0
  278. package/templates/base/src/app.d.ts.hbs +14 -1
  279. package/templates/base/src/app.html.hbs +13 -0
  280. package/templates/base/src/hooks.server.ts.hbs +115 -43
  281. package/templates/base/src/lib/build-metadata.ts.hbs +7 -0
  282. package/templates/base/src/lib/server/init.ts.hbs +125 -152
  283. package/templates/base/src/lib/server/kit-config.ts.hbs +40 -0
  284. package/templates/base/src/routes/+layout.server.ts.hbs +35 -0
  285. package/templates/base/static/favicon.png +0 -0
  286. package/templates/base/svelte.config.js.hbs +84 -5
  287. package/templates/base/tests/scaffold.test.ts.hbs +102 -0
  288. package/templates/base/tsconfig.json.hbs +50 -0
  289. package/templates/base/vite.config.ts.hbs +117 -12
  290. package/templates/base/vitest.config.ts.hbs +19 -0
  291. package/templates/features/ai/routes/api/chat/+server.ts +6 -7
  292. package/templates/features/iam/routes-admin/(auth)/+layout.svelte.hbs +3 -17
  293. package/templates/features/iam/routes-admin/(auth)/auth/forgot-password/+page.svelte.hbs +10 -0
  294. package/templates/features/iam/routes-admin/(auth)/auth/login/+page.svelte.hbs +9 -96
  295. package/templates/features/iam/routes-admin/(auth)/auth/register/+page.svelte.hbs +9 -122
  296. package/templates/features/iam/routes-admin/(auth)/auth/reset-password/+page.svelte.hbs +10 -0
  297. package/templates/features/iam/routes-h5/auth/forgot-password/+page.svelte.hbs +10 -0
  298. package/templates/features/iam/routes-h5/auth/login/+page.svelte.hbs +9 -96
  299. package/templates/features/iam/routes-h5/auth/register/+page.svelte.hbs +9 -112
  300. package/templates/features/iam/routes-h5/auth/reset-password/+page.svelte.hbs +10 -0
  301. package/templates/features/iam/routes-shared/api/auth/captcha/+server.ts.hbs +4 -0
  302. package/templates/features/iam/routes-shared/api/auth/config/+server.ts +4 -0
  303. package/templates/features/iam/routes-shared/api/auth/login/+server.ts +1 -29
  304. package/templates/features/iam/routes-shared/api/auth/login/ldap/+server.ts +4 -0
  305. package/templates/features/iam/routes-shared/api/auth/login/otp/+server.ts +4 -0
  306. package/templates/features/iam/routes-shared/api/auth/logout/+server.ts +13 -6
  307. package/templates/features/iam/routes-shared/api/auth/otp/send/+server.ts +4 -0
  308. package/templates/features/iam/routes-shared/api/auth/password/renew/+server.ts +5 -0
  309. package/templates/features/iam/routes-shared/api/auth/password-reset/confirm/+server.ts +4 -0
  310. package/templates/features/iam/routes-shared/api/auth/password-reset/request/+server.ts +4 -0
  311. package/templates/features/iam/routes-shared/api/auth/reauthenticate/+server.ts +5 -0
  312. package/templates/features/iam/routes-shared/api/auth/register/+server.ts +1 -23
  313. package/templates/features/iam/routes-shared/api/auth/session/close/+server.ts.hbs +4 -0
  314. package/templates/features/iam/routes-website/auth/forgot-password/+page.svelte.hbs +10 -0
  315. package/templates/features/iam/routes-website/auth/login/+page.svelte.hbs +11 -0
  316. package/templates/features/iam/routes-website/auth/register/+page.svelte.hbs +11 -0
  317. package/templates/features/iam/routes-website/auth/reset-password/+page.svelte.hbs +10 -0
  318. package/templates/features/payment/routes/api/v1/payment/create/+server.ts +25 -23
  319. package/templates/features/payment/routes/api/v1/payment/notify/[provider]/+server.ts +5 -2
  320. package/templates/features/storage/routes/api/upload/+server.ts +10 -8
  321. package/templates/i18n/project.inlang/settings.json +2 -2
  322. package/templates/shared/.gitattributes +11 -0
  323. package/templates/shared/build-metadata.ts +42 -0
  324. package/templates/shared/container-runtime-config.sh +30 -0
  325. package/templates/shared/e2e-env.ts +98 -0
  326. package/templates/shared/hash-router.svelte.ts +83 -0
  327. package/templates/shared/public-base-path.mjs +19 -0
  328. package/templates/shared/run-e2e.mjs +104 -0
  329. package/templates/shared/vite-runtime-config.ts +56 -0
  330. package/templates/skills/AGENTS.md +75 -16
  331. package/templates/skills/CLAUDE.md +0 -11
  332. package/templates/skills/bridges/admin/AGENTS.md +89 -0
  333. package/templates/skills/bridges/api/AGENTS.md +83 -0
  334. package/templates/skills/bridges/fullstack/AGENTS.md.hbs +102 -0
  335. package/templates/skills/bridges/h5/AGENTS.md +88 -0
  336. package/templates/skills/bridges/mobile-app/AGENTS.md +100 -0
  337. package/templates/skills/bridges/website/AGENTS.md +88 -0
  338. package/templates/skills/copilot-instructions.md +3 -59
  339. package/templates/skills/hai-ai/SKILL.md +44 -715
  340. package/templates/skills/hai-ai/guide.md +457 -0
  341. package/templates/skills/hai-ai/reference.md +292 -0
  342. package/templates/skills/hai-api-client/SKILL.md +26 -339
  343. package/templates/skills/hai-api-client/reference.md +180 -0
  344. package/templates/skills/hai-api-contract/SKILL.md +36 -0
  345. package/templates/skills/hai-api-contract/reference.md +280 -0
  346. package/templates/skills/hai-app-create/SKILL.md +38 -351
  347. package/templates/skills/hai-app-create/collaboration.md +52 -0
  348. package/templates/skills/hai-app-create/development.md +243 -0
  349. package/templates/skills/hai-app-create/reference.md +376 -0
  350. package/templates/skills/hai-app-review/SKILL.md +57 -126
  351. package/templates/skills/hai-app-review/differential.md +34 -0
  352. package/templates/skills/hai-app-tests/SKILL.md +34 -454
  353. package/templates/skills/hai-app-tests/reference.md +462 -0
  354. package/templates/skills/hai-app-tests/validation.md +42 -0
  355. package/templates/skills/hai-audit/SKILL.md +37 -122
  356. package/templates/skills/hai-audit/reference.md +184 -0
  357. package/templates/skills/hai-build/SKILL.md +62 -315
  358. package/templates/skills/hai-build/paths.md +30 -0
  359. package/templates/skills/hai-build/reference.md +353 -0
  360. package/templates/skills/hai-cache/SKILL.md +26 -175
  361. package/templates/skills/hai-cache/reference.md +229 -0
  362. package/templates/skills/hai-capacitor/SKILL.md +24 -364
  363. package/templates/skills/hai-capacitor/reference.md +358 -0
  364. package/templates/skills/hai-change-plan/SKILL.md +46 -0
  365. package/templates/skills/hai-ci/SKILL.md +114 -0
  366. package/templates/skills/hai-core/SKILL.md +31 -469
  367. package/templates/skills/hai-core/reference.md +557 -0
  368. package/templates/skills/hai-core/request-access.md +65 -0
  369. package/templates/skills/hai-crypto/SKILL.md +29 -180
  370. package/templates/skills/hai-crypto/reference.md +317 -0
  371. package/templates/skills/hai-datapipe/SKILL.md +24 -207
  372. package/templates/skills/hai-datapipe/reference.md +204 -0
  373. package/templates/skills/hai-deploy/SKILL.md +53 -178
  374. package/templates/skills/hai-deploy/credentials.md +19 -0
  375. package/templates/skills/hai-deploy/middleware.md +129 -0
  376. package/templates/skills/hai-feedback/SKILL.md +85 -0
  377. package/templates/skills/hai-framework-sync/SKILL.md +105 -0
  378. package/templates/skills/hai-framework-sync/sync.md +49 -0
  379. package/templates/skills/hai-iam/SKILL.md +53 -325
  380. package/templates/skills/hai-iam/reference.md +535 -0
  381. package/templates/skills/hai-kit/SKILL.md +33 -329
  382. package/templates/skills/hai-kit/reference.md +202 -0
  383. package/templates/skills/hai-payment/SKILL.md +28 -262
  384. package/templates/skills/hai-payment/reference.md +295 -0
  385. package/templates/skills/hai-pr-review/SKILL.md +41 -0
  386. package/templates/skills/hai-reach/SKILL.md +28 -300
  387. package/templates/skills/hai-reach/reference.md +363 -0
  388. package/templates/skills/hai-reldb/SKILL.md +28 -449
  389. package/templates/skills/hai-reldb/reference.md +500 -0
  390. package/templates/skills/hai-scheduler/SKILL.md +26 -174
  391. package/templates/skills/hai-scheduler/reference.md +216 -0
  392. package/templates/skills/hai-serv/SKILL.md +60 -0
  393. package/templates/skills/hai-serv/reference.md +792 -0
  394. package/templates/skills/hai-spec-implement/SKILL.md +50 -0
  395. package/templates/skills/hai-spec-implement/changes.md +67 -0
  396. package/templates/skills/hai-spec-implement/evaluation.md +18 -0
  397. package/templates/skills/hai-spec-implement/handoff.md +47 -0
  398. package/templates/skills/hai-spec-implement/templates.md +117 -0
  399. package/templates/skills/hai-spec-implement/workflow.md +56 -0
  400. package/templates/skills/hai-spec-review/SKILL.md +57 -0
  401. package/templates/skills/hai-spec-review/checklist.md +71 -0
  402. package/templates/skills/hai-storage/SKILL.md +31 -262
  403. package/templates/skills/hai-storage/reference.md +284 -0
  404. package/templates/skills/hai-ui/SKILL.md +62 -238
  405. package/templates/skills/hai-ui/guide.md +81 -0
  406. package/templates/skills/hai-ui/reference.md +705 -0
  407. package/templates/skills/hai-ui-design/SKILL.md +31 -0
  408. package/templates/skills/hai-ui-design/patterns.md +31 -0
  409. package/templates/skills/hai-ui-review/SKILL.md +32 -0
  410. package/templates/skills/hai-ui-review/checklist.md +29 -0
  411. package/templates/skills/hai-vecdb/SKILL.md +25 -267
  412. package/templates/skills/hai-vecdb/reference.md +325 -0
  413. package/templates/skills/opencode.json +0 -5
  414. package/dist/chunk-2H7UOFLK.js +0 -10
  415. package/dist/chunk-LANIDJC7.js +0 -659
  416. package/dist/chunk-LANIDJC7.js.map +0 -1
  417. package/dist/chunk-YV7WPUI6.js +0 -206
  418. package/dist/chunk-YV7WPUI6.js.map +0 -1
  419. package/dist/config-templates-S5RI2MC6.js +0 -5
  420. package/dist/config-templates-S5RI2MC6.js.map +0 -1
  421. package/dist/skill-templates-N5DU5FNX.js +0 -5
  422. package/dist/skill-templates-N5DU5FNX.js.map +0 -1
  423. package/dist/src-XJ6YXNAF.js +0 -15030
  424. package/dist/src-XJ6YXNAF.js.map +0 -1
  425. package/templates/apps/android-app/.env.hbs +0 -3
  426. package/templates/apps/android-app/messages/en-US.json +0 -24
  427. package/templates/apps/android-app/messages/zh-CN.json +0 -24
  428. package/templates/apps/android-app/src/lib/api.ts.hbs +0 -30
  429. package/templates/apps/android-app/src/routes/+layout.svelte.hbs +0 -42
  430. package/templates/apps/android-app/src/routes/+layout.ts +0 -7
  431. package/templates/apps/android-app/src/routes/+page.svelte.hbs +0 -27
  432. package/templates/apps/api/src/routes/+layout.svelte +0 -14
  433. package/templates/apps/api/src/routes/+page.svelte +0 -11
  434. package/templates/apps/api/src/routes/api/v1/health/+server.ts +0 -14
  435. package/templates/apps/api/src/routes/api/v1/items/+server.ts +0 -37
  436. package/templates/apps/api/src/routes/api/v1/items/[id]/+server.ts +0 -30
  437. package/templates/base/src/app.css +0 -2
  438. package/templates/base/tsconfig.json +0 -8
@@ -1,145 +1,60 @@
1
1
  ---
2
2
  name: hai-audit
3
- description: 使用 @h-ai/audit 进行审计日志的记录、查询、清理与统计。当需求涉及操作审计、安全事件追踪、用户活动日志时使用。
3
+ description: "接入 @h-ai/audit 记录业务操作,查询分页日志与统计,并按保留期清理。"
4
4
  ---
5
5
 
6
- # @h-ai/audit — 审计日志模块
6
+ # hai-audit
7
7
 
8
- 统一审计日志模块,基于 `@h-ai/reldb` 实现持久化,提供审计日志的记录、分页查询、清理与统计。
8
+ ## 能力契约
9
9
 
10
- ## 运行环境
10
+ | 项目 | 契约 |
11
+ | -------- | ---------------------------------------------------------- |
12
+ | 能力 | 使用 @h-ai/audit 记录、查询、统计和清理操作审计 |
13
+ | 适用场景 | 业务操作留痕与审计记录检索 |
14
+ | 输入 | AuditInitConfigInput、已初始化 reldb、审计事件与查询条件 |
15
+ | 输出 | 记录/查询/统计的 HaiResult |
16
+ | 限制 | 仅服务端;审计内容需脱敏,保留开关和天数由可信配置决定;启用后的最低保留不能通过清理参数绕过。 |
11
17
 
12
- > ⚠️ **服务端模块(Node.js only)。** 审计日志由服务端自动记录,浏览器端通过 API 端点查询审计数据。
18
+ ## 使用路径
13
19
 
14
- ## 依赖
20
+ 1. 确认已初始化 reldb,校验 `AuditInitConfigInput` 后初始化 audit;init 等待DDL就绪才成功,失败保持未初始化;每步失败停止后续操作。
21
+ 2. 在实际业务成功/失败边界记录事件,明确审计失败如何影响业务,不重复记录同一事件。
22
+ 3. 查询使用返回的分页元数据;清理前核对保留期及授权范围。凭据始终隐藏,业务隐私默认隐藏,可配置开关和字段名;自由文本需项目指定整个字段隐藏。
23
+ SQLite/PostgreSQL/MySQL 均返回 `createdAt: Date`、`details: string | null`,缺失可空字段为 `null`;在 HTTP 边界按接口契约序列化日期。
24
+ 4. 检查写入、查询和清理的 HaiResult,先关闭 audit 再关闭数据库。
15
25
 
16
- | 模块 | 用途 | 是否必需 | 初始化要求 |
17
- | --- | --- | --- | --- |
18
- | `@h-ai/reldb` | 数据库(审计日志持久化) | **必需** | 需在 `audit.init()` 前初始化 |
26
+ 事件字段支持 category(system/business)、outcome(success/failure/denied)、severity、requestId/traceId/scopeId 和 actorSnapshot。可信 HTTP 宿主使用 `audit.withContext({actor,requestId,ipAddress,userAgent}, operation)` 传播事件时身份;不能从未经验证的请求体读取 actor。身份/角色在写入时复制,历史未知值保持 null。`getStats(7,{category:'system'})` 支持分类统计,list 支持分类/结果/等级过滤与受控排序。
19
27
 
20
- ## 使用步骤
28
+ `capture:{enabled:true,includeReads:false}` 控制框架自动事件:IAM 关键变更及鉴别失败、Serv/Kit 写请求与失败/拒绝。可信入口自动绑定身份、地址和请求关联;业务语义仍须显式 audit.log。成功读取可选,关闭 capture 不影响显式 log。先初始化 audit 再初始化 IAM,关闭反序。任务/CLI 应通过 withContext 提供可信操作身份。
21
29
 
22
- ### 1. 配置
30
+ `audit.log(input,tx)`、`audit.capture(input,{tx})` 可使用调用者现有 RelDB 事务,事件和变更一并提交或回滚;失败尝试须在回滚后由入口记录。自动记录失败输出诊断并保留已生效业务结果;强制审计的业务检查同事务显式 log 的 HaiResult 后再提交。list 支持 requestId/traceId 关联筛选。
23
31
 
24
- 审计模块依赖已初始化的 `@h-ai/reldb` 单例,无需独立配置文件。审计日志固定存储在 `hai_audit_logs` 表中。
32
+ `retention:{enabled:true,minDays:90}` 将最低保留写入共享数据库,cleanup(0) 也必须遵守;数据库触发器保护近期行的改删与覆盖。框架首次未配置不强制保护;未传 retention 的重初始化保留既有策略,显式可信配置可关闭。DB 所有者 DDL/权限与独立归档是部署边界。升级前停旧写入、备份并用 `migrateAudit({dryRun:true})` 预检。写失败返回失败并输出诊断;close 等待在途写入后再关闭数据库。
25
33
 
26
- ### 2. 初始化
34
+ 常见事件使用 `audit.helper` 与公开 `AuditHelper` 类型;内部记录器装配工厂不从包入口导出。
27
35
 
28
- ```ts
29
- import { audit } from '@h-ai/audit'
30
- import { reldb } from '@h-ai/reldb'
36
+ `backup.enabled` 默认关闭;开启后注入已初始化的私有 StorageFunctions。backup.run({id?,from?,to?,signal?}) 流式条件创建 JSONL,返回记录数/SHA-256/截止时间;稳定 ID 只复用完整且条件相同的归档,不覆盖。backup.verify(key) 有界核对;batchSize/maxRecordBytes 控制内存,超限不截断证据。AUDIT_BACKUP_PREFIX 固定为 hai-private/audit-backups/,公开读取入口只允许指定资源,关闭备份不解除私有边界;已配置公开 publicUrl 的 S3 不能启用备份。
31
37
 
32
- // 先初始化依赖
33
- await reldb.init({ type: 'sqlite', database: './data.db' })
38
+ backup.schedule 配置开关、五字段 cron、IANA timezone;audit.schedulerPlan 返回供宿主显式合并到 scheduler.init 的 tasks/hooks,没有自动任务时为 null。回调复用共享 occurrenceId/取消信号,失败抛错让 Scheduler 正确失败。关闭 Scheduler 后再关闭 IAM/Audit/Storage/RelDB,audit 只取消/排空自己的备份。配置计划不隐式启动模块,也不劫持已有全局 hooks。
34
39
 
35
- // 再初始化审计模块(自动使用已初始化的 reldb 单例)
36
- const result = await audit.init()
37
- if (!result.success) {
38
- // 处理错误
39
- }
40
- ```
40
+ 归档 v1 为 header、entry.record、footer;日期 ISO、保留历史 nullable 身份,SHA-256 覆盖 footer 前全部 UTF-8 行和换行。它是固定截止/主键游标的在线归档,严格同一时点恢复需停写/停清理或数据库快照。核对后离线读取或恢复至独立查询存储,不覆盖受保护在线记录;checksum 不等于来源真实性。
41
41
 
42
- 自定义用户表映射:
42
+ ## 分级告警
43
43
 
44
- ```ts
45
- await audit.init({
46
- userTable: 'hai_iam_users',
47
- userIdColumn: 'id',
48
- userNameColumn: 'username',
49
- })
50
- ```
44
+ 审计 createdAt、归档截止与窗口以数据库时钟为准;Scheduler 计划中的任务依赖稳定归档 ID/共享通知领取声明幂等,失败不能误锁后续检查。
51
45
 
52
- ### 3. 关闭
46
+ alerts 默认关闭,启用须注入已初始化 Reach,并配置规则 id/actions/resource/outcomes/minimumSeverity/threshold/windowSeconds/severity 与 targets(id/provider/to)。audit.checkAlerts({signal?}) 仅统计已提交事件的当前和前一固定窗口;默认300秒,60–86400秒,不补发更旧停机历史。共享 DB 先领取每个规则/目标/窗口的一次通知尝试,最终 SQL 校验存储端时钟。maxNotificationsPerCheck 默认100,more 提示后续继续。通知只含编号/等级/计数/窗口,submitted 不等于人员收到,queued 仅为 Reach 持久入队;核验 queueId。失败/崩溃保留 unknown/sending/claimed,禁止自动重发未知外部效果;结合 audit.alert 事件和 hai_audit_alert_claims 对照通知端处理。规则/目标语义改变可产生新通知。
53
47
 
54
- ```ts
55
- await audit.close()
56
- ```
48
+ alerts.schedule 控制定时开关/cron/timezone;audit.schedulerPlan 统一备份和告警计划,没有自动任务时才为 null。宿主显式装配 Scheduler,失败或 report.failed>0 必须失败;先关闭 Scheduler,再关闭 Audit/Reach,Audit 排空自有操作但不关闭 Reach。业务返回 HaiResult 失败须检查;成功检查报告仍须查看 failed。规则无需引入通用策略引擎。
57
49
 
58
- ## 核心 API
50
+ ## 按需参考
59
51
 
60
- ### 生命周期
52
+ 按本次操作读取对应小节;以已安装版本的公开类型核验签名,示例中的业务变量由应用提供。
61
53
 
62
- | 方法 | 签名 | 说明 |
63
- | --------------------- | ---------------------------------------------------------------- | ---------- |
64
- | `audit.init` | `(config: AuditInitConfig) => Promise<HaiResult<void>>` | 初始化模块 |
65
- | `audit.close` | `() => Promise<void>` | 关闭模块 |
66
- | `audit.isInitialized` | `boolean` | 初始化状态 |
67
-
68
- ### 日志操作
69
-
70
- | 方法 | 签名 | 说明 |
71
- | --------------------- | ----------------------------------------------------------------------------------- | -------------------- |
72
- | `audit.log` | `(input: CreateAuditLogInput) => Promise<HaiResult<AuditLog>>` | 记录审计日志 |
73
- | `audit.list` | `(options?: ListAuditLogsOptions) => Promise<HaiResult<{ items, total }>>` | 分页查询(含用户名) |
74
- | `audit.getUserRecent` | `(userId: string, limit?: number) => Promise<HaiResult<AuditLog[]>>` | 用户最近活动 |
75
- | `audit.cleanup` | `(olderThanDays?: number) => Promise<HaiResult<number>>` | 清理旧日志 |
76
- | `audit.getStats` | `(days?: number) => Promise<HaiResult<AuditStatItem[]>>` | 操作统计 |
77
-
78
- ### 便捷记录器 (`audit.helper`)
79
-
80
- | 方法 | 说明 |
81
- | ------------------------------------------------------------------------------ | ------------ |
82
- | `audit.helper.login(userId, ip?, ua?)` | 登录 |
83
- | `audit.helper.logout(userId, ip?, ua?)` | 登出 |
84
- | `audit.helper.register(userId, ip?, ua?)` | 注册 |
85
- | `audit.helper.passwordResetRequest(email, ip?, ua?)` | 密码重置请求 |
86
- | `audit.helper.passwordResetComplete(userId, ip?, ua?)` | 密码重置完成 |
87
- | `audit.helper.crud(input)` | CRUD 操作 |
88
-
89
- ## 错误码
90
-
91
- | 错误码 | code | 说明 |
92
- | --------------------------------- | ---------------- | ------------ |
93
- | `HaiAuditError.LOG_FAILED` | `hai:audit:001` | 记录失败 |
94
- | `HaiAuditError.QUERY_FAILED` | `hai:audit:002` | 查询失败 |
95
- | `HaiAuditError.CLEANUP_FAILED` | `hai:audit:003` | 清理失败 |
96
- | `HaiAuditError.STATS_FAILED` | `hai:audit:004` | 统计失败 |
97
- | `HaiAuditError.INIT_IN_PROGRESS` | `hai:audit:005` | 初始化进行中 |
98
- | `HaiAuditError.NOT_INITIALIZED` | `hai:audit:010` | 模块未初始化 |
99
- | `HaiAuditError.CONFIG_ERROR` | `hai:audit:012` | 配置错误 |
100
-
101
- ## 常见模式
102
-
103
- ### 用户认证审计
104
-
105
- ```ts
106
- // 登录
107
- await audit.helper.login(userId, request.ip, request.headers['user-agent'])
108
-
109
- // 登出
110
- await audit.helper.logout(userId, request.ip, request.headers['user-agent'])
111
- ```
112
-
113
- ### CRUD 操作审计
114
-
115
- ```ts
116
- await audit.helper.crud({ userId, action: 'create', resource: 'users', resourceId: newUser.id, details: { name: newUser.name } })
117
- await audit.helper.crud({ userId, action: 'update', resource: 'roles', resourceId: roleId, details: { changes } })
118
- await audit.helper.crud({ userId, action: 'delete', resource: 'permissions', resourceId: permId })
119
- ```
120
-
121
- ### 仪表盘数据
122
-
123
- ```ts
124
- // 最近日志
125
- const recentLogs = await audit.list({ pageSize: 10 })
126
-
127
- // 7 天统计
128
- const stats = await audit.getStats(7)
129
- ```
130
-
131
- ### 定期清理
132
-
133
- ```ts
134
- // 清理 90 天前的日志
135
- const result = await audit.cleanup(90)
136
- if (result.success) {
137
- logger.info(`Cleaned up ${result.data} old audit logs`)
138
- }
139
- ```
140
-
141
- ## 相关 Skills
142
-
143
- - `hai-reldb` — 数据库模块(审计模块依赖)
144
- - `hai-iam` — 身份认证与权限管理(审计的主要记录对象)
145
- - `hai-core` — 核心工具(日志、ID 生成、i18n)
54
+ - [运行环境](reference.md#运行环境)
55
+ - [依赖](reference.md#依赖)
56
+ - [使用步骤](reference.md#使用步骤)
57
+ - [核心 API](reference.md#核心-api)
58
+ - [错误码](reference.md#错误码)
59
+ - [常见模式](reference.md#常见模式)
60
+ - [相关 Skills](reference.md#相关-skills)
@@ -0,0 +1,184 @@
1
+ # hai-audit 参考
2
+
3
+ 统一审计日志模块,基于 `@h-ai/reldb` 实现持久化,提供审计日志的记录、分页查询、清理与统计。
4
+
5
+ SQLite、PostgreSQL、MySQL 均返回 `createdAt: Date`、`details: string | null`(JSON 字符串),缺失可空字段为 `null`。日期筛选与写入保持同一驱动转换;`getStats()` 数量为安全整数,超出范围返回 `STATS_FAILED`,不要把底层驱动 JSON 对象或时间戳当成公开审计结果。
6
+
7
+
8
+ `audit.init()` 会等待自动建表和仓库就绪才返回成功;DDL 失败保持 `isInitialized=false`,修正数据库后可重试。自定义 JOIN、统计和清理也使用同一就绪屏障;初始化期间关闭会使迟到结果失效。先检查 init 的 HaiResult,再立即记录或查询;audit 不拥有共享 RelDB 的连接,关闭 audit 后再关闭数据库。
9
+
10
+ ## 运行环境
11
+
12
+ > ⚠️ **服务端模块(Node.js only)。** 审计日志由服务端自动记录,浏览器端通过 API 端点查询审计数据。
13
+
14
+ ## 依赖
15
+
16
+ | 模块 | 用途 | 是否必需 | 初始化要求 |
17
+ | --- | --- | --- | --- |
18
+ | `@h-ai/reldb` | 数据库(审计日志持久化) | **必需** | 需在 `audit.init()` 前初始化 |
19
+ | `@h-ai/storage` | 私有备份 | 可选 | 启用备份时先初始化并注入 |
20
+ | `@h-ai/reach` | 异常告警 | 可选 | 启用告警时先初始化并注入 |
21
+ | `@h-ai/scheduler` | 自动备份/告警 | 可选 | 宿主显式装配 schedulerPlan,先于 Audit 关闭 |
22
+
23
+ ## 使用步骤
24
+
25
+ ### 1. 配置
26
+
27
+ 审计模块依赖已初始化的 `@h-ai/reldb` 单例,无需独立配置文件。审计日志固定存储在 `hai_audit_logs` 表中。
28
+
29
+ ### 2. 初始化
30
+
31
+ ```ts
32
+ import { audit } from '@h-ai/audit'
33
+ import { reldb } from '@h-ai/reldb'
34
+
35
+ // 先初始化依赖
36
+ await reldb.init({ type: 'sqlite', database: './data.db' })
37
+
38
+ // 再初始化审计模块(自动使用已初始化的 reldb 单例)
39
+ const result = await audit.init()
40
+ if (!result.success) {
41
+ // 处理错误
42
+ }
43
+ ```
44
+
45
+ 自定义用户表映射:
46
+
47
+ ```ts
48
+ await audit.init({
49
+ userTable: 'hai_iam_users',
50
+ userIdColumn: 'id',
51
+ userNameColumn: 'username',
52
+ })
53
+ ```
54
+
55
+ ### 3. 关闭
56
+
57
+ ```ts
58
+ const closeResult = await audit.close()
59
+ if (!closeResult.success) {
60
+ throw new Error(closeResult.error.message)
61
+ }
62
+ ```
63
+
64
+ ### 事件身份与保留保护
65
+
66
+ `category/outcome/severity` 分别表示系统或业务类别、成功或失败/拒绝、异常等级。`requestId/traceId/scopeId` 用于关联,`actorSnapshot` 保留事件时 id/username/displayName/roles,不能当授权依据。`audit.withContext(context,operation)` 保持异步隔离,可信入口应传入已验证的身份及客户端地址。只传 userId 时尝试捕获映射用户名,失败输出诊断并保留明确缺少名称的身份。旧记录不会补造身份快照;其用户名 JOIN 只用于兼容展示。
67
+
68
+ `capture:{enabled:true,includeReads:false}` 控制框架自动事件:IAM 关键变更及鉴别失败、Serv/Kit 写请求与失败/拒绝。可信入口自动绑定身份、地址和请求关联;业务语义仍须显式 audit.log。成功读取可选,关闭 capture 不影响显式 log。先初始化 audit 再初始化 IAM,关闭反序。任务/CLI 应通过 withContext 提供可信操作身份。
69
+
70
+ `audit.log(input,tx)`、`audit.capture(input,{tx})` 可使用调用者现有 RelDB 事务,事件和变更一并提交或回滚;失败尝试须在回滚后由入口记录。自动记录失败输出诊断并保留已生效业务结果;强制审计的业务检查同事务显式 log 的 HaiResult 后再提交。list 支持 requestId/traceId 关联筛选。
71
+
72
+ `retention:{enabled:true,minDays:90}` 启用共享最低保留,cleanup(0) 不能绕过。触发器拒绝保护期内改删及冲突覆盖;未传 retention 的重初始化沿用已有策略,只有显式可信配置能关闭。默认清理90天不等于不可变保护,首次未配置时不强制启用。DB 所有者 DDL、权限与独立归档需部署侧控制。升级前停旧写入并备份,`migrateAudit({dryRun:true})` 只读预检,init 自动升级;close 会等待已开始的写入。
73
+
74
+ `backup.enabled` 默认关闭;开启后注入已初始化的私有 StorageFunctions。backup.run({id?,from?,to?,signal?}) 流式条件创建 JSONL,返回记录数/SHA-256/截止时间;稳定 ID 只复用完整且条件相同的归档,不覆盖。backup.verify(key) 有界核对;batchSize/maxRecordBytes 控制内存,超限不截断证据。AUDIT_BACKUP_PREFIX 固定为 hai-private/audit-backups/,公开读取入口只允许指定资源,关闭备份不解除私有边界;已配置公开 publicUrl 的 S3 不能启用备份。
75
+
76
+ backup.schedule 配置开关、五字段 cron、IANA timezone;audit.schedulerPlan 返回供宿主显式合并到 scheduler.init 的 tasks/hooks,没有自动任务时为 null。回调复用共享 occurrenceId/取消信号,失败抛错让 Scheduler 正确失败。关闭 Scheduler 后再关闭 IAM/Audit/Storage/RelDB,audit 只取消/排空自己的备份。配置计划不隐式启动模块,也不劫持已有全局 hooks。
77
+
78
+ 归档 v1 为 header、entry.record、footer;日期 ISO、保留历史 nullable 身份,SHA-256 覆盖 footer 前全部 UTF-8 行和换行。它是固定截止/主键游标的在线归档,严格同一时点恢复需停写/停清理或数据库快照。核对后离线读取或恢复至独立查询存储,不覆盖受保护在线记录;checksum 不等于来源真实性。
79
+
80
+ ## 分级告警
81
+
82
+ 审计 createdAt、归档截止与窗口以数据库时钟为准;Scheduler 计划中的任务依赖稳定归档 ID/共享通知领取声明幂等,失败不能误锁后续检查。
83
+
84
+ alerts 默认关闭,启用须注入已初始化 Reach,并配置规则 id/actions/resource/outcomes/minimumSeverity/threshold/windowSeconds/severity 与 targets(id/provider/to)。audit.checkAlerts({signal?}) 仅统计已提交事件的当前和前一固定窗口;默认300秒,60–86400秒,不补发更旧停机历史。共享 DB 先领取每个规则/目标/窗口的一次通知尝试,最终 SQL 校验存储端时钟。maxNotificationsPerCheck 默认100,more 提示后续继续。通知只含编号/等级/计数/窗口,submitted 不等于人员收到,queued 仅为 Reach 持久入队;核验 queueId。失败/崩溃保留 unknown/sending/claimed,禁止自动重发未知外部效果;结合 audit.alert 事件和 hai_audit_alert_claims 对照通知端处理。规则/目标语义改变可产生新通知。
85
+
86
+ alerts.schedule 控制定时开关/cron/timezone;audit.schedulerPlan 统一备份和告警计划,没有自动任务时才为 null。宿主显式装配 Scheduler,失败或 report.failed>0 必须失败;先关闭 Scheduler,再关闭 Audit/Reach,Audit 排空自有操作但不关闭 Reach。业务返回 HaiResult 失败须检查;成功检查报告仍须查看 failed。规则无需引入通用策略引擎。
87
+
88
+ ## 核心 API
89
+
90
+ ### 生命周期
91
+
92
+ | 方法 | 签名 | 说明 |
93
+ | --------------------- | ---------------------------------------------------------------- | ---------- |
94
+ | `audit.init` | `(config?: AuditInitConfigInput) => Promise<HaiResult<void>>` | 初始化模块 |
95
+ | `audit.close` | `() => Promise<HaiResult<void>>` | 关闭模块 |
96
+ | `audit.isInitialized` | `boolean` | 初始化状态 |
97
+
98
+ ### 日志操作
99
+
100
+ | 方法 | 签名 | 说明 |
101
+ | --------------------- | ----------------------------------------------------------------------------------- | -------------------- |
102
+ | `audit.log` | `(input: CreateAuditLogInput, tx?: DmlWithTxOperations) => Promise<HaiResult<AuditLog>>` | 记录审计日志 |
103
+ | `audit.capture` | `(input: CreateAuditLogInput, options?: { read?: boolean; tx?: DmlWithTxOperations }) => Promise<HaiResult<void>>` | 自动采集 |
104
+ | `audit.backup.run` | `(options?: AuditBackupOptions) => Promise<HaiResult<AuditBackupInfo>>` | 私有归档/稳定ID复用 |
105
+ | `audit.backup.verify` | `(key: string, options?: { signal?: AbortSignal }) => Promise<HaiResult<AuditBackupInfo>>` | 有界核对 |
106
+ | `audit.schedulerPlan` | `Required<Pick<SchedulerInitInput, 'tasks' \| 'hooks'>>` 或 null | 宿主显式装配的计划 |
107
+ | `audit.checkAlerts` | `(options?: { signal?: AbortSignal }) => Promise<HaiResult<AuditAlertReport>>` | 固定窗口阈值告警;检查 failed/more |
108
+ | `audit.list` | `(options?: ListAuditLogsOptions) => Promise<HaiResult<PaginatedResult<AuditLogWithUser>>>` | 分页查询(items/total/page/pageSize,含用户名;使用返回的规范化元数据,默认 pageSize 20) |
109
+ | `audit.getUserRecent` | `(userId: string, limit?: number) => Promise<HaiResult<AuditLog[]>>` | 用户最近活动 |
110
+ | `audit.cleanup` | `(olderThanDays?: number) => Promise<HaiResult<number>>` | 清理旧日志 |
111
+ | `audit.getStats` | `(days?: number, filters?: Pick<ListAuditLogsOptions, 'category' \| 'outcome' \| 'severity' \| 'scopeId' \| 'userId' \| 'resource'>) => Promise<HaiResult<AuditStatItem[]>>` | 操作统计 |
112
+
113
+ ### 便捷记录器 (`audit.helper`)
114
+
115
+ | 方法 | 说明 |
116
+ | ------------------------------------------------------------------------------ | ------------ |
117
+ | `audit.helper.login(userId, ip?, ua?)` | 登录 |
118
+ | `audit.helper.logout(userId, ip?, ua?)` | 登出 |
119
+ | `audit.helper.register(userId, ip?, ua?)` | 注册 |
120
+ | `audit.helper.passwordResetRequest(email, ip?, ua?)` | 密码重置请求 |
121
+ | `audit.helper.passwordResetComplete(userId, ip?, ua?)` | 密码重置完成 |
122
+ | `audit.helper.crud(input)` | CRUD 操作 |
123
+
124
+ > `audit.log()` / `audit.helper.*()` 中的 `details` 始终隐藏凭据(如 `password` / `token` / `secret`);默认也隐藏邮箱、手机号等业务隐私,privacy.enabled 可关闭业务隐私,privacy.fields 可追加字段名,自由文本需指定整个字段隐藏。
125
+
126
+ ## 错误码
127
+
128
+ | 错误码 | code | 说明 |
129
+ | --------------------------------- | ---------------- | ------------ |
130
+ | `HaiAuditError.LOG_FAILED` | `hai:audit:001` | 记录失败 |
131
+ | `HaiAuditError.QUERY_FAILED` | `hai:audit:002` | 查询失败 |
132
+ | `HaiAuditError.CLEANUP_FAILED` | `hai:audit:003` | 清理失败 |
133
+ | `HaiAuditError.STATS_FAILED` | `hai:audit:004` | 统计失败 |
134
+ | `HaiAuditError.INIT_IN_PROGRESS` | `hai:audit:005` | 初始化进行中 |
135
+ | `HaiAuditError.NOT_INITIALIZED` | `hai:audit:010` | 模块未初始化 |
136
+ | `HaiAuditError.CONFIG_ERROR` | `hai:audit:012` | 配置错误 |
137
+ | `HaiAuditError.ALERTS_DISABLED` | `hai:audit:024` | 告警未启用 |
138
+ | `HaiAuditError.ALERTS_FAILED` | `hai:audit:025` | 告警检查或通知失败 |
139
+
140
+ ## 常见模式
141
+
142
+ ### 用户认证审计
143
+
144
+ ```ts
145
+ // 登录
146
+ await audit.helper.login(userId, request.ip, request.headers['user-agent'])
147
+
148
+ // 登出
149
+ await audit.helper.logout(userId, request.ip, request.headers['user-agent'])
150
+ ```
151
+
152
+ ### CRUD 操作审计
153
+
154
+ ```ts
155
+ await audit.helper.crud({ userId, action: 'create', resource: 'users', resourceId: newUser.id, details: { name: newUser.name } })
156
+ await audit.helper.crud({ userId, action: 'update', resource: 'roles', resourceId: roleId, details: { changes } })
157
+ await audit.helper.crud({ userId, action: 'delete', resource: 'permissions', resourceId: permId })
158
+ ```
159
+
160
+ ### 仪表盘数据
161
+
162
+ ```ts
163
+ // 最近日志
164
+ const recentLogs = await audit.list({ pageSize: 10 })
165
+
166
+ // 7 天统计
167
+ const stats = await audit.getStats(7)
168
+ ```
169
+
170
+ ### 定期清理
171
+
172
+ ```ts
173
+ // 清理 90 天前的日志
174
+ const result = await audit.cleanup(90)
175
+ if (result.success) {
176
+ logger.info(`Cleaned up ${result.data} old audit logs`)
177
+ }
178
+ ```
179
+
180
+ ## 相关 Skills
181
+
182
+ - `hai-reldb` — 数据库模块(审计模块依赖)
183
+ - `hai-iam` — 身份认证与权限管理(审计的主要记录对象)
184
+ - `hai-core` — 核心工具(日志、ID 生成、i18n)