@aipper/aiws 0.0.29 → 0.0.30

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 (278) hide show
  1. package/bin/aiws.js +2 -2
  2. package/dist/aiws-package.d.ts +4 -0
  3. package/dist/aiws-package.js +11 -0
  4. package/dist/aiws-package.js.map +1 -0
  5. package/dist/aiws-paths.d.ts +48 -0
  6. package/dist/aiws-paths.js +129 -0
  7. package/dist/aiws-paths.js.map +1 -0
  8. package/dist/backup.d.ts +27 -0
  9. package/dist/backup.js +125 -0
  10. package/dist/backup.js.map +1 -0
  11. package/dist/cli.d.ts +1 -0
  12. package/dist/cli.js +773 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/codex-prompts.d.ts +17 -0
  15. package/dist/codex-prompts.js +49 -0
  16. package/dist/codex-prompts.js.map +1 -0
  17. package/dist/codex-skills.d.ts +17 -0
  18. package/dist/codex-skills.js +75 -0
  19. package/dist/codex-skills.js.map +1 -0
  20. package/dist/commands/change-advice.d.ts +25 -0
  21. package/dist/commands/change-advice.js +197 -0
  22. package/dist/commands/change-advice.js.map +1 -0
  23. package/dist/commands/change-evidence-command.d.ts +29 -0
  24. package/dist/commands/change-evidence-command.js +213 -0
  25. package/dist/commands/change-evidence-command.js.map +1 -0
  26. package/dist/commands/change-evidence-entry.d.ts +16 -0
  27. package/dist/commands/change-evidence-entry.js +35 -0
  28. package/dist/commands/change-evidence-entry.js.map +1 -0
  29. package/dist/commands/change-evidence.d.ts +108 -0
  30. package/dist/commands/change-evidence.js +341 -0
  31. package/dist/commands/change-evidence.js.map +1 -0
  32. package/dist/commands/change-finish.d.ts +71 -0
  33. package/dist/commands/change-finish.js +387 -0
  34. package/dist/commands/change-finish.js.map +1 -0
  35. package/dist/commands/change-git-status.d.ts +22 -0
  36. package/dist/commands/change-git-status.js +50 -0
  37. package/dist/commands/change-git-status.js.map +1 -0
  38. package/dist/commands/change-lifecycle-entry.d.ts +29 -0
  39. package/{src → dist}/commands/change-lifecycle-entry.js +21 -28
  40. package/dist/commands/change-lifecycle-entry.js.map +1 -0
  41. package/dist/commands/change-lifecycle.d.ts +56 -0
  42. package/dist/commands/change-lifecycle.js +211 -0
  43. package/dist/commands/change-lifecycle.js.map +1 -0
  44. package/dist/commands/change-metrics-command.d.ts +12 -0
  45. package/dist/commands/change-metrics-command.js +110 -0
  46. package/dist/commands/change-metrics-command.js.map +1 -0
  47. package/dist/commands/change-next-command.d.ts +18 -0
  48. package/dist/commands/change-next-command.js +138 -0
  49. package/dist/commands/change-next-command.js.map +1 -0
  50. package/dist/commands/change-review-gates.d.ts +107 -0
  51. package/dist/commands/change-review-gates.js +329 -0
  52. package/dist/commands/change-review-gates.js.map +1 -0
  53. package/dist/commands/change-scope-gate.d.ts +21 -0
  54. package/dist/commands/change-scope-gate.js +32 -0
  55. package/dist/commands/change-scope-gate.js.map +1 -0
  56. package/dist/commands/change-start.d.ts +30 -0
  57. package/dist/commands/change-start.js +91 -0
  58. package/dist/commands/change-start.js.map +1 -0
  59. package/dist/commands/change-state-command.d.ts +3 -0
  60. package/dist/commands/change-state-command.js +32 -0
  61. package/dist/commands/change-state-command.js.map +1 -0
  62. package/dist/commands/change-status-command.d.ts +13 -0
  63. package/dist/commands/change-status-command.js +126 -0
  64. package/dist/commands/change-status-command.js.map +1 -0
  65. package/dist/commands/change-status-context.d.ts +58 -0
  66. package/dist/commands/change-status-context.js +166 -0
  67. package/dist/commands/change-status-context.js.map +1 -0
  68. package/dist/commands/change-task-stats.d.ts +24 -0
  69. package/dist/commands/change-task-stats.js +66 -0
  70. package/dist/commands/change-task-stats.js.map +1 -0
  71. package/dist/commands/change-validate-entry.d.ts +17 -0
  72. package/dist/commands/change-validate-entry.js +44 -0
  73. package/dist/commands/change-validate-entry.js.map +1 -0
  74. package/dist/commands/change-validate.d.ts +32 -0
  75. package/dist/commands/change-validate.js +128 -0
  76. package/dist/commands/change-validate.js.map +1 -0
  77. package/dist/commands/change.d.ts +322 -0
  78. package/dist/commands/change.js +1731 -0
  79. package/dist/commands/change.js.map +1 -0
  80. package/dist/commands/codex-install-prompts.d.ts +4 -0
  81. package/dist/commands/codex-install-prompts.js +68 -0
  82. package/dist/commands/codex-install-prompts.js.map +1 -0
  83. package/dist/commands/codex-install-skills.d.ts +4 -0
  84. package/dist/commands/codex-install-skills.js +74 -0
  85. package/dist/commands/codex-install-skills.js.map +1 -0
  86. package/dist/commands/codex-status-prompts.d.ts +4 -0
  87. package/dist/commands/codex-status-prompts.js +44 -0
  88. package/dist/commands/codex-status-prompts.js.map +1 -0
  89. package/dist/commands/codex-status-skills.d.ts +4 -0
  90. package/dist/commands/codex-status-skills.js +54 -0
  91. package/dist/commands/codex-status-skills.js.map +1 -0
  92. package/dist/commands/codex-uninstall-prompts.d.ts +4 -0
  93. package/dist/commands/codex-uninstall-prompts.js +51 -0
  94. package/dist/commands/codex-uninstall-prompts.js.map +1 -0
  95. package/dist/commands/codex-uninstall-skills.d.ts +4 -0
  96. package/dist/commands/codex-uninstall-skills.js +59 -0
  97. package/dist/commands/codex-uninstall-skills.js.map +1 -0
  98. package/dist/commands/dashboard.d.ts +222 -0
  99. package/dist/commands/dashboard.js +193 -0
  100. package/dist/commands/dashboard.js.map +1 -0
  101. package/dist/commands/hooks-install.d.ts +4 -0
  102. package/dist/commands/hooks-install.js +90 -0
  103. package/dist/commands/hooks-install.js.map +1 -0
  104. package/dist/commands/hooks-status.d.ts +4 -0
  105. package/dist/commands/hooks-status.js +89 -0
  106. package/dist/commands/hooks-status.js.map +1 -0
  107. package/dist/commands/init.d.ts +4 -0
  108. package/dist/commands/init.js +100 -0
  109. package/dist/commands/init.js.map +1 -0
  110. package/dist/commands/opencode-auto.d.ts +11 -0
  111. package/dist/commands/opencode-auto.js +158 -0
  112. package/dist/commands/opencode-auto.js.map +1 -0
  113. package/dist/commands/opencode-status.d.ts +4 -0
  114. package/dist/commands/opencode-status.js +75 -0
  115. package/dist/commands/opencode-status.js.map +1 -0
  116. package/dist/commands/opencode-supervise.d.ts +24 -0
  117. package/dist/commands/opencode-supervise.js +188 -0
  118. package/dist/commands/opencode-supervise.js.map +1 -0
  119. package/dist/commands/rollback.d.ts +4 -0
  120. package/dist/commands/rollback.js +12 -0
  121. package/dist/commands/rollback.js.map +1 -0
  122. package/dist/commands/update.d.ts +4 -0
  123. package/dist/commands/update.js +212 -0
  124. package/dist/commands/update.js.map +1 -0
  125. package/dist/commands/validate.d.ts +4 -0
  126. package/dist/commands/validate.js +222 -0
  127. package/dist/commands/validate.js.map +1 -0
  128. package/dist/commands/ws-commit.d.ts +5 -0
  129. package/dist/commands/ws-commit.js +39 -0
  130. package/dist/commands/ws-commit.js.map +1 -0
  131. package/dist/commands/ws-deliver.d.ts +5 -0
  132. package/dist/commands/ws-deliver.js +59 -0
  133. package/dist/commands/ws-deliver.js.map +1 -0
  134. package/dist/commands/ws-finish.d.ts +5 -0
  135. package/dist/commands/ws-finish.js +142 -0
  136. package/dist/commands/ws-finish.js.map +1 -0
  137. package/dist/commands/ws-handoff.d.ts +5 -0
  138. package/dist/commands/ws-handoff.js +35 -0
  139. package/dist/commands/ws-handoff.js.map +1 -0
  140. package/dist/commands/ws-migrate.d.ts +5 -0
  141. package/dist/commands/ws-migrate.js +41 -0
  142. package/dist/commands/ws-migrate.js.map +1 -0
  143. package/dist/commands/ws-plan-verify.d.ts +5 -0
  144. package/dist/commands/ws-plan-verify.js +38 -0
  145. package/dist/commands/ws-plan-verify.js.map +1 -0
  146. package/dist/commands/ws-pull.d.ts +5 -0
  147. package/dist/commands/ws-pull.js +26 -0
  148. package/dist/commands/ws-pull.js.map +1 -0
  149. package/dist/commands/ws-push.d.ts +5 -0
  150. package/dist/commands/ws-push.js +68 -0
  151. package/dist/commands/ws-push.js.map +1 -0
  152. package/dist/commands/ws-submodule-setup.d.ts +5 -0
  153. package/dist/commands/ws-submodule-setup.js +55 -0
  154. package/dist/commands/ws-submodule-setup.js.map +1 -0
  155. package/dist/commands/ws-verify-before-complete.d.ts +5 -0
  156. package/dist/commands/ws-verify-before-complete.js +35 -0
  157. package/dist/commands/ws-verify-before-complete.js.map +1 -0
  158. package/dist/dashboard/app.d.ts +1 -0
  159. package/dist/dashboard/app.js +370 -0
  160. package/dist/dashboard/app.js.map +1 -0
  161. package/dist/delegation/cli.d.ts +6 -0
  162. package/dist/delegation/cli.js +14 -0
  163. package/dist/delegation/cli.js.map +1 -0
  164. package/dist/delegation/index.d.ts +35 -0
  165. package/dist/delegation/index.js +118 -0
  166. package/dist/delegation/index.js.map +1 -0
  167. package/dist/errors.d.ts +8 -0
  168. package/dist/errors.js +11 -0
  169. package/dist/errors.js.map +1 -0
  170. package/dist/exec.d.ts +9 -0
  171. package/dist/exec.js +22 -0
  172. package/dist/exec.js.map +1 -0
  173. package/dist/fs.d.ts +9 -0
  174. package/dist/fs.js +62 -0
  175. package/dist/fs.js.map +1 -0
  176. package/dist/governance.d.ts +10 -0
  177. package/dist/governance.js +135 -0
  178. package/dist/governance.js.map +1 -0
  179. package/dist/hash.d.ts +3 -0
  180. package/dist/hash.js +13 -0
  181. package/dist/hash.js.map +1 -0
  182. package/dist/hooks/deploy-claude.d.ts +13 -0
  183. package/dist/hooks/deploy-claude.js +67 -0
  184. package/dist/hooks/deploy-claude.js.map +1 -0
  185. package/dist/journal.d.ts +22 -0
  186. package/dist/journal.js +112 -0
  187. package/dist/journal.js.map +1 -0
  188. package/dist/json-schema-lite.d.ts +22 -0
  189. package/dist/json-schema-lite.js +148 -0
  190. package/dist/json-schema-lite.js.map +1 -0
  191. package/dist/managed-blocks.d.ts +24 -0
  192. package/dist/managed-blocks.js +84 -0
  193. package/dist/managed-blocks.js.map +1 -0
  194. package/dist/manifest.d.ts +24 -0
  195. package/dist/manifest.js +145 -0
  196. package/dist/manifest.js.map +1 -0
  197. package/dist/opencode-env.d.ts +62 -0
  198. package/dist/opencode-env.js +178 -0
  199. package/dist/opencode-env.js.map +1 -0
  200. package/dist/path-utils.d.ts +2 -0
  201. package/dist/path-utils.js +8 -0
  202. package/dist/path-utils.js.map +1 -0
  203. package/dist/spec.d.ts +17 -0
  204. package/dist/spec.js +174 -0
  205. package/dist/spec.js.map +1 -0
  206. package/dist/template.d.ts +20 -0
  207. package/dist/template.js +123 -0
  208. package/dist/template.js.map +1 -0
  209. package/dist/workspace.d.ts +4 -0
  210. package/dist/workspace.js +19 -0
  211. package/dist/workspace.js.map +1 -0
  212. package/package.json +11 -3
  213. package/src/aiws-package.js +0 -15
  214. package/src/backup.js +0 -149
  215. package/src/cli.js +0 -760
  216. package/src/codex-prompts.js +0 -74
  217. package/src/codex-skills.js +0 -111
  218. package/src/commands/change-advice.js +0 -181
  219. package/src/commands/change-evidence-command.js +0 -242
  220. package/src/commands/change-evidence-entry.js +0 -40
  221. package/src/commands/change-evidence.js +0 -340
  222. package/src/commands/change-finish.js +0 -413
  223. package/src/commands/change-git-status.js +0 -53
  224. package/src/commands/change-lifecycle.js +0 -236
  225. package/src/commands/change-metrics-command.js +0 -110
  226. package/src/commands/change-next-command.js +0 -133
  227. package/src/commands/change-review-gates.js +0 -331
  228. package/src/commands/change-scope-gate.js +0 -34
  229. package/src/commands/change-start.js +0 -85
  230. package/src/commands/change-state-command.js +0 -40
  231. package/src/commands/change-status-command.js +0 -125
  232. package/src/commands/change-status-context.js +0 -173
  233. package/src/commands/change-task-stats.js +0 -64
  234. package/src/commands/change-validate-entry.js +0 -45
  235. package/src/commands/change-validate.js +0 -127
  236. package/src/commands/change.js +0 -1829
  237. package/src/commands/codex-install-prompts.js +0 -68
  238. package/src/commands/codex-install-skills.js +0 -74
  239. package/src/commands/codex-status-prompts.js +0 -55
  240. package/src/commands/codex-status-skills.js +0 -63
  241. package/src/commands/codex-uninstall-prompts.js +0 -55
  242. package/src/commands/codex-uninstall-skills.js +0 -62
  243. package/src/commands/dashboard.js +0 -205
  244. package/src/commands/hooks-install.js +0 -92
  245. package/src/commands/hooks-status.js +0 -95
  246. package/src/commands/init.js +0 -101
  247. package/src/commands/opencode-auto.js +0 -167
  248. package/src/commands/opencode-status.js +0 -103
  249. package/src/commands/opencode-supervise.js +0 -200
  250. package/src/commands/rollback.js +0 -13
  251. package/src/commands/update.js +0 -145
  252. package/src/commands/validate.js +0 -228
  253. package/src/commands/ws-commit.js +0 -44
  254. package/src/commands/ws-deliver.js +0 -67
  255. package/src/commands/ws-finish.js +0 -83
  256. package/src/commands/ws-handoff.js +0 -40
  257. package/src/commands/ws-migrate.js +0 -41
  258. package/src/commands/ws-plan-verify.js +0 -44
  259. package/src/commands/ws-pull.js +0 -30
  260. package/src/commands/ws-push.js +0 -71
  261. package/src/commands/ws-submodule-setup.js +0 -65
  262. package/src/commands/ws-verify-before-complete.js +0 -39
  263. package/src/dashboard/app.js +0 -371
  264. package/src/errors.js +0 -15
  265. package/src/exec.js +0 -34
  266. package/src/fs.js +0 -91
  267. package/src/governance.js +0 -159
  268. package/src/hash.js +0 -25
  269. package/src/json-schema-lite.js +0 -164
  270. package/src/managed-blocks.js +0 -131
  271. package/src/manifest.js +0 -177
  272. package/src/opencode-env.js +0 -208
  273. package/src/path-utils.js +0 -20
  274. package/src/spec.js +0 -195
  275. package/src/template.js +0 -187
  276. package/src/workspace.js +0 -23
  277. /package/{src → dist}/dashboard/index.html +0 -0
  278. /package/{src → dist}/dashboard/style.css +0 -0
package/dist/exec.js ADDED
@@ -0,0 +1,22 @@
1
+ import { spawn } from "node:child_process";
2
+ export function runCommand(command, args, options) {
3
+ return new Promise((resolve, reject) => {
4
+ const child = spawn(command, args, {
5
+ cwd: options?.cwd,
6
+ stdio: ["ignore", "pipe", "pipe"],
7
+ });
8
+ const out = [];
9
+ const err = [];
10
+ child.stdout.on("data", (b) => out.push(Buffer.from(b)));
11
+ child.stderr.on("data", (b) => err.push(Buffer.from(b)));
12
+ child.on("error", (e) => reject(e));
13
+ child.on("close", (code) => {
14
+ resolve({
15
+ code: typeof code === "number" ? code : 1,
16
+ stdout: Buffer.concat(out).toString("utf8"),
17
+ stderr: Buffer.concat(err).toString("utf8"),
18
+ });
19
+ });
20
+ });
21
+ }
22
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAY3C,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,IAAc,EACd,OAA2B;IAE3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,GAAG,EAAE,OAAO,EAAE,GAAG;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,MAAM,GAAG,GAAa,EAAE,CAAC;QAEzB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC;gBACN,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/fs.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export declare function pathExists(p: string): Promise<boolean>;
2
+ export declare function ensureDir(p: string): Promise<void>;
3
+ export declare function readText(p: string): Promise<string>;
4
+ export declare function writeText(p: string, content: string): Promise<void>;
5
+ export interface CopyFileOptions {
6
+ chmod?: number;
7
+ }
8
+ export declare function copyFile(src: string, dest: string, options?: CopyFileOptions): Promise<void>;
9
+ export declare function listFilesRecursive(rootDir: string, prefixDir: string): Promise<string[]>;
package/dist/fs.js ADDED
@@ -0,0 +1,62 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ export async function pathExists(p) {
4
+ try {
5
+ await fs.access(p);
6
+ return true;
7
+ }
8
+ catch {
9
+ return false;
10
+ }
11
+ }
12
+ export async function ensureDir(p) {
13
+ await fs.mkdir(p, { recursive: true });
14
+ }
15
+ export async function readText(p) {
16
+ return await fs.readFile(p, "utf8");
17
+ }
18
+ export async function writeText(p, content) {
19
+ await ensureDir(path.dirname(p));
20
+ await fs.writeFile(p, content, "utf8");
21
+ }
22
+ export async function copyFile(src, dest, options) {
23
+ await ensureDir(path.dirname(dest));
24
+ await fs.copyFile(src, dest);
25
+ if (typeof options?.chmod === "number") {
26
+ await fs.chmod(dest, options.chmod);
27
+ return;
28
+ }
29
+ try {
30
+ const st = await fs.stat(src);
31
+ await fs.chmod(dest, st.mode & 0o777);
32
+ }
33
+ catch {
34
+ // ignore chmod errors (e.g. on certain filesystems)
35
+ }
36
+ }
37
+ export async function listFilesRecursive(rootDir, prefixDir) {
38
+ const out = [];
39
+ const start = path.join(rootDir, prefixDir);
40
+ if (!(await pathExists(start)))
41
+ return out;
42
+ const stack = [{ abs: start, rel: prefixDir }];
43
+ while (stack.length > 0) {
44
+ const cur = stack.pop();
45
+ if (!cur)
46
+ break;
47
+ const entries = await fs.readdir(cur.abs, { withFileTypes: true });
48
+ for (const ent of entries) {
49
+ const abs = path.join(cur.abs, ent.name);
50
+ const rel = path.posix.join(cur.rel.replaceAll(path.sep, "/"), ent.name);
51
+ if (ent.isDirectory()) {
52
+ stack.push({ abs, rel });
53
+ }
54
+ else if (ent.isFile()) {
55
+ out.push(rel);
56
+ }
57
+ }
58
+ }
59
+ out.sort();
60
+ return out;
61
+ }
62
+ //# sourceMappingURL=fs.js.map
package/dist/fs.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare function effectiveReviewCount(status: any): number;
2
+ export declare function inferChangeGovernance(status: any): Promise<{
3
+ phase: string;
4
+ currentStage: string;
5
+ recommendedStage: string;
6
+ rationale: string;
7
+ ruleId: string;
8
+ source: string;
9
+ }>;
10
+ export declare function governanceGuidanceLines(status: any): Promise<string[]>;
@@ -0,0 +1,135 @@
1
+ import { UserError } from "./errors.js";
2
+ import { loadWorkflowGovernanceRules } from "./spec.js";
3
+ export function effectiveReviewCount(status) {
4
+ return Number(status?.reviewSignals?.effectiveCount ?? status?.collaboration?.counts?.review ?? 0);
5
+ }
6
+ function collectGovernanceSignals(status, governance) {
7
+ const git = status?.git && typeof status.git === "object" ? status.git : {};
8
+ const lifecycle = status?.lifecycle && typeof status.lifecycle === "object" ? status.lifecycle : {};
9
+ const repo = status?.repo && typeof status.repo === "object" ? status.repo : {};
10
+ const gov = governance && typeof governance === "object" ? governance : status?.governance && typeof status.governance === "object" ? status.governance : {};
11
+ const reviewGates = status?.reviewGates && typeof status.reviewGates === "object" ? status.reviewGates : {};
12
+ const reviewGateSummary = reviewGates?.summary && typeof reviewGates.summary === "object" ? reviewGates.summary : {};
13
+ const reviewEffectiveCount = effectiveReviewCount(status);
14
+ const specReviewReady = reviewGates?.specReview?.ready === true || (!reviewGates.specReview && reviewEffectiveCount > 0);
15
+ const qualityReviewReady = reviewGates?.qualityReview?.ready === true || (!reviewGates.qualityReview && reviewEffectiveCount > 0);
16
+ const verifyBeforeCompleteReady = reviewGates?.verifyBeforeComplete?.ready === true;
17
+ const validateStampReady = reviewGates?.validateStamp?.ready === true;
18
+ return {
19
+ change_id: String(status?.changeId || ""),
20
+ blockers_strict_count: Array.isArray(status?.blockersStrict) ? status.blockersStrict.length : 0,
21
+ finish_resume_required: status?.terminatedReuse?.kind === "finished_unarchived",
22
+ tasks_unchecked: Number(status?.tasks?.unchecked || 0),
23
+ review_effective_count: reviewEffectiveCount,
24
+ evidence_persistent_count: Number(status?.evidence?.counts?.persistent || 0),
25
+ git_total: Number(git.total || 0),
26
+ git_staged: Number(git.staged || 0),
27
+ git_conflicted: Number(git.conflicted || 0),
28
+ lifecycle_evidence_runs: Number(lifecycle.evidenceRuns || 0),
29
+ finish_cleanup_pending_reason: String(lifecycle.finishCleanupPendingReason || ""),
30
+ finish_state: String(lifecycle.finishState || ""),
31
+ finish_state_reason: String(lifecycle.finishStateReason || ""),
32
+ repo_submodules: Number(repo.submodules || 0),
33
+ spec_review_ready: specReviewReady,
34
+ quality_review_ready: qualityReviewReady,
35
+ verify_before_complete_ready: verifyBeforeCompleteReady,
36
+ validate_stamp_ready: validateStampReady,
37
+ spec_review_status: String(reviewGates?.specReview?.status || (specReviewReady ? "ready" : "missing")),
38
+ quality_review_status: String(reviewGates?.qualityReview?.status || (qualityReviewReady ? "ready" : "missing")),
39
+ verify_before_complete_status: String(reviewGates?.verifyBeforeComplete?.status || (verifyBeforeCompleteReady ? "ready" : "missing")),
40
+ validate_stamp_status: String(reviewGates?.validateStamp?.status || (validateStampReady ? "ready" : "missing")),
41
+ dual_review_missing_count: Number(reviewGateSummary?.dualReviewMissingCount || 0),
42
+ finish_gate_missing_count: Number(reviewGateSummary?.finishGateMissingCount || 0),
43
+ governance_current_stage: String(gov.currentStage || ""),
44
+ governance_recommended_stage: String(gov.recommendedStage || ""),
45
+ governance_rule_id: String(gov.ruleId || ""),
46
+ };
47
+ }
48
+ function renderTemplate(template, signals) {
49
+ return String(template || "").replace(/\{([a-z0-9_]+)\}/gi, (_, key) => String(signals[key] ?? ""));
50
+ }
51
+ function matchesLeafCondition(actual, condition) {
52
+ if (Object.prototype.hasOwnProperty.call(condition, "eq") && actual !== condition.eq)
53
+ return false;
54
+ if (Object.prototype.hasOwnProperty.call(condition, "ne") && actual === condition.ne)
55
+ return false;
56
+ if (Object.prototype.hasOwnProperty.call(condition, "gt") && !(Number(actual) > Number(condition.gt)))
57
+ return false;
58
+ if (Object.prototype.hasOwnProperty.call(condition, "gte") && !(Number(actual) >= Number(condition.gte)))
59
+ return false;
60
+ if (Object.prototype.hasOwnProperty.call(condition, "lt") && !(Number(actual) < Number(condition.lt)))
61
+ return false;
62
+ if (Object.prototype.hasOwnProperty.call(condition, "lte") && !(Number(actual) <= Number(condition.lte)))
63
+ return false;
64
+ if (Array.isArray(condition?.in) && !condition.in.includes(actual))
65
+ return false;
66
+ if (Array.isArray(condition?.notIn) && condition.notIn.includes(actual))
67
+ return false;
68
+ if (condition?.truthy === true && !actual)
69
+ return false;
70
+ if (condition?.falsy === true && !!actual)
71
+ return false;
72
+ return true;
73
+ }
74
+ function matchesCondition(when, signals) {
75
+ if (!when || (typeof when === "object" && Object.keys(when).length === 0))
76
+ return true;
77
+ if (Array.isArray(when?.all))
78
+ return when.all.every((item) => matchesCondition(item, signals));
79
+ if (Array.isArray(when?.any))
80
+ return when.any.some((item) => matchesCondition(item, signals));
81
+ if (when?.not)
82
+ return !matchesCondition(when.not, signals);
83
+ if (typeof when?.signal === "string") {
84
+ return matchesLeafCondition(signals[when.signal], when);
85
+ }
86
+ return false;
87
+ }
88
+ function uniqueLines(lines) {
89
+ const seen = new Set();
90
+ const out = [];
91
+ for (const raw of lines || []) {
92
+ const line = String(raw || "").trim();
93
+ if (!line || seen.has(line))
94
+ continue;
95
+ seen.add(line);
96
+ out.push(line);
97
+ }
98
+ return out;
99
+ }
100
+ export async function inferChangeGovernance(status) {
101
+ const spec = await loadWorkflowGovernanceRules();
102
+ const signals = collectGovernanceSignals(status);
103
+ const matched = spec.governanceRules.find((rule) => matchesCondition(rule?.when, signals));
104
+ if (!matched) {
105
+ throw new UserError("Failed to infer workflow governance from spec rules.", {
106
+ details: JSON.stringify({ source: spec.source, signals }, null, 2),
107
+ });
108
+ }
109
+ return {
110
+ phase: String(status?.phase || ""),
111
+ currentStage: String(matched.currentStage || ""),
112
+ recommendedStage: String(matched.recommendedStage || matched.currentStage || ""),
113
+ rationale: renderTemplate(String(matched.rationale || ""), signals),
114
+ ruleId: String(matched.id || ""),
115
+ source: spec.source,
116
+ };
117
+ }
118
+ export async function governanceGuidanceLines(status) {
119
+ const spec = await loadWorkflowGovernanceRules();
120
+ const governance = status?.governance && typeof status.governance === "object" ? status.governance : await inferChangeGovernance(status);
121
+ const signals = collectGovernanceSignals(status, governance);
122
+ const lines = [];
123
+ for (const rule of spec.guidanceRules) {
124
+ if (!matchesCondition(rule?.when, signals))
125
+ continue;
126
+ const entries = Array.isArray(rule?.lines) ? rule.lines : [];
127
+ for (const entry of entries)
128
+ lines.push(renderTemplate(String(entry || ""), signals));
129
+ }
130
+ const deduped = uniqueLines(lines);
131
+ if (deduped.length > 0)
132
+ return deduped;
133
+ return ["按阶段契约继续推进当前 change"];
134
+ }
135
+ //# sourceMappingURL=governance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.js","sourceRoot":"","sources":["../src/governance.ts"],"names":[],"mappings":"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"}
package/dist/hash.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare function normalizeNewlines(s: string): string;
2
+ export declare function sha256Text(text: string): string;
3
+ export declare function sha256FileText(filePath: string): Promise<string>;
package/dist/hash.js ADDED
@@ -0,0 +1,13 @@
1
+ import crypto from "node:crypto";
2
+ import { readText } from "./fs.js";
3
+ export function normalizeNewlines(s) {
4
+ return s.replaceAll("\r\n", "\n");
5
+ }
6
+ export function sha256Text(text) {
7
+ return crypto.createHash("sha256").update(text, "utf8").digest("hex");
8
+ }
9
+ export async function sha256FileText(filePath) {
10
+ const content = normalizeNewlines(await readText(filePath));
11
+ return sha256Text(content);
12
+ }
13
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,13 @@
1
+ interface DeployOptions {
2
+ /** When true, overwrite existing hook scripts even if already deployed. */
3
+ force?: boolean;
4
+ }
5
+ /**
6
+ * Deploy aiws Claude Code session hooks to ~/.claude/settings.json.
7
+ *
8
+ * In init mode (`force=false`): only adds missing hooks, keeps existing ones.
9
+ * In update mode (`force=true`): overwrites hook scripts and ensures all hooks
10
+ * are registered in settings.json (updates existing entries if present).
11
+ */
12
+ export declare function deployClaudeHooks(options?: DeployOptions): Promise<void>;
13
+ export {};
@@ -0,0 +1,67 @@
1
+ import path from "node:path";
2
+ import os from "node:os";
3
+ import fs from "node:fs/promises";
4
+ const HOOK_DEFINITIONS = [
5
+ { name: "session-start", event: "SessionStart", id: "aiws-session-start" },
6
+ { name: "workflow-state", event: "UserPromptSubmit", id: "aiws-workflow-state" },
7
+ { name: "subagent-context", event: "PreToolUse", id: "aiws-subagent-context" },
8
+ ];
9
+ /**
10
+ * Deploy aiws Claude Code session hooks to ~/.claude/settings.json.
11
+ *
12
+ * In init mode (`force=false`): only adds missing hooks, keeps existing ones.
13
+ * In update mode (`force=true`): overwrites hook scripts and ensures all hooks
14
+ * are registered in settings.json (updates existing entries if present).
15
+ */
16
+ export async function deployClaudeHooks(options = {}) {
17
+ const { force = false } = options;
18
+ const settingsPath = path.join(os.homedir(), ".claude", "settings.json");
19
+ const hooksDir = path.join(os.homedir(), ".claude", "hooks", "aiws");
20
+ try {
21
+ await fs.mkdir(hooksDir, { recursive: true });
22
+ for (const hook of HOOK_DEFINITIONS) {
23
+ const src = path.join(__dirname, "..", "hooks", "claude", `${hook.name}.js`);
24
+ const dest = path.join(hooksDir, `${hook.name}.js`);
25
+ try {
26
+ await fs.copyFile(src, dest);
27
+ }
28
+ catch {
29
+ console.warn(`[aiws] warn: could not copy hook ${hook.name}.js to ${dest}`);
30
+ }
31
+ }
32
+ let settings = {};
33
+ try {
34
+ const raw = await fs.readFile(settingsPath, "utf-8");
35
+ settings = JSON.parse(raw);
36
+ }
37
+ catch { }
38
+ const existingHooks = Array.isArray(settings.hooks) ? settings.hooks : [];
39
+ const existingById = new Map();
40
+ for (const h of existingHooks) {
41
+ if (h.id)
42
+ existingById.set(h.id, h);
43
+ }
44
+ for (const hook of HOOK_DEFINITIONS) {
45
+ const entry = {
46
+ id: hook.id,
47
+ matcher: hook.event,
48
+ hooks: [{ type: "command", command: `node ${path.join(hooksDir, `${hook.name}.js`)}` }],
49
+ };
50
+ if (existingById.has(hook.id)) {
51
+ if (force) {
52
+ const existing = existingById.get(hook.id);
53
+ existing.hooks = entry.hooks;
54
+ }
55
+ }
56
+ else {
57
+ existingById.set(hook.id, entry);
58
+ }
59
+ }
60
+ settings.hooks = [...existingById.values()];
61
+ await fs.writeFile(settingsPath, JSON.stringify(settings, null, 2) + "\n", "utf-8");
62
+ }
63
+ catch (err) {
64
+ console.warn(`[aiws] warn: Claude Code hook deployment failed: ${err.message}`);
65
+ }
66
+ }
67
+ //# sourceMappingURL=deploy-claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-claude.js","sourceRoot":"","sources":["../../src/hooks/deploy-claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface JournalEvent {
2
+ timestamp: string;
3
+ event_type: string;
4
+ summary: string;
5
+ actor?: string;
6
+ }
7
+ export interface JournalResult {
8
+ events: JournalEvent[];
9
+ phase: string | null;
10
+ }
11
+ export declare function readJournalEvents(gitRoot: string, changeId: string): Promise<JournalResult>;
12
+ export declare function writeSessionJournal(gitRoot: string, changeId: string, deps: {
13
+ pathExists: (p: string) => Promise<boolean>;
14
+ readText?: (p: string) => Promise<string>;
15
+ }): Promise<string>;
16
+ export declare function suggestSpecPromotions(gitRoot: string, changeId: string, deps: {
17
+ pathExists: (p: string) => Promise<boolean>;
18
+ readText?: (p: string) => Promise<string>;
19
+ }): Promise<string[]>;
20
+ export declare function applySpecPromotions(gitRoot: string, suggestions: string[], deps: {
21
+ pathExists: (p: string) => Promise<boolean>;
22
+ }): Promise<number>;
@@ -0,0 +1,112 @@
1
+ import path from "node:path";
2
+ import fs from "node:fs/promises";
3
+ export async function readJournalEvents(gitRoot, changeId) {
4
+ const journalDir = path.join(gitRoot, ".aiws", "changes", changeId, "journal");
5
+ let files;
6
+ try {
7
+ files = await fs.readdir(journalDir);
8
+ }
9
+ catch {
10
+ return { events: [], phase: null };
11
+ }
12
+ const jsonFiles = files.filter((f) => f.endsWith(".json")).sort();
13
+ const events = [];
14
+ for (const file of jsonFiles) {
15
+ try {
16
+ const content = await fs.readFile(path.join(journalDir, file), "utf-8");
17
+ const parsed = JSON.parse(content);
18
+ if (parsed && parsed.timestamp && parsed.event_type) {
19
+ events.push({
20
+ timestamp: parsed.timestamp,
21
+ event_type: parsed.event_type,
22
+ summary: parsed.summary || "",
23
+ actor: parsed.actor,
24
+ });
25
+ }
26
+ }
27
+ catch { }
28
+ }
29
+ events.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
30
+ let phase = null;
31
+ for (const e of events) {
32
+ if (e.event_type === "phase_change") {
33
+ phase = e.summary;
34
+ }
35
+ }
36
+ return { events, phase };
37
+ }
38
+ export async function writeSessionJournal(gitRoot, changeId, deps) {
39
+ const journalDir = path.join(gitRoot, ".aiws", "journal");
40
+ if (!(await deps.pathExists(journalDir))) {
41
+ await fs.mkdir(journalDir, { recursive: true });
42
+ }
43
+ const ts = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19);
44
+ const journalFile = path.join(journalDir, `${ts}-${changeId}.md`);
45
+ const handoffPath = path.join(gitRoot, ".aiws", "changes", "archive", changeId, "handoff.md");
46
+ let summary = "";
47
+ try {
48
+ if (await deps.pathExists(handoffPath) && deps.readText) {
49
+ const text = await deps.readText(handoffPath);
50
+ const lines = text.split("\n");
51
+ const start = lines.findIndex((l) => l.startsWith("## "));
52
+ if (start >= 0) {
53
+ summary = lines.slice(start, start + 10).join("\n");
54
+ }
55
+ }
56
+ }
57
+ catch { }
58
+ const content = [
59
+ `# Session Journal: ${changeId}`,
60
+ "",
61
+ `- Completed at: ${new Date().toISOString()}`,
62
+ `- Change: ${changeId}`,
63
+ summary ? `\n${summary}` : "",
64
+ "",
65
+ ].join("\n");
66
+ await fs.writeFile(journalFile, content, "utf-8");
67
+ return journalFile;
68
+ }
69
+ export async function suggestSpecPromotions(gitRoot, changeId, deps) {
70
+ const suggestions = [];
71
+ const handoffPath = path.join(gitRoot, ".aiws", "changes", "archive", changeId, "handoff.md");
72
+ if (!deps.readText || !(await deps.pathExists(handoffPath)))
73
+ return suggestions;
74
+ try {
75
+ const text = await deps.readText(handoffPath);
76
+ const learnSection = text.match(/## (?:Lessons Learned|学到的|Discovered Pattern)/i);
77
+ if (!learnSection)
78
+ return suggestions;
79
+ const afterLearn = text.slice(text.indexOf(learnSection[0]) + learnSection[0].length);
80
+ const bullets = afterLearn.match(/[-*]\s+.+/g);
81
+ if (bullets) {
82
+ for (const b of bullets.slice(0, 5)) {
83
+ suggestions.push(b.replace(/^[-*]\s+/, "").trim());
84
+ }
85
+ }
86
+ }
87
+ catch { }
88
+ return suggestions;
89
+ }
90
+ export async function applySpecPromotions(gitRoot, suggestions, deps) {
91
+ if (suggestions.length === 0)
92
+ return 0;
93
+ const aiProjectPath = path.join(gitRoot, "AI_PROJECT.md");
94
+ if (!(await deps.pathExists(aiProjectPath)))
95
+ return 0;
96
+ const content = await fs.readFile(aiProjectPath, "utf-8");
97
+ const beginMarker = "AIWS_MANAGED_BEGIN:ai-project:core";
98
+ const endMarker = "AIWS_MANAGED_END:ai-project:core";
99
+ if (!content.includes(beginMarker) || !content.includes(endMarker))
100
+ return 0;
101
+ const promotedBlock = [
102
+ "",
103
+ "### auto-promoted:",
104
+ ...suggestions.map((s) => `- ${s}`),
105
+ "",
106
+ ].join("\n");
107
+ const endIdx = content.indexOf(endMarker);
108
+ const newContent = content.slice(0, endIdx) + promotedBlock + content.slice(endIdx);
109
+ await fs.writeFile(aiProjectPath, newContent, "utf-8");
110
+ return suggestions.length;
111
+ }
112
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ interface SchemaNode {
2
+ $ref?: string;
3
+ type?: string;
4
+ const?: unknown;
5
+ enum?: unknown[];
6
+ minLength?: number;
7
+ pattern?: string;
8
+ minItems?: number;
9
+ items?: SchemaNode;
10
+ minProperties?: number;
11
+ maxProperties?: number;
12
+ properties?: Record<string, SchemaNode>;
13
+ required?: string[];
14
+ additionalProperties?: boolean;
15
+ anyOf?: SchemaNode[];
16
+ allOf?: SchemaNode[];
17
+ oneOf?: SchemaNode[];
18
+ }
19
+ export declare function validateJsonSchemaLite(value: unknown, schema: SchemaNode, options: {
20
+ source: string;
21
+ }): void;
22
+ export {};